본문 바로가기

전체 글

[Kubernetes] ArgoCD 정리 (2) - Jenkins 빌드 구성과 배포 설정 이전 포스트에서는 ArgoCD 의 대략적인 개요와 GitOps, 그리고 Kustomize 구성 등을 알아보았다. 이번 포스트에서는 Jenkins 를 기반으로 docker 컨테이너 이미지를 빌드 후 ECR 레포지토리에 Push 하고, Kustomize 를 사용해 Image Tag 를 갱신하는 방법을 정리한다. 이러한 작업은 Jenkins Pipeline 스크립트를 통해 수행된다. 내가 속한 팀에서 개발중인 각종 마이크로서비스 중, 'user-api' 서비스를 예로 들어 설명하겠다. Prerequisite 일단 Jenkins 는 설치되어 있다고 가정한다. 그리고 K8S 관련 작업 및 docker 컨테이너 빌드를 위한 각종 플러그인은 아래와 같다. Amazon ECR plugin (ECR: Docker Ima.. 더보기
[Kubernetes] ArgoCD 정리 (1) - GitOps Repo 구성과 ArgoCD 설치 들어가며 EKS 기반 쿠버네티스(이하 K8S) 환경 구축에 대해 다뤘던 지난 포스트를 작성한지 대략 7개월이 지나버렸다. 사실 해당 포스트는 2월부터 시작했던 신규 프로젝트에 적용할 K8S의 PoC를 위해 준비하는 과정에서 정리했던 것이다. 그리고 앞으로 K8S에 대해 학습 및 실무를 통해 알게되는 것들을 추가적인 포스팅을 통해 정리하려고 했으나.. 규모가 작지 않은 서비스 하나를 백지에서부터 단 6개월만에 시장에 릴리즈해야했던 상황속에 나의 에너지가 거기에 미치지 못했던것 같다. 어쨌거나 지금은 서비스가 오픈 되었고, 추가 feature와 이벤트 및 프로모션으로 인해 개발업무는 여전히 많지만 포스팅을 더 이상 미룰 수는 없다고 생각했다. 그래서 CI/CD 기반 구축에 있어 내가 주도적으로 진행했던 것들.. 더보기
[Kubernetes] EKS 시작 들어가며 최근 내가 속한 조직이 분사되어 새로운 회사로 출범했다. 새 회사의 기조 중 하나가 퍼블릭 클라우드로의 '트랜스포메이션(transformation)' 인데, 이에 따라 내가 속한 팀의 신규 프로젝트 또한 AWS 기반으로 진행하게 되었다. 퍼블릭 클라우드에 새롭게 시작하는 프로젝트라니. 이 보다 쿠버네티스를 도입하기에 적절한 기회는 없다 싶어 직접 PoC(Poof Of Concept)를 준비하여 진행했고, 약간의 논쟁(?) 끝에 결국 도입이 결정되었다. 그런고로, 그간 쿠버네티스를 학습하며 작업했던 내용들을 틈틈히 블로그에 정리하고자 한다. 물론 앞으로 갈길은 매우매우 멀다. 이제 시작일 뿐.. 개요 쿠버네티스는 이미 알만한 사람들은 다 아는 도구이다. 소프트웨어를 지탱해왔던 인프라가 '온 프레미.. 더보기
[Review] Clean Agile - Back to Basic 나의 페이스북 계정은 몇개의 개발자 커뮤니티에 가입이 돼 있다. 그 중 하나는 주로 학부생(가끔 중,고등학생 까지)들의 과제 질문이나 인터넷에 떠도는 프로그래밍 관련 밈(meme)들만 넘쳐나는지라 그다지 신경을 쓰지 않고 있었는데, 어느날 무심코 타임라인을 보다가 누군가 해당 커뮤니티에 올린 어떤 책의 부제목이 눈에 확 띄였다. Back to Basic 음.. 기본으로 돌아간다? 가만히 보니 무려 엉클 밥의 애자일을 다룬 서적이었다. 엉클 밥이라면 약 20여년전 애자일 선언의 주역 아니던가. 심지어 얼마 전 출간된 따끈따끈한 신간. 더 이상 의심할 여지가 없었기에 바로 주문을 때렸(?)다. 폭포수 프로세스 저자는 서두에서, "이 책은 딱딱한 이론을 다룬 학술서가 아닌 저자 본인의 그간 애자일 경험에 대한.. 더보기
제네릭, 그리고 변성(Variance)에 대한 고찰 (2) - Kotlin 지난 포스트에서 이야기한 'PECS' 공식은 어찌보면 난해하다. 한정적 와일드 카드 타입 파라메터에 사용하는 `extends` 와 `super` 키워드에 의해서 탄생한 용어이기 때문이다. 게다가 자바에는 상속, 상위 클래스를 지칭하는 같거나 비슷한 키워드가 있어서 더 혼란스럽다. 'PECS' 에서 말하는 `extends` 키워드와 상속을 나타내는 그것은 의미가 다르다! 코틀린은 많은 부분에서 자바보다 나은점을 보여준다. 특히나 지금 이야기하고 있는 변성에 관련한 키워드도 그 중 하나인데, 무척 직관적인 `out` 과 `in` 이라는 키워드로 'PECS' 공식을 표현하기 때문이다. 공변, 반공변의 원리와 이해는 지난 포스트에서 충분히 설명했으므로, 지금부터는 코틀린 변성의 키워드 중심으로 간단히 짚고 넘어.. 더보기
제네릭, 그리고 변성(Variance)에 대한 고찰 (1) - Java 공변 가령, 타입 `S`와 `T`가 있고, `T` 는 `S` 의 하위 타입이라고 하자. 특정 컨테이너 `C` 에 먼저 언급한 타입을 타입 파라메터로 전달한 제네릭, `C` 는 `C` 의 하위 타입인가? 이것이 성립되면 해당 언어는 공변적이라고 한다. 자바를 생각해보자. 자바는 애초에 공변, 반공변을 지원하지 않지만, 지원하는 것처럼(?) 보여주는 컴파일러 트릭을 사용한다. ` 더보기
Git Submodule을 활용한 IDL(Interface Definition Language) 적용 시작하며 내가 속한 팀이 담당하고 있는 대중교통 시스템은 대략 4가지 언어로 구성되어 있다. 일단 자바가 빠질 수 없겠고, 나머지는 스칼라, C++, 파이썬이다. 최근에는 업계에 몰아치는 코틀린 열풍에 힘입어, 시스템 내 신규 프로젝트(컴포넌트 수준)를 모두 코틀린으로 작성하고 있기도 하다. (사실 코틀린은 자바와 거의 100% 호환이 되기에, 자바라고 해도 무방할듯?) 이와 같이 시스템의 각 컴포넌트(일종의 마이크로 서비스, 이하 '컴포넌트'로 명명)들이 서로 다른 언어로 작성된 상황에서 유용한 것이 제목에서 언급한 'Interface Definition Language' 이다. 위키백과에서는 이를 아래와 같이 정의하고 있다. 인터페이스 정의 언어(Interface Description Language.. 더보기
SpringBoot + OAuth2 : 'Cannot convert access token to JSON', 그리고 예외에 대한 고찰 문제 최근 개인 스터디 및 예제코드 보관용으로 코틀린 기반의 스프링 부트 어플리케이션을 구축하고 있다. 사실 이런 백엔드 시스템엔 인증이 빠질 수 없기에 Spring Security와 OAuth2를 연동하여 코드를 작성했는데, 인증방식은 보통 많이 쓰이는 'password grant' 방식을 사용했다. Access 토큰 발급 테스트까지 마치고, 해당 토큰을 Authorization 헤더에 추가해 특정 Endpoint 에 요청하니 서버로부터 다음과 같은 응답이 왔다. { "error": "invalid_token", "error_description": "Cannot convert access token to JSON" } 토큰은 JWT 방식으로 생성이 되는데, 인증에 사용하기 위해 프레임워크 레벨에서 J.. 더보기