전체 글

건강한 개발이 되도록!!
반응형
동시성 이슈를 공부하면서 Race Condition이 뭔지, CAS가 뭔지, ConcurrentHashMap이 왜 필요한지를 하나씩 살펴봤다.이번엔 Java 애플리케이션 레벨에서 동시성 문제를 해결하는 대표적인 방법들을 정리해보자.동시성 이슈란?여러 스레드가 공유 자원에 동시에 접근할 때 발생하는 문제다. 대표적으로 아래 상황에서 생긴다.두 스레드가 같은 변수를 동시에 읽고 수정할 때한 스레드의 작업이 끝나기 전에 다른 스레드가 결과를 읽을 때작업 순서가 보장되지 않을 때이걸 해결하는 방법은 크게 3가지 계층으로 나뉜다. DB Lock, 분산 Lock, Application Level. 오늘은 Application Level에 집중해보자.해결 방법 1: synchronizedJava에서 가장 기본적인 동..
이전 글에서 동시성 이슈가 왜 발생하는지, 그리고 Race Condition을 확인해봤다. 그럼 이제 실제로 자바에서 Map 자료구조를 멀티 스레드 환경에서 안전하게 쓰려면 어떻게 해야 할까? 오늘은 그 답 중 하나인 ConcurrentHashMap을 살펴보자.ConcurrentHashMap이란?공식 정의ConcurrentHashMap: java.util.concurrent 패키지에 속하는 스레드 안전한 해시 맵 구현체. 여러 스레드가 동시에 읽기/쓰기 작업을 수행할 수 있도록 설계된 자료구조다. 쉽게 풀어보면카페 주문 시스템으로 비교해보자.일반 HashMap은 카운터가 한 명인 카페다. 손님(스레드)이 한 명씩만 주문할 수 있다. 여럿이 몰리면 주문이 뒤섞이고 영수증이 엉망이 된다. (그게 바로 이전 ..
동시성(Concurrency)이란?공식 정의동시성(Concurrency): 여러 작업이 같은 시간 구간(time period) 안에서 진행 중인 상태. 반드시 같은 순간에 실행되는 건 아니다.병렬성(Parallelism): 여러 작업이 물리적으로 같은 순간에 실행되는 상태. 멀티코어 CPU에서 코어마다 작업을 하나씩 돌리는 경우.쉽게 풀어보면혼자 식당을 운영하는 사장님이 있다고 해보자.순차 처리(Serial): 손님 A 주문받기 → A 요리 → A 서빙 → 손님 B 주문받기 → … 한 사람 다 끝나야 다음 사람을 본다. 손님 B는 한참 기다린다.동시성(Concurrency): A 주문받고, A 요리가 끓는 동안 B 주문 받으러 가고, 다시 A 확인하고… 사장님은 한 명인데 여러 일이 동시에 진행 중이다...
멀티스레드 환경에서 개발하다 보면 동시성(Concurrency) 문제를 마주치게 된다.여러 스레드가 동시에 같은 데이터를 수정하려 할 때 어떻게 안전하게 처리할 수 있을까?이때 등장하는 것이 바로 CAS(Compare-And-Swap) 알고리즘이다.우선 왜 CAS가 필요한지 배경부터 살펴보고, 동작 원리와 코드 예시까지 알아보자.왜 CAS가 필요할까?일반적으로 멀티스레드 환경에서 공유 데이터를 안전하게 다루기 위해 synchronized 키워드나 Lock을 사용한다.하지만 이 방식에는 단점이 있다.Lock을 획득한 스레드 외 나머지 스레드는 무조건 대기해야 한다.스레드가 많아질수록 컨텍스트 스위칭 비용이 커진다.잘못 사용하면 데드락(Deadlock)이 발생할 수 있다.이런 문제를 해결하기 위해 Lock ..
· 회고
2024년은 좋든 싫든 여러 가지를 경험하며 나를 한 단계 더 성장시킨 한 해였다.이 소중한 기억들을 그냥 흘려보내기보다 기록으로 남기는 것이 좋을 것 같아 회고록을 써보기로 했다.두서없이 쓴 점 미리 죄송합니다. 1분기: 임금체불의 아픔과 퇴사 결심2023년 5월 즈음부터 한 달씩 월급이 밀려서 들어오기 시작했었다. (이때 깨달았어야 했는데..)그저 의리라고 생각했기에 그렇게 한 달씩 밀린 월급을 받으며 2023년을 버티고, 2024년이 되었다. 2024년이 되고, 1, 2, 3월까지 임금체불이 되어버렸다. (나 자신이 너무 미숙했었던 것 같다..)작년부터 골치아팠던 월급을 넘어 이제 폭탄이 되어 날아온 것이다.더 이상 내가 월급을 다 받을 수 있을까?? 이번 월급날에는 잘 들어올까? 하는 고민이 출근..
반응형
Yn3(인삼)
성장하는 인삼의 개발 블로그