Spring/Spring 프로젝트

[게시판 만들기] CRUD 흐름

2022. 9. 11. 17:55
목차
  1. 1.읽기(Read)
  2.  
  3. 2.삭제(Delete)
  4. 3.쓰기(Writer)
  5. 4.수정(Modify)

기능별 URI 정의

 CRUD를 수행하기 위해 기능별로 URL를 살펴보면 '/'이후 기능별로 URI가 다른 걸 확인할 수 있다. 메서드도 다른데 크게 GET과 POST로 메서드를 사용한다. 'GET'은 정보를 불러오는 데에 메서드로 쓰이고 'POST'는 정보를 입력하는데에 메서드가 쓰인다. 여기서 주목해야 할 점은 쓰기와 수정에서 GET,POST가 모두 쓰인다는 점이다.

 

 쓰기와 수정은 공통적으로 데이터를 '입력하기 전'에는 게시물을 읽어와야하고 게시물을 '입력한 후'에는 수정된 게시물을 저장해야한다. 그래서 게시물을 읽어올 때는 'GET'을 사용하고 게시물을 저장할 때는 'POST'를 사용한다. 

 

1.읽기(Read)

읽기(Read)의 흐름1

 

 ①게시판의 게시물(bno=533)을 누르게 되면 '/board/read?bno=533'을 'GET'요청하게 된다. GET요청을 받은 Controller는 read(Integer bno)메서드를 실행하고 ②'boardService.read(bno)'가 호출된다. boardService메서드로 인해 DB에서 bno=533에 해당하는 데이터를 읽어오고 Controller는 이것을 boardDto에 담아 board.jsp로 보낸다.

 

 

읽기(Read)의 흐름2

 

  bno=533에 해당하는 게시판을 읽고 다시 게시판으로 돌아가기 위해 목록 버튼을 누른다. ①목록 버튼을 누르면 BoardController로 /board/lsit 'GET'요청이 간다.Controller에서는 list()가 호출되고 list()는 페이지의 정보인 boardService.getPage(map)을 호출한다. 그러면 DB를 통해 해당 페이지의 데이터를 boardDto에 담아 Controller로 반환한다. 데이터는 list<BoardDto>에 담기고 처음 게시판의 위치로 화면이 이동한다.

 

 그런데 목록을 누르면 bno=533이 눌렸던 게시물의 page와 pageSize를 보여줘야 한다. 애초에 bno=533을 눌렀을 때 page와 pageSize의 값이 함께 전달 됐어야한다. 이를위해 model에 page와 pageSize의 정보를 Controller의 list()와 read()에 담는다.

 

 

2.삭제(Delete)

삭제의 흐름

 ①삭제를 누르면 /board/remove 'POST'요청을 한다. Contoller에서는 remove()가 호출되고 remove메서드는 ② boardService.remove(bno,writer)를 호출한다. 여기서 주목해야 할 점은 'writer'를 함께 호출했다는 점이다. 삭제와 수정은 오직 글쓴이만 삭제하고 수정할 수있다. 그래서 DB에서 writer의 정보도 함께 가져온다. 이 정보를 통해 삭제를 요청한 writer와 DB의 writer가 맞으면 해당 게시물의 remove메서드가 실행되고 ③Redirect를 통해 Controller는 list메서드를 호출한다. list()는 다시 DB로부터 페이지의 정보를 받고 이를 boardDto에 담아 처음 게시물의 page로 화면을 이동한다.

 

3.쓰기(Writer)

 글쓰기를 누르면 Controller에 /board/write 'GET' 요청이 간다. GET요청을 받은 Contoroller는 write()를 호출하고 board.jsp를 보여준다. 여기서 주목해야 할 점이 있다. board.jsp를 보여줄 때 게시글을 보여주는 '게시판 읽기'와 게시판의 글을 쓰는 '게시판 글쓰기' 두 가지의 경우의 수가 나온다. '게시글 읽기'는 말 그대로 읽기만 가능하기 때문에 'readonly'로 설정해준다. 이 두 경우의 수를 구분해야하는데 이를 위해 글쓰기일 때는 'mode=new'로 표시하여 구분한다. Controller의 write()는 모델의 mode값을 new로 담아 board.jsp로 보낸다. 그러면 board.jsp는 mode에 담긴 값이 new이면 글쓰기 모드로 보여주고, mode의 값이 new가 아니면 읽기 전용 페이지인 readonly가 표시된 화면을 보여준다. 

 

 

 게시판에 쓴 글을 등록 버튼을 눌러 Controller에 write()를 호출한다.하지만 여기에서 호출하는 write는() 앞에서 본 write()는 달리 'GET'매핑이 아니라 'POST' 매핑으로 되어있다. write()가 호출되면 글쓰기 쓰여진 값을 DB에 저장한다. DB에 저장된 값을 wirte()는 boardService.write(boardDto)를 통해 받고 Redirect를 통해 list()에게 전달한다. list()는 boardService.getPage(map)을 호출하여 DB에서 페이지의 값을 넘겨받고 페이지 값에 맞는 게시판 목록 화면을 보여준다.

 

4.수정(Modify)

 

흐름은 Write과 동일하다. 등록 버튼을 누르면 POST요청을 하고 Controller에서 modify()를 호출한다. 그러면 boardService.modify를 통해 변경된 값이 DB에 저장된다. modify()는 Redirect로 list()를 호출하고 boardService.getPage()를 통해 DB에서 페이지 정보를 받아온다. 그리고 게시판의 첫 번째 화면을 보여준다.

 


출처: 남궁성 스프링의 정석(패스트 캠퍼스 강의)

  1. 1.읽기(Read)
  2.  
  3. 2.삭제(Delete)
  4. 3.쓰기(Writer)
  5. 4.수정(Modify)
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 백준
  • 프로그래머스
  • 연습문제
  • 자바의정석기초편
  • 에러
  • 국비수업
  • 공부
  • 오라클
  • 네트워크
  • 자바의정석
  • 서브쿼리
  • 코딩
  • 웹프로그래밍
  • 백엔드
  • It
  • 모두의네트워크
  • 오류
  • 스프링
  • spring
  • 자바
  • Java
  • 개발자
  • 배열
  • Oracle
  • db
  • 쿼리
  • SQL
  • 뉴렉처
  • 객체지향

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[게시판 만들기] CRUD 흐름
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.