인프라 관련 내용 정리가 필요할 것 같아 중요한 키워드 정도
로 정리한 내용입니다.
AWS EC2 접속 명령어#
기본적으로 pem키를 발급받고 네트워크 보안이 올바르면 아래와 같은 명령어로 pem키를 이용해 접속 가능합니다.
1
2
| chmod 400 [pem파일명]
ssh -i [pem키 파일명] ubuntu@[퍼블릭 IP 주소]
|
입력했던 콘솔 보기
bastion host 설정#
bastion host란 내부와 외부 네트워크 사이에서 게이트 역할을 수행하는 호스트입니다.
내부 서버나 중요 리소스를 보호하기 위해 생성되며, 일반 유저들에게는 공개하지 않습니다.
bastion host에서 공개키를 생성한 후 접속하려는 서비스 서버에 키를 추가하여 접속할 수 있습니다.
서비스용 서버에 22번 포트로의 접근은 bastion host만 가능하도록 security group을 설정해야합니다.
1
2
3
4
5
6
| # Bastion Server에서 공개키를 생성
bastion $ ssh-keygen -t rsa
bastion $ cat ~/.ssh/id_rsa.pub
# 접속하려는 서비스용 서버에 키 추가
$ vi ~/.ssh/authorized_keys
|
위와 같이 설정한 후 해당 서비스용 ip를 별칭으로 입력합니다.
해당 파일에서 아래와 같이 입력하면 됩니다.
사용할 때는 아래와 같이 쓰면 됩니다.
latency 인증 관련#
도메인 생성 사이트
에서 도메인을 발급받은 뒤
docker의 certbot을 통해 SSL 인증서를 무료로 발급받을 수 있습니다.
1
2
3
4
| docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot certonly -d '[도메인 주소]' --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
|
발급받은 뒤 도메인 사이트에 아래와 같이 TXT(SPF)를 추가 해줘야합니다.
1
2
3
| # 인증서 경로
/etc/letsencrypt/live/[도메인주소]/fullchain.pem ./
/etc/letsencrypt/live/[도메인주소]/privkey.pem ./
|
이후 nginx나 tomcat에 해당 인증서 키를 추가해야합니다.
git submodule 관련#
키, 계정 정보, DB IP주소 패스워드 등 공개하고 싶지 않은 정보는 git private 저장소에 저장하고 해당 레포지토리를 submodule로 이용할 수 있습니다.
1
| git submodule add [자신의 private 저장소] ./src/main/resources/config
|
이후 source code 받을때
1
2
3
4
5
6
| git clone --recurse-submodules [자신의 프로젝트 저장소]
# 설정 파일이 변경된 경우
git submodule foreach git pull origin main
# 위의 설정이 안되면 아래로..!
git submodule update --init --recursive
|
k6 부하테스트 관련#
k6는 부하테스트를 위한 라이브러리입니다.
apache의 ab
나 naver의 nGrinder
처럼 부하테스트를 할 수 있는 도구입니다.
설치 후 실행은 아래처럼 사용하면 됩니다.
k6를 gui로 보기 좋게 해주는 grafana
도 있습니다.
jar 스크립트 배포 관련#
스크립트를 이용해서 배포를 할 수 있습니다. 아래의 코드는 Spring 프로젝트를 정지, 빌드, 배포하는
스크립트 입니다.
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
| PROJECT_PATH='프로젝트 경로'
JAR_PATH=${PROJECT_PATH}/build/libs
JAR=$(cd ${JAR_PATH} && find ./* -name "*jar" | cut -c 3-)
JAR_PID=$(ps -ef | grep $JAR | grep -v grep | awk '{print $2}')
function stop_process() {
if [ -z "$JAR_PID" ]; then
echo "프로세스가 실행중이지 않습니다."
else
echo "$JAR의 프로세스를 종료합니다. (PID = $JAR_PID)"
kill $JAR_PID
fi
}
function build() {
cd ${PROJECT_PATH} && ./gradlew clean build
}
function start_process() {
java -jar -Dspring.profiles.active=prod $JAR_PATH/$JAR
}
echo -e "${txtylw}=======================================${txtrst}"
echo -e "${txtgrn} Deploy Start ${txtrst}"
echo -e "${txtylw}=======================================${txtrst}"
stop_process
build
start_process
|
위의 파일은 [파일명].sh
로 확장자를 구성해야 하며, 처음에 권한을 추가해준뒤 아래 명령어로
실행하면 됩니다.
1
2
3
4
| # 권한 추가
chmod +x [파일명.sh]
# 실행
./[파일명.sh]
|
이외에도 AWS 모니터링, 스케일 아웃, AWS Launch Template 등 인프라 설정을 한다면 조금 더 안정적으로
웹 서비스를 운용할 수 있습니다.