개발
Day 42 - Spring Boot pt.2
·2분 읽기
이 글은 2026년 04월 29일 작성된 글입니다.
오늘은 JPA 연관관계 심화, LAZY/EAGER, 그리고 Thymeleaf 기반 화면 구성까지 정리했다.
1. 답변 생성 방법 2가지
Repository 방식
Answer answer = new Answer();
answer.setContent("답변");
answer.setQuestion(question);
answerRepository.save(answer);객체지향 방식 (권장)
question.addAnswer("답변");👉 엔티티 내부 메서드로 처리하는 게 더 깔끔함
2. CascadeType.PERSIST
- 부모 저장 시 자식도 같이 저장
- addAnswer만 해도 자동 저장됨
👉 더티체킹 + cascade 조합
3. EAGER vs LAZY
LAZY (기본, 권장)
- 필요할 때만 조회
- 성능 좋음
EAGER
- 처음부터 JOIN으로 다 가져옴
- 성능 떨어질 수 있음
👉 실무 = 대부분 LAZY
4. 컬렉션 초기화 이유
private List<Answer> answers = new ArrayList<>();- NullPointer 방지
- 바로 add 가능
5. PersistentBag
- JPA가 내부적으로 사용하는 컬렉션
- Lazy + Dirty Checking 지원
👉 직접 만들 필요 없음
6. @Transactional 역할
- 트랜잭션 유지
- LAZY 정상 동작
- 테스트 롤백 가능
7. 도메인 분리
- question, answer 등 기능별 패키지 분리
👉 유지보수 쉬워짐
8. Thymeleaf 도입
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")- JSP 대체
- HTML 기반 템플릿
9. Model 객체
model.addAttribute("questionList", list);- 컨트롤러 → 뷰 데이터 전달
10. 주요 문법
th:text
th:each
th:if
th:href👉 JSP보다 훨씬 깔끔
11. 리스트 화면
<tr th:each="q : ${questionList}">
<td th:text="${q.subject}"></td>
</tr>12. 상세 페이지
<h1 th:text="${question.subject}"></h1>13. URL 설계
<a th:href="@{|/question/detail/${question.id}|}">👉 path variable 방식
✅ 정리
- 연관관계는 객체지향적으로 처리하는 것이 좋다.
- LAZY 로딩이 기본이며 성능상 유리하다.
- Thymeleaf는 JSP보다 가독성과 유지보수가 좋다.
- Controller → Model → View 흐름이 명확해졌다.