전체 글118 java.util.concurrent 안에는 뭐가 들었을까 이전 블로그 포스팅에서 동시성 제어의 원초적 접근법으로 synchronized 가 유효한지 살펴보았습니다. 이 후, java.util.concurrent 패키지에서 synchronized 의 단점을 보완할 수 있는 방법을 찾게되었습니다.synchronized 에 치명적 단점은 두 가지가 있습니다. synchronized 키워드로 이루어진 영역에 스레드가 접근하려면 모니터 락을 획득해야합니다. 스레드는 모니터 락을 획득할 때까지 무한 대기합니다. 이때 해당 스레드의 상태는 BLOCKED 입니다. BLOCKED 상태는 interrupted() 로도 다시 RUNNABLE 상태로 전이시킬 수 없습니다. 락을 얻기 전까지는 계속 BLOCKED 상태로 머무릅니다. 그래서 '무한' 대기 상태에 빠지게됩니다. 심지어 .. 2025. 1. 4. 동시성 제어의 원초적 접근법, 애플리케이션 락은 유효한가요? 거의 모든 서비스는 애플리케이션 당 N 대의 Pod 를 가동합니다. 동시다발적으로 각 Pod 에서 공유자원에 접근할 수 있으므로, race condition 을 고려하기 위해 DB 락, 레디스 락 등이 거론됩니다. 나를 비롯한 대부분의 서버 개발자들이 분산 락 개념들을 인지하고 있어야하는 이유입니다. 근데 문득 이런 생각이 들었습니다. Pod 가 한 대라면 이런 것들을 알아야할까? 애플리케이션 락으로만 컨트롤 할 수 없을까? 단 하나의 Pod 만 운용하는 사례는 극히 드물다 하더라도, 궁금했습니다. 이런 저런 분산 락 도구에 가려 잊혀진 애플리케이션 락, synchronized 에 대해서 다시 한 번 고찰해보는 시간을 가져보았습니다.synchronized는 Java 멀티스레딩 환경에서 동기화를 제공하는.. 2024. 12. 14. Embedded Redis vs. macOS Sonoma Redis 로컬 테스트 하는 두 가지 방법 : testContainersRedis 구현 후 local 에서 실행시키는 여러가지 방법이 있습니다. 하나씩 실험삼아 기록해두려고합니다. 첫번째는 아주 쉽고 베이직한 접근방법입니다. application.yaml 세팅없이 실행시 localRedi6161990src.tistory.com 며칠 전, Redis 를 로컬에서 테스트 할 수 있는 두 가지 방법을 소개했습니다. 사실 그 날 Redis 테스트하는 방법을 실험했던 건 맡고있는 업무에서 써먹기 위해서였어요. "주말에 테스트해보고 월요일 출근해서 써먹어야지" 라는 생각으로 해본 거에요. 덕분에 일요일 저녁 기분좋게 잠들 수 있었는데요. 근데 저는 월요일 대부분의 업무 시간을 또 다시 Redis 로컬 테스트를 하는.. 2024. 12. 6. Airflow 로컬에서 동작시켜보기 튜토리얼 1 해당 포스팅은 Airflow 가 도대체 뭐길래? 에서 출발했습니다. Airflow의 대략적인 설명을 들었을 때, Airflow 와 springBatch + argo workflow 조합은 어떤 차이점이 있지? 라는 궁금증이 먼저 들었습니다 Airflow는 데이터 엔지니어링과 ETL 파이프라인 작업에 최적화되어있고, 후자는 복잡한 비즈니스 로직 구현에 중점을 둔다고 이해했습니다. Argo는 그 작업들을 Kubernetes 환경에서 스케줄링하고 병렬 처리로 확장할 수 있도록 지원한다는 점도 짚을 수 있겠네요. *ETL(Extract-Transform-Load) : 데이터를 처리하고 변환하여 원하는 형태로 적재하는 데이터 처리 과정. 둘의 차이가 뭐든 간에, Airflow 연동 작업을 한번 해보고 싶었습니다... 2024. 12. 4. Unleash 로컬에서 동작시켜보기 튜토리얼 2 Unleash 로컬에서 동작시켜보기 튜토리얼 1외부 클라이언트 서버를 교체할 때, 혹시 모를 상황에 대비해 롤백 해야하는 경우, 서버는 어떤 롤백 시나리오를 준비할 수 있을까요? 상황은 여기서 출발했습니다. 오픈 소스 6161990src.tistory.com 이어서 진행해보겠습니다. 먼저 Unleash 의 라이프 사이클에 대해서 서치해보았습니다. 대략 이렇습니다. Initial Phase (초기 단계) 는 플래그가 생성되었지만, 아직 어떤 환경에서도 호출되지 않은 상태입니다. 이 설명대로라면 저는 아직 테스트 하지 않았으므로 초기 단계에 머물러있는게 맞습니다. Pre-Live (프리라이브) 는 플래그가 비프로덕션 환경에서 사용되고 있는 상태입니다. develop 환경을 건너뛰고 저는 바로 prod.. 2024. 12. 3. Unleash 로컬에서 동작시켜보기 튜토리얼 1 외부 클라이언트 서버를 교체할 때, 혹시 모를 상황에 대비해 롤백 해야하는 경우, 서버는 어떤 롤백 시나리오를 준비할 수 있을까요? 상황은 여기서 출발했습니다. 오픈 소스 기능 플래그 관리 툴 Unleash 를 사용해보았습니다. 기능 플래그는 애플리케이션에서 특정 기능을 제어하거나 활성화/비활성화할 수 있는 방법을 제공하며, 지속적 배포(CD) 및 점진적 릴리즈에 유용합니다. 오픈소스 기반이기 때문에 무료이고, 다양한 기본 전략이 있고 커스텀하게 전략을 세울 수도 있습니다. 사용자 세그먼트를 이용해 만 14세 이상의 유저에게는 A 기능을 만 20세 유저에게는 B 기능을 이용하도록 경우에 컨트롤할 수 있습니다. A/B 테스트를 간단하게 해볼 수 있습니다. 시간 기반 릴리즈를 통해 특정 시간 동안만 기능을 .. 2024. 12. 3. 이전 1 2 3 4 ··· 20 다음