이 글에서 얻는 것
- 클라우드 기초: VPC, Subnet, Security Group이 왜 필요한지 이해합니다. (집 주소와 대문 열쇠 비유)
- 서버 구축: EC2(컴퓨터)를 빌리고, RDS(DB)를 설정하여 연결하는 전체 흐름을 봅니다.
- 배포 운영:
nohup과systemd의 차이를 알고, “서버 끄면 앱도 꺼지는” 초보 티를 벗습니다.
1. AWS 네트워크 기본 (VPC)
아마존 클라우드는 거대한 땅입니다. 여기에 “내 땅(VPC)” 부터 울타리를 쳐야 합니다.
graph TD
subgraph VPC [VPC (10.0.0.0/16)]
subgraph PublicSubnet [Public Subnet]
EC2[Web Server (EC2)]
end
subgraph PrivateSubnet [Private Subnet]
RDS[(RDS Database)]
end
end
Internet((Internet)) <--> IGW[Internet Gateway] <--> EC2
EC2 <--> RDS
Internet --x RDS
style PublicSubnet fill:#e3f2fd,stroke:#2196f3
style PrivateSubnet fill:#ffebee,stroke:#f44336
- Public Subnet: 인터넷과 통신 가능 (웹 서버용)
- Private Subnet: 인터넷 직접 통신 불가 (DB용, 보안 강화)
2. EC2와 Security Group (방화벽)
EC2를 만들 때 가장 중요한 건 “누구에게 문을 열어줄 것인가” 입니다.
- Port 22 (SSH): 내 IP에서만 열어야 함. (전세계 해커들의 먹잇감 1순위)
- Port 80/443 (HTTP): 0.0.0.0/0 (누구나 접속 가능)
- Port 8080 (Spring): 보통 0.0.0.0/0 또는 로드밸런서 IP만 허용.
3. Java 앱 배포하기
1) JDK 설치
sudo yum install java-17-amazon-corretto -y
java -version
2) 실행 (초보 ver)
java -jar myapp.jar
# 터미널 끄면 앱도 꺼짐 (망함)
3) 실행 (중수 ver - nohup)
nohup java -jar myapp.jar &
# 백그라운드 실행되지만, 재부팅하면 안 켜짐
4) 실행 (고수 ver - systemd)
/etc/systemd/system/myapp.service 파일을 만듭니다.
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
User=ec2-user
ExecStart=/usr/bin/java -jar /home/ec2-user/myapp.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
이제 sudo systemctl start myapp 하면 서버가 재부팅되어도 알아서 살아납니다.
4. RDS 연결 꿀팁
- 절대 Public Access 켜지 마세요: DB 해킹당합니다.
- Security Group chaining:
SG-Web: EC2에 적용.SG-DB: RDS에 적용. 인바운드 규칙 소스를SG-Web으로 설정.
- 👉 “웹 서버 그룹 딱지를 단 녀석들만 DB에 들어올 수 있다"는 뜻. IP가 바뀌어도 안전합니다.
요약
- VPC: 내 땅을 먼저 확보해라.
- 보안 그룹: 포트는 필요한 만큼만 열어라. (특히 22번 주의)
- RDS: Private Subnet에 숨기고, EC2를 통해서만 접근하게 해라.
💬 댓글