OCI 인스턴스 생성
JDK 설치
sudo apt update
✅ 설명
이 명령어는 Ubuntu의 패키지 목록을 최신 상태로 업데이트합니다.
Ubuntu는 소프트웨어를 다운로드하고 설치할 때, **패키지 관리자(apt, Advanced Package Tool)**를 사용합니다.
이때, 최신 버전의 소프트웨어 목록을 가져와야 하는데, apt update 명령어가 바로 그 역할을 합니다.
✅ 상세 동작
- /etc/apt/sources.list 파일에 등록된 **패키지 저장소(Repository)**에서 최신 패키지 정보를 가져옵니다.
- 인터넷에서 패키지 목록을 다운로드하여 로컬 데이터베이스를 업데이트합니다.
- 기존 패키지 목록과 비교하여 업데이트 가능한 패키지가 있는지 확인합니다.
✅ 출력 예시
sudo apt upgrade -y
✅ 설명
이 명령어는 설치된 모든 패키지를 최신 버전으로 업그레이드하는 역할을 합니다.
앞에서 apt update를 실행하여 새로운 패키지 목록을 가져왔으므로, 이제 이 정보를 기반으로 패키지를 실제로 업그레이드할 수 있습니다.
✅ 상세 동작
- apt update 후 패키지 목록을 확인한 결과, 업데이트 가능한 패키지가 있는 경우 해당 패키지를 새 버전으로 업그레이드합니다.
- 기존에 설치된 패키지와 새로운 버전의 패키지를 비교하고, 의존성 문제가 없는 경우 업그레이드를 수행합니다.
- -y 옵션을 추가하면, 사용자가 Y/N을 입력할 필요 없이 자동으로 "Yes"를 선택하여 업그레이드가 진행됩니다.
✅ 출력 예시
JDK 설치
sudo apt install openjdk-17-jdk -y
✅ 설명
이 명령어는 Ubuntu에서 OpenJDK 17을 다운로드하고 설치하는 역할을 합니다.
✅ 상세 동작
- apt install 명령어는 특정 패키지를 설치하는 기능을 수행합니다.
- openjdk-17-jdk 패키지를 다운로드하고 설치합니다.
- 필요하면 관련된 의존성 패키지(openjdk-17-jre, ca-certificates-java 등)도 자동으로 설치합니다.
- -y 옵션을 사용하면 사용자의 입력 없이 자동으로 설치가 진행됩니다.
✅ 출력 예시
✅ OCI Ubuntu 서버에서 백엔드 운영을 위한 설정 (방화벽, 보안, MySQL, Spring Boot 배포)
Ubuntu를 기반으로 Spring Boot WAR 파일을 배포하고 MySQL과 방화벽 보안 설정을 진행하는 전체 과정이야.
아래 내용을 순서대로 따라 하면 OCI 인스턴스에서 백엔드 서버를 완벽하게 운영할 수 있어 🚀
🔹 1. 서버 보안 설정 (필수)
OCI 인스턴스의 보안 강화를 위해 기본적인 방화벽과 SSH 설정을 먼저 해야 해.
✅ 1) 방화벽 설정 (ufw 사용)
OCI 기본 보안 그룹(Security List)에서도 설정해야 하지만, 서버 내부 방화벽도 설정하는 것이 보안상 안전해.
🔹 방화벽 활성화 (ufw enable)
sudo ufw status
위 명령어는 방화벽 상태를 확인하는 명령어이다.
inactive로 비활성화가 되어있음을 알 수 있음.
sudo ufw enable
위 명령어로 방화벽을 활성화 한다.
- 기본적으로 Ubuntu의 ufw 방화벽은 비활성화되어 있음.
- 활성화 후, 필요한 포트만 열어야 함.
🔹 Spring Boot, MySQL, SSH 포트 열기
sudo ufw allow 22/tcp # SSH 접속 허용
sudo ufw allow 8080/tcp # Spring Boot (또는 Tomcat) 포트 열기
sudo ufw allow 3306/tcp # MySQL 접근 허용 (외부에서 접근할 경우만)
sudo ufw allow 443/tcp # HTTPS 포트 열기 (SSL 적용 시)
sudo ufw allow 80/tcp # HTTP 포트 열기 (기본 웹 요청)
❗ MySQL 포트(3306)는 외부 접근이 불필요하면 열지 않는 것이 보안에 좋음.
👉 외부 접근 불필요한 경우, MySQL은 내부에서만 사용하도록 설정해야 함.
🔹 방화벽 규칙 확인
sudo ufw status
🔹 방화벽 적용
sudo ufw reload
다음 포스팅에서는 mysql 설치 톰켓 설치 정리
mysql 설치
sudo apt update # (Ubuntu/Debian 계열)
sudo apt install mysql-server -y
톰켓 설치
cd /opt
sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.39/bin/apache-tomcat-10.1.39.tar.gz
sudo tar -xvzf apache-tomcat-10.1.39.tar.gz
sudo mv apache-tomcat-10.1.39 tomcat
톰켓 실행 및 종료
cd /usr/local/tomcat/bin (이동)
./shutdown.sh (종료)
./startup.sh (실행)
우분투에서 netstate 설치
sudo apt update
sudo apt install net-tools -y
현재 열려있는 방화벽 포트 확인
sudo ufw status
방화벽 활성화 및 특정 포트 열어주기.
sudo ufw allow 443/tcp (433포트 열기)
sudo ufw reload (방화벽 리로드)
sudo ufw enable (방화벽 활성화)
✅ 1단계: MySQL 설치 확인 및 초기 보안 설정
sudo systemctl status mysql
→ active (running) 상태인지 확인!
✅ 2단계: MySQL에 접속해서 외부 접속 허용하기
sudo mysql -u root -p
비밀번호 입력 후 MySQL 접속.
① root 계정 외부 접속 허용 (혹은 별도 유저 생성 권장)
운영 환경에선 보통 root 외에 별도 유저를 만들어서 사용함.
-- 로컬 PC에서 접근할 사용자 계정 생성
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
-- 모든 DB 접근 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' WITH GRANT OPTION;
-- 변경사항 적용
FLUSH PRIVILEGES;
✅ 3단계: MySQL 설정 파일 수정 (포트 및 외부 접속 허용)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address 항목 수정
bind-address = 0.0.0.0
기본값은 127.0.0.1이라 외부 접속이 안 돼. 0.0.0.0은 모든 IP에서 접속 허용이란 뜻.
저장 후 MySQL 재시작
sudo systemctl restart mysql
✅ 4단계: 방화벽(UFW)에서 MySQL 포트(3306) 열기
sudo ufw allow 3306
sudo ufw reload
UFW가 비활성화 상태면 다음으로 확인:
sudo ufw status
✅ 5단계: 로컬 PC에서 접속 테스트
Workbench, DBeaver 또는 CLI에서 접속:
- 호스트: 서버의 공인 IP 주소 (예: 123.123.123.123)
- 포트: 3306
- 사용자명: your_user
- 비밀번호: your_password
webapps 접근 권한 모두 허용
sudo chmod -R 755 /opt/tomcat/webapps
sudo chmod -R 750 /opt/tomcat/webapps
도메인생성
도메인이란 사람이 이해하기 쉽게 ip를 연결시키는것이라고 보면 됩니다. 보통 사람들이 google을 ip쳐서 들어가는것이 아닌 google.com 으로 들어가면 컴퓨터는 google.com의 ip를 확인하고 브라우저로 연결시켜주게 됩니다.
google.com을 쳤을때 실제로 들어가는건 위 IP 입니다.
그래서 저희또한 google.com처럼 도메인을 사야하는데.. 일단 테스트 용도이니 돈투자가 아까운 사람들을 위해 무료 도메인인 duck dns를 사용하려고합니다.
duck dns에 GCP IP 연동하기
일단 Duck DNS로 가서 구글 ID로 로그인 하도록 합니다.
https://www.duckdns.org/
로그인 하면 사용법은 매우 간단합니다.
sub 도메인 항목에 원하는 도메인을 넣고 add domain을 클릭하면됩니다.
저는 일단 dalso.duckdns.org로 등록해보겠습니다.
그럼 위처럼 도메인이 등록되고 current ip를 선택하게 됩니다.
여기에 VM 인스턴스의 외부 IP를 입력해주고 update해줍니다.
이렇게 success가 뜨게되면 웹브라우저로 한번 접속해봅시다.
SSL 무료 인증서 발급 및 톰켓에 연동
무료로 HTTPS 적용하는 2가지 방법
1.Self-Signed SSL 인증서 (테스트용, 내부 사용)
- 직접 서버에서 SSL 인증서를 생성해서 HTTPS 활성화
- 단점: 브라우저에서 "보안 경고" 발생 (테스트용 추천)
2.Let's Encrypt SSL 인증서 (실제 서비스 추천) 🔥
- 무료 SSL 인증서 발급 (정식 인증, 브라우저에서 신뢰됨)
- 인증서 자동 갱신 가능
- 실제 서비스 운영 시 추천
필자는 2번째 방식을 사용하겠다..
2. Let's Encrypt SSL 적용 (무료 SSL, 추천)
Let's Encrypt는 무료 SSL 인증서를 제공하며, 브라우저에서 신뢰하는 인증서라 "보안 경고 없음"!
리눅스 서버에서 아래 명령어를 입력하여 certbot을 설치한다. 인증서 발급을 위한 도구이다.
Certbot 설치
sudo apt update
sudo apt install certbot -y
Let's Encrypt 인증서 발급
sudo certbot certonly --standalone -d yourdomain.com
✔ yourdomain.com → 실제 사용 중인 도메인 입력
✔ 인증서 경로: /etc/letsencrypt/live/yourdomain.com/ 경로에 SSL 인증서가 생성됨
Tomcat server.xml 설정
🔹 HTTPS 설정 수정
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateFile="/etc/letsencrypt/live/yourdomain.com/fullchain.pem" certificateKeyFile="/etc/letsencrypt/live/yourdomain.com/privkey.pem" type="RSA" />
</SSLHostConfig>
</Connector>
🔹 HTTP 요청을 HTTPS(443)로 리디렉트
Tomcat 재시작
sudo systemctl restart tomcat
./startup.sh
이제 https://yourdomain.com/ 으로 접속하면 HTTPS 적용됨!
무료 인증서라 브라우저에서 보안 경고 없음
보안 그룹(Security List)에서 443 포트 열기
🔹 Oracle Cloud에서 443(HTTPS) 포트가 열려 있어야 외부에서 접근 가능!
- OCI 콘솔 → Networking → Security List 이동
https://kwakscoding.tistory.com/65
Oracle cloud - 방화벽 허용 / 외부 접속 포트 설정
IntroCloud instance에 Web server나 api server를 띄워도 접속이 안될 때가 있다.이는 포트가 열려있지 않아 접근을 모두 차단하기 때문에 발생하는 현상인데, 외부에서 접근할 수 있도록 포트를 허용해보
kwakscoding.tistory.com
최종 정리 (무료 HTTPS 적용)
SSL인증서 발급 2가지
Self-Signed SSL (테스트용) | 바로 가능 | 브라우저에서 보안 경고 발생 |
Let's Encrypt (실제 서비스용🔥) | 무료, 자동 갱신 가능 | 도메인이 필요함 |
정리: SSL 인증서 발급 후 Tomcat에 적용하는 과정
단계설명
1. SSL 인증서 발급 | Self-Signed (테스트용) 또는 Let's Encrypt (운영용) |
2. Tomcat에 SSL 적용 | server.xml에서 HTTPS 설정 (443 포트 활성화) |
3. Tomcat 재시작 | HTTPS 적용 완료 |
4. 브라우저에서 HTTPS 테스트 | https://yourdomain.com/ 정상 동작 확인 |
1. 방화벽(ufw)에서 포트 443이 허용되어 있는지 확인
포트는 열려 있지만, 방화벽(UFW)이 HTTPS(443)를 차단하면 접속이 안 될 수 있음!
-현재 방화벽 상태 확인
sudo ufw status
출력 결과에서 443 ALLOW가 있어야 정상
-만약 443이 없으면 추가
sudo ufw allow 443/tcp
sudo ufw reload
sudo ufw enable
이제 HTTPS 트래픽이 차단되지 않음!
자.. 문제는 인증서 만료이다 6개월마다 재 갱신을 해줘야 한다는 단점이 있다. 무료인증서라 어쩔수없는듯?
그래서 리눅스의 crontab에 등록해서 자동 실행이 되도록 하였다. tomcat이 돌고있는동안은 인증서가 재발급되지 않는 현상이 발생하였다. 8080포트를 꺼줘야했다... 그래서 톰켓 종료 후 인증서 갱신 후 톰켓 재실행 하는 방식으로 crontab을 등록하였다. 아래는 방법이다.
certbot renew 실행할 때 Tomcat 자동 종료 후 다시 켜는 방법
현재 systemctl이 없으므로 Tomcat을 수동으로 관리해야 해.
그럼 자동화 스크립트에서 shutdown.sh와 startup.sh를 사용하도록 수정하면 된다.
Tomcat을 중지하고 SSL 인증서 갱신 후 다시 실행하는 스크립트
sudo nano /root/cert_renew.sh
아래 내용을 입력하고 저장 (CTRL + X → Y → ENTER):
#!/bin/bash echo "Stopping Tomcat..."
sudo /usr/local/tomcat/bin/shutdown.sh
sleep 5 # Tomcat이 완전히 종료될 시간을 주기 위해 잠시 대기
echo "Renewing SSL certificate..."
sudo certbot renew --standalone
echo "Starting Tomcat..."
sudo /usr/local/tomcat/bin/startup.sh
echo "SSL certificate renewal completed!"
설명
- shutdown.sh → Tomcat 중지
- sleep 5 → Tomcat 종료 대기 (필요한 경우 5초 이상으로 조정 가능)
- certbot renew --standalone → 인증서 갱신
- startup.sh → Tomcat 다시 실행
실행 권한 부여
sudo chmod +x /root/cert_renew.sh
crontab에 등록해서 자동 실행
sudo crontab -e
맨 아래에 다음 줄 추가:
0 3 * * * /root/cert_renew.sh >> /var/log/cert_renew.log 2>&1
설명:
- 0 3 * * * → 매일 새벽 3시에 실행
- /root/cert_renew.sh → 갱신 스크립트 실행
- >> /var/log/cert_renew.log 2>&1 → 실행 로그를 /var/log/cert_renew.log에 저장
확인 및 테스트
🔹 crontab이 정상 등록되었는지 확인
sudo crontab -l
🔹 수동으로 실행해서 잘 되는지 확인
sudo /root/cert_renew.sh
이제 이 방식으로 자동 갱신이 가능해짐.
'DevOps' 카테고리의 다른 글
[운영 SpringBoot 배포]오라클 클라우드 + 톰켓설치 + WAR배포 + SSL인증서 + 도메인연동 (1) | 2025.03.05 |
---|---|
[nGrinder] nGrinder설치 및 성능테스트 부하 테스트 사용법 (spring boot , tomcat) (0) | 2025.03.05 |
[Oracle cloud] 방화벽 허용 / 외부 접속 포트 설정 (0) | 2025.02.26 |
[FileZilla] Putty PPK 파일 이용해서 로그인 하는 방법 (0) | 2025.02.25 |
[NCP] 네이버클라우드서비스 HTTPS로 변경시 503오류 발생 (0) | 2024.08.05 |