일단 해보고, 아니면 뭐

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

무한한 개발세계 여행기

concurrency 3

Concurrency Problem 올바른 대응방법 (1) - Lock

동시성 이슈 문제를 해결했던 업무 회고를 작성했던 지난 포스팅에 이어서 동시성 이슈 문제의 해결 방법 중 하나인 Lock이라는 거에 대해서 좀 더 자세히 알아보고자 한다. 지난 포스팅에서 나는 동시성 이슈를 JPA의 Lock Annotation을 이용하여 대응을 하였다. 동시성 이슈에 대해서 공부 하다보면 대응을 위해서 Redis 데이터베이스를 썼다는 이야기가 많이 나온다. 대략적인 이유를 보면 '단일 스레드 처리 방식과 데이터 잠금의 차이'라고 나와있다. 나는 그래서 Lock을 사용하고자 했던 거고 이번 기회에 Lock에 대해 더 공부를 하게 되었다. Lock? Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법으로, 같은 데이터에 동시에 접근하는 경우 데이터의 일관성과 무결성의 유지를 위해 사용..

Programing/Java 2022.09.09

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

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

Programing/Java 2022.08.01

Rest Service 개발 시점에서 바라본 Java와 Go 언어의 차이

현재 재직 중인 회사에서는 API Server를 개발하는 팀은 Java + Spring Boot를 사용 중에 있고, Agent를 개발하는 팀은 Go + gRPC를 사용하고 있다. 입사 시즌에는 Go언어가 있다는 것도 처음 들어봤지만, 왜? Java와 Go언어를 사용하는 서비스가 따로 있는지가 궁금해졌고 Rest Service를 개발할때 Java와 Go언어에 어떤 차이가 있는지 알아보고 싶어졌다. 일단.. Java와 Go언어가 어떤 차이점을 가지고 있는지부터 살펴보았다. Java : 객체지향 프로그래밍에 대표적인 언어이며 그만큼 큰 커뮤니티와 수많은 라이브러리들을 가지고 있다. JVM이라는 가상 머신에 의해서 구동되기 때문에 운영체제에 영향을 받지 않는다. Go : 오래된 언어는 아니지만 동시성을 지원하고..

Programing 2022.05.26