배운것들을 정리합니다.
三昧境

전체 글 75

Spring Security로 Google OAuth2 로그인 구현

기존에는 로그인이라고 하면 사용자가 이메일과 비밀번호를 직접 입력하고, 서버가 DB의 회원 정보와 비교해 인증하는 방식을 먼저 떠올렸습니다.하지만 실제 서비스에서는 Google, Kakao, Naver처럼 이미 사용자가 보유한 계정을 이용해 로그인하는 경우도 많습니다. 그래서 이번에는 별도의 작은 Spring Boot 프로젝트를 만들고 Google OAuth2 로그인이 실제로 어떤 흐름으로 동작하는지 직접 구현해보았습니다.단순히 Google 로그인 화면을 띄우는 것에서 끝내지 않고, 로그인 이후 Spring Security가 사용자를 어떻게 관리하는지 확인했습니다.그리고 마지막에는 Google에서 인증된 사용자를 우리 서비스의 Member와 연결해보았습니다. OAuth Client 등록 Google 로그..

Java/Spring Boot 2026.09.27

동기, 비동기, 동시성, 병렬성의 차이

개발 공부를 하다 보면 동기, 비동기, 동시성, 병렬성이라는 용어를 자주 접하게 됩니다. 처음에는 모두 여러 작업을 처리하는 방식과 관련된 개념처럼 보여 비슷하게 느껴졌고, 특히 비동기와 병렬 처리, 동시성과 병렬성의 차이가 헷갈렸습니다.하지만 하나씩 정리해보니 네 개념은 서로 비교하는 기준 자체가 달랐습니다. 동기와 비동기는 작업의 완료를 기다리는지, 그리고 동시성과 병렬성은 여러 작업을 어떤 방식으로 처리하는지에 초점이 있습니다.간단히 정리하면 다음과 같습니다.구분핵심 질문특징동기작업 결과를 기다리는가이전 작업 완료 후 다음 작업 수행비동기결과를 기다리지 않고 진행할 수 있는가작업 완료와 호출 흐름을 분리동시성여러 작업을 함께 진행할 수 있는가작업을 번갈아 수행할 수도 있음병렬성여러 작업이 실제로 동..

Java/Spring Boot 2026.09.26

Spring Security와 JWT, 구현하며 이해한 인증 구조

JWT 인증을 구현하면서 JwtTokenProvider, JwtAuthenticationFilter, SecurityConfig 같은 클래스를 사용했습니다.처음에는 기능이 동작하는 것에 집중했지만, 구현을 마치고 나니 각 클래스가 왜 필요한지와 어떻게 연결되는지를 다시 정리할 필요가 있었습니다.이번 글에서는 제가 구현한 코드를 기준으로 JWT와 Spring Security를 왜 사용했고, 실제로 어떻게 사용했는지를 정리해보겠습니다. Spring Security와 JWT Spring Security는 인증과 인가를 처리하는 보안 프레임워크입니다.JWT는 로그인한 사용자의 정보를 담아 이후 요청에서 사용자를 확인하기 위한 토큰입니다.즉 이번 프로젝트에서는 Spring Security가 전체 보안 흐름을 관리..

Java/Spring Boot 2026.09.24

[Spring Boot] Community API 프로젝트 회고록 (설계, 문제 해결, 배포)

Community API 프로젝트 전체 소스 코드와 구현 내용을 GitHub에서 확인할 수 있습니다. GitHub Repository → ">Community API프로젝트 전체 소스 코드와 구현 내용을 GitHub에서 확인할 수 있습니다. GitHub Repository → 약 4주 동안 Spring Boot 기반의 커뮤니티 REST API를 개발했습니다.프로젝트를 시작할 당시에는 회원 인증과 게시판 CRUD를 중심으로 약 3주 정도의 개발 기간을 계획했습니다. 하지만 구현을 진행하면서 단순히 기능이 동작하는 것에서 끝내기보다 로그아웃 이후의 JWT 처리, 동시 요청, 예외 응답, 파일 저장 정합성, 테스트, 보안, 실제 배포 환경까지 직접 확인해보고 싶어졌고, 결과적으로 조..

[Spring Boot] EC2 배포 마무리: 도메인, HTTPS, Nginx와 Spring Security 점검

커뮤니티 API 프로젝트의 기능 구현과 테스트를 마친 뒤, 마지막 단계로 실제 서버에 애플리케이션을 배포했습니다.처음에는 단순히 EC2에 Spring Boot를 실행하고 IP로 접근할 수 있으면 배포가 끝난다고 생각했습니다.하지만 실제로 배포를 진행하면서 다음과 같은 부분도 함께 고민하게 되었습니다.서버의 IP가 변경되지 않게 하려면 어떻게 해야 하는가?사용자가 IP가 아닌 도메인으로 접근하려면 무엇이 필요한가?HTTP가 아닌 HTTPS는 어떻게 적용하는가?Spring Boot의 8080 포트를 외부에 직접 공개해도 되는가?EC2가 재부팅되면 Spring Boot, MySQL, Redis는 자동으로 다시 실행되는가?실제 운영 환경에서도 JWT 로그인과 로그아웃이 정상적으로 동작하는가?개발 과정에서 미처 ..

[Spring Boot] AWS를 사용해 Spring Boot API를 EC2에 배포하기 2

지난 글에서는 AWS 배포를 위해 운영 환경을 분리하고, S3 저장 구조와 IAM Role, 파일 정리 배치까지 구성한 과정을 정리했습니다.이번 글에서는 이어서 운영 MySQL에서 Spring Batch를 안정적으로 실행하기 위한 설정과 실제 EC2 배포 과정, 그리고 배포 후 검증 과정을 정리해보겠습니다. 운영 MySQL 환경의 Spring Batch 스키마 관리 기존 프로젝트에는 탈퇴 후 일정 기간이 지난 회원 데이터를 정리하는 Spring Batch 작업이 있었습니다.로컬에서는 H2를 사용하고 있었기 때문에 Batch 실행에 필요한 메타데이터 테이블을 비교적 쉽게 준비할 수 있었지만, 운영 MySQL에서도 같은 방식에 의존하는 것은 적절하지 않다고 생각했습니다.특히 이미 애플리케이션의 DB 스키..

[Spring Boot] AWS를 사용해 Spring Boot API를 EC2에 배포하기 1

프로젝트의 주요 기능 구현과 테스트를 마친 뒤, 마지막으로 실제 운영 환경에 배포했습니다.이전까지는 로컬 환경과 Testcontainers를 통해 MySQL, Redis 등을 검증하고 있었지만, 테스트가 통과한다는 것과 실제 서버에서 서비스가 정상적으로 동작한다는 것은 다른 문제라고 생각했습니다.그래서 이번 작업에서는 단순히 EC2에서 Spring Boot를 실행하는 것에 그치지 않고,운영 환경을 분리S3를 연결외부 요청을 받을 수 있도록 구성한뒤의 실제 사용자 흐름서버 재부팅까지 검증하는 것을 목표로 했습니다.비용과 프로젝트 규모 견적내기 비용과 프로젝트 규모를 고려해 단일 EC2 구조를 선택했습니다.처음에는 MySQL을 RDS로 분리하는 구성도 고려했습니다.하지만 개인 프로젝트에서 처음부터 RDS, ..

AWS(Amazon Web Service), 클라우드와 AWS 주요 서비스 기초 정리

AWS를 공부하기 시작하면 가장 먼저 어려운 부분은 서비스 이름입니다.EC2, S3, RDS, IAM처럼 비슷해 보이는 이름이 계속 등장하기 때문에 각각 무엇을 하는 서비스인지 먼저 구분할 필요가 있습니다.이번 글에서는 특정 프로젝트나 구현 사례보다는 AWS가 무엇인지, 주요 서비스들이 어떤 역할을 하는지, 웹 서비스가 AWS 안에서 어떻게 동작하는지를 정리해보겠습니다. AWS란? 서버, 데이터베이스, 파일 저장소, 네트워크 같은 컴퓨팅 자원을 인터넷을 통해 빌려 사용할 수 있는 클라우드 플랫폼입니다.예를 들어 웹 서비스를 직접 운영한다고 생각해보겠습니다.클라우드가 없다면 서버용 컴퓨터를 구매하고, 운영체제를 설치하고, 인터넷에 연결한 뒤 직접 관리해야 합니다.AWS에서는 이런 장비를 직접 구입하지 않고..

Java/Spring Boot 2026.09.19

[Spring Boot] 커뮤니티 API 보안 점검 (SQL 인젝션, JWT 재사용 문제)

커뮤니티 API를 개발하면서 회원가입, 로그인, 게시글 작성 같은 주요 기능이 정상적으로 동작하는지 테스트했습니다기능 테스트를 어느 정도 마치고 나니 한 가지 궁금증이 생겼습니다.정상적인 요청이 잘 동작하는 것은 확인했는데, 이상한 값을 넣거나 예상하지 못한 순서로 요청하면 어떻게 될까? 예를 들어 이런 상황들입니다.검색창에 admin'-- 같은 값을 입력하면 어떻게 될까?정지된 회원의 토큰은 정지를 해제하면 다시 사용할 수 있을까?파일은 저장됐는데 DB 저장이 실패하면 그 파일은 그대로 남는 걸까?처음에는 막연하게 보안 문제라고 생각했지만, 하나씩 확인해보니 이미 Spring이나 JPA가 막아주고 있는 부분도 있었고, 제가 직접 보완해야 하는 부분도 있었습니다.이번에는 SQL 인젝션, 입력값 검증, ..

[Spring Boot] JWT 필터·저장소 장애·동시성 충돌 예외 처리

이전에는 Spring MVC에서 발생하는 예외를 정리하면서 잘못된 요청과 서버 오류를 구분했습니다.하지만 예외 처리를 다시 살펴보면서 @RestControllerAdvice만으로 모든 실패 상황을 처리할 수 있는 것은 아니라는 점을 알게 되었습니다.특히 JWT 인증은 컨트롤러에 도달하기 전 필터에서 실행되고 있었습니다.이 과정에서도 Redis나 DB를 사용하고 있기 때문에 인증 정보가 잘못된 경우뿐 아니라 저장소 자체가 응답하지 않는 상황도 발생할 수 있습니다.또한 정상적인 요청이라도 여러 요청이 거의 동시에 실행되면 저장 과정에서 데이터 충돌이 발생할 수 있습니다.그래서 이번에는 기존 예외 처리를 한 단계 더 확장하면서 다음 세 가지를 중심으로 점검했습니다.JWT 인증 필터에서 발생하는 오류Redis·..