dew's CSE Studying
스프링부트3 백엔드 개발 6~8장 본문
6장 게시판 내 페이지 이동하기
6.1 링크와 리다이렉트란
링크(link): 미리 정해 놓은 요청을 간편히 전송하는 기능
-페이지 이동을 위해 사용
-HTML의 <a>또는 <form> 태그로 작성
-클라이언트가 링크를 통해 어느 페이지로 이동하겠다고 요청하면 서버는 결과 페이지를 응답한다
리다이렉트(redirect): 클라이언트가 보낸 요청을 마친 후 계속해서 처리할 다음 요청 주소를 재지시하는 것
6.2 링크와 리다이렉트를 이용해 페이지 연결하기
6.2.1 새 글 작성 링크 만들기
index.mustach에 이 링크를 추가해주었다.
<a href="/articles/new">New Article</a>
6.2.2 <입력페이지>-><목록페이지> 돌아가기
입력페이지의 뷰파일인 new.mustach에 해당 코드를 추가해주었다
<a href="/articles">Back</a>
6.2.3 <입력 페이지>-><상세페이지> 이동하기
6.2.4 <상세 페이지>-><목록 페이지> 돌아가기
ArticleController을 확인해보니 show.mustach로 연결된다고 확인할 수 있다.
show.mustach에 해당 코드를 추가해줬다.
<a href="/articles">Go to Article</a>
6.2.5 <목록 페이지>-><상세 페이지> 이동하기
이번엔 목록에서 제목을 클릭하면 해당 글의 상세 페이지로 연결되도록 코드를 추가해보자
7장 게시글 수정하기: Update
7.1 데이터 수정 과정
데이터 수정 실습
1단계: <수정 페이지> 만들고 기존 데이터 불러오기
- <상세 페이지에서> Edit 버튼을 클릭한다
- 요청을 받은 컨트롤러는 해당 글의 id로 DB에서 데이터를 찾아 가져온다
- 컨트롤러는 가져온 데이터를 뷰에서 사용할 수 있도록 모델에 등록한다
- 모델에 등록된 데이터를 <수정 페이지>에서 보여준다. 그러면 사용자가 내용을 수정할 수 있는 상태가 된다
2단계: 데이터를 수정해 DB에 반영한 후 결과를 볼 수 있게 <상세 페이지>로 리다이렉드
- 폼 데이터(수정 요청 데이터)를 DTO에 담아 컨트롤러에서 받는다
- DTO를 엔티티로 변환한다
- DB에서 기존 데이터를 수정 데이터로 갱신한다
- 수정 데이터를 <상세 페이지>로 리다이렉트한다
7.2 <수정 페이지> 만들기
7.2.1 <상세 페이지>에 Edit 버튼 만들기
상세 페이지를 나타내는 show.mustach에 해당 코드를 추가해준다
<a href="/articles/{{article.id}}/edit" class="btn btn-primary">Edit</a>
7.2.2 Edit 요청을 받아 데이터 가져오기
edit()메서드 기본 틀 만들기
ArticleControlloer에 edit() 메소드 추가
@GetMapping("/articles/{id}/edit")
public String edit() {
// 뷰 페이지 설정하기
return "articles/edit";
}
수정할 데이터 가져오기
-DB에서 데이터를 가져올 때는 리파지터리르 사용한다(이경우 articleRepository의 findById(id) 메서드로 데이터를 찾아 가져온다)
-데이터를 찾지 못하면 null 반환, 찾으면 Article 타입의 articleEntity로 저장
모델에 데이터 등록하기
-DB에서 데이터를 가져왔으니 뷰 페이지에서 사용할 수 있도록 모델에 데이터를 등록한다
7.2.3 수정 폼 만들기
edit.mustach를 만들어보자~
Edit을 눌렀을 때 아직은 해당 데이터가 안 뜨고 빈 공백이 뜬다
7.3 수정 데이터를 DB에 갱신하기
클라이언트와 서버 간 처리 흐름의 4가지 기술
- MVC(Model-View-Controller): 서버 역할을 분담해 처리하는 기법
- JPA(Java Persistence API): 서버와 DB 간 소통에 관여하는 기술
- SQL(Structed Query Language): DB 데이터를 관리하는 언어
- HTTP(HyperText Transfer Protocol): 데이터를 주고받기 위한 통신규약
7.3.1 HTTP 메서드
프로토콜(protocol): 컴퓨터 간에 원활하게 통신하기 위해 사용하는 전세계 표준
-기기 간에 각종 신호 처리방법, 오류처리, 암호, 인증 방식 등을 규정함
-종류: FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol), HTTP(HyperText Transfer Protocol)...
HTTP: 웹 서비스에 사용하는 프로토콜
-클라이언트의 다양한 요청을 메서드를 통해 서버로 보내는 역할
-여러가지 메서드
- POST: 데이터 생성 요청(INSERT)
- GET: 데이터 조회 요청(SELECT)
- PATCH(PUT): 데이터 수정 요청(UPDATE)
- DELETE: 데이터 삭제 요청(DELETE)
지금은 수정 후 submit 누르면 에러페이지가 뜬다! 이제 수정된 제목과 내용이 반영된 페이지가 나오도록 구현해보자
7.3.2 더미 데이터 설정하기
더미 데이터를 자동 생성하도록 구현해보자
7.3.3 <수정 페이지> 변경하기
7.3.4 수정데이터 받아오기
update() 메서드 기본 틀 만들기
@PostMapping("/articles/update")
public String update() {
return "";
}
수정 데이터를 DTO에 담기
@PostMapping("/articles/update")
public String update(ArticleForm form) { // 매개 변수로 DTO 받아오기
return "";
}
수정폼에서 전송한 데이터는 DTO로 받는다.
7.3.5 DB에 저장하고 결과 페이지로 리다이렉트 하기
최종적으로 DB에 DTO를 저장하기
1.DTO를 엔터티로 변환하기
2.엔터티를 DB에 저장하기
3.수정결과 페이지로 리다이렉트하기
7.3.6 SQL문으로 직접 DB 갱신하기
h2-console에서도 명령어를 통해 테이블 안 내용을 바꿀 수 있다는 것을 확인했다
8장 게시글 삭제하기: Delete
8.1 데이터 삭제 과정
- 클라이언트가 HTTP 메서드로 특정 게시글의 삭제를 요청한다
- 삭제 요청을 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터를 찾아 삭제한다. 이 작업은 기존 데이터가 있는 경우에만 수행된다
- 삭제가 완료되었다면 클라이언트를 결과 페이지로 리다이렉트한다
- 이때 RedirectAttributes를 활용하여 삭제 완료 메시지를 같이 띄워준다
8.2 데이터 삭제하기
8.2.1 Delete 버튼 추가하기
show.mustache에 추가해준다
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">Delete</a>
8.2.2 Delete 요청을 받아 데이터 삭제하기
delete() 메서드 기본 틀 만들기
1.삭제할 대상 가져오기
2.대상 엔터티 삭제하기
3.결과 페이지로 리다이렉트하기
8.2.3 삭제 완료 메시지 남기기
8.2.4 SQL문으로 직접 DB 삭제하기
'3-1 > [inflearn]스프링입문' 카테고리의 다른 글
스프링부트3 백엔드 12~14장 (1) | 2024.11.30 |
---|---|
스프링부트3 자바 백엔드 9장~11장 (0) | 2024.11.23 |
스프링부트3 백엔드 개발 3~5장 (1) | 2024.11.09 |
Part 1 스프링 부트 개요 (6) | 2024.11.02 |
[스프링입문] 섹션7 (6) | 2024.10.12 |