[Spring] Spring Batch란? 간단한 개념과 코드 살펴보기
·
Programming/Spring
1. Spring Batch 란스프링 배치(Spring Batch)는 대용량 데이터를 처리하기 위한 프레임워크로, 스프링 프레임워크 기반에서 작동합니다. 일반적으로 배치 작업은 대량의 데이터를 처리하거나, 주기적이고 반복적인 작업을 실행하는 데 사용되며, 스프링 배치는 이러한 작업을 효율적이고 안정적으로 처리할 수 있는 대표적으로 아래와 같은 기능들을 제공합니다.로깅 및 추적트랜잭션 관리작업 처리 통계작업 재시작건너뛰기리소스 관리 2. Batch와 Scheduler의 차이배치(Batch)는 논리적 또는 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 방법을 의미합니다. 반면에 스케줄러(Scheduler)는 주어진 작업을 미리 정의된 시간에 실행할 수 있게 해주는 도구나 소프트웨어를 의미합니다...
[Spring] Virtual Thread 기반 최적화
·
Programming/Spring
0. 들어가기 전현재 진행 중인 프로젝트에서 AI 서버와의 통신 성능을 테스트하던 중, 요청이 증가할수록 처리량이 감소하고 처리 시간이 지연되는 현상을 확인했습니다. 기존에 AI 서버와의 통신을 위해 RestTemplate을 사용했으나, 이를 개선하기 위해 Java 버전을 17에서 21로 업그레이드하고, Virtual Thread를 도입하여 처리량을 4배 향상할 수 있었습니다. 이 경험을 통해 학습한 Virtual Thread에 대해 공유하고자 합니다. Virtual Thread 내용 시작 전에 간단한 Java LTS 버전 차이를 확인하겠습니다. Java 버전 차이 a. Java 8 (Java 1.8)오라클이 java를 인수한 후 첫번째 LTS 출시 버전32비트를 지원하는 공식적인 마지막 버전LocalD..
[Spring] OAuth 없이 소셜 로그인 구현
·
Programming/Spring
0. 들어가기 전진행 중인 프로젝트에서 웹 애플리케이션에서 앱으로 변경되면서 기존의 소셜 로그인 코드를 수정해야 했습니다. 프론트엔드 개발자와 논의한 결과, 카카오 로그인을 통해 인증 코드가 발급되면 해당 코드를 백엔드 서버에 전달하고, 백엔드에서는 이 코드를 사용해 액세스 토큰을 발급받아 사용자 정보를 가져오는 방식으로 진행하기로 했습니다. 원래 OAuth는 코드 발급부터 사용자 정보 수집까지 자동화해 주지만, 이번에는 카카오 인증 코드를 수동으로 전달받아 처리하므로 OAuth 없이 직접 구현하는 방식으로 결정하게 되었습니다. 아래 글은 OAuth의 개념 설명과 구현 흐름을 정리한 글입니다. OAuth에 대한 개념이 궁금하신 분들은 아래 글을 참고해 주시면 감사하겠습니다!https://young-cod..
[Spring] API 공통 응답 포맷
·
Programming/Spring
0. 들어가기 전클라이언트 단에서는 백엔드에서 개발한 API Response를 토대로 데이터 모델이라는 것을 만들어 화면에 데이터를 출력해야 합니다.만약 통일된 규격의 API Response가 없으면 클라이언트 개발자들은 API마다 데이터 모델을 일일이 만들어야 합니다. 그러므로 백엔드에서는 어느 정도 통일된 양식의 API를 전달해 주는 것이 좋습니다. 공통 응답 패키지 구조는 다음과 같습니다.1. 공통 응답 포맷a. 정상 응답정상 응답일 경우, 위와 같은 형태의 응답 포맷을 반환하는 것이 목표입니다. success는 정상 응답 시 true로 반환되며, data는 객체의 상태를 JSON 형식으로 반환합니다. error는 에러가 발생한 경우 에러 코드와 설명을 포함하며, 정상 응답일 경우 null을 반환합..
[Spring] 동시성 처리
·
Programming/Spring
0. 들어가기 전이전에는 DB 단의 동시성 처리 방법인 Lock에 대해서 알아봤습니다. https://young-code.tistory.com/17 [DB] 락(Lock)1. Lock이란?여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능입니다. 📌 참고락을 이해할 때 '락을 획득한다'라는 의미를 '외부에서 잠young-code.tistory.com 이번에는 애플리케이션 단에서 어떻게 동시성을 처리하는지 살펴봅시다.실질적으로 서비스에서 동시성을 처리하는 부분은 애플리케이션 단이기 때문에 DB 단의 Lock은 개념적인 부분으로 이해하고, 실무에서는 이번에 포스팅하는 애플리케이션 단의 동시성 처리가 중요할 것 같습니다! 재고 시스템에서 동시성을 어떻게 처..
[Spring] Security + JWT + OAuth2를 이용한 로그인 구현 (5) - OAuth2.0 로그인 관련 클래스 생성
·
Programming/Spring
OAuth2.0 로그인 관련 클래스 코드를 설명드리고자 합니다. 0. 들어가기 전OAuth 관련 패키지 구조는 다음과 같습니다. OAuth2Service를 생성하기 위해 spring-boot-starter-oauth2-client 라이브러리를 사용합니다.build.gradle에 다음과 같이 의존성을 추가해 줬습니다.implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' 1. DefaultOAuth2User 클래스OAuth2UserService에서 사용할 OAuth2User 객체 클래스입니다.일반적으로, 다른 프로젝트나 서비스에서는 Resource Server가 제공하지 않는 추가 정보를 관리하기 위해 DefaultOAuth2..
[Spring] Security + JWT + OAuth2를 이용한 로그인 구현 (4) - OAuth란?
·
Programming/Spring
1. OAuth2.0a. OAuth2.0이란 'OAuth*(Open Authorization)*'는 인터넷 사용자들이 비밀번호를 제공하지 않고, 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는 접근 위임을 위한 개방형 표준을 의미합니다. 사용자의 아이디와 비밀번호 없이 접근 권한을 위임받을 수 있다는 것은, 로그인 및 개인정보 관리 책임을 'Third-Party Application(google, kakao, naver 등)'에 위임할 수 있다는 것으로, 로그인 및 개인정보 관리에 대한 책임을 위임하는 것뿐만 아니라, 부여받은 접근 권한을 통해 서드파티 프로바이더가 가지고 있는 사용자의 리소스 조회 등의 기능을 수행할 수 있습니다..
[Spring] Security + JWT + OAuth2를 이용한 로그인 구현 (3) - Spring Security 개념과 처리 과정
·
Programming/Spring
1. Spring Security 개념스프링 기반의 애플리케이션의 보안(인증과 권한)을 담당하는 프레임워크입니다.스프링 시큐리티는 필터(Filter) 기반으로 동작하기 때문에 스프링 MVC와 분리되어 관리 및 동작합니다. 필터(Filter)는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller 사이에 위치합니다. 그래서 이 둘은 적용 시기에 차이점이 있습니다.  Client (requset) -> Filter -> DispatcherServlet -> Interceptor -> Controller 순입니다. 뒤에 설명에서 계속 나올 용어에 대해 먼저 정리해보려 합니다. 💡용어1. 접근 주체(Prin..
[Spring] Security + JWT + OAuth2를 이용한 로그인 구현 (2) - JWT 관련 클래스 생성 / JWT 인증 로직
·
Programming/Spring
이전에 JWT 정의를 살펴봤다면, 이번에는 JWT 관련 클래스를 직접 생성하여 구현해보려고 합니다. 0. 들어가기 전JWT 패키지 구조는 다음과 같습니다. JWT 서비스를 생성하기 위해, build.gradle에 아래와 같은 의존성을 추가했습니다!implementation 'io.jsonwebtoken:jjwt-api:0.11.5'runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' 또한, 설정 파일에 JWT 코드를 추가해 주도록 하겠습니다.jwt: secret: access: "base64로 인코딩된 암호 키, HS256를 사용할 것이기 때문에, 256비트(32바이트) 이상이 되..
[Spring] Security + JWT + OAuth2를 이용한 로그인 구현 (1) - JWT란?
·
Programming/Spring
1. JWT(JSON Web Token)란?JWT는 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다. 따라서 JWT를 이용한 인증은 유저를 인증하고 식별하기 위한 Token 기반 인증입니다. JWT는 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고, 토큰 내부에는 개인키를 통한 전자 서명이 들어있습니다.🤔 Base64 URL-safe Encode?Base64 URL-safe Encode란, 일반적인 Base64 Encode를 URL에서 오류 없이 사용하도록 '+'와 '/'를 각각 '-', '_'으로 표현한 것입니다. 토큰 기반 인증에서 토큰은 토큰 자체에 사용자의 정보들이 포함되어 있다는 점이 특징입니다.클라이언트의 상태를 알아야했던 Statef..