목차

    ⏳ 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 경로 작성 시 컨텍스트 루트 및 서블릿 매핑 주소 확인 유의