<aws로 그럴듯한 인프라 만들기> 회고와 피드백

이번 시리즈는 아래와 같이 진행되었다. 이번 글에서는 1주차 과제를 진행해본 소감과 다른 수강생들로부터 나온 피드백들을 정리해보려고 한다.

1. 소감

사실 크레파스에서 네트워크 전문가였던 이사님 곁에서 귓동냥으로 뜨문뜨문 인프라 설계도를 작성하고, 구축하는 방법을 배울 수 있었다. 그리고 홀로스탠딩에 합류하면서 그 경험을 잘 써먹어서 초기 서비스의 인프라 구축을 홀로 담당했었다. 사실 엄청 거대한 서비스도 아니고, 복잡하지도 않아서 토이프로젝트 수준일지도 모르겠지만, 2년 동안은 그래도 큰 문제없이 잘 운영해왔다.

그럼에도 불구하고 이번 1주차 미션을 진행하면서 그동안 몰랐던 부분, 놓쳤던 부분, 알았지만 잊고 있었던 부분, 애매하게 알고 있었던 부분 등 다양한 측면에서 공부를 할 수 있게 되었다. 그리고 과정을 진행하면서 이렇게 정제된 글로 정리를 한번 하고 나니, 다음번에 다시 인프라를 구축해야할 상황이 오더라도, 비슷한 설계구조라면, 겁이 나지 않을 것 같다. 글로 정리하는 동안, 몰랐던 개념들, 단어들을 하나씩 찾아보며, 빠른 시간안에 많은 내용을 공부할 수 있었다. 다시 한 번 글의 힘을 느낄 수 있는 순간이었다.

직장에 다니면서 공부를 한다는 것은 역시 쉽지 않았다. 열정 뿜뿜의 자세로 과정을 시작했지만, 퇴근 후, 공부하는 것은 너무 지쳐 새벽 시간에 일찍 일어나서 과제를 진행했다. 그럼에도 어떤 날은 과제를 건드리지도 못하고 다음날로 미루는 때가 종종 있었다. 앞으로의 과제는 더 정신차리고 집중하여 참여해야겠다.

2. 피드백

아래는 1주차 미션을 진행하면서 다른 수강생들로부터 나온 피드백을 정리한 내용이다. 나도 헷갈렸던 개념, 몰랐던 개념들을 보면서 복습하는 시간을 갖자.

2-1. nohup

  • nohup 은 no hang up 의 약어로, 터미널 세션과 연결을 종료해도 실행중인 프로그램을 종료하지 않도록 하는 명령어이다.

  • nohup 과 & 의 차이

    • nohup : 프로그램을 데몬의 형태로 실행시키는 것이기 때문에 로그아웃으로 세션이 종료되더라도 프로그램이 종료되지 않는다.

    • & : 백그라운드 실행은 단지 사용자 눈에 보이지 않는 백그라운드 형태로 돌리고 있는 것을 말한다. 때문에 로그아웃으로 세션과 연결이 끊어지면, 프로그램도 함께 종료된다.

      • 그런데 언젠가부터 백그라운드 실행을 하더라도 nohup 과 같이 세션과 상관없이 프로그램이 종료되지 않는 옵션이 디폴트로 적용되었다. 그래서 &만으로도 백그라운드에서 종료되지 않는 어플리케이션을 실행할 수 있는 것이다.

  • 자세한 내용은 이 블로그가 아주 친절하게 설명하고 있으니 참고

2-2. 서버 간 접속시에는 private ip 로

  • 내가 했던 실수였다. bastion -> public server 로 접근할 때, public ip 로 접근을 시도했었다.

  • 서버 간에는 외부망 내에서 private ip 로 접근 가능하니, 그렇게 진행하자. public ip 로 접근하는 것은 외부망 -> IGW -> internet -> 외부망의 과정을 거쳐서 돌고 돌아 접근하는 꼴이다.

2-3. bashrc, profile, hosts 의 차이점

/etc/hostsbashrc 혹은 bash_aliases 그리고, profile 등은 각각 사용 목적이 다르다.

우선 bashrc / bash_aliasesprofile 는 모두 쉘 터미널을 열면서 함께 읽혀진다.

  • /etc/hosts : dns 주소에 대한 static 정책을 추가하기 위함

  • bashrc / bash_aliases : bash shell로 interactive 하게 운영하기 위해서 사용하는 설정. alias 등의 설정을 넣어두는 편이다.

  • profile : 로그인 쉘을 위한 설정. 환경변수 등의 설정을 넣어둔다.

따라서 1.1.1.1 와 같은 ip 를 public 등의 도메인 네임으로 매핑하려면 hosts 파일을 수정하고, ssh ubuntu@ip 등의 명령어에 별칭을 두려면 bashrc 나 bash_aliases 를 활용하면 된다.

2-4. Bastion Server

bastion server 는 ssh 로 터미널 접속을 하여 서버 관리를 하는 경우에 활용하는 서버이다. 대략 아래와 같은 특징을 가지고 있다.

  1. 서비스용 서버는 보통 정상 트래픽 인지 유무를 판단하고, 방화벽 등을 두어서 트래픽의 시그니처를 검사한다.

  2. 서비스용 서버는 어플리케이션 서버에서 사용하는 기술의 보안성을 위주로 검사한다.

  3. 관리자용 서버는 접속할 수 있는 대상을 제한한다.

    1. VPN 등의 인증 과정을 거치거나 사무실의 IP에서만 접속이 허용되던가 하는 식으로.

    2. 인증, 인가 정책이 허용된 사용자일지라도, 터미널로 접속하여 작업한 명령어 히스토리를 감사로그로 기록해두어 만일의 사태에 대비한다.

    3. 관리자용 서버는 서비스용 서버가 DDos 등의 공격으로 접속이 불가하더라도, 접속이 가능하여야 한다.

2-5. Internet Gatway vs. NAT gateway

  • Gateway 는 서로 다른 통신망 혹은 프로토콜 간 네트워크 통신을 가능하게 하는 구성요소를 말한다.

    • 내부망 - 외부망 간의 통신에서는 서로 다른 통신망이므로, gateway 가 이를 중계하는 셈이다.

  • Internet Gateway 는 인터넷망 - 외부망 간의 연결을 중계하는 구성요소이다.

    • AWS 완전형 서비스로 웹 콘솔로 생성하면, 이 gateway 가 어디있는지 신경쓰지 않아도 된다.

    • 요청 받을 대상이 공인 IP 가 있다면, internet gateway 를 통해 인터넷망과 연결이 가능해진다.

  • NAT Gateway 역시 완전 관리형 서비스이긴 하지만, 중계할 위치를 우리가 직접 지정할 수 있다.

    • 내부망의 서버는 일반적으로 private ip 만 할당된다. 따라서 인터넷망으로 요청을 보내기 위해서는 중계서버를 통해서 공인 IP 로 변환하여 요청하는 것이다.

    • 인터넷망 - 외부망 - NAT gateway - 내부망

Last updated