# XIT Framework 개발 가이드
## 목차
- [1. 프로젝트 개요](#1-프로젝트-개요)
- [2. 기술 스택 및 라이브러리 버전](#2-기술-스택-및-라이브러리-버전)
- [2.1 핵심 기술 스택](#tech-stack)
- [2.2 주요 라이브러리](#main-libraries)
- [3. 프로젝트 구조](#3-프로젝트-구조)
- [3.1 디렉토리 구조](#directory-structure)
- [3.2 패키지 구조](#package-structure)
- [4. 주요 설정 파일](#4-주요-설정-파일)
- [4.1 application.yml](#application-yml)
- [4.2 application-local.yml](#application-local-yml)
- [4.3 application-dev.yml](#application-dev-yml)
- [4.4 application-prd.yml](#application-prd-yml)
- [4.5 build.gradle](#build-gradle)
- [4.6 logback-spring.xml](#logback-spring-xml)
- [4.7 mybatis-config.xml](#mybatis-config-xml)
- [4.8 데이터베이스 스키마](#database-schema)
- [5. 주요 기능 및 사용법](#5-주요-기능-및-사용법)
- [5.1 프로젝트 구조 패턴](#project-structure-pattern)
- [5.2 핵심 기능 흐름](#user-management-example)
- [5.3 공통 유틸리티](#common-utilities)
- [5.4 레이아웃 구성](#layout-configuration)
- [5.5 보안 기능](#security-features)
- [5.6 배치 작업 관리](#batch-management)
- [6. 개발 가이드라인](#6-개발-가이드라인)
- [6.1 코드 작성 규칙](#code-writing-rules)
- [6.2 디렉토리 구조 가이드](#directory-structure-guide)
- [6.3 UI 컴포넌트 가이드](#ui-component-guide)
- [7. 배포 가이드](#7-배포-가이드)
- [7.1 빌드 방법](#build-method)
- [7.2 프로필 설정](#profile-settings)
- [7.3 외부 WAS를 이용한 배포](#external-was-deployment)
- [7.4 WAR로 배포 및 실행](#war-deployment-execution)
- [7.5 배포 환경 설정](#deployment-environment-settings)
- [7.6 배포 체크리스트](#deployment-checklist)
- [8. 참고 자료](#8-참고-자료)
## 1. 프로젝트 개요
XIT Framework는 Spring Boot 기반의 웹 애플리케이션 프레임워크로, 전자정부 프레임워크를 확장하여 개발된 프로젝트입니다. 이 문서는 XIT Framework의 구조, 기술 스택, 주요 기능 및 사용법에 대한 종합적인 가이드를 제공합니다.
## 2. 기술 스택 및 라이브러리 버전
2.1 핵심 기술 스택
| 기술 | 버전 | 설명 |
|------|------|------|
| Java | 개발: 1.8, 배포: 1.8 | 자바 개발 및 실행 환경 |
| Spring Boot | 2.7.18 | 스프링 기반 애플리케이션 개발 프레임워크 |
| 전자정부 프레임워크 | 4.3.0 | 한국 정부 표준 웹 개발 프레임워크 |
| Servlet | 3.1 | 웹 애플리케이션 표준 |
| Gradle | - | 빌드 및 의존성 관리 도구 |
| MariaDB | - | 관계형 데이터베이스 |
2.2 주요 라이브러리
| 라이브러리 | 버전 | 설명 |
|------------|------|------|
| MyBatis | 2.3.1 | SQL 매핑 프레임워크 |
| Apache Tiles | 3.0.8 | 레이아웃 템플릿 엔진 |
| TOAST UI Grid | 4.19.2 | 자바스크립트 그리드 라이브러리 |
| Lombok | - | 자바 코드 생성 라이브러리 |
| Apache Commons Text | 1.10.0 | 텍스트 처리 유틸리티 |
| Apache POI | 5.3.0 | 엑셀 파일 처리 라이브러리 |
| Quartz | - | 배치 스케줄링 라이브러리 |
| jsqlparser | 4.5 | SQL 파싱 라이브러리 |
## 3. 프로젝트 구조
3.1 디렉토리 구조
```
xit-framework/
├── DB-DDL/ # 데이터베이스 스크립트
│ └── maria/ # MariaDB 스크립트
│ ├── ddl/ # 테이블 정의 스크립트
│ └── dml/ # 샘플 데이터 스크립트
├── src/
│ ├── main/
│ │ ├── java/ # 자바 소스 코드
│ │ │ ├── egovframework/ # 전자정부 프레임워크 확장 코드
│ │ │ └── go/kr/project/ # 프로젝트 소스 코드
│ │ ├── resources/ # 리소스 파일
│ │ │ ├── mybatis/ # MyBatis 설정 및 매퍼
│ │ │ └── application.yml # 애플리케이션 설정 파일
│ │ └── webapp/ # 웹 리소스
│ │ ├── resources/ # 정적 리소스 (CSS, JS, 이미지 등)
│ │ └── WEB-INF/views/ # JSP 뷰 파일
│ └── test/ # 테스트 코드
└── build.gradle # Gradle 빌드 스크립트
```
3.2 패키지 구조
```
go.kr.project/
├── batch/ # 배치 작업 관련 기능
├── bbs/ # 게시판 관련 기능
├── common/ # 공통 컴포넌트
├── login/ # 로그인 관련 기능
├── main/ # 메인 페이지 관련 기능
├── mypage/ # 마이페이지 관련 기능
├── system/ # 시스템 관리 기능
│ ├── auth/ # 권한 관리
│ ├── code/ # 코드 관리
│ ├── group/ # 그룹 관리
│ ├── menu/ # 메뉴 관리
│ ├── role/ # 역할 관리
│ └── user/ # 사용자 관리
└── template/ # 템플릿 관련 기능 (예: Excel)
egovframework/
├── config/ # 프레임워크 설정
├── exception/ # 예외 처리
├── filter/ # 필터
├── interceptor/ # 인터셉터
└── util/ # 유틸리티 클래스
```
## 4. 주요 설정 파일
4.1 application.yml
애플리케이션의 공통 설정을 정의합니다.
```yaml
# 공통 설정
spring:
profiles:
active: local # 활성화 프로필 (local, dev, prd)
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
# 서버 설정
server:
port: 8080
servlet:
context-path: /
# 데이터베이스 및 MyBatis 설정
Globals:
DbType: maria # DB 종류
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/**/*_${Globals.DbType}.xml
# Swagger UI 경로
springdoc:
swagger-ui:
path: /swagger-ui.html
# 로그인 페이지 URL
login:
url: /login/login.do
```
4.2 application-local.yml
로컬 개발 환경(`local` 프로필)의 설정을 정의합니다.
```yaml
# 로컬 프로필 활성화
spring:
config:
activate:
on-profile: local
# 데이터베이스 연결
datasource:
url: jdbc:mariadb://[HOST]:[PORT]/[DB_NAME]?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
username: [USER]
password: [PASSWORD]
# 로깅 설정
logging:
file:
path: d:/data/xit-framework/logs # 로그 파일 경로
level:
go.kr.project: DEBUG # 프로젝트 패키지 로그 레벨
# 파일 업로드 경로
file:
upload:
path: D:\xit-framework-file
```
4.3 application-dev.yml
개발 서버 환경(`dev` 프로필)의 설정을 정의합니다.
```yaml
# 개발 프로필 활성화
spring:
config:
activate:
on-profile: dev
# 데이터베이스 연결
datasource:
url: jdbc:mariadb://[DEV_HOST]:[PORT]/[DB_NAME]?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
username: [USER]
password: [PASSWORD]
# 로깅 설정
logging:
file:
path: /data/logs/xit-framework # 로그 파일 경로
level:
go.kr.project: DEBUG
# 파일 업로드 경로
file:
upload:
path: /data/upload/xit-framework-file
```
4.4 application-prd.yml
운영 서버 환경(`prd` 프로필)의 설정을 정의합니다.
```yaml
# 운영 프로필 활성화
spring:
config:
activate:
on-profile: prd
# 데이터베이스 연결
datasource:
url: jdbc:mariadb://[PRD_HOST]:[PORT]/[DB_NAME]?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
username: [USER]
password: [PASSWORD]
# 서버 세션 타임아웃
server:
servlet:
session:
timeout: 60m
# 로깅 설정 (WARN 레벨)
logging:
file:
path: /data/logs/xit-framework # 로그 파일 경로
level:
go.kr.project: WARN
org.springframework: WARN
# 파일 업로드 경로
file:
upload:
path: /data/upload/xit-framework-file
```
4.5 build.gradle
프로젝트의 빌드 및 주요 의존성을 정의합니다.
```gradle
// 1. 플러그인 설정
plugins {
id 'org.springframework.boot' version '2.7.18'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'java'
id 'war'
}
// 2. 기본 정보
group = 'go.kr.project'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = JavaVersion.VERSION_1_8
}
// 3. 라이브러리 버전 관리
ext {
tomcatVersion = '9.0.78'
tilesVersion = '3.0.8'
mybatisVersion = '2.3.1'
egovFrameVersion = '4.3.0'
}
// 4. 주요 의존성
dependencies {
// 스프링 부트
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-quartz' // Quartz 스케줄러
// 전자정부 프레임워크
implementation "org.egovframe.rte:org.egovframe.rte.ptl.mvc:${egovFrameVersion}"
// 데이터베이스
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisVersion}"
implementation 'org.mariadb.jdbc:mariadb-java-client'
// 뷰 (JSP & Tiles)
implementation 'javax.servlet:jstl'
implementation "org.apache.tiles:tiles-jsp:${tilesVersion}"
// 유틸리티
implementation 'org.apache.commons:commons-text:1.10.0'
implementation 'org.apache.poi:poi:5.3.0' // Excel
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0' // Swagger
// 개발용
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// 테스트
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 배포용
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
// 5. 빌드 결과물 설정
war {
archiveFileName = 'xit-framework.war'
}
bootWar {
archiveFileName = 'xit-framework-boot.war'
}
```
4.6 logback-spring.xml
애플리케이션의 로깅 정책을 설정합니다. `logback-spring.xml`은 Spring Profiles (`local`, `dev`, `prd`)와 연동하여 환경별로 다른 로깅 전략을 사용합니다.
**주요 로깅 전략:**
1. **Appenders (로그 출력 위치):**
* `CONSOLE_COLOR`: 로컬/개발 환경에서 색상이 적용된 로그를 콘솔에 출력합니다.
* `CONSOLE`: 운영 환경에서 표준 콘솔 출력을 담당합니다.
* `ASYNC_FILE`: 모든 환경에서 비동기적으로 파일에 로그를 기록하여 성능 저하를 최소화합니다. 로그 파일은 `application-{profile}.yml`에 정의된 경로에 저장됩니다.
2. **Log Pattern (로그 형식):**
* 로그는 `시간 [스레드] 로그레벨 로거 - 메시지` 형식으로 기록됩니다.
* 예: `2025-08-13 10:00:00.123 [http-nio-8080-exec-1] INFO go.kr.project.main.MainController - Main page access`
3. **Rolling Policy (로그 파일 관리):**
* 로그 파일은 `10MB`에 도달하면 분할됩니다.
* 로그 파일은 최대 30일 동안 보관됩니다.
4. **Profile-specific Levels (환경별 로그 레벨):**
* **local, dev:** `INFO` 레벨을 기본으로 사용하며, `go.kr.project` 패키지는 `DEBUG` 레벨로 설정하여 상세한 디버깅이 가능합니다.
* **prd:** `WARN` 레벨을 기본으로 사용하여, 경고 및 오류 로그만 기록합니다.
**예시 (Appender 설정 부분):**
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %msg%n
${LOG_PATH}/${LOG_FILE}.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${MAX_FILE_SIZE}
${MAX_HISTORY}
```
4.7 mybatis-config.xml
MyBatis 설정을 정의하는 파일입니다.
```xml
```
4.8 데이터베이스 스키마
주요 테이블 및 시퀀스 생성 스크립트는 `DB-DDL/maria/ddl/xitframework/` 디렉토리에 각 객체별 파일로 정의되어 있습니다:
- **tb_user**: 사용자 정보
- **tb_group**: 그룹 정보
- **tb_role**: 역할 정보
- **tb_menu**: 메뉴 정보
- **tb_group_role**: 그룹-역할 매핑
- **tb_role_menu**: 역할-메뉴 매핑
- **tb_code_group**: 코드 그룹
- **tb_code_detail**: 코드 상세
- **tb_bbs_config**: 게시판 설정
- **tb_bbs_post**: 게시물
- **tb_bbs_file**: 게시판 파일
- **tb_user_session**: 사용자 세션
- **tb_login_log**: 로그인 로그
MyBatis 매퍼 파일은 `src/main/resources/mybatis/mapper/` 디렉토리에 모듈별로 구성되어 있습니다.
## 5. 주요 기능 및 사용법
5.1 프로젝트 구조 패턴
XIT Framework는 MVC(Model-View-Controller) 패턴을 기반으로 하며, 각 기능은 **Controller, Service, Mapper, Model** 계층으로 명확하게 분리됩니다.
- **Controller**: HTTP 요청을 처리하고, Service를 호출한 뒤, 결과를 View 또는 JSON으로 응답합니다.
- **Service**: 비즈니스 로직을 구현합니다.
- **Mapper**: MyBatis를 통해 데이터베이스 SQL 쿼리를 실행합니다.
- **Model (VO)**: 데이터의 구조를 정의하는 객체입니다.
5.2 핵심 기능 흐름
대부분의 기능은 '사용자 관리'와 유사한 흐름을 따릅니다.
1. **Controller**: `@RequestMapping`으로 URL을 정의하고, 사용자 입력을 `VO`에 바인딩하여 Service로 전달합니다.
- `@PostMapping("/list.ajax")`: 목록 조회
- `@PostMapping("/register.ajax")`: 등록/수정 처리
2. **Service**: 비즈니스 로직을 처리하고, 필요한 경우 Mapper를 호출하여 DB와 상호작용합니다.
3. **Mapper**: XML에 정의된 SQL을 실행하여 결과를 반환합니다.
5.3 공통 유틸리티
5.3.1 API 응답 유틸리티
일관된 형식의 Ajax 응답을 위해 `ApiResponseUtil`을 사용합니다.
- **성공**: `ApiResponseUtil.success(data, "메시지");`
- **성공 (그리드)**: `ApiResponseUtil.successWithGrid(list, pagingVO);`
- **실패**: `ApiResponseUtil.error("에러 메시지");`
5.4 레이아웃 구성
UI 레이아웃은 **Apache Tiles**를 사용하여 관리합니다.
- **기본 레이아웃**: `src/main/webapp/WEB-INF/views/layouts/base/default.jsp`
- **주요 구성 요소**: `menu_header`, `menu`, `main_header`, `main` 등의 속성으로 페이지의 각 부분을 조립합니다.
- **주요 UI 라이브러리**: Bootstrap, TOAST UI Grid, DataTables 등이 사용되며, `xit-common.js`, `xit-tui-grid.js` 등 공통 스크립트에서 제어됩니다.
5.5 보안 기능
- **XSS 필터 (`XssFilter.java`)**: 모든 요청에 대해 XSS 공격을 방지하기 위해 파라미터를 필터링합니다.
- **리퍼러 체크 및 권한 관리 (`AuthInterceptor.java`)**:
- 허용되지 않은 외부 도메인에서의 요청을 차단합니다.
- 사용자 세션과 권한을 체크하여 인가되지 않은 페이지 접근을 막습니다.
- **권한 구조**: **사용자 > 그룹 > 역할 > 메뉴**의 계층적 구조를 통해 유연하고 세밀한 권한 관리를 지원합니다. 권한 정보는 DB 테이블(`TB_USER`, `TB_GROUP`, `TB_ROLE`, `TB_MENU` 등)을 통해 관리됩니다.
5.6 배치 작업 관리
**Quartz 스케줄러**를 기반으로 배치 작업을 관리합니다.
- **주요 기능**: DB에 등록된 배치 작업의 조회, 즉시 실행, 스케줄 변경, 일시정지/재개, 실행 이력 및 로그 관리가 가능합니다.
- **구현**: `Job` 인터페이스를 구현하여 새로운 배치 작업을 작성하고, DB(`TB_BATCH_JOB_INFO`)에 등록하여 사용합니다.
- **API**: `BatchJobController`를 통해 REST API 형식으로 배치 제어 기능을 제공합니다.
## 6. 개발 가이드라인
6.1 코드 작성 규칙
1. **Java 개발 및 수정**
- `src/main/java/go/kr/project/system` 하위에 있는 프로그램을 참조하여 구조, 패턴, 스타일을 사용합니다.
- 클래스, 메소드, 변수에 대한 주석을 작성합니다.
2. **JSP 개발 및 수정**
- `src/main/webapp/WEB-INF/views/system` 하위에 있는 프로그램을 참조하여 구조, 패턴, 스타일을 사용합니다.
- JSP 페이지에서 태그의 id 속성은 중복되지 않도록 합니다.
- 모든 URL은 `` 태그로 감싸줍니다.
3. **데이터베이스 관련**
- 신규로 생성되는 테이블은 `DB-DDL/maria/ddl.sql`에 등록합니다.
- `ON DELETE SET NULL`, `ON DELETE CASCADE` 등의 ON 구문은 사용하지 않고, 프로그램에서 직접 구현합니다.
4. **Ajax 처리**
- Ajax 요청 시 `src/main/java/egovframework/util/ApiResponseUtil.java`와 `src/main/java/egovframework/util/ApiResponseEntity.java`를 참조하여 응답을 처리합니다.
- Ajax 응답을 처리할 때는 `response.success` 대신 `response.result`를 사용합니다.
6.2 디렉토리 구조 가이드
1. **컨트롤러 클래스**
- `go.kr.project.{모듈명}.controller` 패키지에 위치합니다.
- 클래스명은 `{기능명}Controller.java` 형식으로 작성합니다.
2. **서비스 클래스**
- `go.kr.project.{모듈명}.service` 패키지에 위치합니다.
- 인터페이스는 `{기능명}Service.java`, 구현체는 `{기능명}ServiceImpl.java` 형식으로 작성합니다.
3. **매퍼 인터페이스**
- `go.kr.project.{모듈명}.mapper` 패키지에 위치합니다.
- 클래스명은 `{기능명}Mapper.java` 형식으로 작성합니다.
4. **모델 클래스**
- `go.kr.project.{모듈명}.model` 패키지에 위치합니다.
- 클래스명은 `{기능명}VO.java` 형식으로 작성합니다.
5. **JSP 파일**
- `src/main/webapp/WEB-INF/views/{모듈명}/{기능명}` 디렉토리에 위치합니다.
- 파일명은 `{화면명}.{레이아웃명}.jsp` 형식으로 작성합니다.
6.3 UI 컴포넌트 가이드
1. **TOAST UI Grid**
- 데이터 그리드를 표시할 때 TOAST UI Grid를 사용합니다.
- 그리드 초기화 및 설정은 `xit-tui-grid.js`를 참조합니다.
2. **폼 유효성 검사**
- 폼 유효성 검사는 `xit-validation.js`를 사용합니다.
3. **공통 스타일**
- 공통 스타일은 `common.css`와 `xit-common.css`를 사용합니다.
## 7. 배포 가이드
7.1 빌드 방법
7.1.1 WAR 파일 빌드
```bash
# Gradle 빌드 (테스트 포함)
./gradlew clean build
# Gradle 빌드 (테스트 제외)
./gradlew clean build -x test
# WAR 파일만 생성
./gradlew war
```
7.1.2 bootWar 파일 빌드
Spring Boot 애플리케이션은 실행 가능한 WAR 파일로 빌드할 수 있습니다.
```bash
# 실행 가능한 WAR 파일 생성
./gradlew bootWar
```
7.2 프로필 설정
XIT Framework는 다양한 환경에 맞게 설정할 수 있는 프로필 시스템을 제공합니다.
7.2.1 기본 프로필
프로젝트는 다음과 같은 프로필을 제공합니다:
| 프로필 | 설명 | 주요 설정 |
|--------|------|-----------|
| local | 로컬 개발 환경 | 개발 도구 활성화, 로컬 경로 사용 |
| dev | 개발 서버 환경 | 개발 서버 설정, 세션 타임아웃 30분 |
| prd | 운영 서버 환경 | 운영 서버 설정, 리눅스 경로 사용 |
7.2.2 프로필 활성화 방법
애플리케이션 속성 파일 설정
`application.yml` 파일에서 기본 프로필을 설정할 수 있습니다:
```yaml
spring:
profiles:
active: local # local, dev, prd 중 선택
```
명령행 인수로 프로필 설정
애플리케이션 실행 시 명령행 인수로 프로필을 지정할 수 있습니다:
```bash
# JAR 파일 실행 시
java -jar xit-framework.war --spring.profiles.active=dev
# Gradle로 실행 시
./gradlew bootRun --args='--spring.profiles.active=dev'
```
환경 변수로 프로필 설정
환경 변수를 통해 프로필을 설정할 수 있습니다:
```bash
# Windows
set SPRING_PROFILES_ACTIVE=dev
java -jar xit-framework.war
# Linux/macOS
export SPRING_PROFILES_ACTIVE=dev
java -jar xit-framework.war
```
7.3 외부 WAS를 이용한 배포
7.3.1 Tomcat에 WAR 파일 배포
1. `build/libs` 디렉토리에 생성된 `xit-framework.war` 파일을 Tomcat의 `webapps` 디렉토리에 복사합니다.
2. Tomcat을 재시작합니다.
7.3.2 외부 WAS에서 프로필 설정
Tomcat에서 프로필 설정
Tomcat의 `setenv.bat`(Windows) 또는 `setenv.sh`(Linux/macOS) 파일에 다음 내용을 추가합니다:
**Windows (setenv.bat)**:
```batch
set "JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active=dev"
```
**Linux/macOS (setenv.sh)**:
```bash
export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev"
```
WAS의 JVM 옵션으로 설정
대부분의 WAS에서는 JVM 옵션을 통해 시스템 속성을 설정할 수 있습니다:
```
-Dspring.profiles.active=dev
```
web.xml에 시스템 속성 설정
`web.xml` 파일에 다음과 같이 시스템 속성을 설정할 수 있습니다:
```xml
spring.profiles.active
dev
```
7.4 WAR로 배포 및 실행
Spring Boot 애플리케이션은 bootWar로 빌드된 실행 가능한 WAR 파일로 배포할 수 있습니다.
7.4.1 bootWar 파일 실행
bootWar로 빌드된 WAR 파일은 내장 서버를 포함하고 있어 JAR 파일처럼 직접 실행할 수 있습니다:
```bash
# 기본 프로필로 실행
java -jar build/libs/xit-framework-boot.war
# 특정 프로필로 실행
java -jar build/libs/xit-framework-boot.war --spring.profiles.active=dev
# 포트 변경하여 실행
java -jar build/libs/xit-framework-boot.war --server.port=9090
# 메모리 설정을 추가하여 실행
java -Xms512m -Xmx1024m -jar build/libs/xit-framework-boot.war
# 로컬 테스트
java -jar build/libs/xit-framework-boot.war --spring.profiles.active=local --server.port=9090
```
7.4.2 외부 WAS에 배포하여 실행
bootWar로 빌드된 WAR 파일은 외부 WAS(Tomcat, JBoss, WebLogic 등)에 배포하여 실행할 수도 있습니다:
1. `build/libs` 디렉토리에 생성된 `xit-framework.war` 파일을 WAS의 배포 디렉토리에 복사합니다.
- Tomcat: `webapps` 디렉토리
- JBoss/WildFly: `deployments` 디렉토리
- WebLogic: 관리 콘솔을 통해 배포
2. WAS를 시작하거나 재시작합니다.
7.4.3 백그라운드 실행 (Linux/macOS)
내장 서버로 실행할 경우, 백그라운드에서 실행할 수 있습니다:
```bash
# nohup을 사용하여 백그라운드 실행
nohup java -jar build/libs/xit-framework.war > app.log 2>&1 &
# 실행 중인 프로세스 확인
ps -ef | grep java
```
7.4.4 Windows 서비스로 등록
Windows에서는 [winsw](https://github.com/winsw/winsw)와 같은 도구를 사용하여 Spring Boot 애플리케이션을 Windows 서비스로 등록할 수 있습니다.
7.5 배포 환경 설정
1. **Java 버전**: 배포 환경에서는 Java 1.8을 사용합니다.
2. **서버**:
- 내장 서버(bootWar 직접 실행): 내장된 Tomcat 9.0.78 사용
- 외부 서버(bootWar 배포): Tomcat 9.0.78 이상 권장
3. **데이터베이스**: MariaDB를 사용합니다.
4. **메모리 설정**: 애플리케이션 크기와 사용자 수에 따라 적절한 JVM 메모리 설정이 필요합니다.
7.6 배포 체크리스트
1. **프로필 설정 확인**: 배포 환경에 맞는 프로필이 활성화되었는지 확인합니다.
2. **데이터베이스 연결 확인**: 데이터베이스 연결 정보가 올바르게 설정되었는지 확인합니다.
3. **파일 업로드 경로 확인**: 파일 업로드 경로가 존재하고 쓰기 권한이 있는지 확인합니다.
4. **로그 경로 확인**: 로그 파일 경로가 존재하고 쓰기 권한이 있는지 확인합니다.
5. **메모리 설정 확인**: JVM 메모리 설정이 적절한지 확인합니다.
6. **포트 충돌 확인**: 사용할 포트가 다른 애플리케이션과 충돌하지 않는지 확인합니다.
## 8. 참고 자료
- [Spring Boot 공식 문서](https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/)
- [전자정부 프레임워크 가이드](https://www.egovframe.go.kr/wiki/doku.php)
- [MyBatis 공식 문서](https://mybatis.org/mybatis-3/ko/index.html)
- [TOAST UI Grid 공식 문서](https://ui.toast.com/tui-grid)
- [TOAST UI Editor 공식 문서](https://ui.toast.com/tui-editor)