문제 발견: 중복 회원가입 문제회원가입 로직에는 중복 검증 로직이 존재하지만, 회원가입이 완료되기 전에 사용자가 버튼을 다시 누르면 중복으로 회원가입이 처리되는 문제가 발생한다. 이는 여러 요청이 동시에 처리되면서 데이터베이스의 동시성 제어가 제대로 작동하지 않기 때문이다. 이러한 문제는 데이터의 무결성을 훼손하고 리소스 낭비를 초래하며, 사용자 경험에도 악영향을 끼친다. 실제 서비스의 문제를 확인한 뒤 테스트 코드를 통해서 회원가입이 동시에 발생하는 환경을 만들어 주었을 때도 같은 오류가 나는 것을 확인할 수 있었다. 테스트는 동일한 회원가입 요청이 동시에 처리되는 상황을 시뮬레이션하고, 중복 회원가입이 방지되었는지 확인한다.threadCount = 2으로 2개의 동시 요청을 준비하고, 이를 병렬로 ..
매번 배포 진행 후 실패할 경우 ec2에 직접 접속해서 docker의 로그를 확인하는 것이 너무 비효율적이라 생각이 들었다..(물론 프로젝트 끝나고 든 생각이라 나중에 하긴 했다 ㅎㅎ)그렇지만 스프린트를 이어나갈 가능성도 있고, 해두면 언제 에러가 나든 편리하게 이슈대응할 수 있을 것 같아서 한참 전에 파두었던 로깅 관련 이슈를 늦게서야 완성시킨 일을 써보려 한다. 1. MDC (Mapped Diagnostic Context)MDC란?MDC는 Mapped Diagnostic Context의 약자로, SLF4J와 같은 로깅 프레임워크에서 제공하는 Thread-Local 기반의 데이터 저장소이다. 멀티쓰레드 환경에서도 요청별로 로그 데이터를 구분할 수 있도록 쓰레드마다 고유의 값을 저장한다.예를 들어, 특정..
최근 프로젝트에서 Course 삭제 시 다음과 같은 404 에러가 발생했다. 이 문제는 다음과 같은 validateCourse 메서드에서 Course의 소유자와 삭제를 요청한 사용자가 동일한지 확인하는 과정에서 발생했다.private void validateCourse(final User findUser, final Course findCourse) { if (!findUser.equals(findCourse.getUser())) { throw new ForbiddenException(FailureCode.COURSE_DELETE_ACCESS_DENIED); }} 디버깅을 해보니, findCourse.getUser()와 findUser는 동일한 User 객체를 참조하고 있음에도 불..