dew's CSE Studying

스프링부트3 백엔드 개발 6~8장 본문

3-1/[inflearn]스프링입문

스프링부트3 백엔드 개발 6~8장

dew₍ᐢ.ˬ.⑅ᐢ₎ 2024. 11. 16. 01:42

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>

submit 버튼 옆에 목록 페이지로 돌아가는 Back링크가 생성되었다

 

6.2.3 <입력 페이지>-><상세페이지> 이동하기

ArticleController의 return칸에 리다이렉트하고 싶은 링크를 추가했다

 

6.2.4 <상세 페이지>-><목록 페이지> 돌아가기

ArticleController을 확인해보니 show.mustach로 연결된다고 확인할 수 있다.

show.mustach에 해당 코드를 추가해줬다.

<a href="/articles">Go to Article</a>

Go to Article 링크와 연결되는 페이지

6.2.5 <목록 페이지>-><상세 페이지> 이동하기

이번엔 목록에서 제목을 클릭하면 해당 글의 상세 페이지로 연결되도록 코드를 추가해보자

index.mustach의 title 부분에 <a> 태그를 추가해주었다
완성~

 

7장 게시글 수정하기: Update

7.1 데이터 수정 과정

데이터 수정 실습

 

1단계: <수정 페이지> 만들고 기존 데이터 불러오기

  1. <상세 페이지에서> Edit 버튼을 클릭한다
  2. 요청을 받은 컨트롤러는 해당 글의 id로 DB에서 데이터를 찾아 가져온다
  3. 컨트롤러는 가져온 데이터를 뷰에서 사용할 수 있도록 모델에 등록한다
  4. 모델에 등록된 데이터를 <수정 페이지>에서 보여준다. 그러면 사용자가 내용을 수정할 수 있는 상태가 된다

2단계: 데이터를 수정해 DB에 반영한 후 결과를 볼 수 있게 <상세 페이지>로 리다이렉드

  1. 폼 데이터(수정 요청 데이터)를 DTO에 담아 컨트롤러에서 받는다
  2. DTO를 엔티티로 변환한다
  3. DB에서 기존 데이터를 수정 데이터로 갱신한다
  4. 수정 데이터를 <상세 페이지>로 리다이렉트한다

 

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에서 데이터를 가져왔으니 뷰 페이지에서 사용할 수 있도록 모델에 데이터를 등록한다

article이란 이름으로 articleEntity를 등록해주었다

 

7.2.3 수정 폼 만들기

edit.mustach를 만들어보자~

Edit을 눌렀을 때 아직은 해당 데이터가 안 뜨고 빈 공백이 뜬다

text부분에 value값과 textarea 부분에 content변수를 연결해주었다
이제 Edit을 누르면 DB의 데이터가 뜬다!

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로 받는다.

DTO를 정의하는 ArticleForm에도 id를 추가해준다
log를 통해 수정시 데이터를 전달받은 걸 확인할 수 있다

 

7.3.5 DB에 저장하고 결과 페이지로 리다이렉트 하기

 

최종적으로 DB에 DTO를 저장하기

1.DTO를 엔터티로 변환하기
2.엔터티를 DB에 저장하기
3.수정결과 페이지로 리다이렉트하기

 

h2-console에서 수정된 결과를 확인할 수 있다

 

링크 연결해주기~
수정 후에 수정된 상세페이지 반환 성공!

 

7.3.6 SQL문으로 직접 DB 갱신하기

h2-console에서도 명령어를 통해 테이블 안 내용을 바꿀 수 있다는 것을 확인했다

 

8장 게시글 삭제하기: Delete

8.1 데이터 삭제 과정

  1. 클라이언트가 HTTP 메서드로 특정 게시글의 삭제를 요청한다
  2. 삭제 요청을 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터를 찾아 삭제한다. 이 작업은 기존 데이터가 있는 경우에만 수행된다
  3. 삭제가 완료되었다면 클라이언트를 결과 페이지로 리다이렉트한다
  4. 이때 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 삭제하기

h2-console 명령문을 통해 3번 데이터를 삭제해보았다