얼마전 카뎃 한 분이 와서 면담을 했는데,
AWS 위에서 웹서버 환경을 구축하는데 어려움을 겪고 있더라고요.
이런 영역을 “엔지니어링”이라고 말하는데요.
이런 건 책에 나와 있지 않습니다.

코드는 결국 무언가를 움직이기 위해 사용되는 것이고,
움직이는 것은 일종의 기계(유무형의 제퓸)인데,
이 기계는 회사가 상업적 목표를 가지고 만들어지기 때문에
범용화된 이론세계에 담을 수 없습니다.
결국 기업마다 조금씩 다른 케바케의 세계인거죠.

이런 건 책으로 배우는 게 아니라,
하나의 실사례로 전체를 경험한 후
다른 제품에선 어떻게 바뀌는지 연습해볼 필요가 있습니다.

그래서 많이 쓰이는 사례를 그리고
설명에 필요한 링크를 모아봤습니다.

자세한 건 멘토 or 주변의 아는 사람에게 물어보세요.
케이스마다 조금씩 다르지만, 전체를 이해하는데는 도움이 될 거라고 봅니다.

  • 대상 : Linux Server 에 nginx 등을 처음으로 설치해보는 사람
  • 구성 : Linux + nginx + python (Django) 까지만

1. AWS 에 구성하는 경우

AWS 의 정체도 사실은 대량의 “서버”들로 구성된 IDC (Internet Data Center) 들입니다.
웹을 통해 개발자가 서버를 임대하고 사용하고 반납하는 자동화된 서비스를 만들었을 뿐.
그게 점점 커져 나중에는 논리적 보안구성까지 가능해졌죠.

이제 AWS는 조금 특별해진 클라우드입니다.
“너무 많은” 기능들을 가지고 있죠.
많은 부분이 오래된 “과거”에서 발전한 기능들입니다.
지금은 이미 “과거”를 뛰어넘어 미래로 가고 있지만요.

See also:

그래서, 기능이 있어도 이해하기 어려운게 많습니다.
이해할 수 없으니 “응용”할 수도 없죠.

“응용”하려면 “언제” 이 기술이 사용되는지 알아야 합니다.
“언제”란 내가 시스템을 운영하면서 맞딱드릴 “상황”을 말하는 건데,
이 “상황”은 경험자들에게서 들을 수 밖에 없습니다.

그래서 각 기술을 탐구하고 싶다면,
“왜?” 라고 묻는 훈련을 해야 합니다.
그래야 활용할 수 있게 되죠.

1.1. Elastic Load Balancer

로드밸런싱은 사용자가 늘기시작하면 가장 먼저 맞딱드리게 될 상황입니다.
그래서 “백엔드”에선 거의 기본처럼 이해하고 해볼 수 있어야 합니다.

1.2. Network Card

“interface”란 네트워크카드를 추상화시켜 부르는 말이기도 합니다.
“접속장치”라는 뜻이니까요.
보통 ip 가 제대로 세팅되어 있는지를 확인합니다.
참고로 127.0.0.1 이란 OS 가 내가 날 바라볼 때 쓰는 ip (국제공통)입니다.

1.3. Firewall

“방화벽”이란 불이 나더라도 이 벽을 건너가지 못한다는 뜻입니다.
보안사고에 대비하기 위해 “문지기” 역할로 설치하는 네트워크 장비입니다.
linux 에서 쓰는 ufw 는 제대로 된 “방화벽”은 아닙니다.
다만 ip 를 기준으로 접속방식을 선별하여 차단하는 것이 “방화벽”과 비슷하여 붙여진 이름입니다.

1.4. Proxy

“Proxy”, 대리인이라는 뜻입니다.
해킹을 할 때는 ip 를 보고 침입합니다.
이 때, 텅빈 집이라면 도둑이 당황하겠죠.
처음엔 이 개념을 이해하기 힘드니까, 정상작동이 된 후에 도전해보길 추천합니다.

1.5. nginx

Apache 의 시대가 저무나보네요.
초보자들은 Web 서버와 WAS 와의 차이점을 알아야 하는데요.
tomcat 만으로도 웹페이지가 떠서, 그냥 개발하는 경우를 많이 보았는데요.
정식 오픈할 때는 꼭 Web 서버와 함께 구성하세요.
그렇지 않으면 하얀 화면이 떴다 말았다 합니다.

1.6. gunicorn

WSGI (Web Service Gateway Interface)
python 과 nginx 간의 연결장치로 이해하면 좋습니다. (프로토콜 외 여러가지 이유로 이런게 필요함)

1.7. python

1.8. Django

MVC 는 화면이 필요한 서비스에선 꼭 이해해야 할 개념이지만,
서버 to 서버의 세계로 오면 MVC 패턴은 짐처럼 취급되기도 합니다.
이 이상 넘어가면 복잡해지니까 담번에…


2. 일반 IDC 에 구성하는 경우

클라우드 나오기 전엔 대부분 “큰 광케이블”과 안정적인 전원공급이 되는 곳에
IDC (Internet Data Center)를 세웠고, 여기에 내 “서버”를 입점시켰습니다.
월세형태로 받기 때문에, 서버를 구매하고 세팅하고, 설치하는 것까지 모든 회사가 직접 해야 했죠.

대기업들은 아직도 자신의 서버들을 이렇게 운영합니다.
보안이나 설비관리, 비용효율 관점에서 접근하는거죠.

좀 큰 기업에 취업하게 되면, 거의 100% 이런 환경에서 일하게 됩니다.
그래서 AWS 말고도 이런 환경에 대해서도 접해둘 필요가 있습니다.

2.1. Router / NAT

라우터, NAT 는 “인터넷”이라는 네트워크 환경과 밀접합니다.
통신이론을 배우게 되면 어느 정도 이론적인 지식이 갖추어지지만,
일반적인 소프트웨어개발자는 접할 기회가 낮습니다.

2.2 ~ 2.8 : 위와 동일

2.9. Firewall

진짜 방화벽이죠. 네트워크를 분리합니다.
보안이유로 쓰게 됩니다.

2.10. L4

스위칭 장비인데, 이것도 네트워크 장비, 이론에 대한 배경지식이 필요합니다.
“대기업 전산운영실, 네트워크 운영실”로 취직하고자 한다면,
이것저것 좀 깊게 알아둘 필요가 있습니다.


끝.