일단 해보고, 아니면 뭐

실패했어도 배웠으면 실패가 아냐.

무한한 개발세계 여행기

Programing/Java 5

하나의 결제건이 다중 결제가 된다면? - Concurrency Programming

이직을 완료했다! 아직 출근 초기라 일이 없는 이 여유로움을 틈타 포스팅을 하고자 한다. 오늘의 주제는 '동시성'이다. 이전 회사에서 결제시스템을 연동하고 정기결제 즉시결제 기능을 개발하면서 정기결제와 즉시결제가 동시에 이뤄졌을 때 결제가 두 건 다 처리되는 동시성 이슈가 있었다. 아직 운영되기 전이라 다행이지 운영되던 서비스였다면 정말 아찔했을 것 같다. 그래서 그때 겪었던 소중한 경험을 공유하고자 한다! 동시성을 공부하다 보면 동시성(Concurrency)과 병렬성(Parallelism)의 차이를 비교하는 포스팅들을 많이 볼 수 있는데 나도 이 차이부터 정리하고자 한다. [Thread와 Process] 동시성과 병렬성에 대해 알아보기 전에 Thread와 Process 차이에 대해 알아야 한다. Thr..

Programing/Java 2022.08.01

Java ThreadLocal 파헤치기

요즘에 나는 인프런 강의를 즐겨 듣고 있다. 오늘은 스프링 핵심 원리 - 고급편 강의를 들었는데 강의 내용이 'ThreadLocal'를 이용하여 동시성 이슈를 해결하는 거였다. ThreadLocal은 자바를 공부하던 시절부터 자주 들어왔어서 기능 자체가 낯설지는 않았다. 쓰레드 별로 본인의 특별한 저장공간? 을 만들어서 사용하는 기능인데, 어떻게 쓰고, 무슨 일을 하는지는 알지만 'ThreadLocal이 어떻게 이런 기술을 구현했는지'는 따로 알아본 적이 없는 거 같다! 그래서 나는 이번 기회에 ThreadLocal 클래스를 분석해서 어떻게 쓰레드간 동시성 이슈를 해결했는지 정리해보고자 한다! (동시성 이슈는 서버 개발을 하다 보면 무조건 겪게 되는 거 같다. 이번 기회에 원리와 구현방식을 공부하면 많은..

Programing/Java 2022.07.16