Spring 13

[Spring] Spring Cache에서 @Cacheable, @CachePut, @CacheEvict의 차이점과 적절한 사용법

WeeklyPaper: Spring Cache에서 @Cacheable, @CachePut, @CacheEvict의 차이점과 각각을 어떤 상황에서 사용하는 것이 적절한지 설명해주세요.스프링에서는 스프링 AOP 기반으로 캐시가 장독하여 어노테이션으로 AOP를 설정할 수 있어서 간편하게 사용할 수 있다. 주로 사용되는 어노테이션은 @Cacheable, @CachePut, @CacheEvict다. build.gradle에 추가하자:implementation 'org.springframework.boot:spring-boot-starter-cache' @Cacheable캐시 생성과 전달을 담당한다.메서드가 호출 될때마다 이 메서드는 이미 호출이 되었는지 확인하기 위해 캐시가 확인된다.캐시에 데이터가 없을 경우, ..

Spring 2025.10.20

[Spring Security] 비동기 환경에서 컨텍스트(MDC, SecurityContext) 전달하기

WeeklyPaper: 비동기 환경에서 MDC(Logback Mapped Diagnostic Context)나 SecurityContext 같은 컨텍스트 정보를 스레드 간에 전달해야 할 경우, 처리하는 방법에 대해 설명하세요. 스프링 어플리케이션에서 비동기 처리를 위해 @Async 와 같은 기술을 사용할 때, 기존 스레드의 컨텍스트 정보가 새로 생성된 스레드로 전파되지 않는 문제가 발생한다. 대표적으로 로그 추적을 위한 MDC(Mapped Diagnostic Context)나 인증 정보를 담고 있는 SecurityContext가 여기에 해당된다.간단한 용어 복습@Async스프링에서 메서드를 별도의 스레드에서 비동기 (asynchronous)적으로 실행하도록 만들어주는 어노테이션이다.오래 걸리는 작업을 백..

[Spring Security] 주요 보안 공격 (CSRF, XSS, 세션 고정, JWT 탈취)과 대응 전략

WeeklyPaper: Spring 기반 웹 애플리케이션에서 발생할 수 있는 4가지 주요 보안 공격 (CSRF, XSS, 세션 고정, JWT 탈취)에 대해 설명하고, 각각에 대한 Spring Security 또는 일반적인 대응 전략을 설명하세요. CSRF (Cross-Site Request Forgery)CSRF(Cross-Site Request Forgery)는 사용자가 자신도 모르게 공격자가 의도한 요청을 특정 웹 애플리케이션에 보내도록 속이는 공격이다.피해자가 로그인하여 인증 쿠키를 보유 중일 때, 공격자가 조작된 링크나 폼을 열게 하면 브라우저가 자동으로 쿠키를 첨부하여 서버에 요청을 보낸다. (쿠키는 브라우저에 저장이 된다)예시 시나리오:사용자가 은행 사이트에 로그인해서 세션 쿠키를 들고 있다...

[Spring TDD] 애플리케이션 계층별 입력값 검증

Weeklypaper: 애플리케이션의 각 계층에서 수행되는 입력값 검증의 범위와 책임을 어떻게 나눌 것인지에 대해 설명해주세요. 특히 중복 검증을 피하면서도 안정성을 확보하는 방안과, 이와 관련된 트레이드오프에 대해 설명해주세요.테스트 계층을 나누는 이유레이어드 아키텍쳐 (layered architecture) 구저의 각 계층마다 역할을 나누지 않으면 비효율적인 주복 검증이 발생하거나, 반대로 검증이 누락되어 시스템에 오류가 생길 수 있다. 각 계층의 책임과 검증 범위를 명확하게 하고, 중복을 피하며 안전성을 확보해야 한다. 비유를 하자면, 레이어드 아키텍처는 공장의 '분업화된 조립 라인'으로 생각해볼 수도 있다.1번 라인 (Controller): 부품의 모양이 올바른지, 빠진 부품은 없는지만 확인하고 ..

Spring/Spring TDD 2025.08.18

[Spring TDD] Mockito의 Mock, Stub, Spy

WeeklyPaper: 테스트에서 사용되는 Mockito의 Mock, Stub, Spy 개념을 각각 설명하고, 어떤 상황에서 어떤 방식을 선택해야 하는지 구체적인 예시와 함께 설명하세요.Mockito테스트 코드를 짜기 시작할때 내 코드가 다른 클래스나 외부 시스템에 의존하고 있으면 의존성의 문제가 생긴다. 순수하게 내 로직만 테스트하기 어려워진다. 이럴때 필요한 것이 바로 테스트 더블 (Test double)이고, Mockito는 Java 진영에서 가장 널리 사용되는 테스트 더블 생성 라이브러리다.Mockito는 테스트 더블인 Mock, Stub, Spy를 대표적으로 제공한다.스프링에서는 @MockitoBean 으로 Mockito와 자연스럽게 통합되어 있다. (@MockBean은 현재 Deprecated..

Spring 2025.08.18

[JPA] 트랜잭션의 ACID 속성 중 격리성(Isolation)이 보장되지 않을 때

WeeklyPaper: 트랜잭션의 ACID 속성 중 격리성(Isolation)이 보장되지 않을 때 발생할 수 있는 문제점들을 설명하고, 이를 해결하기 위한 트랜잭션 격리 수준들을 설명하세요.격리성 (Isolation)여러 트랜잭션이 동시에 수행될 때, 각 트랜잭션이 서로 영향을 받지 않도록 분리되어야 한다는 것을 뜻한다.예를 들면 결제 시스템에서, 두 유저가 동시에 같은 상품을 구매할 때, 격리정을 지키지 못한다면 재고 차감이 꼬인다.🔖 트랜잭션 A🔖 트랜잭션 B계좌 잔액: 1000원 -100원 차감 (900원) 아직 COMMIT 안 함 A의 잔액 조회 → 900원 (Dirty Read 발생) 900원을 기준으로 로직 수행A: ROLLBACK 잔액은 1000원으로 복구 실무에서는 비즈니스 요구에 ..

Spring 2025.07.23

[JPA] N+1 문제

WeeklyPaper: JPA에서 발생하는 N+1 문제의 발생 원인과 해결 방안에 대해 설명하세요.N+1 문제란?연관관계에서 발생하는 이슈로, 연관관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상이다. 이 포스팅에서 사용할 예시를 보자: Member (회원) 엔티티와 Order (주문) 엔티티가 1:N 관계이다. 한 명의 회원은 여러 개의 주문을 가질 수 있다. N+1문제가 생기는 예시: 회원 10명을 조회했는데, 각 회원의 주문 번호를 또 조회하면,회원 10명을 불러오는 1번의 쿼리 + 각 회원의 주문을 불러오는 10(N)개의 쿼리 = 11 쿼리 발생 발생 이유지연 로딩 (LAZY)전략으로 연관 관계가 설정된 엔티티를 조..

Spring 2025.07.21

[SpringBoot] @Controller와 @RestController의 차이점과 요청 처리 흐름

WeeklyPaper: Spring MVC에서 클라이언트의 요청 처리 흐름을 @Controller와 @RestController의 차이점을 중심으로 각각의 처리 과정과 특징을 포함하여 설명하세오.웹 어플리케이션을 개발할때 클라이언트로부터 온 요청을 받아서 처리하고 응답하는 로직을 구현하는건 기본이다. Spring MVC에서 공통된 순서는 이렇게 된다:Client가 URI 형식으로 웹서비스 (어플리케이션)로 요청을 보낸다URL 예시: https://.../v1/members/1DispatcherServlet이 요청을 받음 (프론트 컨트롤러 역할)DispatcherServlet가 요청받은 URI를 처리할 수 있는 핸들러(컨트롤러의 메서드)를 찾기 위해 HandlerMapping에게 요청 정보를 넘기고, Ha..

Spring 2025.07.03

[Spring] Spring AOP 개념과 실제 활용 사례

WeeklyPaper 주제: Spring에서 AOP(Aspect Oriented Programming)가 필요한 이유와 이를 활용한 실제 애플리케이션 개발 사례에 대해 설명하세요.AOP - Aspect Oriented Programming개발을 하다 보면 여러 비즈니스 로직에서 생기는 공통 기능들이 있다.OOP는 역할을 기준으로 책임을 분리하는 효율적인 패러다임이지만 로깅이나 보안같은 반복되는 기능들을 완전히 분리시키기 어렵다. 그래서 AOP는 바로 이런 문제를 해결하기 위해서 등장을 했는데, AOP는 여러 클래스에서 나타다는 반복 기능들을 깔끔하게 모듈화 시켜준다. AOP = 관점 지향 프로그래밍부가 기능(횡단 관심사, Cross-Cutting Concerns)을 분리하여 개발하는 프로그래밍 기법AO..

Spring 2025.07.01

[SpringBoot] 웹 서버와 WAS의 차이, 그리고 스프링 부트 내장 톰캣

WeeklyPaper 주제: 웹 서버(Web Server)와 WAS(Web Application Server)의 차이를 설명하고, Spring Boot의 내장 톰캣이 이 둘 중 어디에 해당하는지 설명해주세요. 웹 서버 (Web Server)웹서버는 HTTP 프로토콜을 통해 client (웹 브라우저 등)으로부터 요청을 받아 정적 콘텐츠를 제공하는서버 정적 데이터 = 데이터 수정 없이 반환되는 자료 형식종류 - HTML, CSS, 이미지, 동영상 등누가 어디서든 언제 요청해도 항상 동일한 내용의 파일이 반환됨사전에 정해진 데이터를 가져와서 반환하면 된다는 점 때문에 처리 속도가 빠르고 과부하를 잘 처리할 수 있다. 또한 정적 콘텐츠에 대해 효율적인 캐싱 구현이 가능하다. 프록시 서버 측에서 캐싱을 사용해 ..

Spring 2025.06.24