제 3장. 게시판 만들고 새 글 작성하기: Create

강연주·2023년 10월 12일
0
post-thumbnail

폼 데이터 받기

form 태그에 실어 보낸 데이터는 서버의 컨트롤러가 객체(DTO)에 담아 받습니다.

DTO 사용
DTO는 계층 간 전달에 사용된다. 도메인 모델은 UI에 필요하지 않은 정보까지 가지고 있으므로, 도메인 모델을 캡슐화하여 보호하기 위해 DTO를 사용한다!

ArticleDto.java

form 태그에 실어 보낸 데이터를 담을 객체를 선언해줍니다.

new.mustache

ArticleDto의 필드명과 일치하도록 name 속성을 지정합니다.

ArticleController

ArticleDto로 변환된 form 데이터를 처리할 Controller를 생성합니다.

@ModelAttribute
스프링은 요청 파라미터 정보(form 데이터)를 받아서 그 정보를 바탕으로 객체를 만들어주는 과정을 자동화 해주는 @ModelAttribute 기능을 제공한다. 위 예제에서는 @ModelAttribute 기능이 생략되어있는 모습이다.

DTO를 데이터베이스에 저장하기

DB에 데이터를 기록하기 위해서는 SQL문을 DB에 전달해주어야 합니다. DB와 커넥션 연결을 담당하는 JDBC에게 SQL을 전달하는 기술에는 SQL Mapper와 ORM 기술이 있습니다.

우리는 JPA를 사용하여 데이터베이스에 SQL문을 전달해봅시다.

엔티티 클래스 생성

먼저 엔티티 클래스를 만들어줍니다.

  • @Entity가 붙은 클래스는 JPA가 관리하므로 JPA를 이용하여 테이블과 매핑할 클래스는 @Entity가 필수이다.
  • @Id 선언 시 기본 키로 매핑된다.
  • @GeneratedValue 선언 시 id 값이 자동으로 생성된다.
  • @Column 선언 시 테이블의 칼럼 값으로 매핑된다.

    @GeneratedValue 전략
    1.GenerationType.IDENTITY: 데이터베이스의 IDENTITY 컬럼을 이용하여 기본 키 값을 생성 -> JPA에서 미리 값 할당 불가! 영속성 컨텍스트에 저장 후 식별자 할당
    2.GenerationType.SEQUENCE: 데이터베이스의 시퀀스 객체를 사용하여 기본 키 값을 생성 -> 엔티티가 저장되기 전에 미리 할당
    3.GenerationType.TABLE : 데이터베이스의 테이블을 이용하여 기본 키 값을 생성 -> 엔티티를 저장하기 전에 미리 할당
    **MySQL에서는 GenerationType.IDENTITY 전략을 흔히 사용!IDENTITY 전략을 쓰면서 자꾸 났던 null 오류는 테이블을 한번 drop하고 다시 create 하면 잘 적용된다!

추가로 ArticleDto 클래스에 Article 엔티티로 변환하는 메서드를 생성한다.

레포지토리 생성

스프링 데이터 JPA를 사용하면 JpaRepository에서 제공하는 공통 CRUD를 사용 가능하다. 추가로 레포지토리 인터페이스를 구현한 클래스를 대신 생성해준다.
JpaRepository에 관리 대상의 엔티티 클래스 타입과 관리 대상 엔티티의 대푯값 타입을 전달해주면 된다.

객체 주입하기

컨트롤러에서 Dto 객체를 엔티티로 변환 후 레토지토리를 통해 DB에 저장해보자.

의존관계 자동 주입
스프링 컨테이너의 역할은 크게 두 가지이다.
1. 스프링 빈 생성 및 등록
2. 의존관계 주입
의존 관계 주입은 생성자 주입, setter 주입, 필드 주입, 일반 메서드 주입이 있다. 롬복 라이브러리의 @RequiredArgContructor를 이용하여 생성자 주입을 통해 인터페이스의 구현체를 자동으로 주입해주자!

데이터베이스 연결하기

스프링에서 H2 데이터베이스에 접속해보자.
다음과 같이 application.yml 파일에 연결한 데이터베이스 정보를 입력한 후 개발 단계에서 이용하는 update ddl문을 이용하자.(테이블 자동 생성 및 업데이트)

실행 후 h2 데이터베이스 확인 시 정보가 잘 들어간 것을 볼 수 있다!!

profile
백엔드 개발자 준비중

0개의 댓글