티스토리 뷰
이전 글에서 EC2 환경을 구축하고 Docker를 설치한 후 Tomcat을 통해 웹 서버를 배포까지 진행 해봤다.
그런데, EC2에 Docker를 설치 후 Dockerfile로 Build하는 과정에서 정상적으로 진행되지 않고 자꾸 프리징이 발생했다.
여기서 부터 2편을 시작해 보려고 한다. 1편과의 간격이 너무 길었지만 3편과의 간격이 더 길 수도 있다.
1. 스왑 메모리(swap memory) 적용
EC2에서 제공하는 t2.micro 인스턴스는 램의 크기가 1GB이다.
여기에 리눅스를 올리고 Docker 까지 설치하고, Docker 내부에서 Gradle 빌드까지하기엔, t2.micro의 메모리는 매우매우 부족하다,
그래서 프리징 현상이 발생하게 되고, 이를 해결하기 위해서 스왑 메모리라는 기법을 사용했다.
스왑 메모리란?
RAM이 부족할 경우, HDD의 일정공간을 마치 RAM처럼 사용하는 것이다. 다만, 하드디스크의 일정공간을 RAM처럼 사용하는 것이기 때문에 기존 RAM보다는 속도가 느리다.
AWS 가이드에는 스왑 공간은 물리적 RAM의 2배와 동일한 것이 가장 좋고, 스왑 공간이 32MB 이상인 것이 모범 사례라고 한다. 또한 RAM의 크기에 따라 권장 용량이 따로 있다.
내가 사용하는 EC2의 RAM의 크기는 1GB이므로 스왑 메모리의 크기는 2GB로 설정하는게 가장 좋다. 아래와 같이 순서대로 진행한다.
1. dd 명령어로 swap 메모리를 할당한다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
2. 생성한 swapfile의 권한(읽기, 쓰기)을 업데이트
sudo chmod 600 /swapfile
3. mkswap 명령어로 swap 공간을 생성한다.
sudo mkswap /swapfile
4. 스왑 공간에 스왑 파일을 즉시 사용할 수 있도록 스왑 파일을 추가
sudo swapon /swapfile
5. /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작하게끔 함
sudo vi /etc/fstab
6. fstab 파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료
/swapfile swap swap defaults 0 0
7. 결과 확인
이런 방법 말고 그냥 유료 플랜을 쓰면 되겠지만, 정액권 같은게 있는 거도 아니고 사용량 만큼 과금이 되기 때문에, 개인이 쓰기엔 입이 떡 벌어지는 가격이 나올 수 도 있다....
프리티어를 쓰면 일단 한달 750시간은 무료라 인스턴스를 하나만 쓴다면 한달 내내 켜놔도 괜찮다.
(다만 트래픽에 따른 과금이 발생할 수 있으니 이점도 신경써야 한다)
일단 스왑메모리를 할당해놓으면, 일단은 EC2 내의 Docker에서 gradle 빌드까지한 컨테이너를 정상적으로 생성할 수 있고, 외부에서 웹페이지에 접근이 가능하게까지 할 수 있다.
그런데 Jenkins를 구동하는데 추가 메모리가 왜 필요할까?
추후에 Jenkins를 사용해보면 알겠지만, Jenkins에서 CI/CD를 모두 처리하려면 Git에서 소스를 받아와서 gradle로 빌드를 해줘야하기 때문이다.
이는 Jenkins 에서 빌드 파이프라인을 구성한 다음, Console에서 확인할 수 있다.
이제 다음 단계는 Jenkins를 구동할 EC2를 구성하는 것이다.
2. Jenkins 설치
Jenkins가 설치된 Docker를 사용하는 방법도 있는데, 일단은 linux 내에 jenkins를 설치하고 파이프라인을 구성해 볼 것이다.
1. 새 EC2를 구동했으니 apt 업데이트 후, 자바부터 설치한다.
sudo apt update
sudo apt-get install openjdk-11-jdk
2. Jenkins Repo에서 key 다운로드
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
3. sources.list 파일을 설정
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
4. apt 업데이트 후, Jenkins 설치
sudo apt update
sudo apt install jenkins
5. Jenkins 설치 완료 후, Jenkins 서비스 기동 및 기동 확인
sudo systemctl start jenkins
sudo systemctl status jenkins
6. 해당 위치에서 PORT 변경도 가능하다
sudo vim /etc/default/jenkins
HTTP_PORT 값 변경
7. Jenkins 페이지에 접근 (http://[퍼블릭 IPv4 DNS]:8080)
8. 위와 같은 그림이 나오는데 해당 경로의 비밀번호를 입력해주면 된다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
나오는 비밀번호 복사 후 입력
9. 설치 완료
3. 다음으로
이렇게 설치된 젠킨스 경로로 들어가보면, 공허한 페이지만 남아있어 당황스러울 것이다.
각자 입맛에 맞게 끔 파이프라인을 짜거나 플러그인을 설치해서 사용해야한다.
설치된 젠킨스가 해야할 일은, WAS 서버 파일을 빌드 후 배포까지 해주어야 한다.
최근엔 분리해서 처리하는 경우가 많지만 일단은 한번에 다 처리할 수 있도록 하려고 한다.
거의 반년만에 글을 써서 양심에 걸리지만, 이 다음 글은 그정도는 안걸리지 싶다.
(사실 스왑메모리 관련 내용이 너무 쓰기 싫었음)
'개발 > 인프라' 카테고리의 다른 글
github action으로 CI/CD 구축하기 - 2. JIB (0) | 2023.11.12 |
---|---|
github action으로 CI/CD 구축하기 - 1. CI (0) | 2023.11.06 |
AWS EC2에 MySQL Docker 띄우고 사용하기 (0) | 2023.03.29 |
Harbor의 리버스 프록시 문제... (1) | 2023.03.15 |
Harbor : Private Container Registry 설치하기 (1) | 2023.03.15 |
- Total
- Today
- Yesterday
- ChatGPT
- Elastic cloud
- EKS
- openAI API
- GIT
- S3
- OpenFeign
- Log
- Kotlin
- 람다
- serverless
- AWS EC2
- MySQL
- elasticsearch
- CloudFront
- cache
- 스프링부트
- AWS
- java
- terraform
- springboot
- lambda
- OpenAI
- 후쿠오카
- 티스토리챌린지
- Spring
- 오블완
- docker
- JWT
- AOP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |