Loading...
2020. 11. 21. 18:42

[Kubernetes] 4. Minikube로 시작하는 kubernetes

Kubernetes 클러스터를 구축하기 위해 두 개의 노드를 준비하고 이를 마스터와 각 노드로 나누어야 하는 구조를 갖춰야 하지만 이는 실제 서비스하기 위한 환경에 대한 권장 사항이었습니다. 쿠버네티스를 실 서비스해보기 전에 직접 사용해보는 방법은 여러 가지 있습니다. AWS의 EKS, GCP의 GKE 등 클라우드 벤더를 사용하는 방법 직접 쿠버네티스 클러스터를 구축하는 방법이 있지만 실제로 체험해보기 위해 클라우드 벤더의 값비싼 비용을 사용하거나 마스터, 노드의 하드웨어 장비를 직접 구입하는 것은 비용적으로 부담이 될 수 있을 것입니다. Minikube는 로컬 환경에서 최상의 쿠버네티스 환경을 제공하기 위한 프로젝트로 우리는 쿠버네티스를 간단하게 체험해보기 위해 일련의 마스터, 슬레이브 노드를 구성하고..

2020. 11. 18. 21:49

[Kubernetes] 3. Controller로 더 나아간 애플리케이션 배포

우리는 쿠버네티스의 4개 객체들의 역할과 그들의 모임으로 한 서비스를 배포하고 운영하는 데 있어 기본적인 요소라는 것을 알았습니다. 쿠버네티스는 서비스의 트래픽에 따라 컨테이너를 자동으로 증가시켜주는 스케일 업/아웃, 애플리케이션에 필요한 batch 작업 등 애플리케이션 설정, 배포에 더욱 빛을 발휘할 수 있는 강력한 기능을 제공합니다. Controller 쿠버네티스의 컨트롤러는 이전에 설명한 객체를 이용하여 배포한 서비스들에 더 많은 기능을 추가시켜주는 존재입니다. 예를 들어, 우리의 서비스는 사용자가 많아 요청 수가 많을 것이므로 Namespace에 부여된 리소스 허용량에 한하여 트래픽량이 증가함에 따라 자동으로 컨테이너를 생성/삭제하는 오토 스케일링 기능, 내 서비스 앞단에 로그를 수집하거나 데몬을..

2020. 11. 14. 17:44

[Kubernetes] 2. Kubernetes 기본 구성과 객체(object)

지난 포스트에서 Kubernetes와 Container Deployment에 대해 알아보며 컨테이너로 서비스 배포하기까지의 과정과 Docker Swarm 등의 다른 오케스트레이션 툴과 어떤 점이 다른지 살펴봤습니다. 이러한 점을 확인하고, 우리가 운영하는 서비스가 쿠버네티스에 적합한지, 차후 미래 운영 대책으로 사용할만한지를 정확하게 고려 대상으로 선정하셨다면 이 글을 계속 읽으며 Kubernetes를 직접 공부해보고, 사용해보시는 것이 좋을 것 같네요. Kubernetes의 기본 구조 이제 본격적으로 Kubernetes가 어떻게 이루어졌는지 알아보겠습니다. 기존의 Docker에서는 컨테이너를 관리할 때 중앙의 Docker Engine이 자리잡고 있어, 이 엔진이 애플리케이션 이미지를 관리하고, 생성하는..

2020. 11. 7. 22:37

[Kubernetes] 1. Container Deployment와 Kubernetes

저에게 있어 쿠버네티스는 Docker Swarm을 지나 이전부터 사용하고 있었던 컨테이너 오케스트레이션 툴이었습니다. 최근에 이직을 한 회사에서 쿠버네티스를 이용하여 시스템을 구성하고 서비스를 운영하게 되어 주 오케스트레이션 툴로 쿠버네티스를 사용하게 되었고, 이 때부터 Docker Swarm 보다는 Kubernetes로 시스템을 구성하는 일이 자주 생겨났습니다. 이 글은 Docker를 자주 사용하지만 Kubernetes에 대해서는 잘 모르고, 그리고 사용을 고려해보고 싶은 분들에게 드리는 글의 시작입니다. Container Deployment으로 거슬러 올라오기까지.. Kubernetes는 Go 언어를 기반으로 Google에서 개발하여 2014년에 공개된 Container Orchestration to..

2020. 11. 2. 22:10

[MSA] 6. MSA의 트랜잭션 이야기 2 - Two-Phase commit과 Saga

이전 글에 이어서 MSA 내에서 트랜잭션을 원활히 하는 방법 2가지를 소개해드리고자 합니다. 관계형 데이터베이스와 더불어 모놀리틱 아키텍처를 도입한 서버 애플리케이션은 DB 서버에서 제공하는 Commit과 Rollback을 이용하여 데이터를 일관성 있게 제어할 수 있었습니다. 그러나 MSA에서는 각 서비스별로 DB 인스턴스와 애플리케이션이 분리됨에 따라 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그들 리소스를 받기 때문에 데이터의 일관성이 무너지게 됩니다. 이를 위해 우리는 분산 트랜잭션 기술을 이용하여 이들 일관성을 지킬 수 있는 방법이 있습니다. 1. Two-Phase Commit Two-Phase Commit이란, 2단계에 거쳐서 영속하는 작업을 말합니다. 이렇게 말하면 아..

2020. 9. 27. 19:53

[MSA] 5. MSA의 트랜잭션 이야기 1 - 트랜잭션의 이해와 MSA에서 바라보는 트랜잭션

이 글을 작성하기 전에 어떤 제목을 붙여야 할지 많은 고민을 하였습니다. MSA에서 트랜잭션의 문제는 현재 대두되고 있는 가장 큰 문제라고 할 수 있습니다. 이번 포스트에서는 트랜잭션의 기본 이야기와 모놀리식의 트랜잭션, MSA에서 트랜잭션에 대해 정말 깊게 다뤄보는 시간을 가져보도록 하겠습니다. 3 파트로 나누어 진행될 예정이며 1번째 파트에서는 트랜잭션에 대한 기본을 이야기 하고, 모놀리식의 트랜잭션을 다뤄보고자 합니다. What is Transaction ? 트랜잭션이란, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말합니다. 데이터베이스에서 대표적으로 가능한 작업에는 검색(SELECT), 수정(UPDATE), 삽입(INSERT), 삭제(DELETE)가 있습니다. 이 중에서 데이터베..

2020. 8. 26. 13:00

[Spring] Jib(지브)를 이용한 Docker 이미지 만들기

https://blog.neonkid.xyz/228 [Spring boot] 애플리케이션을 Docker 이미지로 만들기 Old & New Spring boot로 개발한 서버를 운영하기 위해서는 인스턴스에 서버 애플리케이션을 배포해야 합니다. 애플리케이션을 배포하는 방법에는 WAS로 배포하는 방법도 있지만 Docker 컨테이너 이미지를 만�� blog.neonkid.xyz 위 포스트에서 두 가지 방법을 이용해 Spring boot 애플리케이션을 Docker 이미지로 만들 수 있었습니다. 그러나 Dockerfile을 직접 작성하기에는 스크립트를 작성하기 어려운 분들한테는 러닝 커브가 부담이었다는 것이 다소 아쉬웠던 부분이었는데요. Google Jib 위와 같이 보통 Docker 이미지를 만들고자 한다면, 프..

2020. 8. 25. 21:43

[Spring boot] Spring boot Security를 이용한 OAuth2 인증 구현 3 - 국내 포털 인증

지난 포스트에서 기존의 User Entity 혹은 애플리케이션의 User Entity와 연동하여 OAuth2 인증을 사용하는 방법에 대해 다뤄봤습니다. Spring boot Security에서는 기본적으로 Google, Facebook 등의 해외 소셜 로그인 API를 지원하며 우리는 지원해주는 메소드를 잘 이용하여 Key와 Client ID만 넣어주면 쉽게 OAuth2 인증을 구현할 수 있었습니다. 그런데, NAVER, Kakao 등 국내 포털 사이트의 OAuth2 인증을 구현하려면 어떻게 해야 할까요? NAVER, Kakao API를 이용한 OAuth2 인증 Spring boot Security에서는 공교롭게도 국내 포털 OAuth2 인증에 대한 구현체를 제공해주지 않습니다. 따라서 이들 OAuth2 ..

2020. 8. 16. 20:10

[Spring boot] Spring boot Security를 이용한 OAuth2 인증 구현 2 - User Entity 연동

웹 서비스를 개발하게 된다면, 기본적으로 갖춰져야 할 것은 바로 사용자 인증일 것입니다. 우리 서비스에 가입한 사용자인지를 구분해야 한다는 점과 더불어, 단골인지, 아닌지 등이나 사이트를 관리하는 관리자 등을 구분하는 데 있어, 사용자 인증은 필수적인 요소라고 할 수 있습니다. 그러나 서비스에 있어 가장 번거로운 것은 사용자 등록을 위한 회원 가입일 것입니다. 왜냐하면 사용자가 서비스를 이용하기 위해 자신의 개인 정보를 입력해야 하고, 본인 인증 절차를 거쳐야 하며, 주소와 전화번호 등을 입력함과 더불어, 또 다른 서비스를 이용할 때마다 ID와 비밀번호를 개별적으로 생성하고 관리해야 하기 때문입니다. 이번 포스트에서는 OAuth2 인증을 통해 접속한 사용자들을 저장하는 User Entity를 생성하고, ..

2020. 8. 12. 14:47

[Spring] Argument Resolver를 이용한 유연성 있는 파라미터 처리

서비스를 운영하다보면 다양한 종류의 데이터를 받게 됩니다. 그럴 때마다 Controller 부분에서 이를 전처리하게 되는데, 이렇게 되면 각 Controller에 전처리 해야 하는 코드를 함수화 하거나 Utils 클래스를 만들고, 이를 의존성 주입해서 사용하는 방법이 그나마 코드를 줄일 수 있는 방법입니다. 그러나 Utils를 사용해도 매번 함수를 호출해야 하는 불편함이 있습니다. 그렇게 되면 코드가 중복되고, 이것이 커지면 역시 코드가 난잡해지게 됩니다. Spring에서는 이러한 파라미터를 공통으로 처리할 수 있도록 구현된 인터페이스가 있는데, 그것이 바로 Argument Resolver입니다. Spring Argument Resolver API 엔드포인트로부터 들어온 데이터(파라미터)를 가공하여 필요..