✔️ Previously on ...
nohup java -jar sbb-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
⚠️ h2-console의 데이터가 뜨지 않는 이유
서버에서도 h2 db의 데이터 파일인 local.mv.db가 새로 만들어지기 때문
해당 파일 생성된 것을 서버에서 확인 가능
✔️ 서버 스크립트 생성하기
▪︎ SBB 시작 스크립트 작성하기
ubuntu@jumpto:~$ cd sbb
ubuntu@jumpto:~/sbb$ nano start.sh
// nano start.h or vi start.sh
- sbb/start.sh
#!/bin/bash
JAR=sbb-0.0.1-SNAPSHOT.jar
LOG=/home/ubuntu/sbb/sbb.log
nohup java -jar $JAR > $LOG 2>&1 &
- 파일 실행 권한 모드 변경
chmod +x start.sh
- 현재 디렉토리(./)에서 해당 파일 실행
./start.sh
✔️ SBB(Spring Boot Backend) 중지 스크립트 작성하기
- stop.sh
#!/bin/bash
SBB_PID=$(ps -ef | grep java | grep sbb | awk '{print $2}')
if [ -z "$SBB_PID" ];
then
echo "SBB is not running"
else
kill -9 $SBB_PID
echo "SBB stopped."
fi
- jap 파일이 업로드 될 경우 순서대로 실행하기
./stop.sh
./start.sh
✔️ 서버 환경으로 분리하기
▪︎ 서버 환경 파일 생성하기
application.properties 파일 대신 application-prod.properties을 사용
서버 환경 파일로 application-abc.properties 파일을 사용하게 된다.
java -Dspring.profiles.active=prod -jar sbb-0.0.1-SNAPSHOT.jar
▫︎ h2 db에 pw 설정하기
- application-prod.properties
// 추가
spring.h2.console.settings.web-allow-others=true
spring.datasource.password=
- build.gradle 버전 수정
version = '0.0.2'
- jar file 생성
ps aux | grep java // 현재 java 상태 확인
// 전체빌드. 테스트 포함 + JAR 생성
./gradlew clean build
// 전체 프로젝트 빌드 + 테스트 + JAR 생성. 에러 발생 시 에러 로그를 자세히 출력함
./gradlew clean bootJar —stacktrace
// 전체 빌드에서 테스트 생략 ❌ 테스트 제외 + ✅ JAR 생성
./gradlew clean build -x test
// ❌ 테스트 제외 + ✅ JAR만 생성
./gradlew clean bootJar
✔️ 빌드 버전 변경하여 배포 파일 생성하기
ps aux | grep java // 현재 java 상태 확인
// 전체빌드. 테스트 포함 + JAR 생성
./gradlew clean build
// 전체 프로젝트 빌드 + 테스트 + JAR 생성. 에러 발생 시 에러 로그를 자세히 출력함
./gradlew clean bootJar —stacktrace
// 전체 빌드에서 테스트 생략 ❌ 테스트 제외 + ✅ JAR 생성
./gradlew clean build -x test
// ❌ 테스트 제외 + ✅ JAR만 생성
./gradlew clean bootJar
// 파일 생성 시간 확인 가능
ls -lh build/libs/sbb-0.0.1-SNAPSHOT.jar
- sbb-0.0.2.jar 서버에 업로드 하기
▪︎ 서버에 변경 내용 적용하기
sbb-0.0.2.jar 파일에 db pw를 변경했으므로, 기존 db file을 지워야한다(local.mv.db)
>> rm local.mv.db
- start.sh 수정
#!/bin/bash
JAR=sbb-0.0.2.jar
LOG=/home/ubuntu/sbb/sbb.log
nohup java -Dspring.profiles.active=prod -jar $JAR > $LOG 2>&1 &
- 서비스 재시작
./start.sh
▪︎ 서버의 H2 콘솔 접속하기
http://13.209.159.125:8080/h2-console/
jdbc:h2:~/local
pw 작성하고
Connect
조회하면 기존 db는 지워져서 데이터는 없다
✔️ 80번 포트로 웹 서비스 운영하기
8080포트 -> 실제 가장 많이 사용하는 80포트로 변경
- 1번 방법 : 비추
80번 포트로 서버를 실행하려면 루트 권한이 필요하고, SSL을 적용한 HTTPS 서비스를 운영하기가 쉽지 않기 때문
SSL을 적용하려면 도메인이 필요
sudo java -Dserver.port=80 -jar sbb-0.0.2.jar
엔진엑스(Nginx)나 아파치(Apache)와 같은 웹 서버를 사용해 80번 포트로 웹 서비스를 제공하려고 함
엔진엑스와 스프링 부트를 연동하여 80번 포트로 우리가 만든 SBB 서비스를 운영
▪︎ 엔진엑스 설치 및 설정하기
⚠️ 링크란?
이동(mv)이 아니고 원본을 가리키는 바로가기처럼 동작
// ubuntu 서버에 설치
sudo apt install nginx
cd /etc/nginx/sites-available/
// /etc/nginx/sites-available/에서 sbb 생성하기
sudo nano sbb or sudo vi sbb
// /etc/nginx/sites-available/sbb 내용 작성
// 웹 서버를 80번 포트로 서비스한다
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
// sbb 파일을 엔진엑스가 SBB 서비스의 설정 파일로 읽을 수 있도록
// sbb 파일을 /etc/nginx/sites-enabled 디렉터리에 링크해야 함
// 1. 이동
cd /etc/nginx/sites-enabled/
// 2. 기존 default 파일 삭제
sudo rm default
// 3. /etc/nginx/sites-available/sbb 파일을 /etc/nginx/sites-enabled/sbb 파일로 링크
sudo ln -s /etc/nginx/sites-available/sbb
▪︎ 엔진엑스 실행 및 적용하기
- 재실행 하고 웹 재접속 시 포트번호 빼도 접속 가능(자동으로 80생략해서)
sudo systemctl restart nginx
✔️ 로그 관리하기
▪︎ 서버 로그 분리하기
application-prod.properties
# JPA
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
# logging
logging.logback.rollingpolicy.max-history=30
logging.logback.rollingpolicy.max-file-size=100MB
logging.file.name=logs/sbb.log
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}-%i.log
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS,Asia/Seoul
▪︎ 서버에서 start.sh 변경하기
- start.sh
#!/bin/bash
JAR=sbb-0.0.3.jar
// logs 디렉터리 하위에 로그 파일(sbb.log)이 생성되도록 설정
LOG=/dev/null
export spring_profiles_active=prod
nohup java -jar $JAR > $LOG 2>&1 &
▪︎ 사용자 로그 작성하기
- QuestionController.java
package com.mysite.sbb.question;
(... 생략 ...)
import lombok.extern.slf4j.Slf4j;
@Slf4j // 롬복의 애너테이션 log 객체를 사용
@RequiredArgsConstructor
@Controller
@RequestMapping("/question")
public class QuestionController {
(... 생략 ...)
@GetMapping("/list")
public String list(Model model, @RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "kw", defaultValue = "") String kw) {
log.info("page:{}, kw:{}", page, kw);
Page<Question> paging = this.questionService.getList(page, kw);
model.addAttribute("paging", paging);
model.addAttribute("kw", kw);
return "question_list";
}
(... 생략 ...)
}
- 새로 배포하고 접속하기
build.gradle에 버전 3으로 변경하고 재업로드 후 ./start.sh
⚠️ 강의에선 도메인, http 설정 PostgreSQL 생략했으나 sql만 진행 해봄
✔️ PostgreSQL로 전환하기
규모가 작은 웹 서비스는 PostgreSQL, MySQL등 무료 DBMS 사용
▪︎ PostgreSQL 설치
- 리전 서울 선택
- 최신 PostgreSQL 선택
- 15$ 선택
- DB 이름 설정 후 생성
- 완료
엔드포인트는 DB의 주소이다
▪︎ 데이터베이스 생성하기
- postgresql client 먼저 설치
sudo apt install postgresql-client
- sbb DB 생성 밑줄은 endpoint db 주소
createdb sbb --username=dbmasteruser -h ls-xxxxxxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-2.rds.amazonaws.com
- 암호는 여기에 있음
▪︎ 데이터베이스 변경하기
- build.gradle
runtimeOnly 'com.h2database:h2' -> runtimeOnly 'org.postgresql:postgresql' 로 수정
- application-prod.properties
# DATABASE
spring.datasource.url=jdbc:postgresql://<데이터베이스주소>:5432/sbb
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=dbmasteruser
spring.datasource.password=<암호>
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
# logging
(... 생략 ...)
jar 재 생성 후 업로드
✔️ PostgreSQL 접속하기
- DB > 네트워킹 보안 - 퍼블릭모드로 변경
- 설치 - M1은 arm64로 설치
https://www.pgadmin.org/download/pgadmin-4-macos/
Download
pgAdmin 4 (macOS) Download Maintainer: pgAdmin Development Team A macOS App Bundle containing the pgAdmin 4 Desktop Runtime and Web application is available for Intel and Apple Silicon. The following macOS versions are supported: Platform Architecture Firs
www.pgadmin.org
- pgAdmin4 설치 후 실행
- Add NewServer 선택
- General > Name - sbb 작성
- Connection
- db주소
- 포트
- maintenance db
- username
- passworkd(save pw 설정)
- 접속완료!
'ICT 네트워크 과정' 카테고리의 다른 글
250619 :: AWS Lightsail 및 서버 설정 (1) | 2025.06.19 |
---|---|
250618 :: Spring detail 수정 (0) | 2025.06.18 |
250617 :: Spring Boot Q&A 게시판 - 사용자 기능 및 추천 시스템 (1) | 2025.06.17 |
0616 :: Spring boot Security, Login/Logout 구현 (1) | 2025.06.16 |
0613 :: Spring Boot 게시판 생성 (2) (1) | 2025.06.13 |