본문 바로가기

Backend

(10)
Spring Boot Test Can’t Start Redis Server 오류 메세지 Caused by: java.lang.RuntimeException: Can't start redis server. Check logs for details. at redis.embedded.AbstractRedisInstance.awaitRedisServerReady(AbstractRedisInstance.java:62) at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:39) at redis.embedded.RedisServer.start(RedisServer.java:9) at org.hoongoin.interviewbank.config.TestRedisConfig.startRedis(TestRedi..
같은 클래스 내에서 메소드 호출 시 AOP 적용 문제 프록시 기반 AOP 프록시 기반 AOP는 AOP를 구현하는 방식 중 하나로, 런타임에 동적으로 프록시 객체를 생성하여 원본 객체에 대한 참조를 감싸고, 원본 객체의 메소드 호출 시 추가적인 로직을 적용하는 방식입니다. 이를 통해 @Transactional, @Async, @Cacheable 등의 어노테이션을 쉽게 사용할 수 있습니다. Spring 프레임워크는 AOP를 구현하는 데 주로 프록시 기반 AOP를 사용하지만, AspectJ와 같은 다른 AOP 구현도 지원합니다. AspectJ는 컴파일 타임에 AOP를 적용하는 방식으로, AspectJ 컴파일러를 사용하여 원본 코드에 직접 수정을 가하는 방식입니다. 같은 클래스 내에서 메소드 호출 시 AOP 적용 문제 같은 클래스 내에서 메소드를 호출할 때 AOP..
@Transactional 전파 전략 Spring 프레임워크에서는 @Transactional 어노테이션을 사용하여 데이터베이스 트랜잭션을 쉽게 처리할 수 있습니다. 이 글에서는 Spring에서 제공하는 @Transactional 어노테이션의 전파 전략에 대해 알아보고, 코드 예시를 통해 각 전략의 동작 방식을 살펴봅니다. 또한, @Async 어노테이션과 함께 사용되는 경우에 대해서도 설명합니다. Transactional 전파 전략 Propagation.REQUIRED (기본 전략): 현재 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 없으면 새로운 트랜잭션을 시작합니다. Propagation.REQUIRES_NEW: 항상 새로운 트랜잭션을 시작하고, 현재 진행 중인 트랜잭션 (있는 경우)은 일시 중단합니다. Propagation.S..
DI와 IoC DI (의존성 주입) 이란 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라 객체를 외부에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식으로, 생성자 주입 방식 Setter 주입 방식 필드 주입 방식 이 있다. 객체 지향 프로그래밍에서 의존성 관리를 위한 패턴 중 하나이다. 객체 간의 결합도를 낮추고, 코드 재사용성과 유지보수성을 향상시킨다. 그 중에서도 Spring은 생성자 주입 방식을 권장한다. 먼저 각각의 예시 코드를 보자. 생성자 주입 @Service public class AService { private final BService bService; public AService(BService bService) { this.bService = bService;..
Spring Container와 Bean의 Lifecycle Application Context 스프링 빈 객체의 생성, 설정 및 관리를 담당하는 IoC 컨테이너이다. 스프링에서는 Bean Factory 를 상속받아 확장한 Application Context 를 IoC 컨테이너로 사용한다. 애플리케이션 컨텍스트는 다음과 같은 기능을 수행한다: 빈 객체의 생성과 의존성 주입 빈 객체간의 상호 작용을 지원하고, 빈 객체의 생명주기를 관리 애플리케이션 전체에 걸쳐 공통적으로 사용되는 리소스 및 서비스를 제공 애플리케이션 컨텍스트는 스프링 애플리케이션의 중심이 되는 부분으로, 개발자는 애플리케이션 컨텍스트를 사용하여 빈 객체를 검색하거나 관리할 수 있다. 애플리케이션 컨텍스트를 사용함으로써, 개발자들은 빈 객체의 생성과 관리에 직접 신경 쓸 필요가 없고, 비즈니스 로직에..
Spring Boot Controller Test What You Will Build Application Context가 로드하는 것을 테스트한다. Spring의 MockMvc를 사용해 web layer를 테스트한다. Run the Application package com.example.testingweb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TestingWebApplication { public static void main(String[] args) { SpringApplication.run(TestingW..
Spring Session With Redis 설정하기 사용 기술 스택 Redis Spring Security Spring Boot Spring Session: provides an API and implementations for managing a user’s session information. HttpSession: 문서에서 HttpSession을 Spring Session으로 통합할 수 있다(Spring Session provides transparent integration with HttpSession)고 하는데, 이게 모듈인지? 아니면 개념적 용어인지? 잘 모르겠다. Redis를 Spring Session 저장소로 사용하기 Dependencies dependencies { implementation 'org.springframework.sess..
SpringFox 3.0.0 Server URL Error 기술 스택 OpenJDK 17.0.5 Spring Boot 2.7.7 SpringFox 3.0.0 발단 스테이징 서버에서 Swagger의 Server URL을 등록해주다가 발견한 문제. @Configuration public class SwaggerConfiguration { @Bean public Docket swagger() { return new Docket(DocumentationType.OAS_30) .servers(new Server("", "https://xxx.com", "", new ArrayList(), new ArrayList())) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() ...