목차
불편함을 코드로 지웁니다.
개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.
📝 오늘의 강의 요약
핵심 키워드: 게시판 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 경로 작성 시 컨텍스트 루트 및 서블릿 매핑 주소 확인 유의
'⏳ Time Log > TIL · 하루' 카테고리의 다른 글
| Day 25 (11/21) - SQL 데이터 수정 및 리액트 개발 환경 구축 (0) | 2026.02.20 |
|---|---|
| Day 24 (11/20) - JSP 심화 및 이클립스 개발도구 설정 (1) | 2026.02.20 |
| Day 22 (11/18) - 팀 프로젝트의 시작: 리액트 기초와 JSP/MySQL 심화 정리 (0) | 2026.02.19 |
| Day 21 (11/17) - SQL 기초 (0) | 2026.02.19 |