Servlet/JSP (Model 2 MVC) + MyBatis + Oracle 기반 수강신청 시스템.
| 레이어 | 기술 |
|---|---|
| Language / Runtime | Java 17 |
| Web | Jakarta Servlet 6 + JSP / JSTL (Model 2 MVC, Front Controller) |
| Persistence | MyBatis 3.5 |
| DB | Oracle 21c XE (Docker) |
| Build / Run | Maven (Wrapper ./mvnw) + Cargo(Tomcat 10.1) |
| View | JSP · Bootstrap 5 · Fetch API |
| WAS | 외장 Apache Tomcat 10.1 |
# 1) Oracle 컨테이너 기동 (최초 1회는 DB 초기화로 1~2분 소요)
docker compose up -d
docker compose ps # STATUS 가 healthy 인지 확인
# 2) 빌드 + 실행 (Tomcat 10.1 자동 다운로드·구동)
./mvnw clean package cargo:run
# 3) 브라우저 접속
http://localhost:8080/course-registration/종료는 실행 중인 터미널에서 Ctrl + C.
💡
./mvnw clean package cargo:run= 빌드 → WAR 생성 → Tomcat 10.1 에 배포 → 실행 까지 한 번에.
브라우저 http://localhost:8080/course-registration/ 에서:
- ① 카드 —
DB 연결 성공배지 + Oracle 서버 시각 표시 → JSP · MyBatis · Oracle 정상 - ② 버튼 클릭 — 새로고침 없이 시각 갱신 → Fetch API · FrontController · JSON 정상
터미널로도 확인 가능:
curl http://localhost:8080/course-registration/ping.do
# → {"success":true,"code":"OK","data":{"dbTime":"2026-06-05 10:04:10"}}| 엔드포인트 | 설명 |
|---|---|
GET / |
홈으로 리다이렉트 (/home.do) |
GET /home.do |
상태 페이지 (JSP SSR + DB 시각) |
GET /ping.do |
DB 시각 JSON (Fetch 비동기 검증) |
WAR 만 빌드 (제출/외장 톰캣 수동 배포용)
./mvnw clean package
cp target/course-registration.war <TOMCAT_HOME>/webapps/ # 외장 Tomcat 10.1IntelliJ 에서 : 오른쪽 Maven 툴 윈도우 → Plugins → cargo → cargo:run 더블클릭 (터미널 불필요)
| 증상 | 원인 / 해결 |
|---|---|
zsh: command not found: mvn |
전역 Maven 미설치 — mvn 대신 ./mvnw 사용 |
http://localhost:8080/... 무응답 |
package 는 빌드만 함. 서버 실행이 필요 → ./mvnw clean package cargo:run |
JAVA_HOME / Java 못 찾음 |
export JAVA_HOME=$(/usr/libexec/java_home -v 17) 후 재실행 (영구 적용은 ~/.zshrc 에 추가) |
DB 연결 실패 배지 |
Oracle 컨테이너 확인: docker compose ps → healthy 인지, 안 떠 있으면 docker compose up -d |
| 백그라운드로 띄운 Tomcat 정지 | pkill -f 'cargo:run' |
| 포트 8080 사용 중 | 기존 프로세스 종료: lsof -nP -iTCP:8080 -sTCP:LISTEN 로 PID 확인 후 kill <PID> |
| 항목 | 값 |
|---|---|
| URL | jdbc:oracle:thin:@localhost:1521/XEPDB1 |
| User / Password | dbp / dbpscret |
- 설정 파일:
src/main/resources/db.properties(MyBatismybatis-config.xml에서 참조) - 환경변수
DB_URL/DB_USERNAME/DB_PASSWORD로 오버라이드 가능 - Oracle 접속·검증 상세는
docs/ORACLE_SETUP.md참고
브라우저 → *.do → FrontControllerServlet (단일 진입점 · 예외 일괄 처리)
→ CommandFactory (경로→Command 수동 매핑)
→ Command → Service (SqlSession 트랜잭션 경계: commit/rollback)
→ Mapper(MyBatis) → Oracle
→ 뷰 이름 반환 시 /WEB-INF/views/*.jsp forward / JSON 은 직접 write
- Model 2 MVC: Servlet/JSP 기반 전통적 웹 아키텍처. Controller → Service → DAO (MyBatis Mapper) → DB 흐름.
- Front Controller: 모든 요청을 하나의 Servlet (
FrontControllerServlet) 이 처리 → 공통 로직 집중화 (인증, 예외 처리 등). - MyBatis: SQL 매퍼 프레임워크. XML 에 SQL 작성 → Java 인터페이스로 매핑 → SQL과 Java 코드 분리.
- Oracle XE: 무료 버전 Oracle DB. Docker 컨테이너로 쉽게 실행 → 개발 환경 구축 간편화.