test0611 SQL DB 생성

CREATE DATABASE test0611;
USE test0611;
CREATE TABLE member (
id VARCHAR(50) PRIMARY KEY,
pw VARCHAR(50) NOT NULL
);
SELECT * FROM member;


1. 전반적인 흐름 구조

  • 1.1. 요청(HTML/JSP → 컨트롤러)

    • HTML/JSP에서 form이나 a태그를 통해 컨트롤러로 요청이 감.

    • 예시:

      <a href="create">Create</a>
      <form action="create" method="post">
      <a href="update?id=아이디">수정</a>
      <a href="delete?id=아이디">삭제</a>
    • URL 매핑은 @WebServlet("/xxx")이랑 맞춰야 함.

  • 1.2. 컨트롤러 흐름

    • extends HttpServlet 무조건 상속.
    • doGet, doPost 오버라이드.
    • 요청 데이터 받기: req.getParameter("파라미터명")
    • 전처리(데이터 가공, DTO 객체 만들기)
    • 리파지토리(DAO)에 데이터 넘기기
    • 리파지토리에서 DB 작업 결과 받음
    • setAttribute로 JSP에 데이터 넘기기 (req.setAttribute("이름", 데이터))
    • 뷰(JSP)로 포워딩 (RequestDispatcher ds = req.getRequestDispatcher("xxx.jsp"); ds.forward(req, resp);)
    • 또는 바로 리다이렉트 (resp.sendRedirect("xxx");)

2. 싱글턴 패턴 (리파지토리/DAO 반드시 나옴)

이거 놓치면 무조건 감점!

private static member_repository repository = new member_repository();  // 1. 객체 생성(프라이빗, 스태틱)
private member_repository() {}                                         // 2. 생성자 private(외부생성 불가)
public static member_repository getInstance() {                        // 3. 유일한 객체 반환 메서드
    return repository;
}

3. DTO (데이터를 묶어서 이동)

public class member {
    private String id;
    private String pw;
    // getter/setter 필수
}
  • 컨트롤러에서 받은 데이터 DTO로 묶어서 리파지토리에 넘긴다.

  • 예시:

    member mb = new member();
    mb.setId(id);
    mb.setPw(pw);

4. DB 연결 코드 (이거 빠지면 DB 작업 못 함)

  • 필수 객체

    • Connection
      DB 연결 객체.
    • PreparedStatement
      SQL문 실행 객체.
    • ResultSet
      select 쿼리 결과 받을 때.
  • 예시:

    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/DB명";
    String id = "root";
    String pw = "1234";
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection(url, id, pw);
    
    // 쿼리문 준비
    String sql = "select * from member where id=?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, id);
    
    // 결과 받을 때만
    ResultSet rs = pstmt.executeQuery();

5. CRUD 핵심 구현(코드 채워넣기)

  • Create

    • Controller에서 폼 데이터 받음 → DTO로 묶어서 → repository.save() 호출
    • 리파지토리에서 DB연결 후 insert문 실행
    • 실행 후 리다이렉트
  • Read (전체)

    • Controller에서 repository.readall() 호출 → ArrayList 반환
    • setAttribute로 JSP에 넘김
    • JSP에서 for문 돌리며 출력
  • Read (하나)

    • Controller에서 repository.readone(id) 호출 → member 반환
    • setAttribute로 JSP에 넘김
  • Update

    • GET: id값 받기 → readone(id) → setAttribute로 넘김 → 수정폼 JSP로 이동
    • POST: id, pw 받기 → repository.update(id, pw) 호출
  • Delete

    • Controller에서 id 파라미터 받음 → repository.delmember(id) 호출

6. JSP에서 setAttribute/getAttribute

  • setAttribute: 컨트롤러 → JSP로 데이터 넘길 때

  • getAttribute: JSP에서 데이터 받을 때
    예시:

    // 컨트롤러에서
    req.setAttribute("allmember", allmember);
    // JSP에서
    ArrayList<member> allmember = (ArrayList<member>)request.getAttribute("allmember");

7. Servlet Mapping (@WebServlet) & URL 연동

  • @WebServlet("/create")
  • form의 action, a태그 href 등과 반드시 일치해야 함
    (안 맞으면 컨트롤러가 안 불림)

8. 코드 실수 주의 (변수/함수명)

  • 컨트롤러/리파지토리/DTO 등에서 변수명, 함수명 반드시 정확히 맞출 것 (id, pw 등)
  • setter/getter 이름, html 폼 input name 등 맞추지 않으면 null 들어감

9. 실제 시험에서 '코드를 채워야 하는 곳' 예시

역할 코드/구문 예시
컨트롤러 상속 public class create_controller extends HttpServlet
요청 데이터 받기 String id = req.getParameter("id");
DTO 객체로 묶기 member mb = new member(); mb.setId(id); ...
싱글턴 DAO 호출 member_repository repository = member_repository.getInstance();
DB 연결 conn = DriverManager.getConnection(...);
SQL 실행 PreparedStatement pstmt = conn.prepareStatement(sql);
결과 받아서 DTO ResultSet rs = pstmt.executeQuery();
set/getAttribute req.setAttribute("이름", 데이터);
JSP에서 출력 <%= mb.getId() %>

정리 – 꼭 나오는 체크리스트

  • 컨트롤러 상속/오버라이딩
  • 싱글턴 패턴 리파지토리
  • DTO로 데이터 전달
  • Connection/PreparedStatement/ResultSet
  • 파라미터 받기/전달
  • setAttribute, getAttribute
  • URL 매핑 정확히 맞추기

'JSP' 카테고리의 다른 글

JSP 수업자료 : CRUD 등등  (0) 2025.07.01
JSP 게시판 페이징 처리 / while(rs.next()) / rs.absolute(index)  (0) 2025.06.09
[게시판] pageNum의 역할  (0) 2025.06.09
update  (0) 2025.06.05
Create 서블릿 만들기  (0) 2025.06.05