Spring 34

Spring AOP란?

Spring 프레임워크를 공부하며, AOP(Aspect-Oriented Programming)가 뭐지? 이게 왜 필요한지? 필터랑 다른 게 뭔지?라는 궁금점이 생겼다. 오늘은 AOP에 대해 개념이랑 적용 방법에 대해 공유해 보려 한다. AOP란?AOP(관점 지향 프로그래밍)는 공통 관심 사항(부가 기능)을 핵심 로직과 분리해서 한 곳에서 관리하도록 해주는 프로그래밍 기법이다. 📌 왜 AOP가 필요한가?프로그램을 개발하다 보면 반복적으로 사용되는 코드나 가독성이 떨어지는 로직들을 자주 마주하게 되는 것을 볼 수 있다.AOP는 이러한 반복되는 코드들을 비즈니스 로직과 분리함으로써 중복을 줄이고, 코드의 유지보수성을 향상시키는 데 큰 도움을 준다. 예시)public class UserService {..

Spring 2025.05.15

QueryDSL 의존성 설정 및 활용

QueryDSL을 사용하기 전에 먼저 QueryDSL이란 무엇인지 알아보자. QueryDSL이란?QueryDSL은 도메인 모델을 기반으로 한 타입 안전(type-safe)한 쿼리 작성 라이브러리 JPA를 쓰다 보면 이런 경험 한 번쯤 해봤을 거다.복잡한 조건을 가진 쿼리문들을 사용하게 되면 JPQL로 하자니 불편하고, 메서드 이름도 길어지고...이럴 때 사용하는 게 바로 QueryDSL이다.QueryDSL은 자바 코드로 SQL을 짤 수 있게 해주는 안전한 쿼리 빌더 타입이다! ✅ QueryDSL 관련 의존성 및 설정QueryDSL을 사용하기 위해서는 다음과 같은 의존성들과 설정이 필요하다.스프링부트3 버전을 사용 중이다. build.gradle 파일plugins { id 'java' id '..

Spring 2025.05.13

DB 동시성 제어(비관적, 낙관적, 분산 락)

동시성 제어란?동시성 제어란, 여러 사용자의 트랜잭션이 동시에 데이터베이스에 접근할 때 데이터의 무결성과 일관성을 보장하기 위한 제어 기법이다.실질적으로 일반적인 웹 애플리케이션은 여러 사용자의 요청을 동시에 처리한다. 이러한 요청들이 동일한 데이터를 가지고 CRUD를 하게 된다면, 동시 접근으로 인해 Race Condition이나 데이터 손상이 발생될 수 있다. 그래서, 여러 요청들을 직렬화된 것처럼 처리해서 데이터 충돌을 막는 것이 동시성 제어의 목적이다. ✅ 동시성 문제가 발생하는 대표 Race CinditionRace Condition이란,여러 스레드가 동시에 같은 자원을 접근하고 수정하려 할 때예상치 못한 결과가 발생하는 문제이다.📌 예) 재고가 1개 남았는데, 두 명이 동시에 주문하면?→ 둘..

Spring 2025.05.02

Spring Boot 테스트, Mocking이란?

테스트 코드는 왜 필수일까? 소프트웨어 개발을 하다 보면 새로운 기능을 추가하거나, 기존 로직을 수정해야 하는 순간이 많아진다.그때마다 예상치 못한 버그가 생길 가능성도 커지기 때문에 테스트 코드는 바로 그 위험을 미리 방지하는 역할을 한다. ✅ 테스트의 3가지 장점신뢰성 향상→ 기능 추가/수정 후에도 기존 기능이 정상 동작하는지 빠르게 확인 가능코드 이해도 증가→ 테스트는 코드의 사용법을 보여주는 살아있는 문서장기적 비용 절감→ 초반 테스트 작성은 비용이 들지만, 나중에 디버깅·유지보수 비용을 줄여준다 ✅ 단위 테스트 vs 통합 테스트 💡 통합 테스트는 실제 HTTP 요청을 보내고, DB 결과까지 확인함으로써, 시스템이 현실처럼 동작하는지 검증할 수 있고,단위 테스트는 쉽게 말해. 실제 DB없이..

Spring 2025.05.01

AWS - RDS란? 그리고 RDS를 활용한 팀 프로젝트

RDS란?RDS(Amazon Relational Database Service)는AWS에서 제공하는 클라우드 기반의 관계형 데이터베이스 서비스왜 쓰는가?협업 프로젝트나 실무에서, 팀원 모두가 접근 가능한 공용 DB 환경이 필요할 때RDS는 가장 간편하고 안정적인 선택이다!! 팀 프로젝트를 진행하면서, 각자의 로컬 환경(MySQL 버전, 설정 등)이 달라 DB 스키마 충돌이나 데이터 불일치 문제가 발생할 수 있다는 우려가 있었다.이러한 환경 차이를 최소화하고, 팀 전체가 동일한 DB 환경에서 개발과 테스트를 진행할 수 있도록 하기 위해,AWS RDS(MySQL)를 사용하게 되었다. AWS 자격증 따면서 공부한 내용을 실제 사용하게되다니 기분이 조금 좋았다.. RDS 생성 과정AWS 콘솔 → RDS 서비스..

Spring 2025.04.30

아웃소싱 프로젝트 - 소프트 딜리트(SoftDelete) 트러블 슈팅

소프트 딜리트는 "진짜 삭제" 대신 "숨기기"를 해서, 복구성과 감사성, 데이터 안정성을 높이기 위한 기술이다. 유저나 리뷰, 댓들-facing 데이터는 삭제해도 복구 가능성과 운영 안정성을 위해 소프트 딜리트를 적용했다하지만, 장바구니는 Hard Delete를 선택했다. 장바구니는 본질적으로 임시 저장소에 가까운 데이터다. 사용자가 상품을 담고, 주문을 완료하거나 장바구니를 비우는 흐름이 반복되기 때문에, 삭제된 장바구니 데이터를 복구해야 할 필요성이 거의 없다. 오히려 삭제된 데이터를 계속 남겨두면 데이터량이 불필요하게 쌓이기에, 장바구니(Cart)와 같은 경우에는 소프트 딜리트 대신 Hard Delete(완전 삭제) 방식을 선택해 관리 효율성과 성능을 높였다. ✅ 문제 상황Store, Revi..

Spring 2025.04.29

Servlet Filter

Servlet Filter는 웹 애플리케이션에서 요청(request)과 응답(response)을 가로채어 사전/사후 처리를 할 수 있는 기능을 제공한다.Filter는 서블릿 컨테이너(Tomcat 등)의 DispatcherServlet 이전에 동작한다. 주 역할:인증/인가 체크로깅✅ Filter 동작 흐름요청 흐름 (Request)클라이언트가 서버로 HTTP 요청 전송WAS가 요청을 수신등록된 Filter들이 설정된 순서대로 요청을 가로채 전처리 수행DispatcherServlet → Controller → Service → DB 등의 처리 진행응답 흐름 (Response)Controller에서 처리한 결과가 응답으로 생성됨Filter들이 역순으로 응답 후처리 수행최종적으로 클라이언트에게 응답 전달✅ Fi..

Spring 2025.04.22

Spring - 심화 주차 과제 세션

과제 실습 코드 GitHub - younseung-Lee/spring-advancedContribute to younseung-Lee/spring-advanced development by creating an account on GitHub.github.com ✅ 기능 요구 사항일주일 간 강의와 과제 세션이 있다 보니 시간이 촉박하여, 필수 기능까지만 구현했다..해설세션을 듣고 나머지 도전기능을 알아 볼 생각이다. Lv1. 코드 개선은 저번 블로그에 정리하였다.https://lys5654.tistory.com/52 Early Return 패턴Early Return 패턴: 조건이 맞지 않으면 일찍 반환(early return) 해서 아래 코드의 실행을 피하는 구조이다. ✅ Early Return 패..

Spring 2025.04.21

Early Return 패턴

Early Return 패턴: 조건이 맞지 않으면 일찍 반환(early return) 해서 아래 코드의 실행을 피하는 구조이다. ✅ Early Return 패턴을 사용하면 좋은 점중첩된 if 줄이기가독성이 향상된다.불필요한 연산을 제거한다.실패 상황을 먼저 처리하고 성공 흐름만 아래로 자연스럽게 이어지게 한다. ✅ 코드 예시※ userRepository.existsByEmail(String email) : 이 메서드는 Spring Data JPA에서 제공하는 쿼리 메서드(Query Method) 로, User 테이블에서 특정 이메일을 가진 사용자가 존재하는지 여부(true/false)를 반환해 주는 기능이다. @Transactional public SignupResponse signup(Si..

Spring 2025.04.17

JPA 연관관계

✅ 연관관계 매핑이란? JPA에서는 RDB의 외래 키 기반 관계(FK)를 객체 간에 참조로 매핑한다.SQL 없이 객체지향적으로 테이블 간의 관계를 활용 가능 ✅ 연관관계 종류 1️⃣ 단방향한 쪽 엔티티만 다른 엔티티를 참조 (객체 그래프 탐색이 한 방향만 가능)2️⃣ 양방향양쪽 모두 서로 참조연관관계의 주인이 존재 (외래 키 관리하는 엔티티)주인만 DB에 반영, 반대쪽은 단순 조회용객체 기준 단방향 2개 = 양방향 ✅ 연관관계의 주인JPA는 양방향 연관관계에서 외래 키(Foreign Key)를 기준으로 연관관계를 설정한다.이때 DB의 외래 키를 실제로 관리하는 쪽이 연관관계의 주인이 된다. 반대쪽은 단순히 연관관계를 표현하기만 한다.양방향 연관관계에서는 외래 키를 가진 주인 엔티티에서만 insert/..

Spring 2025.04.16