- 예를들어 우리가 생성한 파드를 외부에 노출시키기 위해 로드밸런서 타입의 서비스 리소스를 사용했다고 하자. 클라이언트는 외부용 IP를 통해 요청을 보낸다. 이 요청에 대해서 바로 파드에 접근하는 것이 아니라, 포트포워딩을 통해 노드에 뚫린 NodePort에 들어온다. 이때 ClusterIP가 내부에서 서비스를 찾아준다. 바로 이 서비스가 프록시 역할을 하는 서비스이고, 자신과 느슨하게 연결된 파드들의 IP정보를 저장하고 있는 엔드포인트 정보를 보고 포트포워딩과 로드밸런싱을 통해 파드에 연결한다.
= 이러한 구조가 리버스 프록시 구조이다- 또한 프록시 역할을 하는 서비스가 존재하는 리버스 프록시 구조이기 때문에 마지막에 파드에 대해 로드밸런싱이 가능한 것이다.
- 이러한 리버스 프록시 구조는 클라이언트가 서버에 다이렉트로 접근할 수 없기 때문에 보안에도 좋다.
GitHub Action
Jenkins
<Jenkins 선택 이유>
위의 차이점을 봤을때 뭔가 한눈에 보면 Jenkins가 더 안좋아 보인다. 또한 우리가 하는 프로젝트는 규모가 작은 프로젝트이기 때문에 GitHub Action이 더 적합하다. 하지만 그럼에도 선택한 이유는 아래와 같다.
1 . 쿠버네티스 전문가 양성과정에서 배운 CI/CD툴이 Jenkins이기 때문에 실무와 비슷한 프로젝트에서 배운것을 한번 써보고싶다.
2 . GitHub Action은 설정 프로세스가 간단하고 , 따로 서버를 배포할 일도 없으며, 인프라에 대한 개념이 없어도 배포를 할 수 있다. 그렇기에 개발자에게도 인기가 많은 것 같다. 하지만 Jenkins는 인프라에 대한 이해도가 있어야 하며, 설정이 복잡한 만큼 커스터마이징도 다양하다. 따라서 Jenkins는 개발자보다는 좀 더 인프라엔지니어, Devops엔지니어등...에게 특화된 툴이라고 생각한다. 즉 GitHub Action은 개발자 포함 누구나 다룰 수 있는 툴이지만, Jenkins는 인프라 관련 엔지니어에게 특화되어 있기에 나같은 인프라 엔지니어를 희망하는 사람들에게는 Jenkins를 다룰줄 아는 것은 차별점이라고 생각한다.
3 . 내가 하는 프로젝트는 작은 프로젝트이고 따라서 굳이 어려운 길인 Jenkins를 사용하지 않고, Github Action을 사용해도 되지만 이 프로젝트가 끝나고 추가로 진행하는 캡스톤디자인 프로젝트에서 GitHub Action을 사용할 예정이기 때문에 이번 프로젝트에서 Jenkins를 사용함으로써 더 많은 툴을 이용해 볼 수 있을 것이다.
- 인프라 구축을 하면서 느낀점은 주로 AWS EKS, EC2, RDS 등을 적극 활용하여 클러스터를 배포하고 인프라를 구축하였다. 그러다보니 비용이 만만치않게 청구되는 것을 확인할 수 있었다. 불과 2주만에 200달러 이상이 찍히고, 1년 예상비용이 3만8천달러가 측정되어있었다. 심지어 대규모 프로젝트도 아닌 소규모 프로젝트인데 말이다. 이것이 기업같은 대규모 인프라라면 상상을 초월하는 금액일 것이다. 따라서 비용을 고려하지 않고 단지 고가용성을 위해 인프라를 구축한다면 아무리 장애대응이 신속해도, 효율적인 인프라가 아닐 것이다.
- 이번 프로젝트에서 비용이 생각보다 많이 든 이유는 서버가 실행되지 않는 시간에도 인스턴스와 클러스터가 실행되고 있었고, 그 외에도 같은 인스턴스인데도 비용이 저렴한 스팟인스턴스와 같은 AWS에서 제공하는 다양한 서비스를 적극 활용하지 못했다. 분명 인스턴스뿐 아니라 다양한 서비스에서 비용이 좀 더 저렴한 여러가지 타입이 존재할 것이다. 예를 들어 서버리스를 활용한 인프라 구축과 같이 말이다. 하지만 지금은 처음 AWS를 사용하여 프로젝트를 진행하다보니 AWS의 정석이자 대표적인 서비스들만 이용하여 인프라를 구축하였다.
- 따라서 다음 프로젝트 뿐 아니라 기업 내의 실무에서 프로젝트를 진행할때는 스케줄링을 통해 사용하지 않는 인스턴스는 중단시키거나, 스팟 인스턴스나 예약 인스턴스등의 인스턴스 타입을 활용하고 인스턴스 뿐 아니라 상황에 따라 AWS에서 제공하는 여러 서비스를 적극 활용하여 고가용성과 비용이라는 두마리 토끼를 잡아야 할 것이다.