ArgoCD 선언적으로 이용해나가기 - Helm, App of App

시작하며 취준생 기간을 마무리하고 데브옵스 엔지니어로서 커리어를 시작하게 됐습니다! 🎉 근무를 시작하기 전까지 기간이 좀 남아있어서 그 전까지 뭘 해보면 재밌을까 고민하던 중에 새로 생긴 클라우드 동아리인 Cloud Club에서 클라우드와 인프라에 관한 주제로 발표할 기회가 주어져 ArgoCD를 토픽으로 발표를 해보려합니다. 그리고 관련된 내용을 한 번 더 블로그에 정리해보려해요! 주제는 “ArgoCD 선언적으로 이용해나가기” 이고 주로 다룰 내용은 어떻게 ArgoCD를 좀 더 선언적으로 관리하고 이용해나갈 수 있을지입니다. ArgoCD가 뭔지, 어떻게 Getting Started할지, GitOps가 뭔지 등을 다루지 않으려는 이유는 이미 그 내용으로는 충분한 양질의 자료가 존재한다고 생각하기 때문입니다. ArgoCD나 GitOps의 개념 자체 같은 내용보다는 새로운 기술(ArgoCD)을 접할 때 어떻게 입맛대로 커스터마이징해나가는지 그리고 그 작업을 어떻게 좀 더 유지보수하기 쉽도록 즉 선언적으로 해나갈 수 있을지에 대한 저의 작업 과정을 소개해보려합니다 ☺️ ...

4월 22, 2022 · 10 분

(도서) "NoSQL 철저 입문" - Column-Family DB, Graph DB

시작하며 저번 편에서는 Key-Value DB와 Document DB를 정리해봤고 이번 편에서는 Column Family DB와 GraphDB에 대해 정리해보려한다. Column Family DB나 GraphDB는 실제로 사용해본 적이 한 번도 없어서 어떤 녀석들인지 자세히는 모르지만 책 내용 위주로 정리해보도록 하겠다. Column-Family DB Column-Family DB는 한 Row에 무수히 많은 Column을 Schema가 강제되지 않은 형태로 이용할 수 있는 NoSQL의 한 종류이다. Wide column DB, Wide column store, Columnar DB 등의 다른 다양한 명칭들도 존재는 하지만 책에서는 좀 더 여러 컬럼을 묶어서 생각할 수 있는 점이 강조되는 Colum-Family DB라는 용어를 이용했다고 한다. ...

3월 17, 2022 · 5 분

(도서) "NoSQL 철저 입문" - Key-Value 데이터베이스, 문서 데이터베이스

(도서) “NoSQL 철저 입문” - Key-Value DB, Document DB 시작하며 앞선 글에서는 “NoSQL 철저 입문”이라는 도서에 대한 총평과 NoSQL 데이터베이스들이 공통적으로 갖는 특징에 대해 알아봤다. 이번 글에서는 NoSQL들 중에서도 Key-Value DB와 Document DB이 특히나 서로 유사한 형태를 띄는 것 같아 묶어서 정리해보려한다. 추가적으로 각자의 고유한 특징은 아니더라도 공통적 특징일 수 있는 Master - Slave(read replica) 구조나 Partitioning, Sharding 등등에 대해서도 정리할 예정이다. Key-Value Database 키와 값 뿐인 가장 간단한 형태의 NoSQL 종류이다. 아주 단순한 조회만이 지원된다. 키를 통해서만 조회가 가능하다. 키를 알고 있다면 데이터를 바로 찾을 수 있지만 키가 없다면 풀서치를 해야할 수 있다. Key-Value Database는 간단한 형태의 DB이기 때문에 테이블이나 그래프로 복잡한 관계를 나타내려는 경우에는 부적합하다. 단순 저장과 키를 바탕으로한 조회로 충분한 경우에 가볍게 사용하기 좋다. ...

3월 12, 2022 · 7 분

(도서) "NoSQL 철저 입문" 후기 및 NoSQL의 공통적 특징

책을 읽게 된 계기 당근마켓 플랫폼 팀의 서버 엔지니어로 지원하고 면접을 보면서 저장소에 관련한 질문을 많이 받았었다. 저장소는 관계형 데이터베이스나 다양한 NoSQL 데이터베이스들을 의미한다고 할 수 있겠다. 많은 질문들이 나왔고, 당시의 나는 사실 데이터베이스 쪽 지식은 거의 전무했던 것 같아 제대로 대답을 못한 게 많았던 것 같다. 인턴 근무를 하면서는 내가 익숙했던 관계형 데이터베이스가 아닌 NoSQL 특히 Redis나 DynamoDB 등을 주로 사용하는 모습도 많이 보게 되어 NoSQL에 대해 관심이 가게 되었다. ...

3월 11, 2022 · 5 분

2021년 회고

시작하며 매년 그랬지만 2021년도 참 빠르게 지나간 것 같다. 벌써 연말이라니. 오늘은 2021년을 돌아보며 잘 했던 부분에 대해선 나 자신을 칭찬해주고, 아쉬웠던 부분에 대해서는 개선할 방안을 찾아봄으로써 새해는 더 뜨겁고 의미있게 보내고자한다~! 개발 외적인 거는 개인적으로 정리할 계획이고, 본 회고록에서는 개발 관련된 내용 위주로 작성했다. 2021년 개발 관련 활동 요약 다양한 이유로 미뤄왔던 스프링을 사용해보기 시작했다. 바닥부터 주도적으로 설계/개발해나갈 수 있는 초기 스타트업에 합류해 나름 많은 경험을 해볼 수 있었다. 실제 개발 프로젝트에 여럿 참여해 협업을 해보았다. (교내 사이드 프로젝트, 개발 동아리, 스타트업) CS 지식을 넘어 개발자로서 필요할 만한 내용들을 많이 접하고 공부했다. DB, Transaction, Cache, Redis, Concurrent programming, TDD MSA, DDD, 메시지 큐, CQRS, SAGA 등에 대해 AUSG(AWS 대학생 동아리)와 SOPT(개발 동아리)에서 진행한 세미나에서 ElasticBeanstalk 관련 세션을 진행했다. 취준을 시작했다. AWS SAA 자격증을 공부 중이다. 백엔드/클라우드 분야에 있어 대부분의 기술 세미나와 기술 블로그 글들을 어느 정도 다 이해할 수 있어졌다. 무엇보다 올해에는 마음이 맞는 소중한 사람들을 많이 만나게 된 것 같아 감사하다. 좋았던 점 스타트업에 합류해 많이 성장할 수 있었다! ...

12월 20, 2021 · 6 분

쿼리 최적화하기 - 조회수와 같은 Count 성격의 작업 최적화하기 (N+1 문제 관련, feat. Redis)

시작하며 짧은 영상을 바탕으로 배틀을 할 수 있는 서비스를 Spring Boot MVC + JPA로 개발하던 중 위와 같이 API Latency가 처참하게도 느린 요청들이 감지되기 시작했습니다. 그동안은 쿼리 최적화보다는 로직 개발이 더 우선시하다보니 쿼리 최적화를 미뤄왔는데, 이번 기회에 이에 대해 다뤄보려합니다. 간단하게 코드를 짜서 테스트해보느라 Go 언어를 이용했지만 JPA를 이용하든 뭘 이용하든 문제와 그에 대한 해결책의 요지는 동일할 것입니다. 아무래도 백엔드에서 API를 개발하면서 파일 데이터를 주고 받는 게 아니라면 주로 Latency가 늘어나는 이유는 다음과 같을 것입니다. ...

11월 24, 2021 · 7 분

AWS Lambda + API Gateway를 통해 SSR로 OpenGraph 메타데이터 제공하기

시작하며 서비스 출시를 앞두고 마무리 작업을 하던 중 잊고 있었던 SNS 관련 기능들이 있었습니다. 그 중 OpenGraph를 통해 “공유하기” 기능 수행 시에 적절한 메타데이터를 제공해줘야 했습니다. 별로 어려운 기능은 아니지만 이를 제공하기 위해 적절한 방향을 찾기가 쉽지 않았던 것 같습니다. 고민과 삽질 끝에 저는 CloudFront, API Gateway, Lambda 서비스들을 이용하기로 결정했고, Serverless framework를 이용해 Golang 바탕의 마이크로서비스를 개발했습니다. OpenGraph? SSR? 본 글은 아키텍쳐나 기술 선정에 대한 내용을 많이 담을 것이라서 정의에 대한 자세한 설명은 생략하겠습니다. ...

11월 7, 2021 · 8 분

쿠뮤 MVP 개발기

시작하며 Github PlayStore 출시 프로젝트 및 팀 소개 페이지 학교 수업을 듣다보니 한 학기에 2개 3개의 프로젝트를 개발해야하는 경우가 있었습니다. 완전 개발이 처음이었던 시기에는 이러한 양적인 개발 속에서도 배울 점이 많았지만 어느 정도 지나고 나니 양적인 개발 속에서는 크게 배울 점이 느껴지지 않았고, 머리가 아닌 손으로 개발을 하고 있는 느낌을 받게 되었습니다. 따라서 저는 단순히 찍어내기 식의 개발을 반복하기 보다는 한 서비스를 꾸준히 개발해나가며 그 속에 많은 생각을 담아내고자 했습니다. 처음에는 가볍게 관심있던 기술들을 자유롭게 적용해볼 수 있는 개발 놀이터를 만들고자 하는 마음에 시작했고 제가 관심있던 기술들은 다음과 같았습니다. ...

10월 2, 2021 · 6 분

Golang으로 백엔드 개발하기 - 5. Error Handling. 에러 잘 처리하기 (feat. fiber)

시작하며 드디어 에러를 다뤄볼 차례가 됐네요. 작년까지만 해도 Error나 Exception 처리의 중요성을 잘 몰랐던 것 같습니다. 하지만 API 클라이언트랑 작업을 하면 할수록 에러 처리의 중요성을 느끼게 되는 것 같아요. 왜냐하면 백엔드에서 각각의 에러 케이스에 대한 status_code나 error_type등을 명확히 정의하지 않으면 클라이언트는 에러를 해석할 방법이 없기 때문입니다. 또한 에러를 잘 처리한 뒤 올바르게 응답하거나 로그를 남기는 것은 유지/보수 시에 백엔드 개발자 스스로 에게도 정말 중요할 수 있습니다. 우리는 실제 운영 환경의 로그를 마치 우리가 로컬에서 개발할 때 처럼 항상 보고있을 수는 없기 때문이죠. 즉 에러 로그만 따로 “편리하게” 볼 수 있거나 에러 로그로 인한 Notification System이 있으면 훨씬 에러를 추적(Tracing)하기 쉽겠죠! ...

9월 5, 2021 · 9 분

Golang으로 백엔드 개발하기 - 4. Custom Middleware(미들웨어) 작성해보기 (feat. fiber)

시작하며 안녕하세요. 저번 글에서는 fiber 라는 웹 프레임워크로 간단히 웹 애플리케이션을 만드는 방법에 대해 알아봤으니 이번엔 웹 애플리케이션을 만들다보면 꼭 필요해지는 middleware 작성법에 대해 알아보겠습니다. 여태까지 백엔드에서 서버를 개발하면서는 JS의 Express 프레임워크를 제외하고는 미들웨어 개발이 그닥 쉽게 이해되는 부분은 아니었던 것 같습니다. Express에서 미들웨어를 작성하는 방법은 굉장히 직관적이고 문서도 많은 편이었거든요. 하지만 Spring은 Filter나 Interceptor를 이해하기 위해 많은 내용을 알아야하고, Django는 Class based나 function based, 그리고 middleware를 추가하는 법 등이 좀 복잡한 편이라고 생각합니다. ...

9월 1, 2021 · 7 분