⏳ Time Log/1. One Day (Daily · TIL)

Day 23 (11/19) - JSP 게시판 프로젝트: DB 연동 및 커맨드 패턴의 이해

this.Serena 2026. 2. 19. 00:11

📝 오늘의 강의 요약

핵심 키워드: 게시판 DB 설계, JDBC(PreparedStatement), 커맨드 패턴(Action), 서블릿 흐름

  • DB 설계: MySQL의 auto_increment와 Oracle의 sequence 차이점 이해 및 게시판 테이블 생성
  • JDBC 심화: Statement와 PreparedStatement의 성능 및 보안 차이 분석
  • 설계 패턴: Action 인터페이스를 활용한 커맨드 패턴 도입으로 서블릿 코드 최적화
  • JSP/EL: ${board.num} 등 표현 언어를 활용한 동적 링크 생성 및 데이터 출력

🗂️ 개념 정리

1. Statement vs PreparedStatement

특징 Statement PreparedStatement
처리 방식 쿼리 실행 시마다 분석 → 컴파일 → 실행 처음 한 번만 분석/컴파일 후 캐시 재사용
성능 반복 실행 시 상대적으로 느림 반복 실행 시 매우 빠름
보안 SQL Injection 공격에 취약함 변수 바인딩(?)으로 SQL Injection 방어
가독성 문자열 결합(+)으로 인해 복잡함 파라미터 분리로 코드가 깔끔함

2. JSP 웹 아키텍처 (Spring의 모태)

  • 1 서블릿 구조: 모든 요청을 하나의 대표 서블릿(Front Controller)이 받아 처리하는 방식 (Spring Framework의 DispatcherServlet 원리)
  • Servlet 역할: request와 response 객체를 제어하며 웹 환경에서 비즈니스 로직과 화면을 연결하는 중추적 역할

💾 데이터베이스(DB) 실습

1. 자동 증가 번호 설정 차이

  • MySQL: 테이블 생성 시 컬럼 속성에 직접 지정
  • SQL
     
    num int primary key auto_increment
    
  • Oracle: 별도의 객체(Sequence)를 생성하여 관리
  • SQL
     
    create sequence board_seq start with 1 increment by 1;
    

2. JDBC 핵심 클래스

  • Connection (con): 특정 데이터베이스와의 연결 세션
  • PreparedStatement (pstmt): SQL 문을 미리 컴파일하여 실행하는 객체
  • ResultSet (rs): SQL 쿼리(SELECT) 실행 결과 데이터를 담는 커서

🏗️ 서블릿 및 액션 패턴 (study-11)

1. 커맨드 패턴 (Action Interface)

  • 구조: Action 인터페이스를 상속받는 클래스는 반드시 execute() 메서드를 구현해야 함
  • 효과: 서블릿 하나에서 수많은 if-else문을 사용하는 대신, 요청(command)별로 클래스를 분리하여 유지보수성 향상

2. 게시판 목록 링크 구현 (JSP)

  • 코드: BoardServlet?command=board_view&num=${board.num}
  • 설명: 쿼리 스트링을 통해 수행할 명령(command)과 데이터 식별자(num)를 서블릿에 전달하여 상세 페이지 이동 처리

🛠️ 실습 메모 및 팁

  • SQL 작성: 게시판 기능을 위해 num, title, content 등의 필수 컬럼을 포함한 테이블 정의서 확인 필수
  • 인터페이스 강제: Action을 상속받았다면 추상 메서드인 execute가 누락되지 않았는지 체크
  • 경로 관리: href 경로 작성 시 컨텍스트 루트 및 서블릿 매핑 주소 확인 유의