Spring Legacy 게시판 만들기 1편 - 프로젝트 세팅 (pom.xml, web.xml, MySQL)
📚 Spring Legacy 게시판 만들기 시리즈
- 1편: 프로젝트 세팅하기 (현재 글)
- 2편: MVC 패턴으로 뼈대 만들기
- 3편: 화면 만들기와 완성
웹사이트를 만들어 본 적이 있나요? 오늘부터 3편에 걸쳐서 Spring이라는 도구를 사용해 게시판을 만들어 볼 거예요. 마치 레고 블록을 조립하듯이, 하나씩 차근차근 만들어 나가면 멋진 게시판이 완성됩니다!
🎯 우리가 만들 것
우리가 만들 게시판은 이런 기능을 가지고 있어요:
| 기능 | 설명 |
|---|---|
| 📋 목록 보기 | 등록된 글들을 한눈에 볼 수 있어요 |
| ✏️ 글 쓰기 | 새로운 글을 작성할 수 있어요 |
| 📖 글 읽기 | 글의 자세한 내용을 볼 수 있어요 |
| 🔧 글 수정 | 쓴 글을 고칠 수 있어요 |
| 🗑️ 글 삭제 | 필요 없는 글을 지울 수 있어요 |
🏗️ Spring 프로젝트의 구조
Spring 프로젝트는 마치 잘 정리된 서랍장과 같아요. 각각의 파일이 제자리에 있어야 제대로 동작합니다.
graph TB
subgraph "📁 프로젝트 구조"
A["🗂️ sp1 (최상위 폴더)"]
B["📄 pom.xml<br/>필요한 도구 목록"]
C["📁 src/main/java<br/>Java 코드"]
D["📁 src/main/resources<br/>설정 파일"]
E["📁 src/main/webapp<br/>웹 페이지"]
end
A --> B
A --> C
A --> D
A --> E
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#e8f5e9
style D fill:#fce4ec
style E fill:#f3e5f5
각 폴더가 하는 일을 알아볼까요?
| 폴더/파일 | 역할 | 비유 |
|---|---|---|
pom.xml | 필요한 라이브러리(도구) 목록 | 요리 재료 목록 📝 |
src/main/java | 실제 동작하는 Java 코드 | 요리사의 레시피 👨🍳 |
src/main/resources | 설정 파일들 | 요리 도구 설정 ⚙️ |
src/main/webapp | 화면에 보이는 웹 페이지 | 완성된 요리 접시 🍽️ |
📦 Step 1: 필요한 재료 준비하기 (pom.xml)
요리를 하려면 재료가 필요하듯, Spring 프로젝트도 여러 **라이브러리(도구)**가 필요해요. pom.xml 파일에 이 목록을 적어둡니다.
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>sp1</groupId>
<artifactId>sp1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 🔧 Lombok: 반복적인 코드를 줄여주는 도구 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
</dependency>
<!-- 🌱 Spring Framework: 웹 애플리케이션의 기본 틀 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.2.14</version>
</dependency>
<!-- 🗄️ 데이터베이스 연결 도구들 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>7.0.2</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.4.0</version>
</dependency>
<!-- 🗺️ MyBatis: SQL을 쉽게 사용하게 해주는 도구 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.19</version>
</dependency>
</dependencies>
</project>
💡 Maven이란? 필요한 라이브러리를 인터넷에서 자동으로 다운로드해주는 편리한 도우미예요!
🌐 Step 2: 웹 서버에게 알려주기 (web.xml)
웹 서버(Tomcat)에게 “우리 프로젝트는 Spring을 사용할 거야!”라고 알려줘야 해요.
sequenceDiagram
participant Browser as 🌐 브라우저
participant Tomcat as 🐱 Tomcat 서버
participant WebXml as 📄 web.xml
participant Spring as 🌱 Spring
Browser->>Tomcat: 접속 요청
Tomcat->>WebXml: 설정 확인
WebXml->>Spring: Spring 시작하라고 알림
Spring->>Browser: 페이지 응답
web.xml 파일은 이렇게 생겼어요:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="6.0">
<display-name>sp1</display-name>
<!-- 🔔 Spring 시작을 알리는 리스너 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- ⚙️ 비즈니스 로직 설정 파일 위치 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- 🚦 모든 요청을 처리할 DispatcherServlet -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 🎨 웹 관련 설정 파일 위치 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 📍 모든 URL 요청을 Spring이 처리하도록 설정 -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
web.xml의 핵심 구성요소
graph LR
A["🌐 사용자 요청"] --> B["📄 web.xml"]
B --> C["🔔 ContextLoaderListener<br/>비즈니스 로직 준비"]
B --> D["🚦 DispatcherServlet<br/>요청 분배"]
C --> E["⚙️ root-context.xml"]
D --> F["🎨 servlet-context.xml"]
style A fill:#e3f2fd
style B fill:#fff8e1
style C fill:#e8f5e9
style D fill:#fce4ec
⚙️ Step 3: Spring 설정하기
Spring은 두 개의 설정 파일로 나누어져 있어요:
| 설정 파일 | 역할 | 담당하는 것 |
|---|---|---|
root-context.xml | 비즈니스 로직 | 데이터베이스, 서비스 |
servlet-context.xml | 웹 화면 | 컨트롤러, 뷰 |
root-context.xml (데이터베이스 설정)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring">
<!-- 📦 서비스 클래스들을 자동으로 찾아 등록 -->
<context:component-scan base-package="org.zerock.service" />
<!-- 🗄️ 데이터베이스 연결 설정 (HikariCP) -->
<bean name="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/springdb" />
<property name="username" value="springdbuser" />
<property name="password" value="1234" />
</bean>
<bean name="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- 🗺️ MyBatis 설정 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mapper/*.xml" />
<property name="configLocation" value="classpath:/mybatis-config.xml" />
</bean>
<!-- 🔍 Mapper 인터페이스 자동 스캔 -->
<mybatis-spring:scan base-package="org.zerock.mapper"/>
</beans>
servlet-context.xml (웹 설정)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context">
<!-- 🎯 Spring MVC 어노테이션 활성화 -->
<mvc:annotation-driven/>
<!-- 👁️ JSP 파일 위치 설정 (View Resolver) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 📂 정적 리소스 (CSS, JS, 이미지) 위치 -->
<mvc:resources location="/resources/" mapping="/resources/**" />
<!-- 🎮 컨트롤러 클래스들을 자동으로 찾아 등록 -->
<context:component-scan base-package="org.zerock.controller" />
</beans>
🗄️ Step 4: 데이터베이스 준비하기
게시판의 글을 저장할 테이블이 필요해요. MySQL에서 다음 명령어를 실행하세요:
-- 데이터베이스 생성
CREATE DATABASE springdb;
-- 사용자 생성 및 권한 부여
CREATE USER 'springdbuser'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON springdb.* TO 'springdbuser'@'localhost';
-- 게시판 테이블 생성
CREATE TABLE tbl_board (
bno INT AUTO_INCREMENT PRIMARY KEY, -- 글 번호 (자동 증가)
title VARCHAR(500) NOT NULL, -- 제목
content VARCHAR(2000) NOT NULL, -- 내용
writer VARCHAR(50) NOT NULL, -- 작성자
regdate TIMESTAMP DEFAULT NOW(), -- 등록일
updatedate TIMESTAMP DEFAULT NOW(), -- 수정일
delflag BOOLEAN DEFAULT FALSE -- 삭제 여부
);
테이블 구조를 그림으로 보면:
erDiagram
TBL_BOARD {
int bno PK "글 번호 (자동증가)"
varchar title "제목"
varchar content "내용"
varchar writer "작성자"
timestamp regdate "등록일"
timestamp updatedate "수정일"
boolean delflag "삭제여부"
}
📝 delflag가 왜 필요할까요? 실제로 데이터를 지우지 않고, “삭제됨” 표시만 해두는 방식이에요. 이렇게 하면 나중에 복구도 가능하고, 데이터 분석에도 유용해요!
🎨 전체 구조 한눈에 보기
지금까지 설정한 내용을 전체적으로 정리하면:
flowchart TB
subgraph "🌐 웹 서버 (Tomcat)"
A["📄 web.xml<br/>시작점"]
end
subgraph "🌱 Spring 설정"
B["⚙️ root-context.xml<br/>데이터베이스 연결"]
C["🎨 servlet-context.xml<br/>웹 화면 설정"]
end
subgraph "🗄️ 데이터베이스"
D["💾 MySQL<br/>tbl_board 테이블"]
end
A --> B
A --> C
B --> D
style A fill:#ffeb3b
style B fill:#4caf50,color:#fff
style C fill:#2196f3,color:#fff
style D fill:#9c27b0,color:#fff
✅ 1편 정리
오늘 우리가 한 일을 체크해볼까요?
- Spring 프로젝트 구조 이해하기
- pom.xml에 필요한 라이브러리 추가하기
- web.xml로 Spring 시작 설정하기
- root-context.xml로 데이터베이스 연결하기
- servlet-context.xml로 웹 설정하기
- MySQL 데이터베이스와 테이블 생성하기
🔮 다음 편 예고
2편에서는 실제로 게시판의 뼈대를 만들어볼 거예요!
- Controller - 사용자 요청을 받는 역할
- Service - 실제 로직을 처리하는 역할
- Mapper - 데이터베이스와 대화하는 역할
- DTO - 데이터를 담아 나르는 역할
마치 햄버거 가게처럼, 각자 맡은 역할이 있어서 효율적으로 일할 수 있어요! 🍔
⚠️ 꼭 확인하세요! 다음 편으로 넘어가기 전에:
- MySQL 서버가 실행 중인지 확인
- springdb 데이터베이스가 생성되었는지 확인
- tbl_board 테이블이 존재하는지 확인