Day 42 - Spring Boot pt.2

haxxru log;·2026년 4월 29일
post-thumbnail

이 글은 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 흐름이 명확해졌다.

0개의 댓글