3. 스프링부트와 타임리프로 게시판 만들기 - 글 작성 처리

yeom yaloo·2022년 7월 13일
0
post-thumbnail

게시물 작성 폼 수정

html 수정 - form 테그


<body>
    <div class="layout">
        <form action="/board/writepro" method="post">
            <input name="title" type="text">
            <textarea name="content"></textarea>
            <button type="submit">작성</button>
        </form>
    </div>
</body>
  • form 테그로 감싸고 버튼을 누르면 작성된 title과 content가 컨트롤러로 넘어가게 된다.
  • 이때 주소는 localhost:8080/board/writedo로 넘어가게 된다.(해당 페이지에서 submit된 데이터들(title, content)은 PostMapping된 uri로 넘어간다.)
  • 데이터의 변경이 있을 때 POST를 사용하고 웹페이지의 접근을 하는 등의 데이터 변경이 없을 땐 GET을 사용한다.
  • 컨트롤러 추가

    @PostMapping("/board/writepro")
        public String boardwritePro(Board board){ //String title, String content
            System.out.println("제목: " +board.getTitle());
            System.out.println("내용: " +board.getContent());
            return "";
        }

    Entity

    package com.study.board.entity;
    
    import lombok.Data;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    
    //DB 테이블 = java Entity class
    @Entity
    @Data
    public class Board {
    
        @Id //primary key
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
    
        private String title;
    
        private String content;
    
    }
  • 게시물 작성 폼에서 받은 데이터를 DB에 저장해서 사용하기 위해서 Entity와 Repository 패키지를 생성해준다.
  • Entity란?

    Entity는 데이터베이스에 테이블과 같은 의미로 쓰이며 자바에서는 테이블을 엔티티라고 한다.

    수정 후 화면


    👉 해당 뷰가 아직은 없어서 이렇게 뜨지만 생성해주면 정상적으로 해당 뷰를 반환해준다.

    Repository

    package com.study.board.repository;
    
    
    import com.study.board.entity.Board;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    //<Entity class, primary key type>
    public interface BoardRepository extends JpaRepository<Board, Integer> {
    
     //레포지토리 -> 서비스에서 이용
    }
    

    JpaRespository를 상속받아 사용하게 되면 save나 find처럼 우리가 많이 사용하고 자주 사용하는 메소드들이 이미 구현되어 있기 때문에 더욱 펴리하게 사용할 수 있다.

    Service

    package com.study.board.service;
    
    import com.study.board.entity.Board;
    import com.study.board.repository.BoardRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    
    //서비스 -> 컨트롤러에서 이용
    @Service
    public class BoardService {
        @Autowired
        private BoardRepository boardRepository;
    
    
        public void write(Board board){
            //엔티티를 이 안에 넣어주는 것
            boardRepository.save(board);
        }
    
    }
    

    javax.persistence error

    이 경우는 jpa 드라이브 의존관계 설정을해주지 않아서 생기는 문제일 수가 있다. build.gradle을 확인 한 후 의존성 설정을 해주면 해결된다.(@Entity가 안 될때)

    @Controller와 @Service와 @Repository

    기본적으로 계층을 나눠서 개발하는 경우엔 repository에 있는 정보를 service가 사용하고 service로 만든 비지니스 로직을 controller에서 사용한다.

    profile
    즐겁고 괴로운 개발😎

    0개의 댓글