2025/09 4

로그아웃 로직 Optional과 예외 처리 개선기

문제 : 과도한 예외 처리와 복잡한 흐름처음 작성했던 코드(1번 코드)는 로그아웃 프로세스를 하나의 큰 try-catch 블록 안에 넣고 있었습니다.// 1번 코드함수: 로그아웃을 시작한다 시도해본다: 소셜 계정에서 로그아웃을 요청한다 (이 과정에 사용자 인증 정보 확인도 포함) 로그아웃 완료 이벤트를 알린다 사용자 인증 정보를 모두 지운다 로그아웃용 쿠키를 반환한다 만약 오류가 발생하면: 로그아웃 실패 오류를 발생시킨다이 방식은 얼핏 보면 안전해 보이지만, 다음과 같은 두 가지 큰 문제를 가지고 있었습니다.단일 책임 원칙 (SRP) 위반: 소셜 로그아웃 처리 메서드 안에서 사용자 정보 확인과 실제 로그아웃 요청이라는 두 가지 책임이 섞여 있었습니다. 이 때문에 코드를 이해..

개발 2025.09.23

비밀로그 개발 예정 기능

향후 추가기능탑재를 위한 버전2가 완성되어간다버전2라고하지만 준비한 기간에 비해서는 사용자가 느끼는 기능추가가많지않다버전2는 향후 추가기능 탑재를 위한 서버내부리팩토링이 주 목적이다사용자가 느끼기에는 디자인 친화적 변화 오류개선 정도의 개선만있다 (디자인 변화가 사용자가 느끼기에는 많이 변하게 느껴지려나..?)아키텍처변경이외의 기능은 보안강화 로깅강화 관리자기능강화가 주된 변화다향후 추가할 기능을 적어보려한다메인은 채팅기능추가다 (단체채팅,익명채팅,닉네임채팅)친구기능추가도 필요하다친구추천기능도 필요하다 (흔히말하는 2촌, 3촌등등 유니온파인드를 활용하는게 떠올랐지만 아무리 빨라도 데이터를 가져와서 지지고볶는건 아닌거같다 nosql쪽에 해답이 있으려나? 구현은 더 고민해야한다)실시간 인기 롤링페이퍼도 만들..

개발 2025.09.14

헥사고날 아키텍처에서 신고(Report) 엔티티의 도메인 위치 딜레마

1. 상황 비밀로그(BimilLog) 프로젝트를 헥사고날 아키텍처로 설계하면서 신고 기능을 구현하게 되었다. 현재 시스템은 7개의 주요 도메인(admin, auth, comment, notification, paper, post, user, common)으로 구성되어 있으며, 각 도메인은 명확한 책임과 경계를 가지고 있다. 신고 기능의 요구사항은 다음과 같았다: - 글 신고: 부적절한 게시글 신고 - 댓글 신고: 부적절한 댓글 신고 - 건의사항: 사용자가 시스템에 대한 건의사항 제출 - 신고 관리: 관리자가 신고 내역을 조회하고 처리 자연스럽게 각 기능은 관련 도메인에 배치되었다: - 신고 하기→ user 도메인의 in 어댑터 (UserCommandController) - 신고 조회 →..

TestContainers로 MySQL + Redis 통합 테스트

이번 글에서는 CommentClosureQueryAdapter 통합 테스트와 PostCacheSyncAdapter 테스트를 TestContainers 기반으로 통합 테스트 환경으로 바꾸면서 겪은 삽질과 해결 과정을 정리해보겠습니다.1. 시작: 댓글 테스트에서 MySQL만 사용처음에는 댓글 테스트에서 MySQL 컨테이너만 사용했습니다.@Containerstatic MySQLContainer mysql = new MySQLContainer("mysql:8.0") .withDatabaseName("testdb") .withUsername("test") .withPassword("test");@DynamicPropertySourcestatic void dynamicPrope..

개발 2025.09.05