전체 글(76)
-
[Flicker] DB Connection Pool 고갈 장애 모니터링 및 해결 방안
Flicker 프로젝트에 모니터링을 붙이고 나니 그래프가 잘 그려지는 건 좋은데,정작 아무 일도 안 일어나니 잘 동작하는 건지 알 수가 없었다. 그래서 일부러 장애를 만들어보기로 했다. 첫 번째 대상은 커넥션 풀로 정해 k6 부하테스트를 진행했다.*프로젝트 링크 : https://github.com/sns-service 왜 커넥션 풀인가Spring Boot는 HikariCP라는 커넥션 풀을 쓴다. DB 커넥션을 매번 새로 맺으면 비용이 비싸서, 미리 DB 커넥션을 여러 개 만들어두고 돌려쓰는 구조다. (기본 10개)문제는 이 10개가 다 쓰이는 중일 때다. 11번째 요청이 오면 누군가 커넥션을 반납할 때까지 기다린다. 반납이 안 되면? 설정된 시간(기본 30초)만큼 기다리다 예외를 던진다. 이게 커넥션 ..
2026.07.07 -
Terraform Network 모듈 설계 ㅡ VPC부터 SG까지 의존성 사슬 그리기
지난 글에서 ECR 모듈로 테라폼의 기초를 익혔다면, 이번에는 좀 더 복잡한 네트워크(Network) 모듈을 설계할 차례다.네트워크 모듈의 리소스는 아래와 같다.VPC, Subnet, IGW, NAT, EIP, Route Table, Route Table Association, Security Group의존성 사슬도 길어져 어디서부터 손대야 할지 막막한 단계였다.이번 글은 모듈 코드 자체보다 의사결정에 비중을 둔다. (코드는 Terraform 문서가 더 잘 설명하기에)내가 정리해두고 싶은 건 "왜 이렇게 골랐는가" 이다. 그림부터Flicker가 필요로 하는 네트워크 구조는 이렇다. Internet | I..
2026.06.13 -
[IaC] Terraform으로 인프라 코드화하기
Flicker 인프라가 콘솔로 너무 흩어져 있었다. ALB는 어느 SG를 받는지, RDS 비번은 어디 박혀있는지EC2 IAM Role은 누가 만들었는지 정리할 때가 됐다 싶어 Terraform 으로 코드화를 시작했다. 원래 Terraform 에도 관심이 있어서, 이번 작업을 재밌게 진행했던 것 같다. GitHub 링크https://github.com/sns-service/flicker-infra IaC(Terraform) 도입 배경정답("재현성, 협업, 버전 관리")외에도, 내가 인프라를 코드로 옮긴 이유는 아래와 같다.이전에 만든 리소스를, 오늘 보면 왜 만든지 기억이 나지 않음따라서 "이거 지워도 되나?" 라는 질문에 답을 하지 못했음Git 로그를 통해 인프라 변경 이력(생성 목적, 관련 PR 등)..
2026.06.13 -
사이드 프로젝트에 블루/그린 배포 붙여보기 — 9초의 벽
지난 주에 GitHub Actions로 EC2 배포 자동화를 끝냈는데, 컨테이너 교체할 때 매번 5초쯤 끊김이 있었다. main에 푸시하면 1m 40초 만에 자동 배포되는 건 좋은데, 그 사이에 누가 접속하면 5xx 상태코드를 받는다.사이드 프로젝트라 사용자는 사실 나뿐이지만, 인프라 직무 전환을 준비 중이라 블루/그린 패턴은 꼭 한번 만들어봐야 했다. 이번 주에 시도했고, 결론부터 말하면 9초로 끝났다.0초가 목표였는데. 어디까지 갔고 어디서 막혔는지 적어둔다. 큰 그림같은 EC2 안에 컨테이너를 두 벌 띄울 자리를 만든다.blue = 포트 8080green = 포트 8081ALB는 둘 중 한쪽에만 트래픽을 보낸다. 배포할 땐 노는 쪽에 새 버전을 올리고, 헬스체크가 통과하면 ALB 리스너를 그쪽으로 ..
2026.06.03 -
OIDC + SSM으로 SSH 없이 EC2 배포하기
Flicker 사이드 프로젝트를 GitHub Actions로 자동 배포하면서, SSH 키 관리하기가 불편했다.EC2에서 22번 포트 열어두는 것도 찜찜하고, GitHub Secrets에 private key 통째로 박는 것도 그렇고. 그래서 이번에 다 갈아엎으면서 두 가지를 시도했다.AWS 엑세스 키 대신 GitHub OIDC로 임시 자격증명 받기EC2 SSH 대신 SSM(Session Manager) 으로 명령 전송결과적으로 키를 따로 관리하지 않아도 됐고, EC2 보안 그룹에서도 22번 포트를 닫을 수 있게 되었다. 왜 OIDC인가?*OIDC(OpenIDConnect)는 토큰 기반 인증이다 : ID Token(JWT)JWT 안에는 개념적으로 repo, 브랜치, workflow 같은 정보가 들어있다. ..
2026.05.28 -
Offset, Cursor 기반 페이지네이션 [타임라인 기능 구현]
페이지네이션이란?일반적인 경우 많은 양의 데이터를 조회할 때 한 번에 가져오지 않고 페이지로 쪼개서 가져온다. 이를 페이지네이션(Pagination)이라고 하며 특정한 정렬 기준에 따라, 지정된 갯수의 데이터를 가져오는 것이다.페이지네이션은 대표적으로 다음과 같이 두 가지 방식으로 처리된다.오프셋 기반 페이지네이션 (Offset-Based Pagination)커서 기반 페이지네이션 (Cursor-Based Pagination)각각의 특징과 장단점을 살펴보고, 커서 기반 페이지네이션으로 타임라인 기능을 구현한 경험을 작성하겠습니다. 오프셋 기반 페이지네이션LIMIT, OFFSET 쿼리를 사용해 '페이지' 단위로 구분하여 응답하도록 구현한다. SELECT * FROM feed ORDER BY feed_id..
2024.08.16