본문 바로가기

리팩토링3

Refactoring - MapStruct 적용 서론☁️기존에 DDD의 4Laeyerd 형태를 띄고있는 구조였습니다.명확히 4개의 레이어로 구분하여 수정시에 다른 레이터에게 영향을 미치기 않도록 하는것이 목표인 구조입니다. 하지만 아직 구조적으로 미흡한 부분 중 하나는 Application과 Presenetation이 하나의 dto를 공유한다는 것이었습니다.presentation 영역의 DTO를 어플리케이션 레이어에 그대로 전달하여 사용하고 잇습니다.즉, 어플리케이션 레이어에서 프레젠테이션 영역에 의존하고 있는 형태이고, 이렇게 되면 DIP 원칙에 어긋납니다.그렇기 때문에 서비스는 서비스 영역의  dto로만 사용을 해야하며, presentation 에서는 presentation 영역에 맞는 dto로 변경해서 사용해야합니다. 이렇게 명확히 분리할 경우 .. 2025. 4. 2.
[ mate 필터링 ] 메이트 프로필 필터링에 대한 고민 📜문제상황오늘은 제가 진행중인 '단잠'서비스에서 메이트 프로필 필터링에 대한 고민이 있어, 이를 정리하고자 합니다. 기존에 모놀로틱으로 구현을 할 때에는 단순히 테이블을 조인해서 필터링을 진행하면 되었습니다. 물론 필터링 항목들이 많아 성능상에 문제가 생겼었지만 인덱싱, 쿼리최적화, 캐싱을 통해 해결하였습니다. 문제는 모놀로틱에서 MSA로 마이그레이션 하던 도중 발생했습니다.DB와 서비스가 분리됨에 따라 Mate-Service에서 필터링 가능한 항목과 User-Service에서 필터링 가능한 항목이 나뉘어졌습니다. 그렇기에 먼저, FeignClient를 사용하여 동기적인 호출을 통해 이러한 문제를 해결하였습니다. Mate-Service에서 1차적으로 필터링을 한 뒤, User-service에게 필터링된.. 2025. 3. 7.
try catch만 보여..@ControllerAdvice 적용기 이글은 ControllerAdvice를 적용하여 예외처리를 처리한 글입니다.🚨코드 반복좀 줄이고 싶다계속해서 반복된 코드가 컨트롤러에서 많아지고 서비스에서 발생하는 예외처리를 해주기 위해 컨트롤러의 코드가 너무나 길어져 핵심적인 내용을 보기에는 불편하였습니다. @PostMapping("/myschedule") public ResponseEntity createMySchedule(@AuthenticationPrincipal CustomUserDetails customUserDetails, @RequestBody @Valid MyScheduleInputDTO myScheduleInputDTO, BindingResult bindingResult) { // 유효성 검사 실패 시 에러 메시.. 2025. 2. 4.