본문 바로가기
우아한테크캠프 Pro

우아한테크캠프 Pro 4주차 미션 후기

by 아토로 2021. 12. 26.

우아한테크캠프 Pro 4주차 그럴듯한 서비스 만들기 미션을 진행한 내용과 후기를 정리해본다.

이번 미션은 인프라 미션이라서 코드 리뷰는 생략하고 어떤 부분을 수행했는지 정리할 예정이다.

이번 미션의 목표

  • AWS에 웹 서비스를 운영할 인프라 구성 및 배포
  • Docker 사용 방법 익히기

저장소 및 PR

수행 내용

네트워크 구성

  • 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

웹 애플리케이션 배포

  • 웹 서비스 서버에 웹 애플리케이션 배포
  • $ ./gradlew clean build $ nohup java -jar [jar파일명] 1> [로그파일명] 2>&1 &
  • DNS 설정
  • TLS 설정
    • letsencrypt를 활용하여 무료로 TLS 인증서를 사용할 수 있다.
  • 환경에 따른 설정 파일 나누기
    •  
    • $ java -jar -Dspring.profiles.active=prod [jar파일명]
  • Flyway 적용
  • 설정 별도로 관리하기

느낀 점

  • 인프라를 직접 구성할 일이 많지 않아서 생각보다 쉽지 않은 미션이었다.
  • Flyway나 git 서브모듈 기능은 사용해 본 적이 없었는데, 실전에서 유용하게 사용될 수 있는 기능들이라고 생각되었다. 향후 업무에서 가능하다면 적용해봐야 할 것 같다.
  • 개발자가 인프라를 직접 구성할 일은 거의 없겠지만, 인프라를 이해하는 능력은 꼭 필요한 것 같다. 인프라에 대한 공부도 꾸준히 하자.

댓글