- spring boot application startup tracking알쓸개잡spring boot 애플리케이션을 시작하는 동안 SpringApplication과 ApplicationContext는 애플리케이션 라이프사이클, 빈 라이프사이클, 애플리케이션 이벤트 처리와 관련된 많은 작업을 수행한다. Spring은 ApplicationStartup을 통해서 StartupStep 객체를 사용하여 애플리케이션 시작 과정을 추적할 수 있다. 추적 데이터는 프로파일링 목적으로 수집하거나 애플리케이션 시작 프로세스를 이해하는데 도움이 될 수 있다. spring boot 애플리케이션 시작 과정에 대한 추적 데이터를 얻는 방법에 대해서 기록한다. Spring Boot 2.4부터 ApplicationStartup 메트릭을 생성할 수 있게 되었다. 해당 메트릭에는 시작 과정에서 생성되는 각각의 이벤..
- 2023-09-17 00:24:36
- Spring boot embedded server 의 default 포트 변경알쓸개잡기본적으로 Spring Boot 애플리케이션은 임베디드 톰캣 서버의 포트 8080으로 동작한다. Spring Boot의 기본 임베디드 서버 포트를 다른 포트로 변경할 수 있는 몇 가지 방법에 대해서 기록한다. 포트 충돌 방지를 위해서 임의의 사용 가능한 포트를 사용하려면 server.port=0으로 설정한다. 방법 1) properties(. yml) 파일에서 기본 포트 변경 Spring Boot에서 기본적으로 참조하는 application.yml(.properties) 파일 설정으로 기본 포트를 변경할 수 있다. # application.properties server.port=9090 # application.yml server: port:9090 방법 2) 코드상에서 기본 포트 변경 코드상에서는 기..
- 2023-09-16 14:19:40
- Java - 람다 표현식(lambda expression) - 4개의 주요 functional interface알쓸개잡Java8부터 도입된 람다 표현식과 관련하여 새로운 패키지인 java.util.function 이 도입되었다. 해당 패키지 안에는 대부분 함수형 인터페이스가 정의되어 있으며 특히 컬렉션 프레임워크와 스트림 API와 함께 많이 쓰인다. 그 말은 컬렉션 프레임워크와 스트림 API와 함께 람다 표현식도 많이 쓰인다는 것과 동일하겠다. JDK8부터 기본적으로 제공되는 java.util.function 패키지의 기본 함수형 인터페이스의 Supplier, Consumer, Function, Predicate에 대해서 기록한다. Supplier Supplier 인터페이스는 파라미터가 없는 T 타입의 객체를 리턴하는 get() 추상 메소드를 가지는 함수형 인터페이스이다. @FunctionalInterface publi..
- 2023-09-15 22:50:34
- Java - 람다 표현식 (lambda expression) 개요알쓸개잡Java SE 8 부터 람다 표현식 이라는 개념이 도입되었다. 람다 표현식은 Functional Interface 를 구현하는 구현체라고 보면 좋을 것 같다. 혹은 Functional Interface의 익명 클래스 인스턴스를 생성하는 간단한 방법이라고 봐도 좋을 것 같다.이번 포스팅에서는 람다 표현식에 대한 소개를 하고자 한다. 람다 표현식 작성 세 단계람다 표현식을 작성할 때는 아래의 세 단계에 따라 작성하면 도움이 될 것 같다.작성하려는 람다 표현식의 유형 식별하기 (Functional Interface)구현할 올바른 메소드 찾기메소드 구현하기람다 표현식을 작성할 때 고려할 위 3가지 단계에 따라서 차근 차근 알아보자. Functional Interface (함수형 인터페이스)람다 표현식의 유형에는..
- 2023-09-10 23:19:29
- Spring에서 Jasypt를 이용하여 설정 정보 암호화 하기알쓸개잡Spring의 application.yml(.properties)과 같은 설정 정보 파일에는 데이터 베이스 연결 정보나 API 키, 비밀번호와 같은 민감한 정보를 설정해야 하는 경우가 있다. 이러한 민감한 정보를 평문으로 설정하게 되면 간혹 정보가 노출되었을 때 심각한 문제를 초래 할 수 있다. Jasypt 라이브러리를 사용하여 어플리케이션의 설정 정보를 암호화하여 민감한 정보를 보호할 수 있다. 간단한 예제 코드와 함께 spring에서 Jasypt 라이브러리를 사용하는 방법에 대해서 기록한다. Jasypt for Spring boot Jasypt는 Spring boot 2.X 버전과 3.X 버전과 통합을 지원한다. 상세한 문서는 jasypt-spring-boot git을 참고하면 도움이 된다. 프로젝트..
- 2023-09-09 22:51:57
- Spring SSE (Server Sent Event) 사용 방법알쓸개잡SSE (Server Sent Event)는 웹 어플리케이션에서 실시간 업데이트를 제공하는 데 사용되는 웹 기술 중 하나이다. Spring에서는 Spring MVC에서 사용되는 SseEmitter 클래스를 제공하여 손쉽게 SSE 스트림을 생성하고 클라이언트에게 이벤트를 푸시할 수 있도록 한다. 이를 통해 클라이언트가 연결을 유지하면서 서버로부터 데이터를 지속적으로 수신할 수 있도록 한다. 이번 포스팅에서는 Spring에서 SSE를 사용하는 방법에 대해서 기록한다. SSE (Server Sent Event) 특징 서버 -> 클라이언트 단방향으로 이벤트를 스트리밍 할 수 있도록 대부분의 브라우저에서 채택한 사양 이벤트 데이터는 UTF-8로 인코딩된 텍스트 데이터 스트림 이벤트 데이터 형식은 줄 바꿈으로 구분..
- 2023-09-09 00:53:54
- Spring Boot GraalVM Native Image 빌드 하기알쓸개잡GraalVM 네이티브 이미지는 컴파일된 자바 애플리케이션을 미치 처리하여 생성할 수 있는 독립 실행형 실행 파일이다. 도커 이미지와 같은 이미지를 의미하는 것이 아니다. 네이티브 이미지는 일반적으로 메모리 사용 공간이 더 작고 JVM 이미지 보다 빠르게 시작할 수 있다는 장점이 있다. 컨테이너 이미지를 사용하여 배포하는 애플리케이션에 적합하며, 특히 서비스형 기능(FaaS) 플랫폼과 결합할 때 유용하다. GraalVM 네이티브 이미지는 완전한 플랫폼별 실행파일이다. 이번 포스팅에서는 Spring Boot 의 GraalVM 네이티브 이미지 빌드를 위해서 지원되는 사항에 대한 공식 문서를 정리하고자 한다. JVM 배포와 차이점 애플리케이션의 정적 분석은 메인 엔트리 포인트에서 빌드 시 수행된다. 네이티브 ..
- 2023-09-04 00:26:22
- SDKMAN - 개발 도구 손쉽게 관리하기알쓸개잡SDKMAN 은 Software Development Kit MANager 의 약자로써 유닉스 환경에서 여러 소프트웨어 개발 키트를 손쉽게 관리할 수 있는 CLI 도구이다. SDKMAN 설치와 사용법에 대해서 간단히 정리하고 가겠다. SDKMAN Install macOS, Linux 및 Windows(WSL) 과 같은 UNIX 환경에서 SDKMAN 설치는 매우 간단하다. BASH, ZSH 쉘 모두 호환이 된다. $>curl -s "https://get.sdkman.io" | bash $>source "$HOME/.sdkman/bin/sdkman-init.sh" 기본적으로 $HOME 경로 하위의 .sdkman 디렉토리에 설치 된다. 설치 완료 후 bash 쉘을 사용하는 경우 $HOME/.bashrc 혹은 ..
- 2023-09-02 22:44:12
- spring boot resource 파일 access알쓸개잡spring boot 에서 resource 디렉토리에 있는 모든 파일은 빌드 시 application root 에 복사 됩니다. 이번 포스팅에서는 spring boot 에서 resource 파일을 access 하는 3가지 방법을 소개합니다. ResourceLoader ClassPathResource 생성자 @Value annotation 샘플 코드는 test 코드이며 test 디렉토리의 resource 에 있는 샘플 파일 경로는 아래 이미지와 같습니다. ResourceLoader Spring boot 에서 ResourceLoader 는 자동 주입됩니다. ResourceLoader를 통해서 resource 파일을 로딩 하는 경우에는 getResource() 메소드에 넘겨주는 파라미터에 prefix 를 붙여..
- 2023-08-27 18:16:09
- jdk pattern matching for switch알쓸개잡jdk 17 이전 릴리즈 에서는 switch 문의 선택자 표현식은 숫자, 문자열, Enum 상수로만 평가되었고 case 레이블은 상수만 지원을 하였습니다. jdk 17 릴리즈 부터는 switch 문의 선택자 표현식은 모든 타입이 될 수 있으면 case 레이블에는 패턴이 지원되도록 개선 되었습니다. 따라서 switch statement(문) 혹은 switch expression(표현식) 의 case 레이블에 pattern matching 을 적용할 수 있게 되었습니다. 이번 포스팅에서는 jdk pattern matching 을 swich 문과 표현식에 적용하는 방법을 기술합니다. jdk pattern matching for switch 이력 jdk 17 에서 preview 기능으로써 JEP 406 에서 제..
- 2023-08-26 18:24:52
- jdk pattern matching for instanceof알쓸개잡pattern matching 은 객체가 특정 구조를 가지고 있는지 테스트한 다음 일치하는 경우 해당 객체에서 데이터를 추출하는 작업을 포함합니다. 이번 포스팅에서는 instanceof 연사자에 pattern matching 을 적용 하는 방법에 대해서 기술합니다. jdk pattern matching jdk 14 버전에서 instanceof 연산자에 대한 pattern matching 기능이 JEP 305 를 통해 preview 기능으로 처음 제안됨 jdk 16 버전에서 instanceof 연산자에 대한 pattern matching 기능이 JEP 394 를 통해 정식 기능으로 릴리즈됨 jdk 17 버전에서 switch 표현식과 구문에 대한 pattern matching 기능이 JEP 406 을 통해 ..
- 2023-08-26 15:43:08
- macOS (silicon) minikube 설치하기알쓸개잡처음 kubernetes 를 접했을 때 어려운 부분은 실습 환경을 구성하는 일이다. minikube 는 로컬환경에서 kubernetes 를 실습할 수 있는 단일 클러스터 환경을 구성할 수 있는 도구입니다. 이번 포스팅에서는 macOS (silicon) 환경에서 minikube 를 설치하는 방법에 대해서 기록합니다. 사전조건 최소 2 CPU 최소 2GB 메모리 최소 20GB 디스크 공간 인터넷 환경 Docker, QEMU, KVM, VirtualBox, VMWare 와 같은 컨테이너 혹은 가상머신 관리 도구 homebrew 포스팅 작성 시점의 kubernetes 최신 버전은 1.28.0 입니다. 설치 minikube 설치 방법에는 설치 패키지를 다운로드 하여 설치하는 방식과 homebrew 를 통해서 설치..
- 2023-08-24 23:44:37
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)