1) 화면 만들기
src > main > resources > templates 내에 view단을 형성한다.
.
thymeleaf를 사용 할 예정이기 때문에 jsp 파일이 아닌 html파일로 화면을 구성해줬다.
타임리프 기본 사용 법 검색하면 나온다. 쓰기 전에 하나하나 공부하는 것보다는 일단 부딪혀가며 필요할 때 익히는게 이해도 잘 되지 않을까..? 그래서 당장은 화면 구성을 위해 필요한 레이아웃만 알고 가기.
왜 이런 기능을 쓰는가 하면, 홈페이지에 존재하는 메뉴버튼은 대게 어떤 페이지로 이동해ㄷ ㅗ항상 상단에 따라 나온다.
이렇듯 똑같이 반복되는 화면들은 뭐다? 똑 같은 코드를 매 페이지마다 적어줘야 하는데
총 10페이지라 그러면 수정 할 때도 10번을 똑같은 코드를 수정해야 한다. 이런 번거로움을 줄이기 위해 하나의 레이아웃을 짜놓고 그걸 조합해서 만드는 거다.
JSP를 사용했을 땐 하나의 html에서 여러페이지에서 중복되어 사용되는 코드를 별도의 페이지로 만들어
3번째 그림처럼 필요할 때마다 불러와 붙여서 사용했다.
<jsp:include page="header.jsp" />
타임리프는 비슷하면서도 다른점이 있는데 차차 알아가기..ㅎㅎ
1-1) layout dependencies 추가
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' /* Thymeleaf Layout */
레이아웃을 사용하기 위하여 build.gradle 파일을 열어 위 코드를 붙여 넣어준다.
1-2) 화면구성
header.html 만들어주고
footer.html
게시판 만들거니깐 board.html
이렇게 3개를일단 만들기
모든 html 상단에는 thymeleaf를 선언해서 연결해주고
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
자유롭게 코딩하되 레이아웃 설정
html 태그에 th:fragment="명칭" 을 넣어주기
이 코드를 이제 불러올 건데
불러올 때는 또 html 태그에 th:replace="~{경로::명칭}" 으로 불러올 수 있다.
근데 여기서 다른거 jsp는 html 자체를 불러와서 head부터 쭉 읽어들이는데 tymeleaf는 s내가 fragment어쩌고 설정해놓은 부분부터 그 태그가 감싸는 부분까지만 불러오기 때문에 head에 있는 스타일 이라던지 못 읽어서 가져온다.
이거의 해결 방법
1. board.html header에 스타일태그를 붙여 넣는다.
안될건 없지? 하지만 굳이 싶은 번거로운 방법
2.
3) 객체 만들기
src > main > java > com.home.[프로젝트명]
View 에서 무언가의 요청이 들어왔다면 ex) 이 정보로 회원가입 할래!
이 정보를 담을 보따리가 필요한데 이 보따리는 class 파일로 생성해주면 된다.
패키지 적절하게 분류 해주고 나는 게시판, 회원, 마이페이지 영역 일단 이렇게 3개로 분류를 해뒀다.
VO 클래스를 생성 후
필요한 필드를 기재 해주고 getter setter 등등 롬복 어노테이션으로 만들어주면 된다.
요즘은 요청 받을 데이터를 담을 requset 객체와 응답할 데이터를 담은 response 객체를 따로 만들기도 하고
@Data 어노테이션은 여러 보안 문제와 사용성의 문제가 있다고 지양하는 추세라고 한다.
깊게 알아보려다가 계속 이렇게 샛길로 빠지면 전체적인 틀 이해에 방해가 될 것 같아서
일단 기재만 해두고 원래 하던대로 프로젝트 생성..!
4) Controller 만들기
src > main > java > com.home.[프로젝트명]
package com.home.recordstory.member;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
}
4-1) Controller에 필요한 어노테이션
sts3 을 쓰면서는 왼쪽처럼 @Autowired 어노테이션으로 필드에 주입하여 사용했었는데, 이제 이것도 권장하지 않는 방법이라고 한다. 그래서 쓸 수 있는게 오른쪽과 같은 코드다. @Controller임을 명시하는 어노테이션과 @RequiredArgsConstructor 어노테이션을 같이 기재해주면 된다. Spring에서 권장하는 방법은 필드 주입 방법이 아닌 객체가 필요할 때마다 객체 선언 후 생성자를 생성하는 방법인데, 생성자를 일일이 다 만들기 귀찮으니 @RequiredArgsConstructor을 써주면 final로 선언된 모든 객체에 대한 생성자를 자동으로 만들어준다.
4-2) 매핑
@RequestMappin > @GetMapping 또는 @PostMapping 사용
5) Service 만들기
6) DAO 만들기
7) Mappper 만들고 연동하기
1) 객체 만들기
response와 request 객체를 따로 만든다
2) 화면단
레거시에서 쓰던 jsp 파일은 html + thymeleaf를 이용 할 예정이다.
MVC에서 V (view) 즉 사용자에게 보여질 화면 처리는
src > main > resources > templates에 저장한다.
3) 화면에서 사용자한테 받은 요청을 받아 처리하는 Controller
4)
1) DB랑 연동할 테이블 만들어주기 (자유)
일단 나는 mariaDB를 사용중이다. 인텔리제이에서 바로 필요한 테이블을 생성해줬다. 인텔리제이랑 DB 연동하는 방법은
블로그에 기술해뒀다. 링크로 확인! 기존에 사용하는 DB툴이 편하다면 어디서 만들던 상관없다. 나는 IDE 하나로 해결 할 수 있다는게 너무 신기해서 다 연결해뒀다.ㅋㅋㅋㅋㅋ
CREATE TABLE BOARD (
BOARDNO BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '글번호',
TITLE VARCHAR(300) NOT NULL COMMENT '글제목',
CONTENT VARCHAR(3000) NOT NULL COMMENT '글내용',
WRITER VARCHAR(30) NOT NULL COMMENT '작성자',
CATEGORY VARCHAR(30) NOT NULL COMMENT '카테고리',
STATUS CHAR(1) DEFAULT '1' COMMENT '상태 0:삭제',
CREATE_DATE DATETIME NOT NULL DEFAULT NOW() COMMENT '작성일',
VIEW INT DEFAULT 0 COMMENT '조회수'
) CHARACTER SET utf8mb4 COMMENT '게시판';
나는 실제로 사용할 거라 위 처럼 내가 이용 할 테이블을 만들어 줬다. 명령어로 테이블 잘 만들어졌는지 확인 하면 끝!
2) 객체 생성
나 할 때는 이거 합산해서 했는데.... 객체를 따로 만든다고 한다... 왜?
걍 vo 하나 만들어서 받을거 보낼거 때려박았는데 => 이유 찾기
3) DB랑 프로그램간의 쿼리를 전달할 Mapper 파일 생성
4) MyBatis 다운로드
file > Settings(ctrl + alt + S) > Plugin > MyBatisX 검색해서 다운로드
5) MVC 패턴 만들기