2025/06 11

[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

[Serverless 서비스 개발] #2. serverless Framework로 Lambda 배포하기

안녕하세요. 오늘은 지난 글에 이어서 serverless Framework 연동과 관련한 부분을 작성해보겠습니다.아마 이 글에 이어서는 실제 API 개발이 순차적으로 이어질 것 같습니다. ▶️ 왜 Serverless Framework를 사용할까?AWS Lambda로 인증 기능을 개발하면서 가장 먼저 맞닥뜨린 벽은 배포의 불편함이었습니다. 실제로 처음에는 별도 Framework 등의 고민 없이 직접 AWS console에서 코드를 붙여서 진행을 했는데요.함수 내 코드 하나를 바꾸는 것도 너무 번거로웠고, 무엇이 어떻게 바뀌었는데 추적하는 것도 매우 어려웠습니다. (완전 노가다...)그리고 그 외에도 버전 관리나 인프라 설정 등도 수동으로 하다 보면 실수할 여지도 많을 것 같았습니다. 그래서 어떻게 좀 더 ..

Backend Engineering 2025.06.19

[Serverless 서비스 개발] #1. 시스템 설계

안녕하세요. 최근에 인증 방식 등에 대해 정리를 해보았는데요.해당 내용을 바탕으로 간단하게 백엔드 서비스를 하나 만들어보면 좋을 것 같다고 생각이 들었습니다. 그래서 Serverless 인증 서비스 구현하기라는 작은 시리즈를 글로 정리해보려고 합니다.오늘은 그 첫 번째로 어떻게 진행할지 설계하는 내용을 정리해보겠습니다. ▶️ 왜 서버리스로 구현하나요?사이드 프로젝트 등을 진행하더라도 인증 시스템은 필수로 들어가야 합니다.하지만 EC2 환경 구성을 비롯하여 유지관리, 스케일링 등의 서버 관리를 모두 신경 쓰기 어려운 경우가 많은데요.그래서 이번에는 Serverless와 JWT를 이용해서 누구나 쉽게 개발할 수 있는 방법으로 한 번 해보고자 했습니다. 단점 또한 있지만 프로젝트 초기에 매우 유연하게 활용 가..

Backend Engineering 2025.06.18

[Cache] Local Cache vs Redis, 언제 어떤 캐시를 써야 할까?

안녕하세요.오늘은 캐시 (Cache) 에 대해 한 번 정리해보려고 합니다. 캐시는 빠르게 서비스를 만들고, 사용자 경험을 지키는 데 중요한 내용입니다.가장 많이 사용되는 Cache 중 Redis가 있는데요.보통 편하고 쉽게 성능 좋은 캐시를 쓸 수 있으니, 무조건 Redis를 쓰면 되는 것 아닌가 라는 잘못된 생각하는 경우도 있습니다. 하지만 Cache는 보통 Local Cache와 Remote Cache 가 있고,언제 어떻게 사용해야 좋을 지가 각 상호아에 따라 모두 다릅니다. 오늘은 그 성격과 특징을 정리해보겠습니다. ■ Local Cache ?LocalCache는 애플리케이션 인스턴스 안의 메모리에 데이터를 저장하는 방식입니다.이런 구조 덕분에 DB나 외부 Cache까지 갈 필요 없이, 바로 메모..

Backend Engineering 2025.06.16

JPA의 N+1 문제, 왜 생기고 어떻게 해결할까?

오늘은 JPA를 사용한다면 반드시 알아야 하고, 자주 겪을 수 있는 N+1 문제에 대해 정리해보겠습니다. ▶️ N+1 문제란?쉽게 말하면, DB에서 1번만 가져오면 될 데이터를 여러 번에 걸쳐 조회하게 되는 현상입니다. 간단한 예를 들어 게시글 10개를 가져오면서, 각 게시글의 작성자 정보도 함께 조회한다고 해보겠습니다.- 게시글 1번 조회 → 작성자 1번 조회 (10개) → 총 11번 쿼리 실행. 이게 바로 N+1 문제입니다. (N+1은 "1개의 select + N개의 연관 select"의 의미입니다.) ▶️ 왜 발생할까?JPA는 객체지향스럽게 데이터를 가져오고자 지연 로딩(LAZY)을 기본으로 합니다.즉, 연관된 엔티티는 처음에 바로 가져오지 않고, 실제로 접근할 때 추가 쿼리를 날립니다. 게시글과 ..

Database 2025.06.13

Indexing, Partitioning 을 통해 서비스 성능 개선하기

오늘은 간단하게 Indexing, Partitioning 개념을 정리하고, 이를 통해 성능을 어떻게 개선하는지에 대해 정리해보려고 합니다 🧑‍💻 기본적으로 이 둘은 모두 성능 개선이 목적입니다. Indexing은 원하는 데이터를 더 빠르게 조회할 수 있게 도와주고Partitioning은 테이블을 물리적으로 나눠서 특정 조건의 데이터만 효율적으로 다룰 수 있게 해줍니다.하지만 중요한 건, "그냥 쓰면 무조건 빨라지겠지"라는 태도보단, 실제 상황에서 적절히 써야 효과가 있다는 점입니다.■ Indexing 이란 ?인덱스는 쉽게 말하면 책의 목차 같다고 보면 됩니다.특정 컬럼에 대해 검색 속도를 빠르게 하기 위한 자료구조를 만드는 것이죠.예를 들어, user 테이블에 email로 검색하는 경우가 많다면, e..

Database 2025.06.12

[AWS] S3 Presigned URL 활용 정리

오늘은 S3의 presigned URL에 대해 정리해보겠습니다. 예전 글에서 S3에 대해서 조금은 다루었으니, 기본 개념은 건너띄고 바로 Presigned URL에 대해 설명하겠습니다.(참고 : S3 Bucket 생성하기 https://zamezzz.tistory.com/298)(참고 : S3 객체 업로드 및 액세스 설정 https://zamezzz.tistory.com/299) ■ Presigned URL ?Presigned URL은 S3에 접근할 수 있는 일회성 링크입니다.IAM 권한 없이도 이 URL을 통해 업로드나 다운로드가 가능합니다. 사용 예시클라이언트가 직접 이미지 업로드 (ex. 모바일, 프론트)대용량 파일을 서버 거치지 않고 다운로드 처리(참고 : https://docs.aws.amazo..

AWS 2025.06.11

Spring Security를 활용한 인증 흐름 정리

오늘은 Spring Security를 활용한 인증 흐름에 대해 간단히 정리하려고 합니다. ■ Spring Security란?먼저 Spring Security에 대해 간략히 개념 정리를 하겠습니다. Spring Security는 Spring 기반 애플리케이션의 보안을 담당하는 프레임워크입니다.(참고 : https://spring.io/projects/spring-security)인증(Authentication)과 인가(Authorization)을 중심으로, 세션 관리, CSRF 보호, 패스워드 암호화, OAuth 2.0 연동 등 다양한 보안 기능을 제공합니다. 기본적으로 다음 두 가지 역할을 수행합니다.인증 (Authentication) : 사용자가 누구인지 확인하는 과정. ex) 로그인인가 (Author..

Backend Engineering 2025.06.09

OAuth 2.0 개념 정리

이번 글에서는 OAuth 2.0 인증 방식에 대해 간단히 정리해보겠습니다. ■ OAuth 2.0 이란?OAuth는 ‘내 계정 정보를 제3의 서비스에 맡기지 않고도 인증할 수 있는 방식’입니다.대표적인 예시로는 구글, 네이버, 카카오 등의 ‘소셜 로그인’이 있습니다. 해당 서비스에서는 각 로그인 페이지를 사용자에게 제공하고, 사용자는 여기서 ID/PW 를 입력하여 인증을 합니다.그리고 그 인증 과정 처리가 진행되고, 우리 서비스에는 그 결과가 돌아옵니다. OAuth 2.0의 주요 특징은 아래와 같습니다.인증과 권한 부여(Authorization)를 분리함사용자 비밀번호를 제3자 서비스에 넘기지 않음Access Token을 통해 자원 접근을 위임함다양한 Grant Type(인증 방식)을 지원함→ Author..

Backend Engineering 2025.06.05