우아한테크 5주차
우아한 테크 5주차..미션은 인수테스트 기반의 TDD. 즉, ATDD 미션이다. 하지만,, 4주차 미션인 그럴듯한 서비스에서 헤매고 있었기 때문에 한 주 미션이 밀린 채 그럴듯한 서비스를 만들기 위해 애쓰고 있었다. 5주차 미션을 하면서 겪었던 감정들을 풀어보겠다,,
망 분리하기
일단 여기 부터 막혔었던 것 같다. 지금까지는 주어진 서버내에서 개발/배포/운영을 하고 주어진 외부 IP와 방화벽을 개방해 API 호출을 통해 기능을 구현했었다. 나름 다양한 외부 기관과의 통신 구현을 해왔지만 그 통신이 어떻게 이루어 지는 지, 아니 먼저 왜 통신이 이루어질 수 있는지는 방화벽에만 의존해 별 다른 생각을 하지 않았던 것 같다.. 이번 미션을 통해 정말정말정말X1000000 힘든 한 주였지만 네트워크에 조금 이해가 간 것 같다.
자세한 내용은 따로 다시 정리하고 어떤 순서로 진행했는지, 무엇에 막혔는지만 정리해봐야겠다.
VPC
VPC는 대략적으로 하나의 네트워크 망이고 네트워크 망안에서 여러개의 망들을 구성하며 내부 IP로 통신할 수 있는 것으로 이해했다. 예를 들면 내가 속해있는 하나의 VPC와 외부 기관의 VPC가 있고 내 VPC 내에선 내부IP로 통신을 하지만 외부 기관의 VPC에 접속하기 위해선 외부IP 포트가 열려있어야 통신이 가능하다.
다음 서브넷을 구성했다. 서브넷은 아까 말한 VPC 내에서 분리되어 지는 망으로 외부망, 내부망으로 구성할 수 있고 각 망마다 IP를 부여할 수 있다. 미션에서는 64개의 IP 범위를 가진 외부망 2개와 32개의 IP 범위를 가진 내부망 2개를 만들었다. IP 범위는 VPC를 생성할 때 지정했던 IP 범위 내에서 설정이 된다.
VPC : XXX.XXX.XXX.0/24 -> 255개의 IP를 할당 받는다
외부망 : XXX.XXX.XXX.0/26 -> 0 IP 부터 64개의 IP를 항당 받는다.
내부망 : XXX.XXX.XXX.64/27 0-> 64 IP 부터 32개의 IP를 할당 받는다.
이번 미션은 웹 어플리케이션을 배포할 WAS 서버, nginx를 이용해 로드밸런싱 역할을 수행할 reverse proxy 서버, 외부망을 관리할 bastion 서버, 마지막으로 DB 서버로 구성했다.
Route Table
다음 Route Table을 구성했다. Route Table은 통신 IP를 저장하고 있는 테이블로 테이블에 저장되어 있는 IP는 한번에 어떤 망으로 전송이 될지 결정되지만, 없는 IP라면 해당 IP를 찾을 때 까지 모든 망으로 전송이 된다라고 이해했다.
Internet Gateway
다음 마지막으로 외부와 통신하기 위한 Internet Gateway(IG)를 구성했다.
EC2 인스턴스 생성
인스턴스
인스턴스는 하나의 서버(?)라고 생각하면 될 것 같다. 각 서브넷 마다 하나씩의 인스턴스를 생성했다. (잘 못 만들면 다시 처음부터 만들어야하는..)
보안그룹
보안 그룹은 각 서버마다 설정할 수 도 있는데 어떤 port를 어떤 ip에 열어 줄 지 규칙을 정한다. 먼저 관리망인 bastion 서버는 ssh로 나만 들어가서 관리를 할 수 있기 때문에 22port
에 내 IP만 허용해 준다. was 서버는 bastion 서버에서 접속해 관리하기 때문에 22port
에 bastion 서버를 허용하고 8080port
와 https 통신을 위해 443prot
를 열어주었다. DB 서버도 마찬가지로 22port
에 bastion 서버, 3306port
에 DB접속을 허용하기 위해 was 서버 를 열어주었다.
이렇게 각각의 인스턴스는 VPC 내부에 구성되어 있기 때문에 내부IP로 통신이 이루어진다.
DNS
DNS는 도메인 한국 에서 무료로 제공하는 서비스를 이용해 무료 도메인을 제공받고 was서버의 외부 IP로 연결이 되도록 설정해주었고 이따가 나올 https 를 위한 토큰을 설정했다.
각 서버 역할(?) 구성
was 서버
에 java를 설치하고 git에 올려놓은 저장소를 clone 하여 build 후에 java -jar
command를 이용해 서버를 구동시켰다. docker 를 이용해 nginx를 설정하고 DockerFile
과 nginx.config
파일을 생성해 nginx를 구성한다. (원래는 reverse proxy 서버
에 구성하려고 했지만,, 2주간의 시행착오로 복구하지 못 하고 was 서버에 구성..했다..)
nginx.config 내부에 포트포워딩과 어떤 IP로 연결할지 설정한다. 나는 한 서버에 구성했기 때문에 localhost 또는 127.0.0.1 로 설정했고 다른 서버라면 was 서버의 내부 IP로 연결하면 된다.
다음 https 통신을 위해 무료 사설인증서를 설치하고 이 사설 인증서 설치 시 부여받은 Token 을 아까 도메인 한국에서 토큰을 입력하면 된다.
DB 서버
에는 docker를 이용해 mysql을 설치하고 실행시켰다.
각 설정은 bastion 서버에 접속해 ssh 로 각 서버로 접근하여 실행 하였고, 이 것이 가능하게 하기 위해서 각각의 서버에 22port를 bastion 서버로 열어주었으며 bastion 서버의 키를 접속 server의 키에 복사하여 접속이 가능하다.
서버를 실행하면서 자꾸 오류가 발생했었던 부분이 있는데 @activeprofiles("test") annotation이 없었던 것이 문제가 됐었다.. 저 annotation은 실행 시에 application-xxxx.properties의 설정들을 기반으로 실행이 된다는 것이었다. 나는 application.properties에 application-local.properties의 설정을 기반으로 실행하라고 했는데 저 annotation은 test 설정을 따랐고 local과 test의 db설정이 다르기 때문에 sql문법도 다른 이유로 실행이 되지 않았었다,, 주의해야겟다
flyway
flyway는 처음 table이 생성될 때의 default ddl 문을 가지고 변경된 ddl의 이력을 관리할 수 있게 해준다. 자세한 내용은 다시 정리할 것이다,
이렇게 망 구성이 끝났고 도메인으로 접속했을 때 정상적으로 접속이 되며 도메인 옆에 자물쇠가 채워진 아이콘을 볼 수가 있었다.. 감격..
회고
이 글을 쓰면서 다시 한번 미션의 내용들을 정리할 수 있었다. 항상 정리를 해야지해야지 하다가 미뤄져서 모각코구성원인 김병호님의 추천으로 회고를 작성하게 되었는데, 확실히 정리를 하고 회고를 하니 더 내용이 선명하게 남는 듯하다,, 앞으로도 꾸준히 해야겠다. 해결에 도움주신 팀원 분들도 너무 감사드립니다.. (백성락님, 윤지수님, 장병학님,이철원님,김병호님)
이번 미션하면서 정말 새벽까지 삽질하고 출근하고 스터디하고 새벽까지 삽질하고,, 하면서 정말 울고 싶었던 날들이 있던 것 같다,, 분명 IP설정을 해주었는데 접속이 안되고 알고보니 내부IP를 적용하지 않고 외부IP를 적용했던가, port를 열어주지 않던가,, port fowarding을 잘 못 했던가.. 서버는 거짓말하지 않는다.. 100% 내잘 못이라는 것을 깨달았다..
이 과정을 겪고 마침내 web에서 접속이 되고 db table의 생성과 저장까지 되는 것을 보니 정말 감격이었다..
인프라.. 멈춰..!!
'정리 > 우테캠PRO 회고' 카테고리의 다른 글
[우테캠 PRO 2기] 9주차 (2) | 2021.07.20 |
---|---|
[우테캠 PRO 2기] 지원 (0) | 2021.07.05 |
[우테캠 PRO 2기] 7주차 (0) | 2021.07.03 |
[우테캠 PRO 2기] 6주차 (0) | 2021.06.25 |