java 17

Java 대용량 데이터 처리(1) - Cursor 방식

1. 한 번에 처리하기 -> 작게 나눠서 천천히 처리하기Cursor-based 예제Bad case : 모두 조회, 모두 처리List allData = repository.findAll();processAll(allData);Good case : Cursor 방식으로, 배치 사이즈로 조회하여, 부분처리Long lastId = 0L;int batchSize = 1000;while (true) { List batch = repository.findBatch(lastId, batchSize); if (batch.isEmpty()) break; processAll(batch); lastId = batch.get(batch.size() - 1).getId();}@Query(value = "SE..

CS 정리 2025.04.20

Java 대용량 데이터 처리(0)

Java에서 대용량 데이터란 무엇인가?1) 한 번에 메모리에 올리기 어렵다.2) 처리/응답 속도가 저하된다.3) I/O 병목 발생4) GC 부하 발생5) DB 부하 발생 * 성능에 영향을 줄 만큼 크거나 빈번한 데이터를 의미함.그러므로, "절대 크기"보다는 "시스템 리소스 대비 상대적"인 성격을 가진다. Java에서 대용량 데이터 처리 방안은 무엇인가?1. 한 번에 처리하기 -> 작게 나눠서 천천히 처리하기 (1년치 주문 데이터 정산)2. List -> Stream (장기간 저장된 로그 분석)3. 즉시응답 -> 비동기 예약 (10만 건 엑셀 다운로드)4. 즉시저장 -> 모아서 저장 (비동기 데이터 수집)5. DB만 사용 -> DB와 캐시와 계층구조 활용 (상품 상세정보 조회)6. 싱글 쓰래드 -> 멀티..

CS 정리 2025.04.19

객체지향 이해하기

(내가 나를 가르치는 글이라 반말입니다)자동차가 가진 속성이 뭘까? 색상, 브랜드, 제조일자, 몇인승, 튜닝여부, 현재 속도, 운전중/주차중, 키로 수, 연료량 등행위는? 가속하기, 정지하기, 멈추기, 주유하기, 세차하기, 수리하기 등이 있을것이다클래스로 만들어보자public class Car { private String name; private int speed; public Car(String name) { this.name = name; this.speed = 0; } public void accelerate() { speed += 10; System.out.println(name + " 차 가속! 속도: " + speed);..

Idea 2025.04.16

메모리 단편화, Fragmentation

메모리 단편화, Fragmentation메모리의 남은 공간을 사용할 수 없는 현상외부 단편화 :메모리 블럭 사이에 자투리 블럭들의 활용이 어려운 상황[100] = [20/20] [20/20] [20/20] [20/20] [20/20] 모두 크기와 동일한 작업으로 사용중[100] = [20/20] [0/20] [20/20] [20/20] [0/20] 1,4 번째 사용종료추가로 [30]의 작업이 발생했을때, 남은 공간이 [20],[20]으로 40이지만, 연속적이지 않은 공간임으로 메모리 할당 불가내부 단편화 :[100] = [10/20] [10/20] [10/20] [10/20] [10/20] 영역의 크기보다 작은 작업들로 구성됨(낭비)추가로 [30]의 작업이 발생했을때, 남은 공간이 50이지만, 영역이 부..

CS 정리 2025.04.12

GC, Garbage Collection

GC, Garbage CollectionJVM 내부에서 백그라운드 thread로 동작하는 task. heap 영역의 메모리를 자동으로 관리해준다. (python, C++도 있다)ItemVO itemVo = new ItemVO();itemVo = null; // 더 이상 참조되지 않은 메모리는 GC 대상 동작원리Reachability  -> Mark -> Sweep -> CompactReachability 분석: GC ROOT 로부터 도달할 수 없는 개체를 가비지로 판단함GC ROOT(static 변수, Thread 참조, 지역변수)Mark : GC Root에서부터 살아있는 객체를 표시Sweep : 표시되지 않은 객체(죽은 객체)를 제거Compact : 살아있는 객체를 한쪽으로 모아 메모리 단편화 제거* ..

CS 정리 2025.04.12

JVM, Java virtual machine

JVM, Java virtual machinejava 프로그램을 실행하기 위한 가상머신이다.동작원리컴파일 :코드(.java)를 Bytecode(.class)로 컴파일하고 .class파일을 jvm이 실행한다.JVM 실행 :1) 클래스 로더(ClassLoader) 가 클래스 로딩  : JVM 메모리로 동적으로 로딩(지연로딩)     jdk 핵심클래스 -> extention 클래스 -> 사용자 작성 클래스 순2) 바이트코드 검증(Verifier) 으로 보안 검증  : 올바른 코드인지 검증하여 악성 클래스 차단3) 런타임 데이터 영역에 클래스/객체 배치  : 실행에 필요한 메모리 구조, JVM 종료 시 소멸 ( Heap, Method Area, JVM Stack, Program Counter (PC) Regis..

CS 정리 2025.04.11

java Collection, Hash 연관 정리

1. java Collection framework 개념Collection 인터페이스, 구현 클래스, 유틸리티 클래스, 정렬, iterator, 동기화, stream, spliterator, comparator/comparable 등을 포함하고 있음.데이터를 효율적으로 저장/관리/검색/순회/정렬할 수 있게 해주는 인터페이스 + 구현체 + 유틸리티 클래스의 생태계 전체 2. Collection 개념데이터의 집합을 다루기 위한 인터페이스 계층 구조, 여러 객체를 효율적으로 추가/삭제/검색 할 수 있도록 도와주는 인터페이스List, Set, Queue 같은 "요소들의 집합"을 다루는 인터페이스 계층 구조 3. Collection 종류CollectionList, Set, Queue의 부모 인터페이스List순서가..

CS 정리 2025.04.07