전체 글

개발에 관련된 학습 내용들을 기록하는 공간입니다.
Language/Java

[Java] 멀티 스레드 환경에서 발생할 수 있는 동시성 이슈와 해결 방법

개요 멀티 스레드를 사용하는 환경에서 각 스레드가 공유 자원에 동시에 접근하는 상황이라면 경쟁상태(Race condition)가 발생할 수 있습니다. 경쟁상태가 발생하게 되는 원인은 가시성(Visibility)과 원자성(Mutual Exclusion)을 보장하지 못했기 때문인데요, Java에서는 synchronized 키워드와 Atomic Type, Concurrent Collection 등을 통해 이와 같은 동시성 문제를 해결할 수 있습니다. 본 포스팅에서는 멀티 스레드 환경에서 발생할 수 있는 문제에 대해 설명하고 이를 해결할 수 있는 sychronized, volatile 키워드와 Atomic Type에 대한 내용을 다루겠습니다. 본 포스팅의 주제와 연관된 핵심적인 개념들은 다음과 같습니다. 공유자..

DevOps

Swagger와 RestDocs의 장점을 합친 효과적인 API 문서화 (OpenApi Spec)

개요 API 서버를 개발하다보면 협업을 위해 API 문서화를 진행하게됩니다. Spring 기반의 프로젝트에서 API 문서화 도구로 Swagger와 RestDocs를 가장 많이 사용하게 되는데요, 각 문서화 도구의 장단점은 다음과 같습니다. 구분 장점 단점 Swagger • 아름다운 문서 • 문서에서 API Test 가능 • Swagger 어노테이션이 비즈니스 코드와 섞임 • 테스트 코드가 강제되지 않음 Rest Docs • 문서화를 위해 테스트코드가 강제됨 • 테스트 기반으로 문서화되므로 비즈니스 코드가 깔끔해짐 • 아름답지 않은 문서 • 문서에서 API Test 불가능 저는 API 문서화를 위해 두 기술을 모두 사용해봤는데요, 확실히 각각의 장단점이 뚜렷했습니다. 그러던 도중, 카카오페이 기술 블로그..

Database

[MariaDB] Replication 적용기 - 4 (MHA)

개요 이전 실습에서 MariaDB Replication 구성과 LazyConnectionDatasourceProxy를 활용하여 읽기 / 쓰기 트랜잭션의 Connection을 분리하고 반동기 복제 적용까지 진행하였다. 이를 통해 데이터 복제를 통한 백업, 읽기/쓰기 작업 부하 분산을 통한 성능 개선 등의 이점을 가져갈 수 있었다. Replication 구성 방법이 궁금하다면 다음의 포스팅을 참고하자. 2024.01.05 - [Database] - [MariaDB] Replication 적용기 - 1 (DB Setting) 하지만 Replication 구성만으로는 SPOF 문제가 발생할 수 있다. 앞서 진행했던 Replication 구성은 한대의 Master 서버를 통해 쓰기 작업을 수행하고 Replica..

Database

[MariaDB] Replication 적용기 - 3 (반동기 복제: semi-sync)

개요 이전 실습을 통해 Replication을 적용해 보았다. 이를 통해 읽기 작업과 쓰기 작업의 부하를 분산할 수 있었고 추가적으로 데이터 분산, 분석 및 백업에 이점이 있다는 사실을 알 수 있었다. 하지만 Replication을 통해 읽기/쓰기 부하를 분산하는 방식에는 치명적인 단점이 있다. 바로 데이터의 정합성 문제가 발생할 수 있다는 점이다. Master 서버의 변경 사항이 Replica 서버 스토리지 엔진을 통해 동기화되기 전에 Replica 서버에 읽기 작업이 발생한다면, 복제되기 이전의 데이터 셋을 참조하여 정합성 문제가 발생할 수 있다. MariaDB의 경우 기본적으로 비동기 복제 방식을 사용하는데 이 방식은 Replica 서버에 이벤트가 전달되었음을 전혀 신경쓰지 않는 방식이기 때문에 이..

Spring

[Spring] Replication 적용기 - 2 (Transaction별 connection 분리)

2024.01.05 - [Database] - [MariaDB] Replication 적용기 - 1 (DB Setting) [MariaDB] Replication 적용기 - 1 (DB Setting) 본 포스팅을 시작으로 Replication을 적용하는 여정에 대해 남겨보려고 한다. Replication 을 처음 접해보았거나 개념이 잘 기억나지 않는다면 이전 포스팅을 참고하자. 2024.01.03 - [Database] - [MySQL] 가용 rachel0115.tistory.com 이전 글에서 이어지는 내용입니다. DataBase Replication 설정이 안되어있으신 분들은 해당 작업을 먼저 진행해주시기 바랍니다. 본 포스팅에서는 @Transactional 어노테이션의 readOnly가 true일 ..

Database

[MariaDB] Replication 적용기 - 1 (DB Setting)

본 포스팅을 시작으로 Replication을 적용하는 여정에 대해 남겨보려고 한다. Replication 을 처음 접해보았거나 개념이 잘 기억나지 않는다면 이전 포스팅을 참고하자. 2024.01.03 - [Database] - [MySQL] 가용성과 확장성을 위한 Database Replication [MySQL] 가용성과 확장성을 위한 Database Replication DB Replication이 왜 필요할까? 다음과 같이 데이터베이스를 한 대만 운영하는 아키텍처가 있다고 가정해보자. 모든 데이터에 대한 읽기와 쓰기 작업은 하나의 MySQL 데이터베이스에서 수행된다. 만 rachel0115.tistory.com 다음과 같이 Master 서버에서의 데이터 변경 사항이 자동으로 Replica 서버에 반..

KAispread
기억의 정류장