Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

GIT Assignment

Ubuntu 배포 가이드

로컬에서는 기본값으로 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 설정

  • 로컬 기본 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    로그아웃

확인 시나리오:

  1. /register에서 이름, 이메일, 비밀번호로 회원가입합니다.
  2. /login에서 이메일과 비밀번호로 로그인합니다.
  3. 로그인 성공 시 /mypage로 이동하고 사용자 이름과 이메일이 표시됩니다.
  4. 로그아웃 후 /mypage에 접근하면 /login으로 리다이렉트됩니다.

리버스 프록시 적용 후에는 루트 경로(/)가 아니라 /login으로 접속해 확인합니다.

curl http://localhost/login

1. 서버에서 저장소 받기

git clone https://github.com/gguip1-study/GIT-Assignment.git
cd GIT-Assignment

2. 패키지 설치

chmod +x deploy/ubuntu/install-packages.sh
./deploy/ubuntu/install-packages.sh

설치되는 패키지:

  • OpenJDK 21
  • MySQL Server
  • nginx

설치 후 mysql과 nginx는 systemd 서비스로 바로 실행되도록 설정됩니다.

3. MySQL 데이터베이스 생성

먼저 deploy/ubuntu/setup-db.sql 파일의 CHANGE_ME를 실제 DB 비밀번호로 변경합니다.

sudo mysql < deploy/ubuntu/setup-db.sql

이 SQL은 다음 작업을 수행합니다.

  • gitassignment 데이터베이스 생성
  • gitassignment DB 사용자 생성
  • users 테이블 생성

서버 실행 시 JPA 설정은 DDL_AUTO=validate를 사용합니다. 따라서 테이블은 위 SQL로 생성하고, 애플리케이션 시작 시 JPA는 스키마가 엔티티와 맞는지만 검증합니다.

4. 애플리케이션 빌드 및 설치

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

5. Spring Boot systemd 서비스 등록

먼저 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-pager

6. nginx 리버스 프록시 설정

sudo 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 nginx

nginx는 외부 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/login

7. 쉘 스크립트로 서비스 관리

chmod +x scripts/*.sh
./scripts/app-start.sh
./scripts/app-stop.sh
./scripts/app-restart.sh
./scripts/app-logs.sh

스크립트는 내부적으로 systemctl과 journalctl을 호출합니다.

8. 로그 및 서비스 상태 확인

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.log

9. 환경변수 기반 DB 설정

src/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"

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages