스프링 부트 개발 입문 7장

Tamszero·2025년 7월 18일

ECC

목록 보기
15/17

7장 - 게시글 수정하기: Update

7.1 - 데이터 수정 과정

  • <수정 페이지> 만들고 기존 데이터 불러오기

    	1. <상세페이지> 에서 edit 버튼 클릭하기
    1. 컨트롤러가 해당 글의 id로 DB에서 데이터 가져오기
    2. 가져온 데이터를 모델에 등록
    3. 등록된 데이터를 <수정페이지>에서 보여주기
  • 데이터를 수정해 DB에 반영 후 <상세페이지>로 리다이렉트하기

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

7.2 - <수정 페이지> 만들기

7.2.1 - Edit버튼 만들기

show.mustache 파일에 들어가
/table 폼 코드 아래에 아래 코드를 작성하여 버튼을 만든다.

CSS를 적용해 속성 추가
<a href="/articles/{{article.id}}/edit" class="btn btn-primary">Edit</a>

{{article.id}} -> 각 id값으로 페이지 이동
이 때, article.id로 작성하지 않고 그냥 id로 작성하기 위해서는
폼 태그를 {{#article}},{{/article}}로 감싼다.

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

Edit 버튼을 누르면 Edit요청을 받아 데이터를 가져오도록 컨트롤러를 작성해보자

  • 컨트롤러에 edit() 메서드 작성
    1. 맨 아래에 edit()메서드 추가

    1. @GetMapping 어노테이션 작성, URL은 "/articles/{id}/edit"으로 받기
    2. findBiId(id)를 통해 수정할 데이터를 가져오기
        Article articleEntity = articleRepository.findById(id).orElse(null);
    3. 메서드 매개면수에 @PathVariabble Long id를 추가해주기
    4. 모델에 데이터 등록하기
        model.addAttribute("article", articleEntity);
    5. 뷰 페이지 설정하기 -> return "articles/edit";
  • edit.mustache 파일 작성
    1. 푸터, 헤더 샌드위치 구조 만들기

    1. new.mustache파일의 컨테이너 부분을 복사해 붙여넣고 action값은 공백으로, href는 아래와 같이 수정해준다
        <form class="container" action="" method="post">
        (중략)
        <a href="/articles/{{article.id}}">Back</a> -> Back버튼 
  • 수정 페이지에 기존 내용 나오게 하기
    edit.mustache에 제목은 input, 내용은 textarea value="{{article.title}}", {{article.content}}속성 추가하기

    	```java

    <input type="text" class="form-control" name="title" value="{{article.title}}"
    (중략)

    
    		이 때, article. ~~로 작성하기 싫으면 폼태그 article로 감싸기
    

7.3 - 수정 데이터를 DB에 갱신하기

7.3.1 - HTTP 메서드

CRUD(Create Read Update Delete)

  • HTTP의 대표적인 메서드
    1. post: 데이터 생성 요청
    1. GET: 데이터 조회 요청
    2. PATCH(PUT): 데이터 수정 요청 -> 현재 폼 태그에선 지원하지 않음
    3. DELETE: 데이터 삭제 요청

7.3.2 - 더미 데이터 설정하기**

서버 재시작마다 데이터를 입력하기 귀찮으니 더미 데이터를 생성해두자.

src > main > resource에 data.sql을 생성, 아래 코드 작성하여 데이터 추가

```sql
INSERT INTO article(id, title, content) VALUES(1, '가가가가', '1111');
INSERT INTO article(id, title, content) VALUES(2, '나나나나', '2222');
INSERT INTO article(id, title, content) VALUES(3, '다다다다', '3333');
```

데이터 초기화 사용은 추가설정필요
src > main > resource > application.properties 를 열어 아래 옵션 추가

```java
datasource-initializaion=true
```

7.3.3 - <수정 페이지> 변경하기

  • edit.mustache 파일의 폼태그 수정
    1. action="/articles/update" 로 메서드는 post로 연결시킴
    2. input 태그를 통해 서버로 보낼 id 추가해주기
       <input name="id" type="hidden" value="{{id}}">
       //타입을 hidden으로 하면 화면에 표시를하지 X
       ```

7.3.4 - 수정 데이터 받아오기

  • 컨트롤러에 update() 메서드 작성
    1. @PostMapping("/articles/update") -> Post로 해당 URL 요청을 받게하기

    1. 수정 데이터를 DTO에 담기
      -> update() 메서드의 매개변수로 DTO를 담아온다
      업로드중..

    2. 수정 폼 input에 id를 추가하였으므로 dto에도 id 변수를 추가해줘야함.

    3. 확인을 위해 log찍어보기

        log.info(form.toString());
    4. 로그가 잘 찍힌다면 이제 DTO를 엔티티로 변환하기

        Article articleEntity = form.toEntity();
        log.info(articleEntity.toString());
    5. 엔티티를 DB에 저장하기 -> 먼저 기존 데이터를 가져온 후 기존 데이터를 갱신해야함

        //DB에서 기존 데이터 가져오기 
        Article target = articleRepository.findById(articleEntity.getID()).orElse(null); 
        
        //기존 데이터 값 갱신하기 
        if(target != null){
        	articleRepository.save(articleEntity);
            }
    6. 수정 결과 페이지로 리다이렉트하기

      		```java

      return "redirect:/article/" + articleEntity.getID();

      		```
profile
공부로그

0개의 댓글