본문 바로가기
Backend/Spring

[Spring] 게시글 수정하기 : Update

by 희디 2023. 8. 22.

데이터 수정 과정 

1. 수정 페이지 만들고 기존 데이터 불러오기 

2. 데이터를 수정해 DB에 반영한 후(@PostMapping(action 속성 링크))

    결과를 볼 수 있게 상세 페이지로 리다이렉트(return "redirect~")

 

1번 과정 (사용자가 내용 수정할 수 있는 상태로 만드는 과정)

1. 상세 페이지에서 edit 페이지 만들고 클릭

2. 요청을 받은 컨트롤러는 해당 글의 id로 DB에서 데이터를 찾아 가져오기

3. 컨트롤러는 가져온 데이터를 뷰에서 사용할 수 있게 모델에 등록하기

4. 모델에 등록된 데이터를 "수정 페이지"에서 보여주기 

 

2번 과정 

1. 폼 데이터(수정 요청 데이터)를 DTO에 담아 컨트롤러에서 받기

2. DTO를 엔티티로 변환 

3. DB에서 기존 데이터를 수정 데이터로 갱신 

4. 수정 데이터를 "상세페이지"로 리다이렉트


편집 페이지 만들기

/articles/1 가 주소인 편집 버튼이 생긴 뷰 페이지

/articles/{id}에서 show.mustache를 반환하므로 show.mustache에서 수정하기 

a태그로 링크이지만, css로 버튼모양으로 만들어줬다. 

 

 

Edit 요청을 받아 데이터 가져오기

edit 버튼을 누르면 에러가 뜬다. 왜냐? edit 요청을 받을 컨트롤러를 만들지 않았기 때문. 

 

클라이언트와 서버 간 처리 흐름을 크게 4가지 기술로 나누어 보면 아래와 같다. 

 

1. MVC(Model-View-Controller) : 서버 역할을 분담해 처리하는 기법 

2. JPA(Java persistence API) : 서버와 DB간 소통에 관여하는 기술 

3. SQL(Structured Query Language) : DB 데이터를 관리하는 언어

4. HTTP(HyperText Transfer Protocol) : 데이터를 주고 받기 위한 통신 규약 

출처 : [길벗] 스프링부트3 자바 백엔드 개발 입문 210pg. 사진 찍어서 올렸습니다.

MVC, JPA, SQL이 유기적으로 동작하는 것은, HTTP의 요청과 응답으로 시작되고 끝난다. 

 

HTTP 메서드 

클라이언트와 서버 간에 데이터를 전송할 때는 다양한 통신 규약(*프로토콜)을 따른다. 

(* 컴퓨터 간에 원활하게 통신하기 위해 사용하는 전 세계 표준.

   기기 간에 각종 신호 처리 방법/오류처리/암호/인증 방식 등 규정하고 있어

   이를 따라야만 오류나 지연없이 원활하게 통신 가능)

 

프로토콜의 종류 (기기와 목적에 따라서)

  • FTP(File Transfer Protocol) : 파일 전송을 위한 
  • SMTP(Simple Mail Transfer Protocol) : 이메일 전송을 위한 
  • HTTP(HyperText Transfer Protocol) : 웹 서비스에 사용하는 

.... 등등 있음. 

 

 

HTTP는 클라이언트의 다양한 요청을 메서드를 통해 서버로 보내는 역할을 함. 

1) POST : 데이터 생성 요청

2) GET : 데이터 조회 요청

3) PATCH(PUT) : 데이터 수정 요청

4) DELETE : 데이터 삭제 요청 

 

CRUD(Create, Read, Update, Delete) : 데이터 관리에서 가장 기본이 되는 동작

                                                             : SQL문으로 적용가능, 이 개념이 HTTP의 메서드에도 그대로 적용된다. 

 

데이터 관리 SQL HTTP
데이터 생성(Create) INSERT POST
데이터 조회(Read) SELECT GET
데이터 수정(Update) UPDATE PATCH(PUT)
데이터 삭제(Delete) DELETE DELETE

 

 

2번을 수정하려고 edit을 누르고 submit을 누르니 method not allowed란 에러가 뜬다. 

 

더미 데이터 (dummy data) : 서버를 껐다 켤 때마다 매번 데이터를 입력하는게 번거러워 더미 데이터 자동 생성하게.

                                           : 확장자를 sql로 설정한다. 

이렇게 설정하면 article 테이블에 id, title, content에 VALUES로 지정한 데이터를 삽입하겠다는 뜻. 

(서버를 껐다 켤때마다 데이터 3개가 자동으로 삽입된다.) 

 

form 태그는 옛날에 만들어진 태그이므로,  GET과 POST밖에 사용을 못 한다. 

 

이렇게 작성하면 수정 폼으로 title, content과 hidden 속성인 id를 서버에 전송할 수 있게 된다. 

 

 

 

 

 

하지만, 수정하고 submit을 눌렀을 때, 에러 메시지의 /articles/update로 이동하므로, 수정한 내용이 적용된 사이트로 이동시켜주기 위해서 redirect를 사용한다. 

 

// SQL로 데이터 수정하기 명령문 형식
UPDATE 테이블명 SET 속성명=변경할_값 WHERE 조건;

// 모든 데이터를 동일하게 바꾸고 싶을 때. 
UPDATE 테이블명 SET 속성명=변경할_값; 

// 특정 데이터만 바꾸고 싶을 때, WHERE로 조건 지정 
UPDATE 테이블명 SET 속성명=변경할_값 WHERE 조건;

 

 

[내용 출처] : https://www.gilbut.co.kr/book/view?bookcode=BN003778&keyword=%EC%8A%A4%ED%94%84%EB%A7%81&collection=GB_BOOK 

 

코딩 자율학습 스프링 부트 3 자바 백엔드 개발 입문

만들면서 배우는 친절한 백엔드 개발 자습서

www.gilbut.co.kr