목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

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