프레임워크/스프링 프레임워크

    스프링의 preHandle() 메서드란? (언제 실행될까?)

    preHandle() 메서드란? HandlerInterceptorAdapter 클래스에서 제공하는 하나의 메서드다. HandlerInterceptorAdapter 를 상속한 클래스를 bean 설정에 등록해두면, 스프링 인터셉터로 활용할 수 있다. xml 을 이용한 빈 설정을 사용하는 경우 @Configuration public class AppConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()); } } Java Config 를 이용한 빈 설정을 사용하는 경우 preHandle() 은 순서..

    스프링 RedisTemplate 이란?

    RedisTemplate 이란? Spring Data Redis 에서 쓰는 핵심 클래스이다. Redis 내부에 있는 데이터 액세스를 도와주는 헬퍼 클래스이다. 클라이언트에서 작성해야 하는 레디스 공통로직을 제공해 레디스 이용을 편리하게 할 수 있도록 도와준다. 역할 커넥션 관리 (Connection management) 레디스 서버와 연결 시에 커넥션 풀과 리소스를 대신 관리해준다. 이로 인해 개발자는 직접 커넥션을 열거나 닫을 필요가 없어진다. 직렬화와 역직렬화 지원 (Serialize and Deserialize) 자바 Serializer 를 통해 Redis 스토리지와 데이터를 직렬화/역직렬화한다. 다른 여러 직렬화 기법도 제공하는데 문자열만 사용한다면 StringRedisTemplate 을 사용하는..

    자바 애노테이션으로 빈을 구성하는게 XML 로 구성하는 것 보다 나은 이유

    자바 애노테이션으로 빈을 구성하는 것이 XML 로 구성하는 것보다 나은 이유 구성정보와 코드가 함께 있다 (Colocation of configuration and code) 빈 구성정보가 직관적으로 자바 코드 내부에 있게 된다. 클래스가 어떻게 사용되는지 더이상 알아볼 필요 없이 직관적인 이해가 가능해진다. XML 구성정보 파일과 자바 파일을 왔다갔다 하는 비용을 줄여준다. 유지보수 하기 쉬운 코드가 된다. 보일러 플레이트 코드를 줄인다 (Reduce boilerplate) 빈을 함께 묶기 위한 보일러 플레이트 코드를 줄인다. XML 에서 빈과 해당 종속성을 명시적으로 정의할 필요 없이 애노테이션을 통해 자바코드에서 직접 이런 관계를 선언할 수 있다. 구성 정보를 작성하는 것이 보다 간결해진다. 컴파일..

    <context:annotation-config> 태그란? (스프링 빈 설정 xml)

    태그란? 자바 빈을 정의하는 xml 파일에서 사용된다. 애노테이션을 기반으로 하는 구성 정보 (configuration) 를 사용할 수 있게 해준다. 스프링에게 애플리케이션 컨텍스트가 만들어질 때 자바 클래스 애노테이션을 찾아보고 처리하라고 말하는 것이다. 동작 방식 추가 (Inclusion) 엘리먼트를 스프링 설정 파일에 넣는다. 이 설정 정보는 스프링에게 애노테이션 기반 구성정보를 지원하라고 전달한다. 빈 후처리 (Bean post-processors) 스프링은 애노테이션을 처리하는데 도움이 되는 빈 후처리기를 등록한다. 빈 후처리기는 @Autowired, @Resource, @PostConstruct, @PreDestory 와 같은 애노테이션을 처리한다. 스캐닝과 처리 (Scanning and Pr..

    스프링 세션 (Spring Session) 이란 무엇이고 어떻게 작동할까?

    스프링 세션 (Spring Session) 이란? 스프링 프레임워크에서 제공하는 모듈 중 하나로 기존의 HttpSession 을 대체한다. 분산된 스케일링 가능한 환경에서 세션 데이터를 관리한다. 외부 저장소를 사용하게끔 하여 서블릿 컨테이너에서 세션 데이터를 분리할 수 있도록 도와준다. Redis, JDBC, Hazelcast 애플리케이션 퍼포먼스 향상과 분산 환경에서 세션 관리가 쉬워진다는 장점이 생긴다. 스프링 세션은 어떻게 작동하는가? 의존성 설정 스프링 세션을 이용하기 위해서는 의존성을 먼저 설정해야 한다. spring-session-data-redis 의존성을 추가해주면 된다. 구성정보 설정 스프링 세션을 사용하기 위해 필요한 구성정보를 설정해야 한다. @Configuration 클래스에 @E..

    스프링 레디스 세션 사용법

    스프링 레디스 세션 사용법 스프링 레디스 세션 적용 이 끝나면 사용이 가능하다. 스프링 Http 세션을 사용하는 방법과 별반 다를 게 없다. 세션 속성 설정하기 컨트롤러 메서드에 있는 HttpServletRequest 에서 HttpSession 을 얻어올 수 있다. 얻어온 뒤에는 setAttribute() 메서드를 통해 세션을 설정해주면 된다. 혹은 그냥 파라미터에 HttpSession 타입을 넣어두면, 스프링에서 알아서 주입해준다. @PostMapping("/login") public String loginUser(@ModelAttribute User user, HttpServletRequest request) { // ... (Authentication logic) // If authenticatio..

    스프링 레디스 세션 적용법

    스프링 부트에서 레디스 세션 적용하는 방법 레디스 연결정보 설정 application.properties 혹은 application.yml 에 Redis hostname, port, password 등을 입력해주면 된다. @Configuration 빈 생성 @Configuration @EnableRedisHttpSession public class SessionConfig { } 스프링 부트가 아닌 환경에서 레디스 세션 적용하는 방법 애노테이션을 이용한 @Configuration 빈을 등록하는 방식으로도 가능하고 순수한 XML 파일 작성으로도 가능하다. 의존성 추가 spring-session-data-redis spring-data-redis Jedis 나 Lettuce 와 같은 Redis Client ..

    @EnableRedisHttpSession 은 어떻게 동작하는가? (feat. 스프링 세션에 레디스 활용하기)

    @EnableRedisHttpSession 이란? 스프링 세션 프로젝트에서 제공하는 애노테이션이다. 스프링 애플리케이션이 Redis 가 지원하는 분산 세션 (distributed sessions backed by Redis) 을 사용할 수 있게 해준다. 애플리케이션 메모리 대신 Redis 메모리를 사용하게 되므로 애플리케이션의 수평적 확장에 유용하고 모든 인스턴스에서 세션 데이터가 일관되게 유지된다. 작동 방식 환경과 애노테이션이 올바르게 프로젝트에 적용되었을 때 어떻게 동작하는지 알아보자. @EnableRedisHttpSession 애노테이션 인식 스프링은 @EnableRedisHttpSession 애노테이션을 인식한 뒤 레디스와 커넥션을 맺으며 세션을 관리할 RedisConnectionFactory ..

    RedirectAttributes 란? (feat. addFlashAttribute 에 대한 설명 포함)

    RedirectAttributes 란? 리디렉션을 수행할 때 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 Attributes 를 전달하는데 이용되는 스프링 프레임워크의 인터페이스이다. 일반적인 시나리오에서 Attributes 를 저장할 땐 Model 의 addAttribute() 메서드를 많이 이용한다. RedirectAttributes 가 필요할 때 이를테면, 주문이 완료된 후 주문 결과 상세페이지로 리다이렉팅하고 그 결과를 보여주고 싶을 때 이용할 수 있다. 주문 처리가 끝났을 때 생성된 주문번호를 리다이렉트 페이지쪽으로 넘겨줄 수 있다. RedirectAttributes 적용하고 데이터 저장하기 간단히 RedirectAttributes 타입의 파라미터를 컨트롤러 메서드에 작성하면 된다. 데이터 저..

    스프링 프레임워크 버전 4.2에서 4.3 업그레이드시 변화사항

    개요 스프링 프레임워크 버전 4.2에서 4.3으로 버전업을 수행했을 때 어떠한 변화가 일어나는지 알아보자. 시멘틱 버저닝에 대한 설명 아래는 스프링 프레임워크 버저닝에 대한 오피셜한 설명입니다. MAJOR, if incremented, may involve a significant amount of work to upgrade. / Major features and potential breaking changes MINOR, if incremented, should involve little to no work to upgrade. / Backward compatible features PATCH, if incremented, should involve no work. / Backward compatib..

    DispatchServlet.doDispatch() 함수 끝까지 따라가서 HandlerMapping 과 HandlerAdapter 알아보기

    DispatchServlet.doDispatch() 함수 끝까지 따라가서 HandlerMapping 과 HandlerAdapter 알아보기

    doDispatch() 함수 끝까지 따라가서 HandlerMapping 과 HandlerAdapter 알아보기 스프링의 핵심 동작을 담당하는 DispatcherServlet 에서 요청 처리에 사용될 핸들러를 찾아주고, 실행할 때 사용된다. HandlerMapping 은 요청에 따른 핸들러를 찾아준다. HandlerAdapter 는 찾아낸 핸들러를 실행시켜줄 Adapter 이다. 실제 동작 살펴보기 코드와 동작을 디버깅하며 어떤 일이 벌어지는지 살펴보자. 예제 코드 @RestController public class HelloController { @RequestMapping("/") public String sayHello() { return "Hello, world!"; } } 로컬 환경에서 스프링에 ..

    스프링 객체 검증 (Validation) 적용하기

    스프링 객체 검증 (Validation) 적용하기

    환경 스프링 부트 2.x 의 환경을 기준으로 한다. 의존성 설치하기 스프링 부트 버전에 맞는 spring-boot-starter-validation 의존성을 설치한다. 링크 의존성의 설치는 빌드 도구에 따라 다르다. maven, gradle 등 각 도구에 맞게 설치해주자. dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } 객체에 애노테이션 추가하기 javax.validation.constraints 에 있는 애노테이션을 사용한다. public class MeetupCreationDto { @NotBlank(message = "모임의 이름을 입력해주세요.") private String name; ..

반응형