JPA 비관적 락과 낙관적 락 및 재시도
·
프레임워크
개요콘서트 예약 프로젝트를 개발하면서 좌석 예약에서 발생하는 동시성 문제에 대해 고민하게 되었다. 여러 사용자가 동시에 같은 좌석을 예약하려고 할 때 동시성 문제가 발생할 수 있는데, 이를 해결하기 위해 JPA에서 제공하는 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)을 사용하고, AOP를 활용한 재시도 로직을 통해 동시성 문제를 해결하는 방법을 알아보자.비관적 락(Pessimistic Lock)첫 번째로 시도한 방법은 비관적 락이다. (익숙한 방법이라 먼저 진행하게 되었다.) 비관적 락은 데이터베이스 레벨에서 락을 걸어 동시성 문제를 해결하는 방식으로, 여기서 말하는 락은 X Lock(Exclusive Lock)을 의미한다.// ConcertFacade.java@..
필터(Filter) vs 인터셉터(Interceptor)
·
프레임워크/Spring
개요콘서트 프로젝트에서 대기열을 구현하는 과정에서, 대기열 검증 로직을 어디서 처리할지 고민하게 되었다.대기열 토큰을 가지고 입장 가능 여부를 검증하는 로직을 작성했는데, 이 로직을 필터나 인터셉터 중 어디에 두는 게 적절할지 알아보면서, 필터와 인터셉터의 차이점과 용도에 대해 정리해보았다.필터(Filter)필터는 J2EE 스펙에서 제공하는 기능으로, 디스패처 서블릿(Dispatcher Servlet) 요청 전에 부가적인 작업을 처리할 수 있다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이며, 필터는 스프링의 범위를 벗어나 톰캣과 같은 웹 컨테이너에서 관리된다. 즉, 디스패처 서블릿의 전후에 처리되는 것이다.필터는 디스패처 서블릿 전에 특정 요청을 선별하거나, 요청과 응답을 가로채는..
Dispatcher Servlet (디스패처 서블릿)
·
프로그래밍 언어/JAVA
개요필터(Filter)와 인터셉터(Interceptor)에 대해 알아보다가 디스패처 서블릿(Dispatcher Servlet)을 한 번 짚고 가면 좋을 것 같아 작성하게 되었다.서블릿(Servlet)서블릿은 클라이언트의 요청을 처리하고 그 결과를 반환하는 자바 웹 프로그래밍 기술로, Servlet 클래스의 구현 규칙을 따르게 된다.서블릿은 웹 서버에서 동작하며, 클라이언트의 요청을 받아 처리하고 그 결과를 다시 클라이언트에게 전송하는 역할을 한다. (자세한 내용은 다음에 다루겠다.)디스패처 서블릿(Dispatcher Servlet)디스패처 서블릿은 Servlet의 일종이다. 'dispatcher'라는 단어는 '보내다'라는 의미를 가지고 있으며, HTTP 프로토콜로 들어오는 모든 요청을 가장 앞에서 받아서..
Error와 Exception
·
프로그래밍 언어/JAVA
개요프로그램이 실행되는 동안 예상치 못한 문제들이 발생할 수 있다.이를 오류라고 하며, 오류의 종류에는 Error와 Exception이 있다.이 두 가지는 모두 문제 상황을 나타내지만, 그 본질과 처리 방식에 차이가 있다.이번 글에서는 Error와 Exception의 차이점을 알아보고, 이를 어떻게 구분하고 처리해야 하는지 설명한다. Error란?Error는 시스템 레벨에서 발생하는 치명적인 문제를 의미한다.주로 자바 가상 머신(JVM)의 동작과 관련된 문제들이며, 개발자가 직접 해결하거나 회복할 수 없는 상황이다.Error가 발생하면 프로그램의 실행을 계속하기 어려운 경우가 많다.대표적인 Error에는 다음과 같은 것들이 있다:OutOfMemoryError: JVM이 더 이상 메모리를 할당할 수 없을 ..
Spring Global Exception Handler (전역 예외 처리)
·
프레임워크/Spring
Spring Global Exception Handler개요Spring에서 예외 처리 방법은 여러 가지가 있다.가장 흔히 사용되는 방법으로는 try-catch 문을 이용한 예외 처리, @ExceptionHandler를 이용한 예외 처리, 그리고 전역에서 예외를 처리할 수 있는 @ControllerAdvice를 이용한 방법이 있다.이 글에서는 각 방법의 특징과 장단점을 알아본다.1. try-catch 문을 이용한 예외 처리@RestControllerpublic class TestController { @GetMapping("/test") public String test() { try { // 예외 발생 코드 throw new Exception..
항해 플러스 백엔드 코스 6기 4주차 회고 WIL
·
항해/WIL
항해 플러스 추천인 코드지원페이지에서 추천 코드에 3ZTeU1를 입력해주시면 20만원 할인 적용됩니다.항해 플러스 과정에 관심이 있는 분들은 아래 링크를 통해 신청해보세요!궁금하시거나 커피챗을 하고 싶으신 분들은 링크드인이나 kboxstar@gmail.com으로 연락주세요.항해 플러스 과정 페이지1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제)이번 주차를 지나며 겪었던 문제가 무엇이었나요?지난 주에 진행했던 설계로 개발을 진행했으나, 예상보다 놓친 부분이 많았습니다.그래서 설계를 수정하거나 고려하지 못했던 부분을 보완하는 데 많은 시간을 썼습니다.특히, 이번 주는 실제 구현이 본격적으로 진행되는 단계라 코드량이 많아 시간이 많이 부족했습니다.2. 시도문제를 해결하기 위해 어떤 시도를 하셨..
항해 플러스 백엔드 코스 6기 3주차 회고 WIL
·
항해/WIL
항해 플러스 추천인 코드지원페이지에서 추천 코드에 3ZTeU1를 입력해주시면 20만원 할인 적용됩니다.항해 플러스 과정에 관심이 있는 분들은 아래 링크를 통해 신청해보세요!궁금하시거나 커피챗을 하고 싶으신 분들은 링크드인이나 kboxstar@gmail.com으로 연락주세요.항해 플러스 과정 페이지1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제)이번 주차를 지나며 겪었던 문제가 무엇이었나요?이번 주차에서 가장 큰 어려움은 프로젝트 요구사항을 분석하고 이를 문서화하는 부분이었습니다.시퀀스 다이어그램, 플로우 차트, 클래스 다이어그램, ERD, API 명세서, Mock API를 제작해야 했는데, 특히 시퀀스 다이어그램에서 논리 레벨과 코드 레벨 중 어느 방식으로 접근해야 할지 헷갈렸습니다.클래..
2024 당근 테크 밋업 후기
·
일상
2024 당근 테크 밋업 후기당근 테크 밋업에 다녀왔습니다.당근에서 주최한 이번 밋업은 Frontend, Server, DATA/ML, Platform 4개의 트랙으로 진행되었습니다.저는 Server 트랙을 참석했는데, 밋업에서 들은 내용을 정리해보려고 합니다.당근 테크 밋업은 당근의 모임 시스템을 활용하여 진행되었습니다.해당 모임에서 실시간 정보를 수신하고 이벤트 및 네트워킹 활동을 진행했습니다.네트워크 활동당근의 여러팀들이 모임 일정 등록을 통해 네트워크 모입을 진행했습니다.저는 이중 이이덴티티 서비스 네트워크에 참여했습니다.아이덴티티 서비스란 당근의 회원과 인증을 담당하는 서비스입니다.기존 모놀리식 아키텍처에서 마이크로서비스 아키텍처로 전환하는 과정에서 이 서비스를 분리했습니다. (자세한 내용은 S..
항해 플러스 백엔드 코스 6기 2주차 및 챕터 회고 WIL
·
항해/WIL
항해 플러스 추천인 코드지원페이지에서 추천 코드에 3ZTeU1를 입력해주시면 20만원 할인 적용됩니다.항해 플러스 과정에 관심이 있는 분들은 아래 링크를 통해 신청해보세요!궁금하시거나 커피챗을 하고 싶으신 분들은 링크드인이나 kboxstar@gmail.com으로 연락주세요.항해 플러스 과정 페이지항해 플러스 백엔드 코스 6기 2주차 및 챕터 회고 WIL1. 간단한 자기소개안녕하세요, 항해 플러스 백엔드 코스 6기에 참여 중인 길현준입니다.저는 3년 2개월 정도의 경력을 가진 4년차 백엔드 개발자입니다.8월에 퇴사하고 자기 계발의 시간을 보내고 있으며, 9월 21일부터 항해 플러스 백엔드 코스에 참여하고 있습니다.자세한 경력은 LinkedIn에서 확인할 수 있습니다.2. 이번 챕터를 시작하며 꼭 달성하고 ..
분산 환경에서의 동시성 제어
·
Backend
배경동시성 제어의 기본 개념 이해를 위해 멀티 스레드 환경에서 동시성 제어 방식에 대한 분석 In Java 글참고분산 환경 vs 멀티 스레드 환경멀티 스레드 환경: 단일 인스턴스, 인스턴스 레벨 동시성 제어 가능분산 환경: 다중 인스턴스, 인스턴스 레벨 제어 불가능분산 환경에서의 동시성 제어 방식락(Lock)을 이용한 제어원리: 공유 자원에 대한 접근을 순차적으로 제어장점: 구현이 상대적으로 간단, 데이터 일관성 보장단점: 성능 저하 가능성, 데드락 위험버전(Version)을 이용한 제어원리: 데이터 변경 시 버전 정보 업데이트장점: 충돌 감지 용이, 낙관적 동시성 제어에 적합단점: 추가적인 버전 관리 오버헤드타임스탬프(Timestamp)를 이용한 제어원리: 각 트랜잭션에 고유한 타임스탬프 부여장점: 시..