[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] JUnit과 Mockito 기반의 Spring 단위 테스트 작성 (2)
·
Programming/etc
1. Java 단위 테스트 작성 준비 a. 필요한 라이브러리 Java 단위테스트 작성에는 크게 2가지 라이브러리가 사용됩니다.JUnit5 : 자바 단위 테스트를 위한 테스팅 프레임워크AssertJ : 자바 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리JUnit만으로도 단위 테스트를 충분히 작성할 수 있습니다. 하지만 JUint에서 제공하는 assertEquals()와 같은 메서드는 AssertJ가 주는 메서드에 비해 가독성이 떨어집니다. 그렇게 때문에 순수 Java 애플리케이션에서 단위 테스트를 위해 JUnit5와 AssertJ 조합이 많이 사용됩니다. 💡 AssertJ가 가독성이 좋은 이유1. JUnit의 assertEquals()@Testvoid testAddition() { int resu..
[Spring] JUnit과 Mockito 기반의 Spring 단위 테스트 작성 (1)
·
Programming/etc
0. 들어가기 전프로젝트 당시, 백엔드 개발자는 저를 포함해 두 명이었습니다. 각자 역할을 분담하여 API를 개발했지만, 작업을 진행하다 보면 서로의 코드를 수정해야 하는 경우가 종종 발생했습니다. 이런 경우, 기능별로 URL에 데이터를 보내 직접 테스트해야 했습니다.이를 해결하기 위해 단위 테스트를 도입하자는 의견을 제시했고, 그 과정에서 학습한 내용을 정리하려 합니다.단위 테스트의 가장 큰 장점은 내가 개발한 코드를 즉시 검증할 수 있다는 것이라 생각합니다. 테스트를 통과하지 못하면 코드를 수정하고, 다시 빠르게 검증할 수 있어 반복적인 오류를 줄일 수 있습니다. 실제로 테스트를 작성하고 수시로 실행하면서 짧은 시간 내에 버그를 발견하고 수정하는 과정에서 단위 테스트의 가치를 크게 실감할 수 있었습니..
[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..