Spring
Spring에 관한 내용을 공유합니다.
-
공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. Coroutine 환경에서 Spring AOP 사용하기 MVC 환경에서 AOP를 적용할 때는 위와 같이 적용하게 됩니다. 일반적으로 AOP에서 advice를 정의할 때, 타겟 메서드 전후로 특정 서비스의 메서드를 호출하는 경우가 있을 수 있습니다. 여기서 Coroutine을 사용한다면 타겟 메서드 호출 전후로 suspend 함수를 호출해야 하는 경우가 발생합니다. advice에서 suspend 함수를 호출하게 되면 위와 같이 suspend 함수를 호출하기 위해서는 현재 함수가 suspend 함수이거나 coroutine 환경 이어야 된다는 메시지가 표기됩니다. 그렇다면 에러 메시지에서 제시한 해결책 중에 간단해보이는 해결책..
Coroutine 환경에서 Spring AOP 사용하기 (with. tx와 같이 사용시 버그)공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. Coroutine 환경에서 Spring AOP 사용하기 MVC 환경에서 AOP를 적용할 때는 위와 같이 적용하게 됩니다. 일반적으로 AOP에서 advice를 정의할 때, 타겟 메서드 전후로 특정 서비스의 메서드를 호출하는 경우가 있을 수 있습니다. 여기서 Coroutine을 사용한다면 타겟 메서드 호출 전후로 suspend 함수를 호출해야 하는 경우가 발생합니다. advice에서 suspend 함수를 호출하게 되면 위와 같이 suspend 함수를 호출하기 위해서는 현재 함수가 suspend 함수이거나 coroutine 환경 이어야 된다는 메시지가 표기됩니다. 그렇다면 에러 메시지에서 제시한 해결책 중에 간단해보이는 해결책..
2024.07.14 -
공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. 개요 Open Authorization 2.0은 인가를 위한 개방형 표준 프로토콜입니다. 이 프로토콜에서는 third-party 애플리케이션이 사용자의 리소스에 접근하기 위한 절차를 정의하고 서비스 제공자의 API를 사용할 수 있는 권한을 부여합니다. 대표적으로 네이버 로그인, 구글 로그인과 같은 소셜 미디어 간편 로그인이 있습니다. OAuth2.0을 사용해 third-party 애플리케이션이 사용자의 소셜미디어 프로필 정보에 접근할 수 있도록 합니다. 즉, OAuth 2.0는 사용자가 애플리케이션(클라이언트)에게 자신을 대신하여 자원 서버(Resource Server)에서 특정 자원에 접근할 수 있는 권한을 부여하는 것을 목..
Oauth2 Authorization 서버 구축하기공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. 개요 Open Authorization 2.0은 인가를 위한 개방형 표준 프로토콜입니다. 이 프로토콜에서는 third-party 애플리케이션이 사용자의 리소스에 접근하기 위한 절차를 정의하고 서비스 제공자의 API를 사용할 수 있는 권한을 부여합니다. 대표적으로 네이버 로그인, 구글 로그인과 같은 소셜 미디어 간편 로그인이 있습니다. OAuth2.0을 사용해 third-party 애플리케이션이 사용자의 소셜미디어 프로필 정보에 접근할 수 있도록 합니다. 즉, OAuth 2.0는 사용자가 애플리케이션(클라이언트)에게 자신을 대신하여 자원 서버(Resource Server)에서 특정 자원에 접근할 수 있는 권한을 부여하는 것을 목..
2024.07.08 -
공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다.GraphQL 이란? Graph QL(이하 gql)은 Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어입니다. 하지만 gql과 sql의 언어적 구조 차이는 매우 큽니다. 또한 gql과 sql이 실전에서 쓰이는 방식의 차이도 매우 큽니다. gql과 sql의 언어적 구조 차이가 활용 측면에서의 차이를 가져왔습니다. 이 둘은 애초에 탄생 시기도 다르고 배경도 다릅니다. sql은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적이고, gql은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적입니다. sql의 문장(statement)은 주로 백앤드 시스템에서 작성하고 호출하..
Spring - GraphQL 서버 구축하기공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다.GraphQL 이란? Graph QL(이하 gql)은 Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어입니다. 하지만 gql과 sql의 언어적 구조 차이는 매우 큽니다. 또한 gql과 sql이 실전에서 쓰이는 방식의 차이도 매우 큽니다. gql과 sql의 언어적 구조 차이가 활용 측면에서의 차이를 가져왔습니다. 이 둘은 애초에 탄생 시기도 다르고 배경도 다릅니다. sql은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적이고, gql은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적입니다. sql의 문장(statement)은 주로 백앤드 시스템에서 작성하고 호출하..
2024.05.20 -
공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. CircuitBreaker란?CircuitBreaker는 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지하며, 이를 통해 시스템의 장애 확산을 막고 장애 복구를 도와주는 기능을 제공합니다. 위 그림과 같이 A가 B를 호출할 때, B가 반복적으로 실패한다면 CircuitBreaker를 Open 하여 B에 대한 흐름을 차단하는 기능을 제공합니다. CircuitBreaker를 지원하는 라이브러리Netflix Hystrix (deprecated)Netflix 에서 개발한 라이브러리로 MSA 환경에서 서비스 간 통신이 원활하지 않을 경우 각 서비스가 장애 내성과 지연 내성을 갖게 하는 라이브러리Resilience4j..
Spring - CircuitBreaker공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. CircuitBreaker란?CircuitBreaker는 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지하며, 이를 통해 시스템의 장애 확산을 막고 장애 복구를 도와주는 기능을 제공합니다. 위 그림과 같이 A가 B를 호출할 때, B가 반복적으로 실패한다면 CircuitBreaker를 Open 하여 B에 대한 흐름을 차단하는 기능을 제공합니다. CircuitBreaker를 지원하는 라이브러리Netflix Hystrix (deprecated)Netflix 에서 개발한 라이브러리로 MSA 환경에서 서비스 간 통신이 원활하지 않을 경우 각 서비스가 장애 내성과 지연 내성을 갖게 하는 라이브러리Resilience4j..
2024.04.07 -
본 포스팅은 spring boot 3.2.2 버전을 기준으로 작성되었습니다.공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. open feign이란? feign은 Netflix에서 개발된 Http client binder로 REST Call을 위해 호출하는 클라이언트를 보다 쉽게 작성할 수 있도록 도와주는 라이브러리입니다. spring의 경우 spring-cloud-starter-openfeign 라이브러리 추가로 사용할 수 있습니다. spring cloud는 spring mvc annotation에 대한 지원과 sprinb web에서 사용되는 것과 동일한 HttpMessageConverters를 지원합니다. 의존성 및 client build.gradle.ktsdependen..
Spring - OpenFeign본 포스팅은 spring boot 3.2.2 버전을 기준으로 작성되었습니다.공부한 내용을 정리하는 블로그와 관련 코드를 공유하는 Github이 있습니다. open feign이란? feign은 Netflix에서 개발된 Http client binder로 REST Call을 위해 호출하는 클라이언트를 보다 쉽게 작성할 수 있도록 도와주는 라이브러리입니다. spring의 경우 spring-cloud-starter-openfeign 라이브러리 추가로 사용할 수 있습니다. spring cloud는 spring mvc annotation에 대한 지원과 sprinb web에서 사용되는 것과 동일한 HttpMessageConverters를 지원합니다. 의존성 및 client build.gradle.ktsdependen..
2024.02.04 -
단일 스레드 vs 멀티 스레드 프로세스 내 특정 작업을 처리하는 스레드가 하나일 경우 단일 스레드, 여러 개일 경우 멀티 스레드라고 합니다. 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유리한가 하는 점입니다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 사용합니다. 하지만 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 주의해야 합니다. 스프링 배치 스레드 모델 스프링 배치에서 멀티스레드 환경을 구성하기 위해서 가장 먼저 해야 할 일은 사용하고자 하는 Reader와 Writer가 멀티스레드를 지원하는지 확인하는 것입니다. 스프링 배치 모..
Spring Batch - 병럴 처리단일 스레드 vs 멀티 스레드 프로세스 내 특정 작업을 처리하는 스레드가 하나일 경우 단일 스레드, 여러 개일 경우 멀티 스레드라고 합니다. 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유리한가 하는 점입니다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 사용합니다. 하지만 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 주의해야 합니다. 스프링 배치 스레드 모델 스프링 배치에서 멀티스레드 환경을 구성하기 위해서 가장 먼저 해야 할 일은 사용하고자 하는 Reader와 Writer가 멀티스레드를 지원하는지 확인하는 것입니다. 스프링 배치 모..
2024.02.04 -
@JobScope와 @StepScope Scope는 스프링 컨테이너에서 빈이 관리되는 범위를 의미합니다. JobScope와 StepScope는 Job과 Step의 빈 생성과 실행에 관여하는 스코프입니다. 프록시 모드를 기본값으로 하기 때문에 애플리케이션 구동 시점에는 프록시 빈이 생성되고 실행 시점에 실제 빈 생성이 이뤄집니다. 이를 통해 빈의 실행 시점에 값을 참조할 수 있는 일종의 Lazy Binding이 가능해집니다. 스코프를 사용하게 되면 @Value를 사용하여 아래와 같이 인자로 주입받을 수 있게 됩니다. @Value("#{jobParameters[파라미터명]}") @Value("#{jobExecutionContext[파라미터명]}") @Value("#{stepExecutionContext[파라..
Spring Batch - Scope@JobScope와 @StepScope Scope는 스프링 컨테이너에서 빈이 관리되는 범위를 의미합니다. JobScope와 StepScope는 Job과 Step의 빈 생성과 실행에 관여하는 스코프입니다. 프록시 모드를 기본값으로 하기 때문에 애플리케이션 구동 시점에는 프록시 빈이 생성되고 실행 시점에 실제 빈 생성이 이뤄집니다. 이를 통해 빈의 실행 시점에 값을 참조할 수 있는 일종의 Lazy Binding이 가능해집니다. 스코프를 사용하게 되면 @Value를 사용하여 아래와 같이 인자로 주입받을 수 있게 됩니다. @Value("#{jobParameters[파라미터명]}") @Value("#{jobExecutionContext[파라미터명]}") @Value("#{stepExecutionContext[파라..
2024.02.04 -
Listener 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트를 받아 용도에 맞게 활용할 수 있도록 제공하는 인터셉터 개념의 클래스입니다. 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회할 수 있습니다. Job JobExecutionListener : Job 실행 전후 Step StepExecutionListener : Step 실행 전후 ChunkListener : Chunk 실행 전후(Tasklet 실행 전후), 오류 시점 ItemReaderListener : ItemReader 실행 전후, 오류 시점, 단, item이 null일 경우에는 호출 X ItemProcessorListener : ItemProcessor 실행 전후..
Spring Batch - 리스너Listener 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트를 받아 용도에 맞게 활용할 수 있도록 제공하는 인터셉터 개념의 클래스입니다. 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회할 수 있습니다. Job JobExecutionListener : Job 실행 전후 Step StepExecutionListener : Step 실행 전후 ChunkListener : Chunk 실행 전후(Tasklet 실행 전후), 오류 시점 ItemReaderListener : ItemReader 실행 전후, 오류 시점, 단, item이 null일 경우에는 호출 X ItemProcessorListener : ItemProcessor 실행 전후..
2024.02.01 -
Repeat 스프링 배치는 특정 조건이 충족될 때까지 Job 또는 Step을 반복하도록 배치 애플리케이션을 구성할 수 있습니다. 스프링 배치에서는 Step과 Chunk의 반복을 RepeatOperation을 사용해 처리하고 있습니다. 기본 구현체로 RepeatTemplate을 제공합니다. 구조 Step은 RepeatTemplate을 사용해 Tasklet을 반복적으로 실행합니다. ChunkOrientedTasklet은 내부적으로 ChunkProvider를 통해 ItemReader로 데이터를 읽어올 것을 지시합니다. ChunkProvider는 내부적으로 RepeatTemplate을 갖고 있고 이를 이용해 반복적으로 ItemReader에게 반복적으로 데이터를 읽어오도록 처리합니다. FaultTolerant 스..
Spring Batch - 반복 및 오류 제어Repeat 스프링 배치는 특정 조건이 충족될 때까지 Job 또는 Step을 반복하도록 배치 애플리케이션을 구성할 수 있습니다. 스프링 배치에서는 Step과 Chunk의 반복을 RepeatOperation을 사용해 처리하고 있습니다. 기본 구현체로 RepeatTemplate을 제공합니다. 구조 Step은 RepeatTemplate을 사용해 Tasklet을 반복적으로 실행합니다. ChunkOrientedTasklet은 내부적으로 ChunkProvider를 통해 ItemReader로 데이터를 읽어올 것을 지시합니다. ChunkProvider는 내부적으로 RepeatTemplate을 갖고 있고 이를 이용해 반복적으로 ItemReader에게 반복적으로 데이터를 읽어오도록 처리합니다. FaultTolerant 스..
2024.01.31 -
ItemProcessor 데이터를 출력하기 전에 데이터를 가공 및 필터링 역할을 하는 인터페이스입니다. ItemReader 및 ItemWriter와 분리되어 비즈니스 로직을 구현할 수 있습니다. ItemReader로부터 받은 아이템을 특정 타입으로 변환해서 ItemWriter에 넘겨줄 수 있습니다. Itemreader로부터 받은 아이템들 중 필터과정을 거쳐서 원하는 아이템들만 ItemWriter로 넘겨줄 수 있습니다. ChunkOrientedTasklet 실행 시 선택적 요소기 때문에 필수 요소는 아닙니다. O process() I 제네릭은 ItemReader에서 받을 데이터 타입 O 제네릭은 ItemWriter에게 보낼 데이터 타입 아이템을 하나씩 가공 처리하며 null을 리턴할 경우 해당 아이템은 C..
Spring Batch - ItemProcessorItemProcessor 데이터를 출력하기 전에 데이터를 가공 및 필터링 역할을 하는 인터페이스입니다. ItemReader 및 ItemWriter와 분리되어 비즈니스 로직을 구현할 수 있습니다. ItemReader로부터 받은 아이템을 특정 타입으로 변환해서 ItemWriter에 넘겨줄 수 있습니다. Itemreader로부터 받은 아이템들 중 필터과정을 거쳐서 원하는 아이템들만 ItemWriter로 넘겨줄 수 있습니다. ChunkOrientedTasklet 실행 시 선택적 요소기 때문에 필수 요소는 아닙니다. O process() I 제네릭은 ItemReader에서 받을 데이터 타입 O 제네릭은 ItemWriter에게 보낼 데이터 타입 아이템을 하나씩 가공 처리하며 null을 리턴할 경우 해당 아이템은 C..
2024.01.28 -
ItemWriter Chunk 단위로 데이터를 받아 일괄 출력 작업을 위한 인터페이스입니다. 플랫 파일 - csv, txt XML, Jsono Database Message Queuing 서비스 Mail Service Custom reader 다수의 구현체들이 itemReader와 같은 맥락으로 itemWriter와 ItemStream을 동시에 구현하고 있습니다. 하나의 아이템이 아닌 아이템 리스트를 전달받아 수행합니다. ChunkOrientedTasklet 실행 시 필수적 요소로 설정해야 합니다. void write() 출력 데이터를 아이템 리스트로 받아서 처리합니다. 출력이 완료되고 트랜잭션이 종료되면 새로운 Chunk 단위 프로세스로 이동합니다. 위와 같이 다양한 구현체들을 제공하고 있습니다. Jd..
Spring Batch - ItemWriterItemWriter Chunk 단위로 데이터를 받아 일괄 출력 작업을 위한 인터페이스입니다. 플랫 파일 - csv, txt XML, Jsono Database Message Queuing 서비스 Mail Service Custom reader 다수의 구현체들이 itemReader와 같은 맥락으로 itemWriter와 ItemStream을 동시에 구현하고 있습니다. 하나의 아이템이 아닌 아이템 리스트를 전달받아 수행합니다. ChunkOrientedTasklet 실행 시 필수적 요소로 설정해야 합니다. void write() 출력 데이터를 아이템 리스트로 받아서 처리합니다. 출력이 완료되고 트랜잭션이 종료되면 새로운 Chunk 단위 프로세스로 이동합니다. 위와 같이 다양한 구현체들을 제공하고 있습니다. Jd..
2024.01.28 -
ItemReader itemReader는 다양한 입력으로부터 데이터를 읽어서 제공하는 인터페이스입니다. 플랫 파일 - csv, txt XML, Json Database Message Queuing 서비스 Custom reader 다수의 구현체들이 ItemReader와 ItemStream 인터페이스를 동시에 구현하고 있습니다. ItemStream은 파일 스트림 연결 종료, DB 커넥션 연결 종료 등의 장치 초기화 등의 작업에 사용됩니다. ExecutionContext에 read와 관련된 여러 가지 상태 정보를 저장해 두고 재시작 시 참조됩니다. ChunkOrientedTasklet 실행 시 필수적 요소로 설정해야 합니다. T read() 입력 데이터를 읽고 다음 데이터로 이동합니다. 아이템 하나를 리턴하며..
Spring Batch - ItemReaderItemReader itemReader는 다양한 입력으로부터 데이터를 읽어서 제공하는 인터페이스입니다. 플랫 파일 - csv, txt XML, Json Database Message Queuing 서비스 Custom reader 다수의 구현체들이 ItemReader와 ItemStream 인터페이스를 동시에 구현하고 있습니다. ItemStream은 파일 스트림 연결 종료, DB 커넥션 연결 종료 등의 장치 초기화 등의 작업에 사용됩니다. ExecutionContext에 read와 관련된 여러 가지 상태 정보를 저장해 두고 재시작 시 참조됩니다. ChunkOrientedTasklet 실행 시 필수적 요소로 설정해야 합니다. T read() 입력 데이터를 읽고 다음 데이터로 이동합니다. 아이템 하나를 리턴하며..
2024.01.28