[Spring] Spring Batch란? 간단한 개념과 코드 살펴보기
·
Programming/Spring
1. Spring Batch 란스프링 배치(Spring Batch)는 대용량 데이터를 처리하기 위한 프레임워크로, 스프링 프레임워크 기반에서 작동합니다. 일반적으로 배치 작업은 대량의 데이터를 처리하거나, 주기적이고 반복적인 작업을 실행하는 데 사용되며, 스프링 배치는 이러한 작업을 효율적이고 안정적으로 처리할 수 있는 대표적으로 아래와 같은 기능들을 제공합니다.로깅 및 추적트랜잭션 관리작업 처리 통계작업 재시작건너뛰기리소스 관리 2. Batch와 Scheduler의 차이배치(Batch)는 논리적 또는 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 방법을 의미합니다. 반면에 스케줄러(Scheduler)는 주어진 작업을 미리 정의된 시간에 실행할 수 있게 해주는 도구나 소프트웨어를 의미합니다...
[Etc] Elasticsearch를 통해 검색 시간 단축하기 (1)
·
Data Infra/etc
1. Elasticsearch란?Elasticsearch는 Apache Lucene(아파치 루씬) 기반의 Java 오픈 소스 분산 검색 엔진입니다. Elasticsearch를 통해 루씬 라이브러리(Java에서 개발한 정보 검색용 라이브러리)를 단독으로 사용할 수 있으며, 방대한 양의 데이터를 신속하게(거의 실시간) 저장, 검색, 분석을 수행할 수 있습니다. Elasticsearch는 검색을 위해 단독으로 사용하기도 하며, ELK(Elasticsearch/Logstash/Kibana) 스택으로 사용되기도 합니다. ELK 스택은 다음과 같습니다.Logstash : 다양한 소스(DB, csv 파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱 하여 Elasticsearch로 전달Elasticsearc..
[Redis] 캐시를 통해 읽기 성능 향상하기 (2)
·
Data Infra/Redis
0. 들어가기 전이전 글에서는 캐시의 정의와 다양한 캐시 전략에 대해 다뤘습니다.자세한 내용이 궁금하신 분들은 아래 링크를 참고해 주세요. https://young-code.tistory.com/39#2.%20캐싱%20전략%20패턴%20종류-1 [Redis] 캐시를 통해 읽기 성능 향상하기 (1)1. 캐싱캐시 전략은 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술입니다. 일반적으로 캐시는 메모리를 사용하기 때문에 데이터베이스보다 훨씬 빠르게 데이터를 응답할young-code.tistory.com 이번 글에서는 제가 프로젝트에서 캐시를 적용한 방법을 공유하려고 합니다. 1. 캐싱할 데이터캐시는 조회는 빈번하지만 쓰기는 자주 발생하지 않는 데이터를 저장할 때 가장 효율적입니다. 성능 테스..
[Redis] 캐시를 통해 읽기 성능 향상하기 (1)
·
Data Infra/Redis
1. 캐싱캐시 전략은 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술입니다. 일반적으로 캐시는 메모리를 사용하기 때문에 데이터베이스보다 훨씬 빠르게 데이터를 응답할 수 있어 이용자에게 빠르게 서비스를 제공할 수 있습니다. 하지만 기본적으로 RAM의 용량은 커봐야 16 ~32G 정도라, 데이터를 모두 캐시에 저장해 버리면 용량 부족 현상이 일어나 시스템이 다운될 수 있습니다. 따라서 어느 종류의 데이터를 캐시에 저장할지, 얼마큼 데이터를 캐시에 저장할지, 얼마나 오래된 데이터를 캐시에서 제거하는지에 대한 '지침 전략'을 숙지할 필요가 있습니다. 💡 참고캐시를 효율적으로 이용하기 위해서는 캐시에 저장할 데이터의 특성도 고려해야 합니다.예를 들어 자주 조회되는 데이터, 결과값이 자주 변동..
[DB] 낙관적 락, 비관적 락, Redis 동시성 이슈 성능 테스트
·
Data Infra/etc
0. 들어가기 전현재 진행 중인 프로젝트에는 SNS 기능이 있으며, 게시물에 조회 수와 좋아요 기능이 포함되어 있습니다. 조회 수는 데이터의 신뢰성이 크게 중요하지 않다고 생각되지만, 좋아요 수는 사용자 경험에 큰 영향을 미칠 수 있어 동시성 문제를 해결하며 성능을 최적화하려고 합니다. 이를 위해 낙관적 락, 비관적 락, 레디스가 떠오르는데, 개인적으로 낙관적 락 직접 확인해 보는 것이 좋을 것 같아 확인해보려 합니다. Jmeter로 성능 테스트를 진행할 예정입니다. 👉 Redis 고려 이유In-Memory DB이다.Redis는 In-Memory DB이기 때문에 IO 작업이 훨씬 빠를 것이라 생각했습니다.Redis 6.0부터는 Network IO가 추가되었다.Redis 6.0에서는 IO만 담당하는 Th..
[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에 데이터를 보내 직접 테스트해야 했습니다.이를 해결하기 위해 단위 테스트를 도입하자는 의견을 제시했고, 그 과정에서 학습한 내용을 정리하려 합니다.단위 테스트의 가장 큰 장점은 내가 개발한 코드를 즉시 검증할 수 있다는 것이라 생각합니다. 테스트를 통과하지 못하면 코드를 수정하고, 다시 빠르게 검증할 수 있어 반복적인 오류를 줄일 수 있습니다. 실제로 테스트를 작성하고 수시로 실행하면서 짧은 시간 내에 버그를 발견하고 수정하는 과정에서 단위 테스트의 가치를 크게 실감할 수 있었습니..
[백준] 16139 : 인간-컴퓨터 상호작용 (JAVA)
·
Algorithm
https://www.acmicpc.net/problem/16139📌 50점,,16139번 문제는 다음과 같은 조건에 따라 점수가 부여되는 문제였습니다. 서브태스크 1 (50점)문제열의 길이는 2000자 이하, 질문의 수는 2000개 이하이다.서브태스크 2 (50점)추가 제한 조건이 없다. 문제를 보고 간단히 구현해 풀었으나, 50점만 받았습니다..🥲 50점 받은 코드입니다.import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReade..
[Spring] OAuth 없이 소셜 로그인 구현
·
Programming/Spring
0. 들어가기 전진행 중인 프로젝트에서 웹 애플리케이션에서 앱으로 변경되면서 기존의 소셜 로그인 코드를 수정해야 했습니다. 프론트엔드 개발자와 논의한 결과, 카카오 로그인을 통해 인증 코드가 발급되면 해당 코드를 백엔드 서버에 전달하고, 백엔드에서는 이 코드를 사용해 액세스 토큰을 발급받아 사용자 정보를 가져오는 방식으로 진행하기로 했습니다. 원래 OAuth는 코드 발급부터 사용자 정보 수집까지 자동화해 주지만, 이번에는 카카오 인증 코드를 수동으로 전달받아 처리하므로 OAuth 없이 직접 구현하는 방식으로 결정하게 되었습니다. 아래 글은 OAuth의 개념 설명과 구현 흐름을 정리한 글입니다. OAuth에 대한 개념이 궁금하신 분들은 아래 글을 참고해 주시면 감사하겠습니다!https://young-cod..