개발일기
연관관계 처리
시원한봄유성
방금 전·2026년 6월 21일 오후 07:16
20
# 개발일기
## 어려웠던 점
### 엔티티 생성자 문제
처음 `User` 엔티티에는 생성자가 있었지만, 생성자 내부에서 필드에 값을 넣지 않고 있었다.
```java
public User(String email, String password, String nickname) {
}
```
이 상태에서는 회원가입을 해도 실제 엔티티에 값이 저장되지 않는다. 그래서 생성자 안에서 `email`, `password`, `nickname` 값을 필드에 직접 넣도록 수정했다.
### 연관관계 처리
`Schedule`, `Todo`, `Anniversary`는 각각 다른 엔티티와 연결되어 있다.
- `Schedule`은 `Couple`에 속한다.
- `Todo`는 `Schedule`과 `User`에 연결된다.
- `Anniversary`는 `Couple`에 속한다.
그래서 단순히 문자열이나 숫자 값만 저장하는 것이 아니라, 먼저 Repository로 관련 엔티티를 조회한 뒤 해당 객체를 넣어줘야 했다. 이 부분을 Service 계층에서 처리하도록 했다.
### 응답에서 필요한 값만 내려주기
엔티티를 그대로 응답으로 내려주면 비밀번호 같은 민감한 정보가 포함될 수 있고, 연관관계 때문에 응답 구조가 복잡해질 수 있다.
그래서 Response DTO를 만들어서 API 응답에 필요한 값만 내려주도록 했다. 예를 들어 회원 응답에서는 비밀번호를 제외하고 `userId`, `email`, `nickname`만 포함했다.
## 배운 점
이번 개발을 하면서 Controller, Service, Repository, Domain, DTO의 역할을 더 명확하게 구분할 수 있었다.
- Controller는 요청을 받고 응답을 반환한다.
- Service는 비즈니스 로직을 처리한다.
- Repository는 DB 접근을 담당한다.
- Domain은 실제 데이터 구조와 상태 변경 메서드를 가진다.
- DTO는 요청과 응답 데이터를 분리해서 관리한다.
또한 DTO를 처음부터 잘 나누는 것이 유지보수에 중요하다는 점도 알게 되었다. 기능이 적을 때는 하나의 파일에 모아도 괜찮아 보이지만, 기능이 늘어나면 도메인별로 분리하는 것이 더 읽기 쉽고 관리하기 좋다.
이번 프로젝트를 통해 Spring Boot로 기본적인 REST API를 만들고, JPA 연관관계를 사용해서 여러 도메인을 연결하는 흐름을 연습할 수 있었다.댓글
댓글을 입력하세요...
댓글이 없습니다.
