성장 경험/배운 점 & 회고
[배운 점 & 회고] 7월 17일
Tarake
2025. 7. 17. 22:08
작업 개요
- 프로젝트/업무명 : 안티드론성능평가시스템/백엔드
- 기간 : 2025.03.02 ~
- 주요 기술 스택 : Java, MySQL, Spring Boot
배운 점
- Service와 RepositoryService로 계층을 분리한 구조에서는, 수정/삭제 작업 전에 반드시 엔티티를 Service 계층에서 명시적으로 조회해야 한다.
- JPA에서는 @Transactional 범위 내에서 영속 상태의 엔티티의 필드만 변경해도 DB에 반영되며, save() 호출은 필수가 아니다.
- 엔티티 수정은 Entity 내부에 updeteFromeDTO() 같은 메소드를 두면 응집력 있고 안전한 구조가 된다.
- 삭제 작업 시에도 단순히 deleteById() 를 호출하기 보다, 대상이 현재 로그인 사용자의 데이터인지 검증 후 삭제하는 것이 안전하다.
- 로직은 짧아졌어도, 그 코드가 동일한 대상에 대해 동일한 방식으로 동작하는지를 항상 먼저 검토해야한다.
- 데이터 삭제나 수정과 같은 영향도가 큰 작업일수록 트랜잭션 범위와 검증 절차가 중요하다.
회고
이번 학습은 계층형 구조 안에서 엔티티를 어디서 조회하고, 누가 수정/삭제 책임을 져야 하는가에 대해 고민하면서 시작되었습니다.
처음에는 RepositoryService에서 DTO만 받아 처리하거나, 삭제 시 deleteById()를 호출하는 단순한 방식으로도 충분할 것이라 생각했습니다.
그러나 이러한 구조는 점점 비즈니스 로직이 퍼지고, 검증 책임이 모호해지는 문제를 낳았습니다. 반복문을 줄이는 리팩토링보다는, 그 코드가 수행하던 "검증, 책임, 흐름"을 유지하고 있는지가 더 중요하다는 것을 다시금 깨달았습니다.
앞으로는 기능을 구현하거나 개선할 때
- 이 책임은 어느 계층이 가져가야 할까?
- 기존 코드가 하던 일을 놓치지 않았는가?
- 이 로직은 데이터 보안 측면에서도 안전한가?
이 세 가지 질문을 먼저 던지고 시작하는 습관을 들이려고 합니다.