로컬에서는 기본값으로 H2 인메모리 DB를 사용합니다. Linux 배포 환경에서는 Ubuntu, MySQL, systemd, nginx를 사용합니다.
chmod +x gradlew
./gradlew clean bootJar빌드 결과물은 build/libs/*.jar에 생성됩니다.
- Spring Boot 기본 포트:
8080 - nginx 외부 접속 포트:
80 - nginx는
80번 포트 요청을 Spring Boot의8080번 포트로 전달합니다.
외부 요청 → nginx:80 → Spring Boot:8080
- 로컬 기본 DB: H2 인메모리 DB
- Linux 배포 DB: MySQL
- DB 이름:
gitassignment - DB 사용자:
gitassignment - DB 비밀번호: 배포 전
CHANGE_ME를 실제 비밀번호로 변경 - 스키마 생성 파일:
deploy/ubuntu/setup-db.sql
초기 애플리케이션 로그인 계정은 없습니다.
브라우저에서 /register로 회원가입한 뒤, 가입한 이메일과 비밀번호로 /login에서 로그인합니다.
브라우저에서 다음 경로를 확인합니다.
GET /register 회원가입 화면
POST /register 회원가입 처리
GET /login 로그인 화면
POST /login 로그인 처리
GET /mypage 마이페이지
POST /logout 로그아웃
확인 시나리오:
/register에서 이름, 이메일, 비밀번호로 회원가입합니다./login에서 이메일과 비밀번호로 로그인합니다.- 로그인 성공 시
/mypage로 이동하고 사용자 이름과 이메일이 표시됩니다. - 로그아웃 후
/mypage에 접근하면/login으로 리다이렉트됩니다.
리버스 프록시 적용 후에는 루트 경로(/)가 아니라 /login으로 접속해 확인합니다.
curl http://localhost/logingit clone https://github.com/gguip1-study/GIT-Assignment.git
cd GIT-Assignmentchmod +x deploy/ubuntu/install-packages.sh
./deploy/ubuntu/install-packages.sh설치되는 패키지:
- OpenJDK 21
- MySQL Server
- nginx
설치 후 mysql과 nginx는 systemd 서비스로 바로 실행되도록 설정됩니다.
먼저 deploy/ubuntu/setup-db.sql 파일의 CHANGE_ME를 실제 DB 비밀번호로 변경합니다.
sudo mysql < deploy/ubuntu/setup-db.sql이 SQL은 다음 작업을 수행합니다.
gitassignment데이터베이스 생성gitassignmentDB 사용자 생성users테이블 생성
서버 실행 시 JPA 설정은 DDL_AUTO=validate를 사용합니다.
따라서 테이블은 위 SQL로 생성하고, 애플리케이션 시작 시 JPA는 스키마가 엔티티와 맞는지만 검증합니다.
chmod +x gradlew
./gradlew clean bootJar
sudo useradd --system --home /opt/gitassignment --shell /usr/sbin/nologin gitassignment
sudo mkdir -p /opt/gitassignment
sudo cp build/libs/*.jar /opt/gitassignment/app.jar
sudo chown -R gitassignment:gitassignment /opt/gitassignment먼저 deploy/ubuntu/gitassignment.service 파일의 DB_PASSWORD=CHANGE_ME를 실제 DB 비밀번호로 변경합니다.
그 다음 systemd 서비스로 등록합니다.
sudo cp deploy/ubuntu/gitassignment.service /etc/systemd/system/gitassignment.service
sudo systemctl daemon-reload
sudo systemctl enable --now gitassignment
sudo systemctl status gitassignment --no-pager등록 후에는 다음 명령으로 애플리케이션을 관리할 수 있습니다.
sudo systemctl start gitassignment
sudo systemctl stop gitassignment
sudo systemctl restart gitassignment
sudo systemctl status gitassignment --no-pagersudo rm -f /etc/nginx/sites-enabled/default
sudo cp deploy/ubuntu/nginx-gitassignment.conf /etc/nginx/conf.d/gitassignment.conf
sudo nginx -t
sudo systemctl reload nginxnginx는 외부 80번 포트 요청을 Spring Boot 애플리케이션의 8080번 포트로 전달합니다.
외부 요청 → nginx:80 → Spring Boot:8080
Ubuntu 기본 nginx 사이트가 남아 있으면 curl localhost:80 실행 시 Spring Boot가 아니라 nginx welcome page가 표시됩니다.
이 경우 /etc/nginx/sites-enabled/default를 제거한 뒤 nginx를 reload 해야 합니다.
리버스 프록시 적용 여부는 다음 명령으로 확인합니다.
curl http://localhost/loginchmod +x scripts/*.sh
./scripts/app-start.sh
./scripts/app-stop.sh
./scripts/app-restart.sh
./scripts/app-logs.sh스크립트는 내부적으로 systemctl과 journalctl을 호출합니다.
sudo systemctl status mysql --no-pager
sudo systemctl status nginx --no-pager
sudo systemctl status gitassignment --no-pager
sudo journalctl -u gitassignment -f
sudo tail -f /var/log/nginx/gitassignment-access.logsrc/main/resources/application.yaml은 기본값으로 H2를 사용하고, 서버에서는 systemd 환경변수로 MySQL 설정을 주입합니다.
spring:
datasource:
url: ${DB_URL:jdbc:h2:mem:gitassignment;...}
driver-class-name: ${DB_DRIVER:org.h2.Driver}
username: ${DB_USERNAME:sa}
password: ${DB_PASSWORD:}systemd 서비스 파일에서는 다음 값을 설정합니다.
Environment="DB_URL=jdbc:mysql://localhost:3306/gitassignment?serverTimezone=Asia/Seoul&characterEncoding=UTF-8"
Environment="DB_DRIVER=com.mysql.cj.jdbc.Driver"
Environment="DB_USERNAME=gitassignment"
Environment="DB_PASSWORD=CHANGE_ME"
Environment="DDL_AUTO=validate"
Environment="H2_CONSOLE_ENABLED=false"