안녕하세요.
|
개발자 최민석입니다.

thumbnail
Spring
September 11, 2024
Reactor에서 `publishOn`과 `subscribeOn`의 역할

Reactor에서 과 의 역할 Spring WebFlux를 공부하기 위해서는 먼저 Reactor에 대해 이해하는 것이 중요하다. 특히, Reactor에서 제공하는 ****과 ****은 리액티브 스트림에서 중요한 개념이다. 이 두 가지 연산자는 비동기적으로 데이터 스트림을 처리하는 과정에서 스레드를 제어하는 역할을 한다. 이번 포스팅에서는 과 이 무엇인지, 그리고 어떻게 다르게 동작하는지에 대해 알아보자. 이란? ****은 말 그대로 구독 시점과 데이터 생성을 어느 스레드에서 실행할지를 결정하는 연산자다. 즉, 이 연산자가 적용되면 구독이 시작되는 순간부터 데이터가 생성되는 시점까지 특정 스레드에서 작업이 실행된다. 적용 시점: 체인의 어디에 위치하든 상관없이, 구독 시점부터 영향을 미친다. 영향 범위: 구독과 데이터 생성 전체에 영향을 미친다. 예시 위 예시에서는 이 설정되었기 때문에, 로 생성된 데이터는 스레드에서 처리된다. 즉, 데이터가 만들어지는 시점과 구독 시점이 elas…

Java
JVM
September 09, 2024
JVM 메모리 구조 이해

JVM 메모리 구조 이해 JVM의 메모리 구조 JVM 메모리는 크게 메서드 영역, 힙(Heap) 영역, 가상 머신 스택(VM Stack), **네이티브 메서드 스택(Native Method Stack)**으로 나뉜다. 1. 메서드(Method) 영역 저장되는 데이터: 클래스 메타데이터(클래스, 인터페이스 정보) 정적 변수 메서드의 바이트코드 런타임 상수 풀(리터럴, 상수) 2. 힙(Heap) 영역 저장되는 데이터: 동적으로 생성된 객체와 배열 참조 타입의 객체 데이터 3. 가상 머신 스택(VM Stack) 저장되는 데이터: 로컬 변수 메서드 호출 정보 연산 스택에서 계산된 중간 값 4. 네이티브 메서드 스택(Native Method Stack) 저장되는 데이터: 네이티브 메서드 호출 정보 네이티브 라이브러리 코드 코드 예시 설명 메서드 영역 : 정적 변수로 메서드 영역에 저장된다. 클래스가 로드될 때 한 번만 생성되며 모든 인스턴스에서 공유된다. 힙 영역 객체: 를 통해 힙에 저…

Backend
Spring
September 07, 2024
컴파일러, JIT, AOT, Graal, 그리고 Spring Native 이해하기

컴파일러, JIT, AOT, Graal, 그리고 Spring Native 이해하기 💡 이 포스트에서는 컴파일러, Just-In-Time(JIT), Ahead-Of-Time(AOT) 컴파일, GraalVM, 그리고 이들이 Spring Native와 어떻게 연관되는지에 대해 살펴본다. 이러한 개념들은 자바 및 다른 언어들이 다양한 런타임 환경에서 어떻게 작동하는지 이해하는 데 중요한 역할을 하며, Spring 애플리케이션이 이 기술들을 통해 성능을 최적화할 수 있는 방법을 제공한다. 1. 컴파일러란 무엇인가? 컴파일러는 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환하는 도구이다. 두 가지 주요 컴파일 방식이 있다: 정적 컴파일 (예: javac): 프로그램이 실행되기 전에 소스 코드를 기계어 또는 중간 형태로 변환한다. 자바에서는 파일을 파일(바이트코드)로 변환하는 과정이다. 동적 컴파일 (예: JIT): 프로그램이 실행되는 동안 코드의 일부를 기계어로 변환한다. 2. Jus…

JPA
August 30, 2024
CreatedDate, CreatedBy 어노테이션

CreatedDate, CreatedBy 어노테이션 JPA에는 엔티티의 생성 정보를 자동으로 기록해주는 와 와 같은 어노테이션이 있다. 어노테이션은 엔티티가 생성된 날짜와 시간을 자동으로 저장하는 데 사용되며, 어노테이션은 엔티티를 생성한 사용자의 정보를 기록하는 데 사용된다. 이 두 어노테이션의 사용 방법과 그 역할에 대해 알아보자. 예시 코드 위 코드는 JPA에서 자식 클래스들에 모두 적용할 컬럼을 지정하는 슈퍼 클래스의 예시이다. 모든 자식 클래스들에 생성일, 생성자, 최종수정일, 최종수정자를 컬럼으로 갖게 하여 DB와 매핑시킬 의도를 가지고 있다. 사전작업 1. AuditorAware 구현체 정의 를 구현한 클래스인 을 작성한다. 에는 로써 이름을 붙여두고(추후 메인 클래스에서 지정하기 위함), 메서드에서는 감사자(auditor)로 들어갈 값을 지정해주면 된다. 예시 코드의 경우, 가 지정된 컬럼에는 “AUDITOR”가 들어갈 것이다. 2. 엔티티 리스너 지정 예시코드에…