멀티캠퍼스

[2026.05.27] - TIL 38일차 JSP 게시판 CRUD 구현 정리

buckwheat 2026. 5. 27. 22:37

 

목차
1 MYBOARD 테이블
2 JDBCTemplate
3 MyBoardDto
4 MyBoardDao
5 JSP 게시판 전체 흐름
6 index.jsp
7 mylist.jsp
8 selectone.jsp
9 myinsert.jsp와 myinsert_res.jsp
10 myupdate.jsp와 myupdate_res.jsp
11 mydelete.jsp
12 JSP 게시판 CRUD 흐름 정리

 

1 MYBOARD 테이블

1) MYBOARD 테이블의 역할

    (1) 게시글 저장 테이블
    MYBOARD 테이블은 게시판의 글 정보를 저장하는 테이블이다.
    게시글 번호, 작성자, 제목, 내용, 작성일을 하나의 행으로 저장한다.

    (2) JSP 게시판 실습용 테이블
    이 테이블은 JSP 화면에서 게시글 목록 조회, 상세 조회, 글 작성, 글 수정, 글 삭제 기능을 구현하기 위해 사용된다.
    JSP에서 DAO를 호출하면 실제 데이터는 MYBOARD 테이블에서 조회되거나 변경된다.

2) MYBOARD 컬럼

    (1) MYNO
    MYNO는 게시글 번호이다.
    PRIMARY KEY로 설정되어 게시글 하나를 구분하는 고유한 값으로 사용된다.

    (2) MYNAME
    MYNAME은 작성자 이름을 저장하는 컬럼이다.
    NOT NULL이 설정되어 있어 글 작성 시 반드시 값이 들어가야 한다.

    (3) MYTITLE
    MYTITLE은 게시글 제목을 저장하는 컬럼이다.
    NOT NULL이 설정되어 있어 제목 없이 글을 저장할 수 없다.

    (4) MYCONTENT
    MYCONTENT는 게시글 내용을 저장하는 컬럼이다.
    NOT NULL이 설정되어 있어 내용이 반드시 입력되어야 한다.

    (5) MYDATE
    MYDATE는 게시글 작성일을 저장하는 컬럼이다.
    글이 등록되는 시점의 날짜를 SYSDATE로 저장한다.

3) SEQ_MYBOARD

    (1) 시퀀스의 역할
    SEQ_MYBOARD는 게시글 번호를 자동으로 생성하기 위한 시퀀스이다.
    글을 작성할 때 게시글 번호를 직접 입력하지 않고 SEQ_MYBOARD.NEXTVAL로 자동 생성한다.

    (2) 사용하는 이유
    게시글 번호는 중복되면 안 되는 값이다.
    시퀀스를 사용하면 새 글이 등록될 때마다 자동으로 새로운 번호가 부여된다.

2 JDBCTemplate

1) JDBCTemplate의 개념

    (1) JDBCTemplate
    JDBCTemplate은 JDBC에서 반복되는 DB 연결, 자원 해제, commit, rollback 기능을 모아둔 공통 클래스이다.
    게시판 DAO에서 DB 작업을 할 때 매번 같은 연결 코드를 작성하지 않도록 도와준다.

    (2) 사용하는 이유
    JDBC는 Driver 등록, DB 연결, PreparedStatement 종료, ResultSet 종료 같은 코드가 반복된다.
    이를 JDBCTemplate에 모아두면 DAO 코드가 SQL 실행에 집중할 수 있다.

2) getConnection

    (1) Driver 등록
    Class.forName을 사용해 Oracle JDBC Driver를 등록한다.
    Java 프로그램이 Oracle DB와 연결할 수 있도록 준비하는 단계이다.

    (2) DB 연결
    DriverManager.getConnection을 사용해 DB와 연결한다.
    연결에 성공하면 SQL 실행에 필요한 Connection 객체를 얻는다.

    (3) 자동 커밋 해제
    con.setAutoCommit(false)는 자동 커밋을 끄는 설정이다.
    INSERT, UPDATE, DELETE 작업 후 직접 commit 또는 rollback을 실행하기 위해 사용한다.

3) close 메소드

    (1) Connection close
    Connection은 DB와 연결된 통로이다.
    사용이 끝나면 close해서 DB 연결 자원을 반환해야 한다.

    (2) Statement close
    Statement 또는 PreparedStatement는 SQL 실행에 사용되는 객체이다.
    SQL 실행이 끝나면 close해서 자원을 정리한다.

    (3) ResultSet close
    ResultSet은 SELECT 결과를 담는 객체이다.
    조회 결과 처리가 끝나면 close해서 자원을 반환한다.

4) commit과 rollback

    (1) commit
    commit은 INSERT, UPDATE, DELETE 작업 결과를 DB에 최종 저장하는 기능이다.
    DAO에서 실행 결과가 0보다 클 때 commit을 호출한다.

    (2) rollback
    rollback은 변경 작업을 취소하는 기능이다.
    실행 결과가 실패했거나 적용된 행이 없을 때 rollback을 호출한다.

3 MyBoardDto

1) MyBoardDto의 역할

    (1) DTO
    MyBoardDto는 MYBOARD 테이블의 한 행 데이터를 Java 객체로 담는 클래스이다.
    게시글 번호, 작성자, 제목, 내용, 작성일을 하나의 객체로 관리한다.

    (2) 사용하는 이유
    DB에서 조회한 데이터를 JSP로 전달할 때 여러 변수를 따로 전달하면 복잡하다.
    MyBoardDto 객체 하나에 게시글 정보를 담으면 DAO와 JSP 사이에서 데이터를 쉽게 주고받을 수 있다.

2) 필드

    (1) myno
    myno는 게시글 번호를 저장하는 필드이다.
    MYBOARD 테이블의 MYNO 컬럼과 연결된다.

    (2) myname
    myname은 작성자 이름을 저장하는 필드이다.
    MYBOARD 테이블의 MYNAME 컬럼과 연결된다.

    (3) mytitle
    mytitle은 게시글 제목을 저장하는 필드이다.
    MYBOARD 테이블의 MYTITLE 컬럼과 연결된다.

    (4) mycontent
    mycontent는 게시글 내용을 저장하는 필드이다.
    MYBOARD 테이블의 MYCONTENT 컬럼과 연결된다.

    (5) mydate
    mydate는 게시글 작성일을 저장하는 필드이다.
    MYBOARD 테이블의 MYDATE 컬럼과 연결된다.

3) 생성자와 메소드

    (1) 기본 생성자
    기본 생성자는 값 없이 MyBoardDto 객체를 만들 때 사용한다.
    객체 생성 후 setter를 통해 값을 넣을 수 있다.

    (2) 매개변수 생성자
    매개변수 생성자는 게시글 정보를 한 번에 받아 객체를 만들 때 사용한다.
    DAO에서 ResultSet 결과를 MyBoardDto로 변환할 때 유용하다.

    (3) getter와 setter
    getter는 private 필드 값을 읽을 때 사용하고, setter는 private 필드 값을 변경할 때 사용한다.
    JSP와 DAO에서 게시글 데이터를 안전하게 다루기 위해 사용한다.

4 MyBoardDao

1) MyBoardDao의 역할

    (1) DAO
    MyBoardDao는 MYBOARD 테이블에 직접 접근하는 클래스이다.
    게시글 조회, 작성, 수정, 삭제 SQL을 실행한다.

    (2) JSP와 DB 사이의 연결
    JSP는 사용자의 요청을 받고, MyBoardDao는 실제 DB 작업을 처리한다.
    JSP가 직접 SQL을 복잡하게 다루지 않고 DAO 메소드를 호출해서 결과를 받는 구조이다.

2) selectAll

    (1) 전체 게시글 조회
    selectAll은 MYBOARD 테이블의 모든 게시글을 조회한다.
    SQL문은 게시글 번호를 기준으로 내림차순 정렬하여 최신 글이 먼저 보이도록 한다.

    (2) List 사용
    게시글은 여러 개가 조회될 수 있으므로 List<MyBoardDto>에 담아 반환한다.
    ResultSet에서 한 행을 읽을 때마다 MyBoardDto 객체를 만들고 List에 추가한다.

    (3) mylist.jsp와 연결
    mylist.jsp는 selectAll을 호출해서 게시글 목록을 가져온다.
    가져온 List를 반복문으로 출력해 목록 화면을 만든다.

3) selectOne

    (1) 선택 게시글 조회
    selectOne은 게시글 번호 MYNO를 기준으로 게시글 하나를 조회한다.
    상세 페이지나 수정 페이지에서 특정 글 정보를 가져올 때 사용한다.

    (2) PreparedStatement 사용
    WHERE MYNO=? 조건에 게시글 번호를 넣어 조회한다.
    사용자가 클릭한 게시글 번호에 해당하는 데이터만 가져올 수 있다.

    (3) MyBoardDto 반환
    조회 결과가 있으면 MyBoardDto 객체에 게시글 정보를 담아 반환한다.
    결과가 없으면 null이 반환될 수 있다.

4) insert

    (1) 글 작성
    insert는 새 게시글을 MYBOARD 테이블에 추가하는 메소드이다.
    작성자, 제목, 내용을 받아 DB에 저장한다.

    (2) 자동 번호와 작성일
    게시글 번호는 SEQ_MYBOARD.NEXTVAL로 자동 생성된다.
    작성일은 SYSDATE로 현재 날짜가 저장된다.

    (3) commit 처리
    executeUpdate 결과가 0보다 크면 INSERT가 성공한 것이다.
    성공하면 commit하고 실패하면 rollback한다.

5) update

    (1) 글 수정
    update는 기존 게시글의 제목과 내용을 수정하는 메소드이다.
    게시글 번호를 기준으로 수정할 글을 찾는다.

    (2) 수정 대상
    WHERE MYNO=? 조건을 사용해 특정 게시글만 수정한다.
    작성자와 작성일은 그대로 두고 제목과 내용만 변경하는 구조이다.

    (3) 결과 처리
    수정된 행이 있으면 commit하고, 없으면 rollback한다.
    결과값 int를 JSP로 반환해 성공 또는 실패 메시지를 출력할 수 있다.

6) delete

    (1) 글 삭제
    delete는 게시글 번호를 기준으로 MYBOARD 테이블에서 게시글을 삭제하는 메소드이다.
    상세 페이지에서 삭제 버튼을 누르면 이 메소드가 실행된다.

    (2) 삭제 기준
    WHERE MYNO=? 조건을 사용해 삭제할 글을 지정한다.
    게시글 번호는 PRIMARY KEY이므로 특정 게시글 하나를 정확히 찾을 수 있다.

    (3) 결과 처리
    삭제된 행이 있으면 commit하고, 없으면 rollback한다.
    JSP에서는 결과값에 따라 삭제 성공 또는 실패 메시지를 보여준다.

5 JSP 게시판 전체 흐름

1) JSP 게시판 구조

    (1) index.jsp
    index.jsp는 게시판의 시작 페이지이다.
    목록 페이지로 이동할 수 있는 링크를 제공한다.

    (2) mylist.jsp
    mylist.jsp는 게시글 전체 목록을 보여주는 페이지이다.
    DB에서 게시글 목록을 조회하고 테이블 형태로 출력한다.

    (3) selectone.jsp
    selectone.jsp는 게시글 상세 내용을 보여주는 페이지이다.
    목록에서 선택한 게시글 번호를 이용해 해당 글 하나를 조회한다.

    (4) myinsert.jsp
    myinsert.jsp는 새 글을 작성하는 입력 화면이다.
    작성자, 제목, 내용을 입력받아 myinsert_res.jsp로 전송한다.

    (5) myinsert_res.jsp
    myinsert_res.jsp는 글 작성 요청을 실제로 처리하는 페이지이다.
    request로 전달된 값을 받아 DTO에 담고 DAO의 insert를 호출한다.

    (6) myupdate.jsp
    myupdate.jsp는 글 수정 입력 화면이다.
    기존 제목과 내용을 화면에 보여주고 사용자가 수정할 수 있게 한다.

    (7) myupdate_res.jsp
    myupdate_res.jsp는 글 수정 요청을 실제로 처리하는 페이지이다.
    수정된 제목과 내용을 받아 DAO의 update를 호출한다.

    (8) mydelete.jsp
    mydelete.jsp는 글 삭제 요청을 처리하는 페이지이다.
    게시글 번호를 받아 DAO의 delete를 호출한다.

2) JSP에서 DAO 호출

    (1) import
    JSP에서 Java 클래스를 사용하려면 page import 지시자로 DAO와 DTO를 가져와야 한다.
    MyBoardDao와 MyBoardDto를 import해야 JSP 안에서 객체를 생성할 수 있다.

    (2) 스크립트릿
    JSP의 스크립트릿 영역에서는 Java 코드를 작성할 수 있다.
    DAO 객체 생성, DB 조회, 조건문 처리 등을 이 영역에서 수행한다.

    (3) 표현식
    표현식은 Java 값을 HTML 화면에 출력할 때 사용한다.
    예를 들어 dto.getMytitle() 값을 제목 칸에 출력할 수 있다.

3) 요청 파라미터 처리

    (1) request.getParameter
    request.getParameter는 클라이언트가 보낸 값을 문자열로 가져오는 메소드이다.
    form input의 name 값이나 URL 뒤의 query string 값을 받을 때 사용한다.

    (2) 문자열 변환
    request.getParameter의 결과는 항상 문자열이다.
    게시글 번호처럼 숫자로 사용해야 하는 값은 Integer.parseInt로 int 타입으로 변환해야 한다.

    (3) 한글 인코딩
    request.setCharacterEncoding("UTF-8")은 요청으로 전달된 한글이 깨지지 않도록 설정한다.
    글 작성이나 수정처럼 한글 입력이 있는 페이지에서 중요하다.

6 index.jsp

1) index.jsp의 역할

    (1) 시작 페이지
    index.jsp는 게시판 프로젝트의 시작 화면이다.
    사용자가 처음 접근했을 때 목록 페이지로 이동할 수 있는 링크를 제공한다.

    (2) 목록 링크
    a 태그의 href="./mylist.jsp"는 현재 위치를 기준으로 mylist.jsp를 요청한다.
    사용자가 목록을 클릭하면 브라우저가 mylist.jsp 페이지를 서버에 요청한다.

2) a 태그 흐름

    (1) 링크 요청
    a 태그는 사용자가 클릭했을 때 지정된 주소로 이동하게 만든다.
    여기서는 게시글 목록을 보여주는 mylist.jsp로 이동한다.

    (2) 현재 위치 기준
    ./는 현재 폴더를 의미한다.
    같은 프로젝트 안의 mylist.jsp 파일을 요청할 때 사용할 수 있다.

7 mylist.jsp

1) mylist.jsp의 역할

    (1) 목록 페이지
    mylist.jsp는 MYBOARD 테이블에 저장된 게시글 전체 목록을 보여주는 페이지이다.
    게시글 번호, 작성자, 제목, 작성일을 테이블 형태로 출력한다.

    (2) 최신 글 먼저 출력
    DAO의 selectAll에서 ORDER BY MYNO DESC를 사용한다.
    게시글 번호가 큰 글이 최근 글이므로 최신 글이 위쪽에 출력된다.

2) 데이터 조회 흐름

    (1) DAO 객체 생성
    JSP에서 MyBoardDao 객체를 생성한다.
    이 객체를 통해 DB에 접근할 수 있다.

    (2) selectAll 호출
    dao.selectAll을 호출하면 DB에서 게시글 목록을 가져온다.
    결과는 List<MyBoardDto> 형태로 저장된다.

    (3) 반복 출력
    for문을 사용해 List에 담긴 게시글을 하나씩 꺼낸다.
    각 게시글의 번호, 작성자, 제목, 작성일을 HTML 테이블의 한 행으로 출력한다.

3) 제목 링크

    (1) 상세 페이지 이동
    제목에는 a 태그가 걸려 있다.
    사용자가 제목을 클릭하면 selectone.jsp로 이동한다.

    (2) query string
    selectone.jsp?myno=게시글번호 형태로 게시글 번호를 함께 전달한다.
    상세 페이지는 이 myno 값을 이용해 어떤 글을 조회할지 결정한다.

4) 글쓰기 버튼

    (1) 버튼 클릭 이벤트
    글쓰기 버튼을 클릭하면 JavaScript 이벤트가 실행된다.
    location.href를 이용해 myinsert.jsp로 이동한다.

    (2) 글 작성 화면 이동
    myinsert.jsp는 새 게시글을 입력하는 페이지이다.
    사용자는 이 페이지에서 작성자, 제목, 내용을 입력할 수 있다.

8 selectone.jsp

1) selectone.jsp의 역할

    (1) 상세 페이지
    selectone.jsp는 게시글 하나의 상세 정보를 보여주는 페이지이다.
    목록에서 선택한 글의 작성자, 제목, 내용을 출력한다.

    (2) myno 사용
    목록 페이지에서 전달된 myno 값을 request.getParameter로 받는다.
    이 번호를 기준으로 DB에서 해당 게시글 하나를 조회한다.

2) 데이터 조회 흐름

    (1) 게시글 번호 받기
    request.getParameter("myno")로 URL에 담긴 게시글 번호를 받는다.
    받은 값은 문자열이므로 Integer.parseInt로 숫자로 변환한다.

    (2) selectOne 호출
    MyBoardDao의 selectOne 메소드에 myno를 전달한다.
    DAO는 해당 번호의 게시글을 조회해 MyBoardDto 객체로 반환한다.

    (3) 상세 내용 출력
    반환된 DTO에서 작성자, 제목, 내용을 꺼내 화면에 출력한다.
    내용은 textarea에 readonly 속성을 주어 수정하지 못하게 보여준다.

3) 수정과 삭제 버튼

    (1) 수정 버튼
    수정 버튼을 누르면 myupdate.jsp?myno=게시글번호로 이동한다.
    수정 페이지는 이 번호로 기존 게시글 정보를 조회해 입력 화면에 보여준다.

    (2) 삭제 버튼
    삭제 버튼을 누르면 mydelete.jsp?myno=게시글번호로 이동한다.
    삭제 페이지는 이 번호를 기준으로 해당 게시글을 삭제한다.

9 myinsert.jsp와 myinsert_res.jsp

1) myinsert.jsp

    (1) 글 작성 화면
    myinsert.jsp는 새 게시글을 작성하는 입력 화면이다.
    작성자 이름, 제목, 내용을 입력할 수 있는 form을 제공한다.

    (2) form 태그
    form의 action은 myinsert_res.jsp이고 method는 post이다.
    사용자가 입력 버튼을 누르면 입력값이 POST 방식으로 myinsert_res.jsp에 전달된다.

    (3) name 속성
    input과 textarea의 name 값은 서버에서 값을 꺼낼 때 사용된다.
    myname, mytitle, mycontent라는 이름으로 작성자, 제목, 내용이 전달된다.

    (4) 취소 버튼
    취소 버튼은 history.back을 사용한다.
    이전 페이지로 돌아가고 싶을 때 사용할 수 있다.

2) myinsert_res.jsp

    (1) 글 작성 처리 페이지
    myinsert_res.jsp는 사용자가 입력한 글 작성 요청을 처리한다.
    화면을 보여주는 페이지라기보다 DB에 INSERT를 수행하는 처리용 페이지이다.

    (2) 파라미터 받기
    request.getParameter로 myname, mytitle, mycontent 값을 가져온다.
    이 값들은 myinsert.jsp의 form에서 전달된 입력값이다.

    (3) DTO 생성
    받은 값을 MyBoardDto 객체에 담는다.
    게시글 번호와 작성일은 DB에서 자동 처리되므로 임시로 0과 null을 넣는다.

    (4) insert 호출
    MyBoardDao의 insert 메소드를 호출해 DB에 새 글을 저장한다.
    실행 결과가 0보다 크면 등록 성공으로 판단한다.

    (5) 결과 처리
    등록 성공 시 alert로 성공 메시지를 보여주고 mylist.jsp로 이동한다.
    등록 실패 시 실패 메시지를 보여주고 다시 myinsert.jsp로 이동한다.

10 myupdate.jsp와 myupdate_res.jsp

1) myupdate.jsp

    (1) 수정 화면
    myupdate.jsp는 기존 게시글을 수정하기 위한 입력 화면이다.
    게시글 번호를 기준으로 기존 데이터를 조회한 뒤 제목과 내용을 입력창에 넣어 보여준다.

    (2) hidden input
    hidden input은 화면에는 보이지 않지만 form 전송 시 함께 전달되는 값이다.
    수정할 게시글 번호 myno를 함께 보내기 위해 사용한다.

    (3) 작성자 출력
    작성자 이름은 수정하지 않고 화면에 텍스트로만 보여준다.
    이 실습에서는 제목과 내용만 수정 대상으로 사용한다.

    (4) 기존 값 표시
    제목 input의 value에 기존 제목을 넣고, textarea 안에 기존 내용을 넣는다.
    사용자는 기존 내용을 확인한 뒤 필요한 부분만 수정할 수 있다.

2) myupdate_res.jsp

    (1) 수정 처리 페이지
    myupdate_res.jsp는 수정 form에서 전달된 값을 받아 DB UPDATE를 수행하는 페이지이다.
    사용자가 수정 버튼을 누르면 이 페이지가 요청된다.

    (2) 파라미터 받기
    myno, mytitle, mycontent 값을 request에서 가져온다.
    myno는 수정할 게시글을 찾는 기준이고, mytitle과 mycontent는 변경할 값이다.

    (3) DTO 생성
    받은 값을 MyBoardDto 객체에 담는다.
    DAO의 update 메소드가 이 객체에서 제목, 내용, 글번호를 꺼내 SQL에 사용한다.

    (4) update 호출
    MyBoardDao의 update 메소드를 호출해 제목과 내용을 수정한다.
    실행 결과가 0보다 크면 수정 성공으로 판단한다.

    (5) 결과 처리
    수정 성공 시 상세 페이지로 이동해 수정된 내용을 확인한다.
    수정 실패 시에도 상세 페이지로 돌아가 사용자가 다시 확인할 수 있게 한다.

11 mydelete.jsp

1) mydelete.jsp의 역할

    (1) 삭제 처리 페이지
    mydelete.jsp는 게시글 삭제 요청을 처리하는 페이지이다.
    상세 페이지에서 삭제 버튼을 누르면 게시글 번호가 전달되고, 이 번호로 DB 삭제를 수행한다.

    (2) 처리 전용 페이지
    mydelete.jsp는 목록이나 상세 내용을 출력하는 페이지가 아니라 삭제 로직을 실행하는 페이지이다.
    처리 결과에 따라 JavaScript alert와 location.href로 이동을 제어한다.

2) 삭제 흐름

    (1) 게시글 번호 받기
    request.getParameter("myno")로 삭제할 게시글 번호를 받는다.
    숫자로 사용해야 하므로 Integer.parseInt로 변환한다.

    (2) delete 호출
    MyBoardDao의 delete 메소드에 myno를 전달한다.
    DAO는 DELETE FROM MYBOARD WHERE MYNO=? SQL을 실행한다.

    (3) 삭제 성공
    삭제 결과가 0보다 크면 삭제 성공이다.
    성공 메시지를 보여주고 mylist.jsp로 이동해 목록을 다시 확인한다.

    (4) 삭제 실패
    삭제 결과가 0이면 삭제할 글이 없거나 삭제가 실패한 것이다.
    실패 메시지를 보여주고 기존 상세 페이지로 다시 이동한다.

12 JSP 게시판 CRUD 흐름 정리

1) 전체 조회

    (1) 시작
    사용자가 index.jsp에서 목록 링크를 클릭한다.
    브라우저는 mylist.jsp를 요청한다.

    (2) DAO 호출
    mylist.jsp는 MyBoardDao의 selectAll을 호출한다.
    DB에서 전체 게시글 목록을 조회한다.

    (3) 화면 출력
    조회된 List<MyBoardDto>를 for문으로 반복한다.
    각 게시글을 테이블 행으로 출력한다.

2) 선택 조회

    (1) 제목 클릭
    사용자가 목록에서 게시글 제목을 클릭한다.
    selectone.jsp?myno=게시글번호 형태로 상세 페이지를 요청한다.

    (2) 번호 전달
    selectone.jsp는 request.getParameter로 myno를 받는다.
    이 번호를 기준으로 selectOne을 호출한다.

    (3) 상세 출력
    조회된 MyBoardDto의 작성자, 제목, 내용을 화면에 출력한다.
    사용자는 상세 페이지에서 수정 또는 삭제를 선택할 수 있다.

3) 글 작성

    (1) 글쓰기 이동
    목록 페이지에서 글쓰기 버튼을 누르면 myinsert.jsp로 이동한다.
    사용자는 작성자, 제목, 내용을 입력한다.

    (2) 작성 요청
    입력 버튼을 누르면 myinsert_res.jsp로 POST 요청이 전달된다.
    입력값은 request.getParameter로 받을 수 있다.

    (3) DB 저장
    myinsert_res.jsp는 DTO를 생성하고 DAO의 insert를 호출한다.
    성공하면 목록 페이지로 이동한다.

4) 글 수정

    (1) 수정 화면 이동
    상세 페이지에서 수정 버튼을 누르면 myupdate.jsp로 이동한다.
    myupdate.jsp는 기존 게시글 정보를 조회해 수정 form에 보여준다.

    (2) 수정 요청
    수정 버튼을 누르면 myupdate_res.jsp로 제목과 내용, 게시글 번호가 전달된다.
    myupdate_res.jsp는 이 값을 DTO에 담아 DAO의 update를 호출한다.

    (3) 상세 페이지 이동
    수정 성공 후 selectone.jsp로 이동해 수정된 내용을 다시 확인한다.
    게시글 번호를 함께 전달해야 수정된 글의 상세 페이지를 볼 수 있다.

5) 글 삭제

    (1) 삭제 요청
    상세 페이지에서 삭제 버튼을 누르면 mydelete.jsp로 이동한다.
    삭제할 게시글 번호가 URL에 함께 전달된다.

    (2) DB 삭제
    mydelete.jsp는 전달받은 myno로 DAO의 delete를 호출한다.
    DB에서 해당 게시글을 삭제한다.

    (3) 목록 이동
    삭제 성공 시 mylist.jsp로 이동한다.
    삭제된 글이 목록에서 사라졌는지 확인할 수 있다.

6) 오늘 실습의 핵심

    (1) JSP와 JDBC 연결
    JSP에서 DAO를 호출해 DB 데이터를 조회하고 변경하는 흐름을 실습했다.
    화면 요청과 DB 처리가 연결되면서 실제 게시판 CRUD가 동작한다.

    (2) DTO 사용
    MyBoardDto를 사용해 게시글 데이터를 객체로 묶었다.
    DB 한 행을 Java 객체 하나로 표현할 수 있다.

    (3) DAO 사용
    MyBoardDao를 사용해 SQL 실행 코드를 분리했다.
    JSP는 화면과 요청 흐름을 담당하고, DAO는 DB 처리를 담당한다.

    (4) CRUD 구현
    게시판에서 가장 기본이 되는 목록 조회, 상세 조회, 글 작성, 글 수정, 글 삭제 기능을 구현했다.
    이 구조는 이후 MVC 게시판이나 Servlet 기반 게시판으로 확장할 수 있다.