전체 글195 잘 만든 기능이 잘 쓰이는 기능은 아닐 수도 있다 (NSM, PA, BI로 살펴보는 제품 분석) 1. 들어가기 전에최근 새로 합류하신 그로스 마케팅 파트장님과 서비스의 성장 방향, 그리고 이를 측정하기 위한 지표에 대해 이야기하는 자리가 있었다. 이날 가장 인상 깊었던 내용은 각 팀이 서로 다른 목표와 지표를 기준으로 성과를 판단하다 보니, 서비스 전체의 사용자 흐름을 충분히 살펴보지 못하고 있다는 점이었다. 예를 들어 마케팅팀은 신규 가입자 수를, 개발팀은 기능 개선과 서비스 안정성을, 운영팀은 고객 만족도와 같은 지표를 중요하게 생각할 수 있다. 각 팀이 맡은 역할에 따라 집중하는 지표가 다른 것은 자연스럽지만, 개별 지표가 개선되었다고 해서 서비스 전체가 성장하고 있다고 판단하기는 어려울 것이다. 신규 가입자가 증가하더라도 실제 구매나 수업 참여로 이어지지 않을 수 있고, 특정 기능의 사용량이.. 2026. 11. 8. [AWS] SQS FIFO Queue를 사용했는데 메시지 순서가 보장되지 않았던 이유 1. 들어가기 전에최근 이벤트를 SQS Queue에 연결하는 작업을 진행하면서 메시지 처리 순서를 보장해야 하는 상황이 있었다. 로그아웃 시 기존 토큰을 삭제하는 이벤트가 발행되고, 이후 다시 로그인해 홈 탭에 진입하면 토큰을 생성하는 이벤트가 발행되는 구조였다. 두 이벤트가 발행된 순서대로 처리된다면 문제가 없지만, 생성 이벤트가 먼저 처리되면 상황이 달라진다. 새로 생성된 토큰이 뒤늦게 처리된 삭제 이벤트에 의해 제거될 수 있기 때문이다. 기존에 사용하던 SQS Standard Queue에서는 이러한 순서 역전이 발생할 수 있어 FIFO Queue를 새로 구성하기로 했다. 여기까지는 비교적 단순한 작업이었지만, 프로젝트 내에서 이미 FIFO Queue를 사용하고 있던 코드를 참고하던 중 예상하지 못한.. 2026. 10. 25. [Redis] Redis INCR는 원자적인데, 왜 Lua Script가 필요할까? 0. 들어가기 전에올해 참여했던 인프라 스터디에서 선착순 쿠폰 발급 시스템을 구현한 적이 있다. 아쉽게도 스터디를 끝까지 완주하지는 못했지만, 그 과정에서 여러 사용자가 동시에 쿠폰 발급을 요청하는 상황을 처리하기 위해 Redis의 INCR 명령어를 사용했다. INCR는 Redis에 저장된 숫자를 1 증가시키는 명령어로, 원자적(Atomic) 연산을 보장한다. 여러 요청이 동시에 같은 키의 값을 증가시키더라도 각 증가 연산이 안전하게 처리되므로 값이 유실되지 않는다. 하지만 실제 쿠폰 발급 로직은 카운터를 증가시키는 것만으로 끝나지 않는다. 발급 가능한 수량을 초과했는지 확인해야 하고, 이미 수량을 초과했다면 증가시킨 값을 다시 감소시켜야 한다. 이때 INCR와 DECR는 각각 원자적으로 실행되지만, 두.. 2026. 10. 11. [Spring] Spring Cloud Gateway는 요청을 어떻게 전달할까? - Route, Predicate, Filter 0. 들어가기 전에지난 글에서는 ECS에서 실행 중인 Service들이 서로를 어떻게 찾고 연결하는지 살펴보았다. ECS Task는 배포나 오토 스케일링, 장애 복구 과정에서 계속 생성되고 종료된다. Task가 교체되면 IP도 함께 달라지기 때문에 다른 Service가 특정 Task의 주소를 직접 바라보는 방식으로는 안정적인 통신을 구성하기 어렵다. 지난 글에서는 이 문제를 해결하기 위해 Service Discovery와 Service Connect를 살펴보았다. Service Discovery가 현재 실행 중인 Task의 위치를 찾아준다면, Service Connect는 Proxy를 통해 실제 Task와 연결되는 과정까지 관리한다. 이를 적용한 뒤 Gateway는 개별 Task의 IP 대신 auth, .. 2026. 9. 27. [AWS] ECS Service는 서로 어떻게 통신할까? (Service Discovery와 Service Connect) 0. 들어가기 전에 지난 글에서는 하나의 Docker Image가 ECS에서 실제 서비스로 실행되기까지 필요한 구성 요소들을 살펴보았다. Task Definition은 컨테이너를 어떤 환경에서 실행할지 정의하고, Task는 그 정의를 바탕으로 실제 컨테이너를 실행한다. 그리고 ECS Service는 지정한 수의 Task가 계속 실행되도록 관리한다. 이렇게 실행된 Task는 ALB와 연결함으로써 외부 요청을 전달받을 수 있었다. 그렇다면 MSA 환경에서 ECS Service끼리 직접 통신해야 하는 경우에는 어떨까? 예를 들어, 외부 요청을 가장 먼저 받는 Gateway Service가 인증을 처리하기 위해 Auth Service를 호출한다고 가정해 보자. 이때 Gateway Service가 요청을 전달하려.. 2026. 9. 13. [AWS] ECS는 어떻게 컨테이너를 실행할까? (Cluster, Service, Task, Fargate 이해하기) 0. 들어가기 전에최근 ECS 기반 환경을 구성하면서 Cluster, Service, Task 같은 개념을 자주 접하게 되었다. ECS 콘솔을 보고 직접 구성을 변경하다 보니 각각의 개념을 아는 것과 이들이 어떤 관계로 연결되어 하나의 애플리케이션을 실행하는지 이해하는 것은 조금 다른 문제라는 생각이 들었다. 그래서 이번 글에서는 각 용어의 정의를 하나씩 정리하기보다, Docker 이미지 하나가 ECS에서 실행되고 실제 요청을 받기까지의 흐름을 따라가면서 ECS의 전체 구조를 정리해보려고 한다. 1. ECS에서 컨테이너가 실행되기까지먼저 전체적인 흐름을 단순하게 보면 다음과 같다.1) 이미지에서 실행 설정까지ECS에서 컨테이너를 실행하려면 먼저 컨테이너 이미지가 필요하다. 로컬 환경이라면 다음과 같이 이.. 2026. 8. 30. 우리 프로젝트는 DDD를 어떻게 사용하고 있을까? 1. 들어가며DDD를 이론으로 접한 적은 있었지만 실제 프로젝트에서 적용해 본 경험은 많지 않았다. 그래서 개념 자체는 알고 있다고 생각했지만 막상 실무 코드 안에서 도메인 개념이 어떤 형태로 드러나는지, 그리고 어디까지를 하나의 도메인으로 봐야 하는지는 쉽게 와닿지 않았다. 새로운 회사에 합류한 뒤 프로젝트 구조를 더 잘 이해하고 싶다는 생각이 들었고, 이를 계기로 DDD 이론을 다시 정리해 보면서 실제 프로젝트에서는 어떤 방식으로 적용되고 있는지 함께 살펴보게 되었다. 이번 글에서는 먼저 DDD의 기본 개념을 간단히 정리한 뒤, 현재 프로젝트에서는 어떤 방식으로 원칙이 적용되어 있는지, 그리고 공통 회원 모델과 역할 모델의 경계를 어떻게 나누고 있는지 살펴보려고 한다. 참고로 글에서 등장하는 도메인 .. 2026. 8. 16. [AWSKRUG WOMEN IN CLOUD] 여성 엔지니어 커리어 밋업에서 얻은 네 가지 질문 들어가기 전에어느덧 이직한 지 1개월 반이 되어간다. 운이 좋게 이직에는 성공했지만, 그 과정은 생각보다 쉽지 않았다. 최종 면접에서 고배를 마시며 우울감에 빠져보기도 했고, 하루가 다르게 쏟아지는 AI 소식 속에서 '나라는 사람이 시장 안에서 가진 경쟁력이 있기는 한 걸까?' 하는 생각도 자주 들었다. 4년 차가 되었는데도 여전히 커리어에 대한 고민을 한다면, 나는 개발이 맞지 않는 사람인 걸까. 그만두는 게 맞는 걸까. 그 시기를 지나면서 자연스럽게 이전보다 셀프 브랜딩에 더 관심을 갖게 되었다. 회사가 아닌 개인의 이름으로 기억되는 사람들, 자신이 하고 싶은 일을 하며 그것을 꾸준히 이어가는 사람들의 이야기를 많이 찾아보게 되었다. 그러던 중 평소 관심을 가지고 있던 AWSKRUG Women I.. 2026. 8. 2. [Spring Security 6] permitAll인데도 401이 발생했던 이유 (JSP 렌더링 이슈) 0. 들어가기 전에외부 본인인증 API를 연동하면서 관련 경로는 인증 없이 접근이 가능하도록 열어두어야 했다. 외부에서 콜백이 들어오는 구조이다 보니 JWT 토큰 없이도 접근 가능한 엔드포인트가 필요했기 때문이다. 그래서 Spring Security 설정에서 해당 경로를 permitAll()로 처리했다. 하지만 예상과 다르게 401 에러가 발생했다. 실제 로그를 보면 아래와 같이 컨트롤러까지는 정상적으로 진입하고, 외부 API 호출도 문제없이 수행되는데 JSP가 렌더링 되는 순간 인증이 깨지면서 요청이 막혔다. 처음에는 JwtFilter나 Security 설정 자체를 의심했지만, 로그를 따라가다 보니 문제의 원인은 다른 곳에 있었다. DEBUG o.s.security.web.FilterChainProxy.. 2026. 7. 18. 이전 1 2 3 4 ··· 22 다음