공부를 시작하기 전, 백엔드에 대해 어렴풋한 지식을 가지고 있었을 때는 서버에 필요한 코드를 작성한 후에 web server만 띄우면 끝나는 줄 알았다.
이번 방학에 스터디 친구들과 스터디 애플리케이션을 만들자고 꼬드기고(?), 내가 해보고 싶었던 백엔드를 도맡아서 해보니, 배울 게 한도 끝도 없었다. 일단 무지성 시작을 해서 인프런에서 김영한님의 강의도 듣고, 구글링도 하다가 제일 처음으로 생각한 구조가 !
이러한 심플한 구조다.
나의 컴퓨터에서 DB띄우고, 지금까지 회의하여 만들어진 Spring 코드를 build하여 나온 jar을 띄워서 localhost:8080으로 들어갈 수 있는 구조로 만들었었다.
위의 구조는 프로젝트를 진행하는 친구들도 통신이 불가능했다.
그래서 개선하는 방법이 두가지가 있었는데,
1. 기존 내 로컬에서 portforwarding을 통해 외부와 연결하여 통신하기.
2. GCP or AWS와 같은 클라우드 컴퓨팅을 사용하여 서버를 띄우는 것.
여기서 나는 2번을 선택했다.
우리집 네트워크가 조금은 쉽지않은 방식으로 연결되어 있어서 포트포워딩을 하기 어렵기도 했지만, 가장 큰 이유는 클라우드 컴퓨팅을 써보는 것과 이후에 엄청나게 큰 서버를 운영할 때, kubernetes와 같은 프로그램을 이용하여 서버를 관리한다고 들었는데 이것이 어떻게 동작하는지 알고 싶었다.
여기서 부족했던 지식이 드러났는데,
nginx와 같은 web-server는 그냥 프론트엔드 서버를 만들어줄 때 필요한 친구라고만 생각했지, 로드밸런싱이나 리버스 프록시같은 개념을 전혀 모르고 있어서 안써도 될 거라 생각하고, 넘어가려했었다(잘못된 지식습득 & 자만).
로드밸런싱에 관한 내용을 좀 더 공부하고 어떻게 조금 더 효율적인 서버 구조가 될 건지를 궁리해야한다.
데이터베이스를 Persistent Volume을 이용하여 컨테이너가 종료되더라도 데이터가 영구적으로 유지되도록 구현하였다.
WAS 서버는 cluster ip를 통하여 db와 연동될 수 있도록 구현하였고, pod들을 외부와 연결시켜주는 service를 통하여 외부 연결이 가능하게 만들어 놓았다.
service가 해당되는 pod의 replica를 RR(Round Robin)형식으로 트래픽 조절한다는 것을 배울 수 있었다.
후에 구현해야할 부분은 인그레스(ingress)를 통한 로드벨런싱이다.