본문 바로가기

Category List110

메인 스레드, 커스텀 스레드, 데몬 스레드 테스트 찍먹일기 : multiThread & concurrency 2 Thread main 은 언제 만들어진걸까? 프로세스가 실행되려면 최소한 하나의 스레드는 존재해야한다고 이전 포스팅에서 설명했다. 왜냐면 정말 일을 doing 하는 건 스레드이기 때문이다. 자바에서는 실행시점에 main 스레드가 만들어지도록 설계되었고 main 스레드가 main() 메서드를 실행한다. 이걸 주관하는 건 JVM이다.그럼 또 다른 스레드 Thread-0 은 어디서 튀어나온 애일까? TwiceThread 같은 사용자 정의 스레드를 생성하고 start() 메서드를 호출하면, JVM은 새로운 스레드를 생성한다. 그리고 스레드 생성 차례에 맞게 Thread-0, Thread-1 같은 순서로 이름붙인다. 그래서 Thread-0 이 응애하고 출력된 것.사진을 보면 start() 를 호출했는데 내부적으로.. 2024. 10. 9.
<도둑맞은 집중력> 읽다가 멀티 스레드 공부 하게 된 이야기 : multiThread & concurrency 1 얼마 전 을 읽어보았다. 흥미로웠던 부분은 '인간의 뇌는 멀티태스킹을 할 수 없다'는 주장이다. 인간의 뇌는 기본적으로 한 번에 하나의 작업에만 집중할 수 있도록 설계되어 있다. 그런데 우리가 여러 작업을 번갈아가며 수행하다 보면, '컨텍스트 스위칭'이 자주 발생한다. 이로 인해 두뇌의 효율이 떨어지고, 점점 더 둔해지는 것처럼 느껴진다. 뇌에서 발생하는 이 컨텍스트 스위칭을 '인지적 전환'이라고 부르는데, 이 과정에는 상당한 비용이 따른다. 그 이유는 전두엽의 용량. 멀티태스킹을 할 때, 한정된 전두엽의 자원이 여러 작업에 분산되면서 각 작업에 필요한 집중력이 점차 감소하기 때문이다. 나는 멀티 테스킹이 안되는 인간이라고 생각했는데 사실은 그게 자연스러운 일이라는 것에 심심한 위로를 받았다.인간은 충.. 2024. 10. 6.
누가 궁금하다고 한 사람? 느낌, 생각, 경험을 완벽하게 언어로 담아낼 수 있을까. 언어는 너무 불안전하다. 말과 실재는 먼 거리에 있다. 단어와 문장으로써 덧칠해진 것으로만 대상을 이해할 수 있다. 실재와는 다르게 이해할 수 있다. 그래서 언어는 너무 중요하다. 가끔 언어를 너무 못한다는 생각에 부딪힐 때 입을 앙 다물고 말게 된다. 말하려는 실체를 나의 말로 설명하기 벅차서다.  며칠 간 상반기 회고를 진행하고, 몸 담았던 프로젝트를 글로 정리했다. 어떤 과정이었고 문제 해결을 어떻게 했고 아쉬운 게 무엇이었으며 ... 어쩌구저쩌구... 근데 다 정리를 하고 나서도 무언가 빠뜨린 느낌이 든다. 정말 이게 다 인가? 글로 정리하면서 다 쏟아내고 아듀! 하고 싶었는데, 그게 잘 되지않는다. 파이프는 '파이프'가 아니다. 파이프는.. 2024. 8. 22.
SpringKafka Consumer 설정값으로 요리조리 테스트 해보기 SpringKafka Consumer 설정값으로 요리저리 놀아보았습니다. 해당 포스트에서는 그 과정을 전시합니다. 키워드는 두 가지 입니다. AckMode Concurrency 주로 쓰이는 kafka 설정값을 나열해보았습니다.   여기서 눈여겨봤던 것이 ContainerProperties 의 setAckMode 입니다. 그리고 하나는 acknowledgement 입니다. 이 둘은 연관이 있습니다. 어떤 연관을 가지고 있는지, 각각은 어떻게 가져갈 수 있는지 확인해보겠습니다.  일단 ContainerProperties 의 setAckMode는 메세지를 소비할 때 acknowledgement 모드를 설정하는데 사용됩니다. acknowledgement 는 메세지가 성공적으로 처리되었음을 브로커에게 알리는 역할.. 2024. 8. 6.
Commit 실패된 메세지 Producer 가 책임질래 Consumer 가 책임질래 만약 @TransactionalEventListener 가 없다면 어떻게 될까. 바로 떠오르는 생각은 컨슈머에서 대응을 해야될 것 같았습니다. 해당 포스팅은 세계에 @TransactionalEventListener 가 없다는 가정하에 굳이굳이 컨슈머에서 그 영향을 대응하는 방법을 구현해보는 과정을 담았습니다. 저는 카프카를 잘 몰라서, 일단  Kafka Producer 의 기본 동작 방식을 차근차근 따라가보면서 시작해보았습니다.  해당 문서는 공식문서 를 기반으로 따라가보았습니다. 테스트는 testContainer 를 이용해서 테스트 했지만 @EmbeddedKafka 를 이용하는 방법도 있습니다. testContainer 를 이용한 테스트를 참조 하고 싶다면 아래를 참조하세요!더보기package com... 2024. 7. 27.
🥤 코카콜라 맛있다 DB Lock 과 Redis Lock 중에 뭐가 더 좋을까요 알아맞혀보세요 with JPA 동시성 접근 제어를 위해 DataBase 나 Redis Lock를 이용하는데요. 두 가지 선택지를 직접 구현해보고 각각의 동작 원리를 이해해보는 시간을 가져보았습니다. DB lock 과 Redis lock 의 트레이드오프 지점은 다음과 같이 거론되고 있습니다. DataBase Lock를 이용하면 추가적인 인프라 구성 없이 동시성 문제를 해결할 수 있다.   하지만 Lock 획득을 위해 대기하는 Connection 이 증가할 수 있고, 이건 높은 트래픽 상황에서 성능 저하로 이어지는 포인트다.Redis를 이용한 Distributed Lock은 DataBase Connection 증가를 방지할 수 있지만, 별도의 관리가 필요하다. Redis 관리에는 메모리 최적화, 장애 복구, 데이터 일관성 유지 등의 과제.. 2024. 6. 30.