Java

· Java
1. 🖥️ Spring Boot 대규모 트래픽 처리 방안: Redis, Scheduler대규모 트래픽 상황에서 데이터를 효율적으로 처리하기 위한 방법중 하나로 Redisd와 Scheduler를 활용한 개발 방법을 정리해 보려 합니다.Redis에 데이터를 임시 저장하고, 일정 시간 간격으로 DB에 적재하는 방식을 구현합니다. Redis는 빠른 쓰기 작업에 유리하며, 데이터 배치를 통해 DB의 부담을 줄일 수 있습니다.2. 🚀 로직과 코드 구현🔹 전체 로직데이터 저장데이터를 Redis의 리스트(List) 구조에 저장합니다.가장 최근 키에 데이터를 추가하되, 리스트가 3000개 이상일 경우 새로운 키를 생성합니다.스케줄링 처리Redis에서 가장 오래된 키부터 데이터를 가져옵니다.데이터를 DB에 적재하고,..
· Java
이전 글에서 Spring에서의 단위테스트와 통합테스트에 대해 간략하게 정리해 보았습니다.[JAVA] Spring을 이용한 테스트 코드 작성 방법 (단위 테스트, 통합 테스트) [JAVA] Spring을 이용한 테스트 코드 작성 방법 (단위 테스트, 통합 테스트)소프트웨어 개발에서 테스트 코드는 단순히 오류를 찾는 도구를 넘어, CI/CD(Continuous Integration/Continuous Deployment) 파이프라인과 개발 생산성 향상에 핵심적인 역할을 합니다.이 글에서는 JPA를 사용tae-hui.tistory.com 이번 글에서는 해당 내용에 대해 조금 더 깊에 알아보려고 합니다. 특히, Mock 객체와 MockBean의 차이점, 통합테스트에서의 Application Context 초기화..
· Java
소프트웨어 개발에서 테스트 코드는 단순히 오류를 찾는 도구를 넘어, CI/CD(Continuous Integration/Continuous Deployment) 파이프라인과 개발 생산성 향상에 핵심적인 역할을 합니다.이 글에서는 JPA를 사용한 DB 연결 후 테스트를 작성하는 방법을 단계별로 알아보겠습니다.1. 🌱 단위 테스트와 통합 테스트의 차이✅ 단위 테스트(Unit Test)목적: 메서드, 클래스 등 작은 단위의 코드가 올바르게 동작하는지 검증.도구: JUnit, Mockito 등.실행 방식:@ExtendWith, @Mock, @InjectMocks 등을 활용하여 외부 의존성을 모킹(Mock).테스트 환경에서 빠르게 검증.✅ 통합 테스트(Integration Test)목적: 여러 구성 요소(Con..
· Java
1. ArrayList와 LinkedList의 성능 차이ArrayList와 LinkedList는 중간 삽입/삭제의 시간 복잡도가 모두 O(N)으로 동일합니다. 하지만 실제로는 ArrayList가 더 빠른 경우가 많습니다.ArrayList:내부적으로 배열을 사용하며, 연속된 메모리에 데이터를 저장합니다.특정 위치를 찾는 데 O(1)로 빠르며, 삽입/삭제 시 데이터 이동이 발생하지만, 캐시 최적화 효과로 인해 성능이 더 좋습니다.LinkedList:노드 기반 자료구조로, 삽입/삭제는 연결만 변경하면 되지만 특정 위치를 탐색하는 데 O(N)이 걸립니다.메모리가 비연속적이어서 캐시 효율이 떨어지고, 실제로 더 느릴 수 있습니다.결론: 이론적으로 LinkedList가 유리할 것 같지만, 캐시 친화적인 ArrayL..
· Java
PriorityQueue는 자바에서 제공하는 우선순위 큐(Priority Queue) 구현체로, 요소를 우선순위에 따라 자동으로 정렬하여 관리하는 자료구조입니다. 내부적으로 힙(Heap) 자료구조를 기반으로 하며, 최소 힙(Min-Heap)을 기본으로 사용합니다.1. 🌐 PriorityQueue란?1.1 주요 특징자동 정렬: 삽입된 요소는 우선순위에 따라 정렬됩니다.(기본적으로 오름차순으로 정렬되며, 사용자 정의 정렬 순서를 지정할 수 있습니다.)FIFO가 아닌 우선순위 기반 처리:일반적인 큐(FIFO)와 다르게, 요소는 우선순위가 높은 순서대로 처리됩니다.중복 요소 허용:동일한 값을 여러 번 삽입할 수 있습니다.내부적으로 힙(Heap) 자료구조를 사용하여 정렬 및 삽입/삭제 작업을 효율적으로 수행합니..
· Java
자바에서 Queue 인터페이스는 기본적인 단방향 큐(FIFO)를 정의하는데 사용됩니다. 하지만, 실제로 Queue 대신 Deque를 사용하여 동일한 동작을 구현해도 성능에 문제가 없습니다. Deque는 큐와 스택 동작을 모두 지원하므로, Queue의 모든 기능을 충분히 대체할 수 있습니다.1. 🌐 Queue와 Deque의 차이1.1 Queue의 특징단방향 삽입/삭제만 가능하며, FIFO(First In, First Out) 동작을 따릅니다.주요 메서드:삽입: add(E e), offer(E e)삭제: poll(), remove()조회: peek(), element()1.2 Deque의 특징양방향 삽입/삭제가 가능하지만, 단방향 동작도 구현 가능합니다.Deque를 단방향 큐로 사용하면, Queue의 모든..
· Java
🔒 트랜잭션 격리 수준(Isolation Level)📌 격리 수준의 정의격리 수준은 동시에 실행되는 트랜잭션 간의 데이터 충돌 방지 및 무결성 보장을 위해 설정하는 규칙입니다. 각 수준은 트랜잭션 성능과 일관성 사이에서 트레이드오프를 제공합니다.격리 수준은 ANSI SQL 표준에 정의되어 있으며, Spring에서는 이를 데이터베이스에 전달하여 적용합니다.격리 수준 설정 방법Spring에서 @Transactional 어노테이션에 isolation 속성을 설정하여 격리 수준을 지정할 수 있습니다.예시 코드@Transactional(isolation = Isolation.READ_COMMITTED)public void processData() { // 트랜잭션 동작}📌 격리 수준 값과 특징아래는 S..
· Java
📌 트랜잭션 전파(Propagation)란?트랜잭션 전파(Propagation)는 트랜잭션의 존재 여부와 관계를 정의합니다.현재 트랜잭션이 있는 경우 그 트랜잭션에 참여할지,새로 트랜잭션을 생성할지,트랜잭션 없이 실행할지를 결정합니다.Spring에서 제공하는 전파 속성은 @Transactional 어노테이션의 propagation 속성으로 설정할 수 있습니다.📌 트랜잭션 전파와 격리 수준의 차이전파(Propagation)트랜잭션의 관계를 설정합니다.예: 새로운 트랜잭션 생성, 기존 트랜잭션 참여 등.격리 수준(Isolation Level)동시에 실행되는 트랜잭션 간 데이터 접근 규칙을 설정합니다.예: Dirty Read 방지, Repeatable Read 보장 등.간단히: 전파는 트랜잭션의 관계, 격..
TaeHuiLee
'Java' 카테고리의 글 목록