Backend Engineering 25

DDD란 무엇일까요 ? 개념적인 설명을 중심으로...

안녕하세요.오늘은 DDD가 무엇인지 개념적인 설명을 중심으로 한 번 정리해보도록 하겠습니다. ▶️ DDD란 무엇일까?DDD는 도메인 주도 설계(Domain-Driven Design)라 불리며, 소프트웨어를 비즈니스 도메인 중심으로 설계하는 접근법입니다.목표는 복잡한 비즈니스 로직을 이해하기 쉽고 관리하기 편하게 만들고, 코드와 도메인 모델 간의 일관성을 유지하는 것입니다. DDD에서는 단순히 코드를 만드는 것이 아니라, 도메인의 의미와 흐름을 설계 단계에서 먼저 정의하는 것이 핵심입니다. 몇 가지 용어를 중심으로 설명해보겠습니다. ▶ 유비쿼터스 언어제가 생각하기에 DDD에서 가장 중요한 개념이라고 생각됩니다.유비쿼터스 언어는 개발자와 도메인 전문가가 공유하는 일관된 용어입니다. 예를 들어, 주문 관리 시..

Backend Engineering 2025.09.08

CQRS란 무엇이고, 어떻게 쓸까?

안녕하세요! 오늘은 CQRS에 대해 정리를 해보려고합니다.낯설 수 있고, 어려워보이는 개념이긴 한데 사실 이미 우리는 이를 잘 활용하고 있을 수 도 있습니다. ✅ CQRS란 무엇인가?CQRS는 Command Query Responsibility Segregation 의 축약으로 우리말로 '명령과 조회 책임 분리'라는 뜻입니다. 쉽게 말하면 “데이터를 바꾸는 부분”과 “데이터를 읽는 부분”을 나눠서 설계하는 것을 말합니다. 여기서 첫 번째로 헷갈릴 수 있는 용어가 등장합니다. Command와 Query가 있는데, 기존 우리가 사용하던 의미와는 조금 다릅니다.Command데이터를 변경하는 요청예: 회원 가입, 비밀번호 변경 등 Read를 제외한 나머지Query데이터를 조회하는 요청예: 회원 정보 조회 등 R..

Backend Engineering 2025.08.14

Kong Gateway 활용 - 인증과 인가 분리

오늘은 Kong Gateway를 활용하여 인증과 인가를 분리한 내용에 대해서 정리해보려고 합니다.Kong Gateway가 무엇이고, 어떤 장점이 있는지는 이전 글을 참고해주시면 됩니다!( Kong Gateway를 써보자 - 인증, 라우팅, 보안까지 한 번에! ) ✅ 인증(Authentication)과 인가(Authorization)의 개념먼저 인증과 인가의 차이를 짚고 넘어가겠습니다.인증(Authentication): "누구인지"를 확인하는 절차입니다.사용자가 올바른 자격 증명(아이디/비밀번호, 토큰 등)을 가지고 있는지를 판단합니다.인가(Authorization): "무엇을 할 수 있는지"를 결정합니다.인증된 사용자가 특정 자원 또는 기능에 접근할 권한이 있는지를 판단합니다.👉 예를 들어, 로그인을 ..

Backend Engineering 2025.07.23

Kong Gateway를 써보자 - 인증, 라우팅, 보안까지 한 번에!

안녕하세요.오늘은 API Gateway 중 오픈소스로 빠르고 강력하게 사용할 수 있는 Kong에 대해 한 번 작성해보려고 합니다.API Gateway는 MSA 구조에서 필수적인 요소입니다.그럼 Kong을 통해 무엇을 할 수 있고, 왜 써야 하는지를 살펴보고, 바로 테스트할 수 있도록 설치 및 설정 방법까지 정리해보겠습니다. ✅ Kong Gateway란?Kong은 Nginx 기반으로 만들어진 고성능 API Gateway입니다. (https://konghq.com/)트래픽 제어, 인증, 로깅, 로드밸런싱, 보안 등 다양한 기능을 플러그인 방식으로 제공합니다.기본적으로 Kong은 요청을 받아서 Backend API로 라우팅하는 역할을 하고, 그 사이에서 인증/인가, 로깅, 트래픽 제어 등의 작업을 수행합니다...

Backend Engineering 2025.07.15

Undertow란? Tomcat, Netty와 비교해 언제 쓰면 좋을까

최근에 Undertow를 다시 다뤄볼 일이 생겼는데, 예전에도 이걸 사용한 적이 있었습니다.그래서 왜 선택했는지 떠올려보면서 정리해보려고 합니다.결론부터 말하면, 빠르고 가볍고 유연해서였고, 당시엔 내부 API 서버 용도로 사용했었습니다. ▶️ Undertow란? Undertow라는 것이 익숙하지 않을 분들이 많을 것 같습니다. (저도 처음에 그랬습니다)Undertow는 Java 기반의 경량 웹 서버로, 논블로킹 비동기 IO를 지원하고, 서블릿 4.0 스펙까지 지원하는 웹 서버입니다.(https://undertow.io/)기본적으로 Netty 위에서 동작하며, Servlet Container로도 사용할 수 있고, JAX-RS, HTTP2, WebSocket 등도 잘 지원하는 꽤 다재다능한 웹 서버입니다...

Backend Engineering 2025.07.03

[Serverless 서비스 개발] #7. CloudWatch 로깅 개선과 운영 전략

오늘은 마지막으로 로깅 개선에 대한 부분을 작성 해보려고 합니다.Serverless 구조에서는 보통 AWS Lambda에서 바로 연결된 CloudWatch를 통해 로깅과 모니터링을 처리합니다. 하지만 기본 로그만으로는 운영/디버깅에 어려움이 많기 때문에 좀 더 고도화된 로깅 전략을 구성해볼 수 있습니다.그 몇가지에 대해서 정리해보겠습니다. ▶️ 일반적인 로깅 형태기존에는 보통 이런 로그를 찍었을 겁니다System.out.println("User login success: userId=abc123");문자열 로그는 누구나 보기에 괜찮고, 편하게 구현할 수 있다는 장점이 있습니다. 다만, CloudWatch에서 특정 로그를 필터링하거나 수집하려면 너무 비효율적입니다.그래서 구조화된 로그(ex. JSON)를 ..

Backend Engineering 2025.06.30

[Serverless 서비스 개발] #6. Lambda 성능 올리기

안녕하세요오늘은 지난번까지 서비스 개발을 마치고 성능 개선을 위한 몇 가지 방법을 정리해보려고 합니다. 아마 기존에도 들어보셨을거고, 이번에 Lambda를 통해 구현하면서 겪으셨던 '콜드 스타트' 문제가 있을텐데요.특히 로그인 등 인증처럼 사용자 경험에 민감한 API를 구성할 때는 이 지연이 체감되기 때문에, 반드시 최적화가 필요합니다.이번 글에서는 Lambda 환경에서 콜드 스타트가 왜 문제인지, 어떤 전략으로 개선할 수 있는지를 정리해보겠습니다. ✅ Warm Start vs Cold StartLambda는 이벤트가 발생할 때만 실행되는 함수입니다.이 함수가 이미 실행된 적이 있으면 기존 컨테이너를 재사용하게 되는데, 이를 Warm Start라고 합니다.반대로 함수가 처음 호출되거나, 일정 시간 동안 ..

Backend Engineering 2025.06.26

[Serverless 서비스 개발] #5. Token Refresh

안녕하세요 오늘은 지난 Login / Logout에 이어서 해당 JWT Token을 Refresh 하는 방법에 대해 작성해보려고 합니다. 아시다시피 JWT 기반 인증을 사용하면 accessToken은 stateless하게 동작해서 서버 부하가 적고, 속도도 빠릅니다.하지만 짧은 유효 시간 때문에 일정 시간이 지나면 다시 로그인해야 하는 번거로움이 생깁니다.이를 해결하기 위해 사용하는 것이 refreshToken입니다. ▶️ Refresh API가 필요한 이유JWT는 자체적으로 만료 시간을 가지기 때문에, accessToken은 일반적으로 15분~30분 정도로 짧게 설정합니다.(저는 지난 개발에서 15분으로 설정 했습니다.)하지만 사용자가 매 15분마다 다시 로그인한다면 UX는 매우 나빠집니다. 그래서 긴..

Backend Engineering 2025.06.23

[Serverless 서비스 개발] #4. 로그인/로그아웃 기능 구현

이번 글에서는 지난 글에 이어 로그인 / 로그아웃 기능을 구현해보겠습니다. 이전 글에서 회원가입 기능을 잘 만들었으니, 새로운 회원정보가 DynamoDB의 User Table에 잘 저장되고 있을겁니다. 로그인을 할 때 회원정보 (email 과 password) 를 확인할 것이고 일치한다면 로그인 시에는 accessToken / refreshToken을 함께 발급하고, 로그아웃 시에는 해당 refreshToken을 무효화 처리할 수 있도록 구성하려 합니다. ☑️ 로그인/로그아웃 구조 개요기본적인 흐름은 아래와 같습니다.[로그인]사용자 요청 → 이메일/비밀번호 검증 → accessToken + refreshToken 발급 → 응답[로그아웃]사용자 요청 → Authorization 헤더 파싱 → 토큰 확인 ..

Backend Engineering 2025.06.22

[Serverless 서비스 개발] #3. 회원가입 기능 구현

오늘은 이제 실제 코드 개발을 진행하려합니다. 가장 먼저 해보려고 하는 것은 '회원가입' 입니다.기존 설계해둔 내용처럼 Lambda와 DynamoDB를 활용해서 진행을 해보겠습니다.▶️ 회원가입 기능 정의먼저 간단하게 회원가입 기능에 대해서 정의를 해보려합니다.회원가입 기능은 다음의 간단한 동작 흐름을 가지고 있습니다. 1. 사용자가 이메일과 비밀번호를 전달2. 해당 이메일이 이미 존재하는지 확인 (중복체크)3. 존재하지 않으면, 비밀번호를 암호화하여 DynamoDB에 저장 ▶️ 회원 테이블 설계그럼 순차적으로 개발하기에 앞서, 테이블 스키마를 정의해보겠습니다. DynamoDB는 NoSQL 기반의 키-값 저장소로, 테이블마다 엄격한 스키마를 정의하지 않아도 되는 구조입니다.하지만 개발 효율성과 유지보수의..

Backend Engineering 2025.06.20