전체 글 42

거울보기

제 컴퓨터 앞에는 작은 거울이 있습니다. 보니따 헤어샆에서 준 선물입니다. 거울이 있지만 그 거울을 통해서 저의 얼굴은 거의 보지 않습니다. 이 글을 쓰기 전에 한번 보기는 했습니다. 아버지를 개인적으로 아는 분들은 저의 얼굴이 아버지를 많이 닮았다고 합니다. 웬만해선 그들을 막을 수 없다에서 열연하고 있는 신구씨를 보면 아버지의 외모와 어느 정도 비슷해 보입니다. 그런데 아버지 외모를 알지 못하는 이들로 부터 받은 얼굴에 대한 평가는 다양하였지만 "나이들어 보인다"는 평이 많았습니다. 예전에 자주 이런 평가가 내려질 때 자신에게 그렇게 암시하곤 했었습니다. "성숙해 보인다는 애기.. " 그렇다고 직접적이고 공개적인 방식으로 그런 평가가 드러나지는 않아서 그렇게 당황하게 하지는 않았습니다. 나이들어 보이..

단상 2023.10.29

string based netty server client example

주요 기능 \n 이 끝인 문자열 기반임 재시작, 재접속 시도 idle상태가 되면 heartbeat 메세지 전송. slf4j 로깅 처리. 서버 문자열을 받으면 숫자를 다르게 하여 클라이언트로 전송. 채널별로 100000 개의 문자열을 받으면 channel close 처리 60초 idle상태가 되면 heartbeat 메세지 전송. 메세지전송 오류시 channel 종료 startup, shutdown 메소드 클라이언트 서버 접속시에 문자열 전송. 문자열을 받으면 그대로 서버로 전송. startup, shutdown 메소드 https://github.com/lloydkwon/simple-string-netty GitHub - lloydkwon/simple-string-netty: String based Nett..

개발환경 2023.10.27

netty로 전문통신 서버를 구현할 때

anylink 같은 솔류션이 없이 전문통신서버를 구현하는게 쉽지 않습니다. 여러 프로젝트에서 netty로 전문 관련 프로젝트를 수행했는데 여러가지 노하우가 있지만 아래 세가지를 잘 처리하면 크게 문제는 없어 보입니다. 전문의 처음과 끝 전문은 단순한 문자열이든 복잡한 전문의 형태이든 처음과 끝을 정확히 파악하는게 중요합니다. 전문은 한번에 들어오지 않고 여러 번에 걸쳐 들어올 수 있으므로 전문의 끝이 올 때까지 잘 모아 두어야 합니다. ByteToMessageDecoder 나 ReplayingDecoder 같은 클래스를 상속하여 하나의 전문을 온전히 받고 자바클래스로 decoding 해야 합니다. netty의 비동기 통신 netty는 기본적으로 비동기로 데이터를 처리합니다. 여러번 요청이 가고 여러번 응..

개발환경 2023.10.11

springboot mp4 streaming and download

mp4 같은 동영상을 스트리밍하는 경우와 다운로드를 동시에 처리하는 리소스가 없어서 이것저것 살펴보면서 작성함. 스트리밍요청과 다운로드 요청을 구분하여 처리하는게 필요함. 브라우저에서 여러번 요청을 받아서 처리해야 하므로 InputStreamResource 이 아닌 FileSystemResource 를 사용해야 함 @RequestMapping(value = "/api/file/download/{filepath}" , method = RequestMethod.GET , produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity getMp4StreamingAndDownload(@RequestHeader(value = "Range", ..

개발환경 2023.09.26

[안드로이드_코틀린] activity가 아닌 Fragement 클래스에서 백그라운드 작업중 UI 처리.

activity 상속 클래스에서는 runOnUiThread 메소드를 이용하여 activity 와 같은 쓰레드상에서 처리할 수 있어 백그라운드에서도 문제없이 UI에 접근할 수 있다. 그런데 Fragement 상속클래스에서는 runOnUiThread 메소드를 사용할 수 없다. 불가피하게 백그라운드 처리중에 UI를 처리하려면 Handler(Looper.getMainLooper()).post{} 를 사용하면 된다. ( 뭐 다들 아시겠지만... ) 아래 코드 참고. val timer = kotlin.concurrent.timer(period = 1000) { Handler(Looper.getMainLooper()).post{ // 여기에서 UI 처리하면 됨 } }

개발환경 2023.06.29

javs ssl !!!

1. self-signed 인증파일로 서버 셋팅을 하면 client에서 ssl 인증 파일 설정을 해 주어야 함. 2. 하지만 CA 인증파일 ( 운영서버에 사용할 수 있는) 로 서버 세팅하면 client에서는 ssl 관련 설정을 SKIP할 수 있음. 3. ssl 관련 설정을 skip한다는 것은 모든 걸 OK하는 TrustManager 방식으로 서버와 ssl 통신할 수 있다는 의미임. 4. 아래는 OkHttp3로 CA인증파일이 적용된 서버와 ssl 통신하는 샘플코드임. (POST x-www-form-urlencoded 방식) com.squareup.okhttp3 okhttp 4.11.0 import okhttp3.*; import javax.net.ssl.*; import java.security.cert...

개발환경 2023.05.17