[Spring] 프로젝트 구조 만들기

[Spring] 프로젝트 구조 만들기

Spring Data JPAThymeleaf에서 실습한 내용을 하나로 조합해 봅시다.


이 프로젝트에서는 앞서 실습한 Srping Data JPA와 Thymeleaf를 활용해 테이블이 하나로만 구성되는 Guest Book을 구성합니다.
이 Guest Book은 기본적인 CRUD 기능과 검색/페이징 기능을 가지는 웹 애플리케이션입니다.
이러한 Guest Book의 구현을 위해 목록 화면, 등록 화면, 조회 화면, 수정/삭제 화면을 구현해야 합니다.



1. 프로젝트 생성



1

Java Version은 11로, JDK는 17로 설정했습니다.
사용할 라이브러리로 Thymeleaf, Lombok, Spring Data JPA, Spring Web, Spring Boot DevTools의 의존성을 추가합니다.

2. build.gradle 의존성 추가



2

bulid.gradle에 DB 관련 드라이버와 Thymeleaf에서 사용할 java8 날짜 라이브러리를 추가합니다.

3. application.properties



3

application.properties에 DB 관련 내용을 작성합니다.

4. 컨트롤러/화면 준비



4

Thymeleaf의 부트스트랩 템플릿 적용하기에서 사용한 템플릿을 그대로 가져온 뒤, src 폴더에 controller 패키지를 추가하고 GuestbookController 클래스를 추가합니다.
“/guest/”, “/guest/list” 두 URL 모두 “/guestbook/list”로 넘어갈 수 있도록 위의 그림과 같이 코드를 작성합니다.

5. list.html 작성



5

templates에 guestbook 패키지를 추가하고 list.html을 생성한 뒤 위와 같은 코드를 작성합니다.
basic.html을 이용하며 간단한 텍스트를 출력하는 내용의 코드입니다.

6. list.html 확인



6

“/guestbook/list”의 결과를 살펴보면 위와 같이 레이아웃이 적용된 것을 확인할 수 있습니다.

7. 자동으로 처리되는 날짜/시간 설정



7

엔티티 작업을 수행하면 데이터의 등록 시간과 수정 시간과 같은 자동으로 추가되고 변경되어야 하는 칼럼이 존재합니다. 이를 자동으로 처리해주는 어노테이션을 사용해 설정하려 합니다.
그림과 같은 경로에 entity 패키지를 추가한 뒤 BaseEntity 클래스를 작성합니다.
@MappedSuperClass 어노테이션이 적용된 클래스는 테이블로 생성되지 않습니다. 실제 테이블은 BaseEntity를 상속한 엔티티 클래스로 생성됩니다.
@CreatedDate는 엔티티의 생성 시간을 처리하고, @LastModifiedDate는 최종 수정 시간을 자동으로 처리합니다.

8. AuditingEntityListener 활성화



8

7번의 BaseEntity 클래스에서 @EntityListeners(value = { AuditingEntityListener.class})를 사용했습니다. 이는 JPA 내부에서 엔티티 객체가 생성/변경되는 것을 감지하는 어노테이션입니다.
이러한 AuditingEntityListener를 활성화시키기 위해서는 GuestbookApplication에 @EnableJpaAuditing 설정을 추가해야 합니다.

9. Guestbook 엔티티 작성



9

이제 엔티티를 작성하겠습니다.
entity 패키지에 Guestbook 엔티티 클래스를 작성합니다. 이 Guestbook 엔티티는 BaseEntity 클래스를 상속하도록 작성합니다.
Guestbook은 위의 그림과 같이 작성합니다. Guestbook의 내용은 이전에 작성한 Memo와 거의 유사합니다. 다만 Guestbook은 Memo와 달리 BaseEntity를 상속해 등록 시간과 수정 시간을 처리해주는 차이가 존재합니다.

10. GuestbookRepository 작성



10

엔티티 클래스 작성 이후 위의 그림과 같은 경로로 repository 패키지를 추가한 뒤 GuestbookRepository 인터페이스를 작성합니다.
GuestbookRepository는 JpaRepository를 상속받는 인터페이스입니다.


© 2022. All rights reserved.