📝 오늘의 강의 요약
핵심 키워드: 게시판 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: 테이블 생성 시 컬럼 속성에 직접 지정
-
num int primary key auto_increment
- Oracle: 별도의 객체(Sequence)를 생성하여 관리
-
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 경로 작성 시 컨텍스트 루트 및 서블릿 매핑 주소 확인 유의