[동시성 제어] DB 락 vs Redis vs 비동기
·
Side Project/Study Together
✏️ 서론Study Together는 유저들이 함께 모여 공부할 수 있는 플랫폼으로, 효율적인 학습 환경을 제공하고자 기획했다. 유저가 Study Group 기능을 통해 공부 모임에 자유롭게 참여가 가능하다. 그러나, 다수의 유저가 동시에 Study Group에 참여하려고 할 때, 동시성 문제가 발생할 수 있다. 동시성 문제란, 여러 작업이 동시에 수행될 때 공유 자원에 대한 접근 순서나 처리 과정이 엉키며 데이터 일관성 및 시스템 안정성이 깨지는 현상이다. 현재 내 프로젝트에서 동시성 문제가 발생할 수 있는 지점을 파악하고, 이에 대한 해결 방안을 모색해 보았다. 짧은 과정은 아니었기에, 우선 요약을 하자면 나의 목표는 무조건적인 대규모 트래픽에 대비한 동시성 제어가 아닌, 현재 프로젝트 규모를 예측..
[Test Code] Repository 단위 테스트로 다져가는 도메인 중심 설계의 기초
·
Side Project/Study Together
Repository 단위 테스트를 진행하기 전에, 1. Repository Layer의 명확한 정의,  그에 따라 2.Repository Layer에서는 무엇을 단위 테스트 해야하는지 고민해보았다. Repository Layer는 무엇을 하는 계층일까?Repository 계층은 도메인을 영속화 하는 계층이다. 리포지토리 패턴은 소프트웨어 개발에 사용되는 설계 패턴으로 도메인 모델 계층과 구현 기술을 분리시키는 것을 의미한다. 데이터 액세스 코드를 추상화하여 구체적인 접근 방식을 가림으로써 깨끗한 아키텍처를 유지할 수 있다. 리포지토리 계층은 도메인과 data source layer 간에 중개자 역할을 수행하게 되는데, 영속성 장치에서 쿼리의 결과로 받아온 데이터를 repository에서는 도메인에서 사용..
[Event 기반 설계] 다양한 이벤트 확장 : 이벤트 추상화와 동적 매핑 구현 방법
·
Side Project/Study Together
✏️ 지난 포스트 이야기 & 서론 지난 포스트 : https://dev-wooni.tistory.com/13 이벤트 기반 아키텍처 도입하기 (Transactional Outbox Pattern)✏️  서론웹 애플리케이션 서비스에서 회원가입 시 사용자가 입력한 이메일이 유효한지 확인하는 이메일 인증 절차는 필수적입니다. 이는 사용자와 서비스 모두에게 중요한 과정입니다. 먼dev-wooni.tistory.com 회원가입 후 이벤트 발행을 통해 알림을 전송하는 구조는 기존 로직의 문제점을 성공적으로 해결했습니다. 또한, Transactional Outbox Pattern의 사용을 통해 이벤트 메시지 발행을 보장할 수 있는 구조를 만들었습니다.하지만 이벤트 추상화와 관련하여, 시스템의 확장성을 높이기 위해 추가..
[Event 기반 설계] Transactional Outbox 패턴이 필요한 이유 : 프로젝트 적용 사례
·
Side Project/Study Together
개요이번 포스트에서는 프로젝트를 진행하며 이벤트 기반 설계를 도입한 이유와 그 과정에서 Transactional Outbox Pattern의 필요성을 느낀 배경, 그리고 구현 내용을 정리하고자 합니다.서론웹 애플리케이션 서비스에서 회원가입 시, 사용자가 입력한 이메일이 유효한지 확인하는 이메일 인증 절차는 필수적입니다. 이는 사용자와 서비스 모두에게 중요한 과정입니다. 먼저, 사용자가 이메일을 정확히 입력했는지 확인하는 것은 필수입니다. 오타나 잘못된 이메일 주소로 인해 중요한 알림을 받지 못할 수 있기 때문입니다. 예를 들어, 비밀번호를 잊었을 때 새 비밀번호를 이메일로 전송해야 하는 경우, 올바른 이메일 주소가 필요합니다. 서비스 운영 측면에서도 이메일의 유효성은 중요합니다. 광고나 공지 사항을 보낼..
[JPA] 일대다(OneToMany) 단방향 매핑의 성능 이슈
·
Side Project/Study Together
서론프로젝트에 JPA를 처음 적용했을 땐 너무 편리하다며 감탄했다. 최근에는 제대로 이해하지 않고 사용하면 오히려 독이 될 수 있다는 것을 깨닫고 있다. 특히 연관관계 매핑에서는 세심한 주의가 필요하며, 양방향 매핑과 단방향 매핑이 각각 가져오는 차이를 이해하는 것이 중요하다. 이번 글에서는 양방향 매핑과 단방향 매핑에서 발생하는 문제들을 분석하고, 이러한 문제를 해결해 나가는 과정을 정리해보려 한다.양방향 매핑의 문제점✔️ 상태 변경에 대한 관리 복잡성이 증가 A객체가 B객체에 대해 직접 참조가 가능한 것은 B객체의 비즈니스 로직 노출, 상태 변경에 대한 가능성이 열려있는 구조이다. 양방향 매핑을 사용할 경우, 양쪽 객체가 서로를 참조하게 되면서 상태 관리가 복잡해지고 불필요한 비즈니스 로직 노출 문제..
[JPA] JPA 적용 이유, 의존성 주입으로 유연한 Repository 설계
·
Side Project/Study Together
JPA 적용 이유프로젝트 초기에는 JDBC Template을 사용해 데이터베이스와의 연동 작업을 진행했다. 하지만 객체지향적 언어로 도메인을 구성하며 프로그래밍을 하던 중, 객체와 데이터베이스 간의 연결 방법에 대한 고민이 생겼다. 객체지향 설계와 관계형 데이터베이스 사이의 패러다임 불일치로 인해 코드가 복잡해지는 문제를 겪었다. 이러한 문제를 해결하기 위해 ORM(Object-Relational Mapping) 기술인 JPA를 도입하게 되었고, 이를 통해 객체와 데이터베이스 간의 매핑을 더 자연스럽게 처리하고자 했다. ✔️  ORM이란?: Object-Relational Mapping의 약자로, 객체와 관계형 데이터를 매핑하기 위한 기술. 매핑이 필요한 이유는 객체지향 언어와 관계형 데이터베이스 사이의..