전체 글
-
coroutine - launch, async, CoroutineContext개발 2023. 2. 28. 20:00
launch, async coroutine을 시작하는 방법은 launch, async가 있다. launch는 결과값을 반환하지 않고 async는 await를 이용해서 결과값을 반환할 수 있다. fun main() { ThreadTest().runCoroutine() } class ThreadTest { fun runCoroutine() = runBlocking { val jobs = ArrayList() (1..5).map { number -> val job = async { delay((Math.random() * 1000).toLong()) println("${Thread.currentThread().name} done, number: $number") increaseCounter() return@a..
-
kubernetes - readiness, livenesss, startup probe개발 2023. 2. 28. 19:05
kubernetes 에서는 컨테이너 상태를 지속적으로 모니터할 수 있는 기능을 제공한다. readinessProbe, livenessProbe, startupProbe 을 적절하게 활용하면 컨테이너를 자동으로 재실행 시키거나 로드밸런서에서 빼줄 수 있다. readinessProbe 컨테이너가 트래픽을 받을 수 있는지를 알기 위해 사용한다. 일반적으로 Pod은 모든 컨테이너가 준비된 상태 일 때 트래픽을 받을 수 있지만 만약 오래걸리는 작업을 처리하는 경우에는 트래픽을 받는게 부적합할 수 있다. readinessProbe 결과 준비가 되지 않았다고 판단되면 로드밸런서로부터 제거한다 livenessProbe 컨테이너를 언제 다시 시작할지 결정하는 역할을 한다. livenessProbe 조건을 활용하면 데드락..
-
Java - Thread start, run개발 2023. 2. 28. 19:00
start(), run()의 차이 둘다 쓰레드를 실행하기 위한 함수다. 그러나 run() 을 사용하면 run을 호출한 쓰레드에서 작업이 처리되고 start()를 사용하면 쓰레드를 새로 만들어서 처리된다. 병렬 처리를 하고 싶다면 start()를 사용해야 한다. fun main() { ThreadTest().runThread() } class ThreadTest { var counter = 0; private fun increaseCounter() { counter++ } fun runThread() { val threads = ArrayList() (1..100).map { number -> val thread = Thread { sleep((Math.random() * 1000).toLong()) pr..
-
HTTP개발/기술 2023. 2. 28. 17:32
HTML 문서, 이미지, 텍스트를 가져올 수 있는 프로토콜. 웹에서 이루어지는 모든 데이터 교환의 기초다. 브라우저인 클라이언트에서 보내는 메시지는 요청, 서버에서 응답하는 메시지를 응답이라 부른다. HTTP, TCP 클라이언트와 서버서 HTTP 요청, 응답을 교환하기 위해선 TCP 연결을 설정해야한다. 브라우저로 http://google.com 를 요청 할 때 HTTP 처리 순서는 아래와 같다. 브라우저는 DNS로부터 호스트 주소, google.com 대한 IP 주소를 가져온다 브라우저는 IP 주소와 Port에 대해서 TCP 연결을 형성한다 브라우저는 TCP 연결로 서버에게 HTTP 요청을 보낸다 브라우저는 TCP 연결로 서버로부터 HTTP 응답을 받는다 응답이 완료되면 TCP 연결을 종료한다. HTT..
-
HTTPS, TLS, SSL개발/기술 2023. 2. 28. 17:21
HTTPS HTTP는 Hyprtext Transfer Protocol의 약어로 HTML을 전송하는 통신 프로토콜을 의미한다. HTTPS는 Hypertext Transfer Protocover over Secure Socket Layer 로 SSL 위에서 이뤄지는 HTML 통신 규약을 의미한다. 간단히 데이터를 안전하게 전송, 전달 할 수 있도록 보안 기능을 추가한 HTTP 프로토콜이라고 말할 수 있다. TLS Transport Layer Security의 약자다. 과거에는 SSL로도 불렸다. TLS는 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약이다. TLS를 이용하면 클라이언트 서버 응용 프로그램이 네트워크로 통신할 때 암호화, 인증, 무결성을 보장한다 HTTP와 달리 암호화, 복호화 ..
-
Java - synchronized, wait, notify개발 2023. 2. 28. 12:17
멀티 쓰레드 환경에선 두개 이상의 쓰레드가 동시에 같은 데이터를 접근하는 경우가 발생한다. public class ThreadTest { public void run() { for (int i = 0; i { System.out.println("thread " + finalI + " starts"); method("thread " + finalI + " running"); }); thread.start(); } } private void method(String msg) { System.out.println(msg); try { TimeUnit.SECONDS.sleep(1); } catch (In..
-
자바 - Garbage Collector개발 2023. 2. 24. 16:00
JVM은 Garbage Collector (GC) 를 이용해서 Heap 메모리를 주기적으로 청소한다. GC는 사용하지 않는 객체를 확인하고 삭제해 메모리 공간을 확보하는 역할을 한다 객체가 GC의 대상이 되는 경우는 크게 두가지다. 객체를 참조하는 레퍼런스가 null로 세팅되는 경우 객체를 참조하는 레퍼런스의 범위가 종료되는 경우 (예로 함수 블럭 내에서 실행을 모두 완료하는 경우나 등등) 간단한 예제를 살펴보자. stack 메모리상에 있는 지역변수가 없어지면 그에 상응하는 객체는 더이상 쓸모가 없으므로 GC의 대상이 된다고 본다. 물론 다른 곳에서 참조하고 있다면 GC의 대상이 아니다. class House() {} class Person {} fun main() { val house = House()..
-
JAVA - 직렬화, 역직렬화개발 2023. 2. 24. 15:13
직렬화, 역직렬화 자바의 직렬화는 객체를 바이트의 연속으로 변환시키는 기술이다. 역직렬화는 반대로 바이트의 연속을 오브젝트로 전환해주는 기술이다. 직렬화된 객체가 파일에 기록되면 역직렬화를 통해 파일에서 읽어온 데이터를 메모리에서 객체로 쓸 수 있다. 이렇게 인터뷰용 답변만 준비하지말고 직접 코딩해서 체험해보는게 좋다. Person이라는 클래스를 직렬화해서 file.ser이라는 파일에 바이트코드를 써보자. data class Person(val name: String, val age: Int) : Serializable try { val person = Person(name = "ryan", age = 30) val fileOut = FileOutputStream("file.ser") val objOut..