그럴듯한 서비스 만들기(인프라 미션)

이번 미션에서는 AWS를 활용하여 여러 역할별로 서버를 구축하고,
미션용으로 미리 준비해 둔 서비스를 직접 배포 해보고, 관리를 위한 여러 도구들을 구성해봄으로써
네트워크에 대한 이해와 왜 클라우드 서비스를 사용하는가? 에 대한 원론적인 의문도 해소가 되는 미션이었다.

각 단계별로 서비스 구성하기(AWS 서버에 서비스 띄우기), 서비스 배포하기(reverse-proxy, tls 적용), 배포 스크립트 작성하기
구성되어 있고, 단계별로 따라하다 보면 미션의 제목 답게 그럴듯한 서비스 만들기 가 가능한 수준까지 학습할 수 있었다.

강의에서는 이번 미션은 그냥 따라만 하시면 됩니다. 라거나 혹은 이번 미션은 쉬어가는 미션입니다. 라고 하셨지만,
막상 해보니 네트워크나 클라우드 서비스에 대한 컨셉에 대한 기반 지식이 없다면
정말정말 어려운 미션일 수도 있겠다 라고 생각이 들었다.

특히, 미션의 각 단계별로 추가로 적용해보면 좋을 법한 도구나 개념들을 많이 공유해주셨다

  • SonarLint
  • Flyway
  • git submodule 을 통해 설정 파일을 별도로 관리 하는 법

등 여러 꿀팁들을 대방출 해주셨지만, 메인 미션만 따라하는것도 조금 벅차다는 느낌에 개념만 숙지하고 넘어갔었다.

회고

이번 미션에서 잘 한 점

미리 가지고 있던 기반 지식을 적극적으로 활용

인프라 미션을 진행하기 앞서, 클라우드란 무엇인지, Docker, 네트워크 전반 지식 등..
마지막 배포 스크립트는 쉘 스크립트로 작성해야 했기에, 다소 학습이 필요했지만
다른 클라우드의 각종 도구를 사용하기 위해 도구 사용법은 미리 숙지해놓은 상태였다.

각 단계별로 안내되어 있는 힌트들을 따라서 적절하게 진행하니 별 어려움 없이 이번 미션을 마무리할 수 있었다.

어려웠던 점

커뮤니케이션

이번 미션에서 특히 어려웠던 점이 바로 리뷰어와의 커뮤니케이션이었다.

서비스 배포하기 단계에서 ‘설정파일을 각 환경별로 분리하라’ 라는 요구사항이 있었는데,
개념을 숙지하고 각 환경별로 설정파일을 분리하여 리뷰요청을 드렸다.

하지만 난데없이, 설정파일에서 jwt 토큰이 어디서 사용되는지 물어보시는 리뷰를 남겨주셔서 다소 당황스러웠고, 여러 생각이 들었다.

  • 왜 이런 기술의 개념적인 것을 물어보시는거지?(개념을 숙지하지 않고 사용하는 것 처럼 느껴졌나?..)
  • 내가 설정파일을 뭔가 잘못 작성했나?(구동되는 것은 확인했는데..)

여러 생각이 들면서도, 질문에 대한 답을 작성하였고

  • jwt 이 사용되는 곳
  • 설정파일에서 jwt secret-key가 어떻게 활용되는 지

이런 답변을 작성하면서도 코드리뷰라는 시스템에 대하여
‘리뷰어와 커뮤니케이션이 얼마나 중요한 지’에 대해 고찰할 수 있는 계기가 되었다.

만약 교육생과 리뷰어라는 관계가 아니라, 직장에서 코드리뷰를 받는 상황이었다면?
똑같은 코드리뷰라는 행위에서도 관계에 따라 혹은 커뮤니케이션 방법에 따라 결과가
첨예하게 갈릴 수도 있을 것 같다는 생각이 들었다.

다음 단계에서도 비슷하게, 배포하는 과정에서 기존 프로세스를 kill 하는 명령어를 함수로 작성하였는데,
당연하게도 실행중인 프로세스가 있을 경우에만 종료하는 식으로 구현했다.

하지만 리뷰어님이 ‘실행중인 프로세스가 있을 경우에만 종료해보면 어떨까요’라는 리뷰를 남기셨는데,
내가 정의한 함수를 보면 분명히 그렇게 작성했는데,, 구현부분을 안보신건지 아니면 내가 함수를 잘못 작성한건지 참으로 난감했다.

하지만 리뷰 자체는 merge 되어 넘어갔고,
그 부분이 문제가 있었다면 reject 되었을 것이라는 생각에 그냥 넘어가자고 생각이 들었다.

느낀점

인프라 미션을 진행하기 전까지는 클라우드 서비스에 대해
그냥 내 남는 머신에 리눅스 깔고 도커 몇개 띄우는거랑 뭐가달라? 라는 굉장히 보수적인 생각을 가지고 있었다.

하지만, 미션을 경험하고 나니 왜 클라우드 서비스를 사용하는지 뼈저리게 느꼈다.

만약 100평 정도 땅을 파서 평탄화 시켜야 한다고 가정해보자

  • ‘숟가락 하나로 땅을 파는 것’
  • ‘포크레인과 여러 중기계를 사용하는 것’
    어떤 방법을 선택할 것인가? 당연히 후자를 선택할 것이다.

클라우드 서비스도 마찬가지다.
서비스를 띄울 서버 하나를 구축하기 위해

  • VPC를 구성
  • 네트워크를 구성
  • 서브넷을 구성
  • 라우팅 테이블을 구성
  • 보안그룹(이게 진짜 기가막혔다) 을 구성
    하는 등의 일련의 과정을 웹 콘솔에서 진짜 쉽게 구성할 수 있었다.

위에서 예를 들었듯이 포크레인이라는 아주 효율 좋은 기계를 사용해서 땅을 파기 위해선,
포크레인의 사용법을 알아야 한다.

클라우드 서비스도 마찬가지로 VPC, 서브넷, 라우팅 테이블, 보안 그룹 등등 여러 좋은 도구들이 있지만
이것이 왜 필요한 지, 또한 하나하나의 개념이 무엇인 지 알고 사용해야 할 것 같다.