url을 통해 요청을 매핑하는 handler를 @Controller 애노테이션을 이용하여 구현해준다.
먼저 루트요청("/")일 경우, 메인페이지(list.html)로 연결해주고, 글쓰기를 클릭하면("/post" 요청) write.html로 연결해준다.
실행시켜보면 아래와 같이 실행된다.
제목, 작성자, 내용을 쓰면 데이터가 DB에 저장되어야한다. '등록' 버튼을 누르면, Post방식으로 요청이 온다.
Post방식의 요청을 받아서, 실제로는 Service에서 처리되도록 할 것이다.
Dto를 사용해 Controller와 Service 사이에서 데이터를 주고 받는다.
Service를 주입받아서 사용한다.
BoardDto와 BoardService는 구현해주어야 한다.
Service는 실제로 비즈니스 로직을 시행해주는 역할을 한다.
repository를 이용하여 실제로 저장해줘야한다.
따라서 먼저 Entity와 Repository를 만들어줘야한다.
Entity는 DB 테이블과 매핑되는 객체이다.
@Builder는 setter 대신 사용하는 것이다.
@Table 애노테이션으로 DB 테이블 이름을 정해줄 수 있지만, 없는 경우 클래스 이름으로 자동 매핑된다.
extends하고 있는 TimeEntity는 데이터 조작 시 자동으로 날짜를 수정해주는 JPA의 Auditing 기능을 사용하는 entity이다.
JPA Auditing 기능을 사용하기 위해 main 클래스에 @EnableJpaAuditing 애노테이션을 붙여준다.
Repository는 데이터 조작을 담당한다. interface로 생성하며, JpaRepository를 extends한다. JpaRepository의 값은 매핑할 entity와 id의 타입이다.
만들어준 repository를 이용하여, service를 구현해보겠다. Service는 위에서 말했듯 실제로 비즈니스 로직을 시행해주는 역할을 한다.
글쓰기 form에서 내용입력 후, 등록을 누르면 post 형식으로 요청이 오고, BoardService의 savePost를 실행하게되는데, 따라서 savePost를 구현해줘야한다.
savePost는 Repository를 통해 실제로 데이터를 저장하게 된다. (repository의 save는 JpaRepository -> PagingAndSortingRepository -> CrudRepository 의 인터페이스이다.)
Controller와 Service 사이에서 데이터를 주고 받는 DTO를 구현해줘야한다.
DTO를 통해 service의 savePost에서 Repository에 데이터를 집어넣는다.
toEntity()는 dto에서 필요한 부분을 빌더패턴을 통해 entity로 만드는 역할이다.
애플리케이션을 실행하고, 글쓰기에서 데이터를 입력하면 mysql에 입력한 데이터가 들어감을 볼 수 있다.
reference: https://victorydntmd.tistory.com/326