Spring 152

HttpMessageConverter 우선순위(feat. AWS S3)

최근 회사에서 특정 API에 Spring Interceptor를 통해 HTTP Request를 JSON으로 파싱하고 S3에 업로드하는 로직을 수정하는 작업을 진행했다. 로직의 흐름은 간단하다. Interceptor의 afterCompletion 메서드에서 요청이 성공했냐 실패했냐에 따라 다른 S3 경로에 업로드하기만 한다. 물론, 우리는 모든 요청은 JSON으로 반환될 것임을 기대하였고 ObjectMapper를 통해 RequestBody를 JSON으로 변환하는 로직을 내부에 추가하였다. JSON으로 값이 반환될 수 있도록 @RequestMapping(value = "/something", produces = {MediaType.APPLICATION_JSON_VALUE}) produce를 통해 반환될 값을..

Spring 2023.10.31

yml에서 List Object 사용법

yml에서 변수를 리스트 형식으로 사용하는 법 로컬환경, 개발환경, 상용환경으로 환경을 분리할 때, yml에 변수를 넣어두고 코드에서 불러와 사용하는 방법을 흔히 사용하곤 한다. person: name: '민철' 이런 방식으로 말이다. 사용하는 쪽에서는 아래와 같다. @Value("${person.name:}) private String name; 추가적으로 yml은 List나 Map과 같은 다양한 데이터 유형을 지원하고 있다. programming: language: - C - Java - Python - JavaScript 이를 가져오려면 @Value("${programming.language[0]:}") private String language; // C @Value("${programming.l..

Spring 2022.04.29

Spring Kafka를 사용해 Slack에 메시지 보내기

🚀 들어가며 입사 후, 첫 업무로 Spring과 Kafka를 연동하고 특정 이벤트에 따라 Slack에 알림을 보내는 일을 맡게되어 학습을 목적으로 간단한 애플리케이션을 만들어 보았다. 나는 이번 계기로 Kafka를 처음 사용해보았기 때문에 내가 구현한 방법이 맞다고 확신할 수 없다. 단순 학습 목적임을 염두해주길 바란다. ⚙️ 환경 java 17 Spring Boot 2.6.4 Spring Web Spring Kafka lombok jackson ✨ Slack Incoming Webhooks 먼저, 슬랙에 메시지를 보내기 위해 Incoming Webhooks라는 슬랙 앱을 사용하였다. 메시지를 전송할 채널의 세부정보로 들어가 앱 추가를 클릭한다. Incoming Webhooks을 슬랙 채널에 설치하면 아..

Spring/Spring Kafka 2022.03.23

Spring Batch Architecture

JobLauncher: Job을 실행시키는 컴포넌트 Job: 배치 작업 JobRepository: Job 실행과 Job, Step을 저장 Step: 배치 작업 단계 ItemReader, ItemProcessor, ItemWriter: 데이터를 읽고 처리하고 쓰는 컴포넌트 Application Layer: 비즈니스 로직이 존재, 사용자의 코드 Core Layer: 배치 작업을 시작하고 제어하는데 필수적인 클래스 Job, Step, JobLauncher Infrastructure Layer: 외부와 상호작용 ItemReader, ItemWriter, RetryTemplate Job 전체 배치 프로세스를 캡슐화한 도메인 Step의 순서를 정의 JobParameters를 받음 JobExecution이 실제 실행..

Spring/Spring Batch 2022.02.20

Spring AOP

Aspect 공통적인 부가 기능인 횡단 관심사를 위해 만들어진 것이 바로 Aspect이다. Aspect는 관점이라는 뜻인데, 애플리케이션을 바라보는 관점을 각각의 기능에서 횡단 관심사 관점으로 본다는 의미이다. 이렇게 횡단 관심사를 처리하는 Aspect를 사용한 프로그래밍 방식이 AOP(Aspect Oriented Programming)!! 이는 객체 지향을 대체하는 것이 아닌 OOP만으로 처리하기 어려운 횡단 관심사를 보조하기 위한 목적을 가지고 있다. Spring이 제공하는 Advisor, Advice, Pointcut 또한 하나의 Aspect라고 볼 수 있다. AOP AOP의 가장 핵심 아이디어는 횡단 관심사를 분리하여 한 곳에서 관리하도록 하는 것이다. AOP 적용 방식 AOP에서 횡단 관심사를 ..

@Aspect AOP

Spring에 @Aspect 애노테이션을 사용하면 이것이 Advisor 생성 기능을 지원한다. @Aspect는 AspectJ에서 제공하는 애노테이션으로 스프링은 이를 사용해 AOP를 가능케한다. 코드로 살펴보자 @Aspect : 프록시를 적용하기 위한 애노테이션 @Around : Pointcut을 위한 애노테이션, 인자로 AspectJ표현식을 넣는다. @Around가 붙은 메서드가 바로 Advice이다.(여기서는 execute) ProceedingJoinPoint : MethodInvocation과 유사하다. 내부에 실제 호출 대상(target), 전달 인자, 어떤 객체와 어떤 메서드가 호출되었는지에 대한 정보가 포함되어 있다. proceed() : target 호출 이렇게 만들어진 프록시를 스프링 빈으..

빈 후처리기

빈 후처리기란?(BeanPostProcessor) @Bean이나 컴포넌트 스캔으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그 이후에는 등록된 빈을 조회하고 사용할 수 있게된다. 스프링이 빈 저장소에 등록할 목적으로 객체를 생성하는데(Singleton) 등록 직전에 조작하고 싶을 때 사용하는 것이 바로 빈 후처리기!! 즉, 빈을 생성한 후에 무언가를 처리하는 용도로 이해하자! 빈 후처리기 기능 객체를 조작 다른 객체로 바꿔치기 빈 후처리기 과정 생성 : 스프링 빈 대상이 되는 객체를 생성 전달 : 생성된 객체를 빈 후처리기에 전달 후 처리 작업 : 빈 후처리기가 스프링 빈 객체를 조작 등록 : 스프링 컨테이너의 내부 저장소에 빈 객체 등록 Bean..

Spring의 프록시 기술

JDK 동적 프록시는 인터페이스가 있는 경우에만 사용이 가능하고, CGLIB은 구현체에도 적용이 가능하다. 이 두가지를 일관성있게 사용할 수는 없을까? Spring은 동적 프록시를 통합하여 편리하게 만들어주는 ProxyFactory를 제공한다! ProxyFactory는 인터페이스가 있다면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB을 사용한다. 물론 이 기본설정을 변경할 수도 있다! ProxyFactory Proxy에 추가할 부가 기능을 적용하기위해 Advice를 만들어주면된다. 이 Advice는 JDK 동적프록시의 InvocationHandler, CGLIB의 MethodInterceptor가 호출한다. Advice는 프록시에 적용할 부가 기능 로직이다. InvocationHandl..

@ModelAttribute와 @RequestBody 그리고 Setter

@RequestBody와 Setter 본 주제에 대해 이야기하기 전에 먼저 @ModelAttribute에 대해 이야기해보려합니다. @ModelAttribute 우리는 Spring에서 Reqeust Parameter를 얻기 위해 @ModelAttribute를 사용하곤합니다. 값을 바인딩하여 우리가 원하는 객체로 변환해주는 역할을 하는데 아래와 같이 형식에 맞춰 값이 넘어오면 원하는 객체로 손쉽게 변환할 수 있다는 큰 장점이 있습니다. 물론 타입이나 형식이 안맞으면 TypeConverter에서 예외가 발생함 값을 바인딩하길 원하는 객체인 RequestDto는 name과 age필드 두가지를 가지고 있는데 실제 요청을 postman을 사용해 html-form 형식으로 전달해보겠습니다.(query paramete..

Spring 2021.11.24

Spring과 Redis를 연동하여 Session Clustering

안녕하세요!😄 현재 진행 중인 프로젝트의 백엔드 서버에 적용된 Session Clustering에 대해 이야기 해보려 합니다. 여기서는 Load Balancing, Reverse Proxy와 같은 개념이 등장합니다. 이젠에 작성된 해당 글을 참조해주세요! 세션 클러스터링이란? Session Clustering이란 말 그대로 Session을 Clustering 즉, 군집화한다고 생각하면 이해가 빠를 것 같습니다. 우리가 웹사이트에 로그인하는 과정을 생각해봅시다.(쿠키-세션 방식을 이야기합니다.) 먼저, 클라이언트는 서버로 자신의 인증 정보를 전달합니다. 서버는 인증 정보를 검증한 후 인증된 사용자라면 해당 사용자의 정보를 서버 내 Session에 저장하게 됩니다. 서버가 한 대만 존재한다면 사용자의 요청은..

Spring 2021.11.19
반응형