우아한테크캠프 Pro 4주차 그럴듯한 서비스 만들기 미션을 진행한 내용과 후기를 정리해본다.
이번 미션은 인프라 미션이라서 코드 리뷰는 생략하고 어떤 부분을 수행했는지 정리할 예정이다.
이번 미션의 목표
- AWS에 웹 서비스를 운영할 인프라 구성 및 배포
- Docker 사용 방법 익히기
저장소 및 PR
- 저장소: https://github.com/jsyang-dev/infra-subway-deploy
- 1단계 PR: https://github.com/next-step/infra-subway-deploy/pull/147
- 2단계 PR: https://github.com/next-step/infra-subway-deploy/pull/168
수행 내용
네트워크 구성
- VPC 생성
- CIDR은 C class(x.x.x.x/24)로 생성
- 외부망: IP 64개 할당 subnet 2개
- 내부망: IP 32개 할당 subnet 1개
- 관리용: IP 32개 할당 subnet 1개Subnet 생성
- IP subnetting table
- Internet Gateway 생성 및 연결
- 인터넷에서 접근이 가능하려면 VPC에 Internet Gateway이 연결되어 있어야 한다.
- 라우팅 테이블 설정
- 라우팅 테이블에 목적지 주소에 대한 경로를 설정해 주어야 통신이 가능하다.
- 외부망: Internet Gateway에 대한 경로를 추가한다.
- 내부망: NAT Gateway에 대한 경로를 추가하면 인터넷으로의 아웃바운드 통신이 가능하다.
서버 구성
- 웹 서비스 서버: 외부망에 EC2 생성
- Security Group: 웹 서비스 포트(Proxy → 8080), 관리 포트(베스천 서버 → 22)
- DB 서버: 내부망에 EC2 생성
- Security Group: DB 포트(웹 서비스 서버 → 3306), 관리 포트(베스천 서버 → 22)
- 베스천 서버: 관리망에 EC2 생성
- Security Group: 관리 포트(내 노트북 → 22)
- Session Timeout 설정
- $ sudo vi ~/.profile HISTTIMEFORMAT="%F %T -- " ## history 명령 결과에 시간값 추가 export HISTTIMEFORMAT export TMOUT=600 ## 세션 타임아웃 설정 $ source ~/.profile $ env
- Shell Prompt 변경하기
- $ sudo vi ~/.bashrc USER=BASTION PS1='[\\e[1;31m$USER\\e[0m][\\e[1;32m\\t\\e[0m][\\e[1;33m\\u\\e[0m@\\e[1;36m\\h\\e[0m \\w] \\n\\$ \\[\\033[00m\\]' $ source ~/.bashrc
- logger 를 사용하여 감사 로그 남기기
- $ sudo vi ~/.bashrc tty=`tty | awk -F"/dev/" '{print $2}'` IP=`w | grep "$tty" | awk '{print $3}'` export PROMPT_COMMAND='logger -p local0.debug "[USER]$(whoami) [IP]$IP [PID]$$ [PWD]`pwd` [COMMAND] $(history 1 | sed "s/^[ ]*[0-9]\\+[ ]*//" )"' $ source ~/.bashrc
- $ sudo vi /etc/rsyslog.d/50-default.conf local0.* /var/log/command.log $ sudo service rsyslog restart $ tail -f /var/log/command.log
- Reverse Proxy: 외부망에 EC2 생성
- Security Group: 웹 서비스 포트(any → 80), 관리 포트(베스천 서버 → 22)
- $ docker build -t nextstep/reverse-proxy . $ docker run -d -p 80:80 nextstep/reverse-proxy
- FROM nginx COPY nginx.conf /etc/nginx/nginx.conf
- Security Group: 웹 서비스 포트(any → 80), 관리 포트(베스천 서버 → 22)
웹 애플리케이션 배포
- 웹 서비스 서버에 웹 애플리케이션 배포
- $ ./gradlew clean build $ nohup java -jar [jar파일명] 1> [로그파일명] 2>&1 &
- DNS 설정
- https://내도메인.한국/ 에서 무료 도메인을 생성할 수 있다.
- TLS 설정
- letsencrypt를 활용하여 무료로 TLS 인증서를 사용할 수 있다.
- 환경에 따른 설정 파일 나누기
- $ java -jar -Dspring.profiles.active=prod [jar파일명]
- Flyway 적용
- Flyway를 사용하면 데이터베이스 테이블의 스키마 버전을 관리할 수 있다.
- https://www.youtube.com/watch?v=pxDlj5jA9z4
- 설정 별도로 관리하기
- git의 서브모듈 기능을 활용하면 득정 경로에 private repository를 참조하도록 설정할 수 있다.
- 참고: https://git-scm.com/book/ko/v2/Git-도구-서브모듈
느낀 점
- 인프라를 직접 구성할 일이 많지 않아서 생각보다 쉽지 않은 미션이었다.
- Flyway나 git 서브모듈 기능은 사용해 본 적이 없었는데, 실전에서 유용하게 사용될 수 있는 기능들이라고 생각되었다. 향후 업무에서 가능하다면 적용해봐야 할 것 같다.
- 개발자가 인프라를 직접 구성할 일은 거의 없겠지만, 인프라를 이해하는 능력은 꼭 필요한 것 같다. 인프라에 대한 공부도 꾸준히 하자.
'우아한테크캠프 Pro' 카테고리의 다른 글
우아한테크캠프 Pro 7주차 미션 후기 (0) | 2021.12.28 |
---|---|
우아한테크캠프 Pro 5주차 미션 후기 (0) | 2021.12.26 |
우아한테크캠프 Pro 3주차 미션 후기 (0) | 2021.12.26 |
우아한테크캠프 Pro 2주차 미션 후기 (0) | 2021.12.25 |
우아한테크캠프 Pro 1주차 미션 후기 (0) | 2021.12.24 |
댓글