본문 바로가기

전체 글118

Jenkins EC2 단일 인스턴스에서 EKS 기반 마이그레이션: 비용 절감과 확장성 확보 사례 분석 내가 다니는 회사의 Jenkins는 m5.2xlarge EC2 인스턴스 하나에 3TB EBS 붙여서 단일 구조로 운영하고 있었다.입사 초반에는 다른 중요한 일들이 많아서 Jenkins 구조에 대해 딱히 신경 쓸 여유가 없었다. 그런데 인프라 자동화를 진행하면서 업무 시간이 많이 줄어들었고, 자연스럽게 다른 고도화할 부분을 찾아보게 됐다. 그때 Jenkins가 눈에 들어왔다.가장 먼저 느낀 문제는, 간단한 배포 작업조차 시간이 꽤 오래 걸린다는 점이었다. 그래서 개발자들 사이에서 불만이 꾸준히 나왔다. 또, Jenkins 버전이나 각종 플러그인을 업데이트해야 할 때마다 시스템을 중단해야 하는 구조였다. 실 서비스에 큰 영향이 없는 중단이긴 하지만, 나는 이런 방식이 썩 마음에 들지 않았다. 회사 윗분들은 .. 2025. 8. 13.
Terraform으로 비-Kubernetes 환경 IaC 전환하기 회사에서 인프라 담당자가 나 혼자 뿐이라 AWS EKS가 없는 여러 계정을 혼자 관리하고 있었다. 문제는 계정이 너무 많고, 각 계정마다 레거시 인프라가 여기저기 흩어져 있어서 수동으로 관리하기가 너무 힘들었다는 점이다. 특히 보안 점검 시즌마다 각 계정을 하나하나 점검하는 데만 일주일 넘게 걸렸고, 레거시 인프라는 누가 어떻게 관리하는지 추적도 안 되니까 위험 부담이 컸다.그래서 “이걸 어떻게 하면 코드화해서 관리할 수 있을까?” 고민했다. 여러 가지 도구를 살펴봤는데, Terraform이 AWS 리소스를 선언형으로 관리하는 데 가장 적합해 보여서 Terraform으로 전환을 결정했다. 주요 작업 내용Identity Center SSO 중앙관리 계정 코드화먼저 작업한 건 Identity Center .. 2025. 7. 17.
ACK + Custom Controller로 구현한 GitOps 기반 AWS 인프라 자동화 AWS 기반의 마이크로서비스 환경을 Kubernetes 위에 올리고, GitOps로 인프라를 자동화하는 건 이제 DevOps 팀에게 일종의 기본 과제처럼 여겨진다.나는 Helm + ACK(AWS Controllers for Kubernetes) 기반으로 GitOps 구조를 도입했지만, 운영 초반부터 바로 벽에 부딪혔다. 바로 ACK가 지원하지 않는 리소스 문제였다. 이 글에서는- ACK의 한계를 어떻게 Go 기반 Custom Controller로 넘겼는지,- CSR / SSR / Backend 전체 인프라를 어떻게 운영자 개입 없이 완전 자동화했는지직접 구현한 내용을 공유해보려 한다. ACK는 좋지만 완전하지 않다.ACK는 AWS 리소스를 Kubernetes 리소스로 추상화해서 선언형으로 관리할 수 있.. 2025. 7. 3.
AWS Transit Gateway 구조 개선 기존 구조와 문제점입사 당시, 각 VPC는 이미 Transit Gateway에 연결되어 있었고, Route Propagation도 활성화된 상태였다.모든 계정이 TGW를 중심으로 성 구조(star topology)로 연결되어 있어, 계정 간 통신이 자유롭게 이루어지는 구조였다.처음엔 잘 짜인 구성이라 생각했지만, 구조를 파악할수록 모든 계정을 연결할 필요는 없지 않을까? 하는 의문이 생겼다.특히 dev, stage, prod 환경 간에도 제약 없이 통신이 가능한 점에서, 보안 측면의 경계가 모호하다는 점이 눈에 띄었다.보안상 적절한 구조인지 확인이 필요하다고 판단해, 보안 담당자님께 논의를 제안했고당시 AWS 인프라에 대한 배경지식이나 접근 권한이 없으셨던 터라, 계정 간 통신 방식과 TGW 연결 구조를.. 2025. 6. 29.
ACK + Jenkins로 AWS 자동화작업 Terraform 대신 ACK를 도입한 이유는 이전 글 "내가 ACK를 선택한 이유" 에 자세히 정리해두었다.이번 글에서는 ACK와 Jenkins를 기반으로 GitOps 방식의 자동화 파이프라인을 구축하고이를 통해 ACM, Route53, ALB, CloudFront, S3, Lambda, RDS, ECR 등 주요 AWS 리소스를 자동으로 생성·배포한 구조를 공유하려고 한다. CSR 기반 단순 서비스 자동화 현황내가 입사했을 당시, 일부 CSR 기반 기본 인프라 자동화가 이미 구축되어 있었다.정적 파일을 S3에 올리고 CloudFront를 통해 서비스하는 단순한 구조에 한해, 아래 작업들이 자동으로 처리되고 있었다. - ACM 인증서 생성- Route53 DNS validation 레코드 생성- Clou.. 2025. 6. 29.
ResourceQuota 적용기 우리 회사에서 운영하는 여러 서비스들은 각자 자신의 config repository 에서 values.yaml에 CPU와 Memory Rrequest 값을 정의하고 있다. 문제sms 개발자들은 인프라 설정을 잘 몰라 그냥 복붙해서 쓰다 보니, 이 값들이 실제 필요량보다 너무 크게 잡히거나 적게 잡히거나 하는 것이다. 특히 dev 환경에서 이게 심했다. m7g.xlarge 노드 3개를 띄워 놓았음에도 pod들이 memory 부족으로 스케줄링이 안 되고 대기하는 상황이 매번 발생했다. 0/3 nodes are available: 3 Insufficient memory. preemption: 0/3 nodes are available: 3 No preemption victims found for incom.. 2025. 6. 22.
Argo CD로 Argo CD 관리하기 Argo CD도 GitOps로 관리되면 안 되는가?Argo CD를 통해 사내 서비스들을 Git 기반으로 잘 관리하고 있었다. 하지만 정작 Argo CD 자체는 수동으로 설치되고 운영되고 있는 구조가 계속 마음에 걸렸다. GitOps를 지향하면서 '왜 Argo CD는 Git으로 관리하지 않을까?' 하는 의문이 들었고, 그래서 Argo CD가 Argo CD를 배포하도록 하는 구조로 바꿔보기로 했다. App of Apps 구조로의 전환dev, stage , prod 환경이 있고, 각 계정마다 external / internal 로 총 6개의 클러스터를 두어 argocd만 6개를 각각 설치해 관리해야하는 불편함이 있었다. 또한 제각각 설치 관리하게 되면서 버전의 차이도 생기고 각 사용자들의 policy 관리나 .. 2025. 6. 21.
퍼블릭에서 내부망으로 - 블록체인 노드 서비스 전환기 우리 회사의 블록체인 노드 서비스는 그동안 Public Load Balancer와 Public DNS로 구성되어 있어 외부에서도 접근 가능한 구조였다. 하지만 실제로는 일부 외부 서비스 호출을 제외하면 대부분 사내 내부 파드에서만 요청이 오고 있었다. AWS 계정은 서로 달랐지만 TGW(Transit Gateway)로 모두 연결된 구조였기에 사실상 내부망 호출이 가능하다고 판단했다. 내부 트래픽으로 전환하면 데이터 전송 비용을 줄일 수 있다고 생각했고, 이를 팀장님과 CTO님께 제안해 구조를 전면적으로 내부망 기반으로 바꾸기로 했다. 왜 바꾸게 됐나 사실 이 구조가 문제를 일으킨 적은 없었다.하지만 당시 내 주된 업무 중 하나가 비용 절감이었고, 이를 살펴보던 중 외부망 전송 비용이 꽤 눈에 띄었다... 2025. 6. 20.
내가 ACK를 선택한 이유 왜 Terraform 안 써요?전임자와의 술자리 논쟁에서 시작된 이야기 AWS 기반 인프라를 IaC로 관리한다고 하면, 가장 먼저 떠오르는 도구는 단연 Terraform일 것이다.그리고 그 다음은 아마도 CloudFormation일 것이다. 하지만, 내가 선택한 것은 바로 ACK였다. 이 선택은 예상대로 환영받지 못했다.나에게 인수인계를 해줬던 우리팀 전임자와 이후 함께한 술자리에서 자연스럽게 이 주제가 나왔고, 한참의 논쟁(?)이 있었다. 그 때의 대화를 다시 꺼내보며, 내가 왜 ACK를 선택했는지를 이 글에 적어보려고 한다. "유진님, 왜 Terraform 안 써요?"이 질문에 나는 되물었다."그럼 왜 Terraform을 추천하시나요?"돌아온 대답은 이랬다."우리나라 대부분이 Terraform을.. 2025. 6. 19.
External Secrets로 시크릿 관리 일원화한 사례 처음 인수인계 받았을 당시, 쿠버네티스를 막 도입한 초창기 구조였기 때문에 대부분의 민감 정보는 환경변수나 ConfigMap을 통해 관리되고 있었다. 익숙하고 빠르게 접근할 수 있는 방식이기에 당시 기준으로는 그게 최선이었을 거다. 운영을 맡아보니 서비스 수가 점점 늘어나고, 감사 대응이나 운영 보안 이슈도 하나둘씩 생기기 시작하면서 기존 방식으론 한계가 있다는 걸 체감하게 됐다. 이 구조를 그대로 두긴 어렵겠다는 생각이 들었다.그 즈음에 마침 솔트웨어에서 쿠버네티스 세미나를 연다고 해서 참석하게 됐다. 거기서 External Secrets를 활용해 AWS Secrets Manager와 연동하는 구조를 소개해줬는데, 보안 구성도 잘 되어 있고 구조 자체도 깔끔해서 꽤 인상 깊었다. 다만 Secrets M.. 2025. 6. 4.
이유진 | DevOps Engineer 이유진DevOps EngineerEmail.   lyujin0131@gmail.com 자기소개 기술 스택AWS, Kubernetes, ACK, Terraform, Docker, Python, Go, Java, Linux 경력DevOps Engineer오지스 | 하이드로우  (2024.07. ~ 재직중) 기술 스택: AWS, Kubernetes, ACK, Jenkins, ArgoCD, Docker, Python, Go, LinuxGitLab, Jenkins를 활용한 CI/CDACK를 사용한 인프라 자동화  자격증AWS Certified Solutions Architect - AssociateAmazon Web Services2024.03 SQLD한국데이터산업진흥원2023.04 정보처리기사한국산업인력공단20.. 2025. 3. 2.
[Programmers/Lv.2] 도넛과 막대 그래프 - Java 알고리즘 문제 풀이 / 프로그래머스 (programmers) - 도넛과 막대 그래프 문제 내용을 설명하기엔 너무 길어서 문제에 대한 요약 따로 하지 않고, 문제의 제한사항과 내가 푼 풀이법에 대해서만 설명하겠다. ▏문제 설명 제한사항 1 ≤ edges의 길이 ≤ 1,000,000 edges의 원소는 [a,b] 형태이며, a번 정점에서 b번 정점으로 향하는 간선이 있다는 것을 나타냅니다. 1 ≤ a, b ≤ 1,000,000 문제의 조건에 맞는 그래프가 주어집니다. 도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프의 수의 합은 2이상입니다. ▏문제 풀이 각 그래프의 구분하는데 중점을 두고 문제를 해결했다. 제일 쉽게 구분할 수있는 것은 막대 그래프였다. 다른 두 그래프와는 달리, 그래프의 꼭대기 정.. 2024. 4. 20.