CRUD(Create, Read, Update, Delete) 1

이 프로젝트는 회원 관리 시스템으로, CRUD(Create, Read, Update, Delete) 기능을 구현한 웹 애플리케이션입니다.

🔍 구조

📁 프로젝트 구조
├── 📄 JSP 파일들 (View - 화면)
│   ├── welcome.jsp (시작 페이지)
│   ├── nav.jsp (네비게이션 메뉴)
│   ├── createForm.jsp (회원 등록 폼)
│   ├── allview.jsp (전체 회원 목록)
│   └── updateForm.jsp (회원 수정 폼)
├── 📁 Controller (요청 처리)
│   ├── create_controller.java
│   ├── readAll_controller.java
│   ├── update_controller.java
│   └── delete_controller.java
├── 📁 DAO (데이터베이스 연결)
│   └── member_repository.java
└── 📁 DTO (데이터 객체)
    └── member.java

1️⃣ Create 기능부터 보기

흐름: View → Controller → Repository → Controller → View

  1. welcome.jsp 시작 → nav.jsp의 "Create" 링크 클릭
  2. create_controller.javadoGet() 실행 → createForm.jsp 보여줌
  3. 사용자가 아이디/패스워드 입력 후 "전송" 버튼 클릭
  4. create_controller.javadoPost() 실행
  5. member_repository.javasave() 메소드로 DB에 저장
  6. 저장 완료 후 allview.jsp로 리다이렉트
// create_controller.java의 핵심 흐름
doGet() → createForm.jsp 보여주기
doPost() → 데이터 받기 → repository.save() → read_all로 리다이렉트

2️⃣ Read 기능

  1. nav.jsp의 "Read_All" 링크 클릭
  2. readAll_controller.javadoGet() 실행
  3. member_repository.javareadall() 메소드로 모든 회원 데이터 가져오기
  4. allview.jsp에서 테이블 형태로 회원 목록 출력

3️⃣ Update 기능

  1. allview.jsp에서 "수정" 링크 클릭
  2. update_controller.javadoGet() 실행
  3. member_repository.javareadone() 메소드로 특정 회원 정보 가져오기
  4. updateForm.jsp에서 수정 폼 보여주기 (기존 데이터 채워져 있음)
  5. 수정 후 "전송" 버튼 클릭
  6. update_controller.javadoPost() 실행
  7. member_repository.javaupdate() 메소드로 DB 업데이트

4️⃣ Delete 기능

  1. allview.jsp에서 "삭제" 링크 클릭
  2. delete_controller.javadoGet() 실행
  3. member_repository.javadelmember() 메소드로 DB에서 삭제
  4. allview.jsp로 리다이렉트

MVC 패턴

  • Model (DTO + DAO): 데이터 관련 처리
    • member.java: 회원 정보를 담는 객체
    • member_repository.java: 데이터베이스 작업
  • View (JSP): 사용자에게 보여지는 화면
  • Controller (Servlet): 요청을 받아서 처리하고 응답

데이터 흐름

사용자 입력 → Controller → Repository (DB 작업) → Controller → View (결과 출력)

1️⃣ Welcome.jsp (시작점)

<%@ include file="nav.jsp" %>
  • 이 페이지는 네비게이션 바만 포함하는 메인 페이지예요
  • nav.jsp를 포함해서 Create, Read_All 메뉴를 보여줍니다

2️⃣ nav.jsp (네비게이션)

<li class="nav-item"><a class="nav-link" href="create">Create</a></li>
<li class="nav-item"><a class="nav-link" href="read_all">Read_All</a></li>
  • "Create" 링크를 클릭하면 → create URL로 이동
  • "Read_All" 링크를 클릭하면 → read_all URL로 이동

🔄 CREATE 과정 따라가기 (View → Controller → Repository → Controller → View)

1단계: View (사용자가 Create 클릭)

사용자가 nav.jsp에서 "Create" 링크 클릭 → href="create" → 서버의 /create URL로 GET 요청

2단계: Controller (create_controller.java)

@WebServlet("/create")  // "/create" URL 요청을 이 컨트롤러가 처리
public class create_controller extends HttpServlet {

    @Override
    protected void doGet(...) {  // GET 요청 처리
        // createForm.jsp 페이지로 이동시킴
        RequestDispatcher ds = req.getRequestDispatcher("createForm.jsp");
        ds.forward(req, resp);
    }
}

3단계: View (createForm.jsp)

<form action="create" method="post">
   <p>아이디: <input type="text" name="id">
   <p>패스워드: <input type="text" name="pw">
   <p><input type="submit" value="전송">
</form>
  • 사용자에게 회원가입 폼을 보여줌
  • 사용자가 아이디, 패스워드 입력하고 "전송" 버튼 클릭
  • action="create" method="post" → 같은 /create URL로 POST 요청

4단계: Controller (create_controller.java의 doPost)

@Override
protected void doPost(...) {  // POST 요청 처리
    // 1. 전처리: 폼에서 전달받은 데이터 추출
    String id = req.getParameter("id");
    String pw = req.getParameter("pw");

    // 2. 데이터를 member 객체로 묶음
    member mb = new member();
    mb.setId(id);
    mb.setPw(pw);

    // 3. Repository에게 저장 요청
    repository.save(mb);

    // 4. 저장 후 전체 목록 페이지로 리다이렉트
    resp.sendRedirect("read_all");
}

5단계: Repository (member_repository.java의 save 메소드)

public void save(member mb) {
    // 1. 데이터베이스 연결
    Connection conn = DriverManager.getConnection(url,id,pw);

    // 2. SQL 쿼리 준비
    String sql = "insert into member values(?,?)";
    PreparedStatement pstmt = conn.prepareStatement(sql);

    // 3. 쿼리에 값 설정
    pstmt.setString(1, mb.getId());    // 첫 번째 ?에 아이디
    pstmt.setString(2, mb.getPw());    // 두 번째 ?에 패스워드

    // 4. 쿼리 실행 (실제로 DB에 저장)
    pstmt.executeUpdate();
}

6단계: Controller → View (최종)

resp.sendRedirect("read_all") → 저장 완료 후 전체 회원 목록 페이지로 이동

💡 핵심 개념 정리

  1. MVC 패턴:
    • View(JSP): 사용자가 보는 화면
    • Controller(Servlet): 요청 처리하는 중간다리
    • Model(Repository): 데이터베이스 작업
  2. HTTP 메소드:
    • GET: 페이지 보여달라는 요청 (폼 화면 보여주기)
    • POST: 데이터 전송하는 요청 (폼 데이터 처리하기)
  3. 데이터 흐름:
  4. 사용자 입력 → Controller → Repository → Database ↓ 결과 페이지 ← Controller ← Repository ← Database

외워도 되는 기본 패턴:

CREATE 서블릿 기본 뼈대

@WebServlet("/create")
public class create_con extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("폼 요청");
        RequestDispatcher ds = req.getRequestDispatcher("/폼파일.jsp");
        ds.forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("데이터 처리 시작");

        // 1. 파라미터 받기
        String id = req.getParameter("id");
        String pw = req.getParameter("pw");

        // 2. DTO로 묶기
        member mb = new member();
        mb.setId(id);
        mb.setPw(pw);

        // 3. Repository로 저장
        member_repo repository = member_repo.getInstance();
        repository.save(mb);

        // 4. 리다이렉트
        resp.sendRedirect("어디로갈지");
    }
}

📝 외워야 할 핵심 패턴들:

1. 서블릿 기본 구조

@WebServlet("/주소")
public class 클래스명 extends HttpServlet {
    doGet() // 폼 보여주기
    doPost() // 데이터 처리
}

2. 폼으로 이동 (doGet)

RequestDispatcher ds = req.getRequestDispatcher("/파일.jsp");
ds.forward(req, resp);

3. 데이터 받기 (doPost)

String 변수 = req.getParameter("name속성");

4. DTO 생성 패턴

클래스 객체 = new 클래스();
객체.set메소드(값);

5. Repository 사용 패턴

Repository클래스 repository = Repository클래스.getInstance();
repository.메소드(객체);

6. 리다이렉트

resp.sendRedirect("주소");

'JSP' 카테고리의 다른 글

Create 서블릿 만들기  (0) 2025.06.05
CRUD 프로젝트  (0) 2025.06.05
SQL DB 연결하기  (0) 2025.06.04
mysql 8.0.33 설치환경 구축  (0) 2025.06.02
6월 2일 시험준비  (0) 2025.06.02