JVM 80

Spring Cloud Config Server의 암호화

Config Server의 암호화설정 정보를 평문으로 관리하는 것은 보안 문제를 일으킬 우려가 있다. Spring Cloud Config Server는 암호화된 프로퍼티 값을 제공하기 위해 대칭 키 또는 비대칭 키를 사용할 수 있다. 대칭키를 이용한 암호화 동일한 키를 암호화와 복호화에 사용하는 방식으로 처리 속도가 빠르다는 장점이 있지만 키 교환의 어려움과 키 관리의 문제가 있다. 라이브러리 implementation("org.springframework.cloud:spring-cloud-starter-bootstrap") bootstrap.ymlencrypt: key: abcdefghijklmnopqrstuexyz1234567890 bootstrap.yml 이란? 부트스트랩 단계에서 사용되는 설정 파..

JVM/SpringCloud 2023.12.30

Spring Cloud Bus

Spring Cloud Bus Spring Cloud Bus는 분산 시스템에서 구성 변경 및 이벤트 전파를 지원하는 도구이다. 이를 통해 여러 서비스 인스턴스 간에 구성 변경을 효율적으로 전파하고, 런타임 중에 애플리케이션 상태를 모니터링하고 관리할 수 있다. 이벤트 버스: Spring Cloud Bus는 이벤트 버스를 사용하여 분산된 서비스 간에 이벤트를 전파한다. 이를 통해 구성 변경, 애플리케이션 이벤트 등을 브로드캐스트할 수 있습니다. 구성 변경 전파: Spring Cloud Config와 통합하여 구성 서버에서 가져온 구성 정보를 변경할 때 이를 모든 서비스 인스턴스에 효과적으로 전파할 수 있다. 애플리케이션 상태 모니터링: 애플리케이션의 상태 변경, 이벤트, 구성 변경 등을 모니터링하고 이를 ..

JVM/SpringCloud 2023.12.28

Spring Cloud Config

Spring Cloud Config Spring Cloud Config는 Spring 프레임워크 기반의 분산 시스템에서 설정 관리를 간편하게 하기 위한 도구이다. 여러 마이크로서비스가 함께 동작하는 환경에서 중앙화된 설정을 적용하고, 이를 외부에서 동적으로 수정할 수 있도록 지원한다. 중앙화된 저장소: 설정 정보는 외부 저장소에 저장되어 중앙화되며, 보통 Git과 같은 버전 관리 시스템을 사용한다. 이를 통해 변경 이력을 추적하고, 여러 환경에 대한 설정을 효과적으로 관리할 수 있다. 외부에서의 설정 관리: 서비스를 중지시키지 않고도 설정을 변경할 수 있다. 이는 서비스의 재시작 없이도 동적으로 설정을 갱신할 수 있어, 높은 가용성을 유지하면서도 설정을 최신 상태로 유지할 수 있음을 의미한다. 애플리케이..

JVM/SpringCloud 2023.12.27

Spring Swagger(Springdoc) 통합 설정

Spring Boot에서는 여러 개의 모듈이나 서비스를 포함하는 분산 시스템에서 API 문서를 통합하고자 할 때, 주로 Swagger 문서를 Aggregator 또는 Gateway에서 통합하는 방식이 사용된다. 이를 위해서는 각 서비스의 Swagger 문서를 중앙 집중화된 위치에서 통합하거나, 서비스 간에 문서를 병합하는 방법을 사용할 수 있다. 두 방식 중 어느 것을 선택할지는 시스템의 구성과 요구사항에 따라 다를 수 있다. 중앙 집중화된 위치에서 통합하는 경우 Gateway에 부하가 집중될 수 있지만, 서비스 간 문서 병합은 각 서비스가 직접적으로 책임을 지게 된다. 중앙에서 통합하는 방식Spring Gateway나 중앙에서 각각의 서비스의 api-docs의 path를 호출하는 방식이다. spring..

JVM/SpringCloud 2023.12.27

요청 처리와 스레드풀

스레드풀을 사용하는 이유프로세스는 실행 중인 프로그램을 나타내며, 스레드는 프로세스의 작업 단위이다. 자바에서의 스레드는 주로 OS의 스레드에 일대일로 매핑된다. 이는 각 자바 스레드가 하나의 OS 스레드에 대응된다는 것을 의미한다. 그러나 이런 매핑 방식은 스레드 생성 비용과 Context Switching 빈도로 인해 효율적이지 않다. 이러한 문제에 대응하기 위해 사용되는 것이 스레드 풀이다. 스레드 풀은 미리 정의된 수의 스레드를 생성하고 관리하여 작업을 효율적으로 할당한다. Http 요청은 어떻게 스레드에 할당되는가? 서버가 실행되면 NioConnector(비동기 네트워크 통신을 관리하는 주체)가 생성되고 그다음에는 NioProtocol(실제 통신 프로토콜 및 데이터 처리를 담당)이 생성되고 이후..

JVM/SpringMVC 2023.12.20

JVM

JVM이란?JVM은 (Java Virtual Machine) 자바 가상 머신의 약자로 자바 프로그램 런타임 환경을 제공하는 소프트웨어이다. 자바 애플리케이션을 클래스 로더를 통해 읽어 들여, 자바 API와 함께 실행하는 역할을 한다. Java와 OS 사이에서 중개자 역할을 수행해 Java가 OS에 구애받지 않고 실행되도록 한다. 또한, Garbage Collection을 통해 프로그램 메모리 관리와 최적화를 수행한다.  JVM의 구조 Class Loader클래스 로더는 class 파일을 JVM의 메모리 영역인 Runtime Data Area로 로딩, 검증, static 변수를 초기화하는 등의 역할을 한다. Execution Engine클래스 코드는 기계가 바로 수행할 수 있는 형태로 기술되어 있지 않다...

JVM 2023.12.19

Spring WebSocket & STOMP

웹소켓 웹소켓은 텍스트와 바이너리 타입의 메시지를 양방향으로 주고받을 수 있는 프로토콜이다. 게임, 채팅, 실시간 주식 거래 사이트 등 실시간성을 보장하는 서비스에서 사용된다. HTTP에서도 실시간성을 보장하는 기법이 존재한다. (Polling, Long Polling, Streaming) 웹소켓을 지원하지 않는 브라우저에서는 SockJS, Socket.io를 사용하여 HTTP의 다른 기법을 대신 사용하여 웹소켓을 사용하는 거처럼 보이게 할 수 있다. HTTP vs 웹소켓 HTTP 웹소켓 비 연결성 매번 연결 맺고 끊는 과정의 비용 (매 요청마다 수많은 헤더들을 만들어서 보내야 한다) 요청 - 응답 구조 연결 지향 한번 연결 맺은 뒤 유지 양방향 통신 첫 연결은 HTTP를 사용한다 설정 @Configur..

JVM/SpringMVC 2023.12.15

코틀린 문법정리

nullSafe Call과 Elvis 연산자nullable 타입을 다룰 때 사용된다.val str: String? = "ABC"var length;length = str.length // 불가능length = str?.length // 가능length = str?.length ?: 0 // null이 아니면 길이 null이면 0early return에도 사용할 수 있다.fun calculate(number: Long?): Long{ number ?: return 0 // 로직}단언 연산자nullable 타입이지만 개발자가 null이 아님을 확신할 때 사용된다.val nullableValue: String? = "Hello, Kotlin"val nonNullValue: String = ..

JVM/Kotlin 2023.12.13

PostgreSQL Array 타입 JPA 연동

Hibernate는 기본적으로 PostgreSQL의 Array 데이터 타입을 지원해 주지 않는다. vladmihalcea 라이브러리를 추가 implementation("com.vladmihalcea:hibernate-types-60:2.20.0") type-60은 하이버네이트 6.0 이상부터 지원하는 라이브러리다. 각자 상황의 맞는 버전을 추가하면 된다. 스키마 create table job_offer ( job_offer_id bigserial primary key, days varchar(50)[] not null, ); 엔티티 @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter public class JobOffer ext..

JVM/JPA 2023.11.12

Spring 3.0 이상 Querydsl 설정

// 1. 플러그인 섹션 plugins { // Spring Boot 플러그인: Spring Boot 프로젝트를 설정하여 자동 구성을 제공 id("org.springframework.boot") version "3.1.0" // Spring Dependency Management 플러그인: 종속성 버전을 효과적으로 관리하여 일괄적으로 업데이트 id("io.spring.dependency-management") version "1.1.0" // Kotlin JVM 플러그인: Kotlin을 JVM에서 실행 가능하도록 하는 플러그인 kotlin("jvm") version "1.8.21" // Kotlin Spring 플러그인: Kotlin에서 Spring Framework를 쉽게 사용할 수 있도록 지원 kot..

JVM/Kotlin 2023.09.27