| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 보조스트림
- gradle
- 토비의 스프링
- Real MySQL
- OS
- 이스티오
- 백준
- JPA
- redis
- Java
- Kotlin
- 자바 ORM 표준 JPA 프로그래밍
- 토비의 스프링 정리
- 자바
- 스프링
- mysql
- jvm
- thread
- IntellJ
- list
- K8s
- Stream
- MSA
- 스트림
- Stack
- spring
- GC
- 쿠버네티스
- SpringBoot
- Collection
- Today
- Total
목록Java (60)
인생을 코딩하다.
목차1. 배경2. 테스트 환경3. 테스트 결과4. 마치며..1. 배경최근 차세대 마이그레이션을 진행하는 업무를 맡아 수행하게 되었습니다. 이번 마이그레이션에서는 지금까지의 JDK 버전 흐름과 지원 현황을 종합적으로 검토한 결과, 여러 기술적·운영상의 이유로 JDK 25를 도입하는 것이 가장 적합하다고 판단하여 이를 채택하였습니다. JDK 21부터 정식으로 도입된 Virtual Thread는 동기식 코드 스타일을 유지하면서도 JVM 경량 스레드를 사용하여 적은 리소스로도 높은 동시성을 효율적으로 처리할 수 있는 실행 모델을 제공합니다. 저는 이러한 특징들로 인해 Virtual Thread를 적극적으로 도입하여 아래와 같은 장점들을 경험할 수 있었습니다.Spring MVC 기반 동기·블로킹 서버의 스레드 풀..
목차1. 실험을 하게 된 배경2. 왜 JMH를 사용했는가3. 테스트 환경4. 결과 및 요약 해석5. 정리6. 왜 Jackson3이 더 빠를까?1. 실험을 하게 된 배경최근 차세대 마이그레이션을 진행하는 업무를 맡아 수행하게 되었습니다. 이번 마이그레이션에서는 지금까지의 JDK 버전 흐름과 지원 현황을 종합적으로 검토한 결과, 여러 기술적·운영상의 이유로 JDK 25를 도입하는 것이 가장 적합하다고 판단하여 이를 채택하였습니다. JDK 25의 주요 변화 중 하나는 Jackson 메이저 버전이 Jackson 2에서 Jackson 3으로 전환되었다는 점입니다. Jackson 3로의 전환 배경과 상세한 변경 사항에 대해서는 아래의 공식 문서와 커뮤니티 자료에 잘 정리되어 있어, 본 글에서는 해당 내용을 깊게 다..
ColpletableFuture 2014년에 발표된 java8에소 처음 도입 비동기 프로그래밍 지원 Lambda, Metho reference 등 java 8의 새로운 기능 지원 Method reference :: 연산자를 이용해서 함수에 대한 참조를 간결하게 표현 method reference statuc method reference instance method reference constructor method reference ColpletableFuture 클래스 CompletableFuture Future CompletionStage 비동기적인 작업을 수행 비동기적인 작업을 수행 해당 작업이 오한료되면 결과를 반환하는 인터페이스 해당 작업이 완료되면 결과를 처리하거나 다른 CmpletionSt..
공부한 것 기록하기.. Blocking의 종류 blocking은 thread가 오랜 시간 일을 하거나 대기하는 경우 발생 CPU-bound blocking: 오랜 시간 일을 한다. IO-bound blocking: 오랜 시간 대기한다. CPU-bound blocking thread가 대부분의 시간 CPU 점유 연산이 많은 경우 추가적인 코어를 투입 IO-bound blocking thread가 대부분의 시간을 대기 파일 일기/쓰기, netowrk 요청 처리, 요청 전달 등 IO-bound non-blocing 가능하다. Blocking의 전파 하나의 함수에서 여러 함수를 호출하기도 하고, 함수 호출은 중첩적으로 발생 callee는 caller가 되고 다시 다른 callee를 호출 blocking한 함수를..
공부한 것 기록하기 함수 호출 관점에서 동기와 비동기 함수형 인터페이스 함수형 프로그래밍을 지원하기 위해 java8 부터 도입 1개의 추상메서드를 갖고 있는 인터페이스 함수를 1급 객체로 사용할 수 있다. 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능 Function, Consumer, Suppier, Runnable등 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능 함수형 인터페이스는 호출한 쓰레드에서 실행된다. 두 모델의 차이점 A 모델 B 모델 main는 getResult의 결과에 관심이 있다. main은 getResult의 결과에 관심이 없다. main은 결과를 이용해서 다음 코드를 실행한다. getResult는 결과를 이용해서 함수형 인터페이스를 실행한다. 동기 비..
상수 풀(String Pool)은 GC가 될까요? JVM 내부구조를 다시 보던 중에, 문득 "상수 풀은 GC가 될까?" 라는 생각이 떠올랐습니다. 자바에서 보통 static은 GC가 되지 않는데, 상수풀도 GC가 안되려나? 자바에서 보통 string 객체의 사용량이 가장 큰데 상수풀이 GC가 되지 않는다면 메모리에 큰 이슈가 발생하지 않을까? 큰 이슈가 발생할 수도 있으니, JVM에서 상수풀이 GC가 되도록 최적화하는 옵션을 설정해두지 않았을까? 하는 생각들을 했었습니다. https://www.baeldung.com/java-string-pool에서 답을 얻을 수 있었습니다. Before Java 7, the JVM placed the Java String Pool in the PermGen space,..
스레드 안전성이란 무엇일까요? 여러 스레드가 클래스에 접근할 때, 실행 환경이 해당 스레드들의 실행을 어떻게 스케줄하든 어디에 끼워 넣든, 호출하는 쪼에서 추가적인 동기화나 다른 조율 없이도 정확하게 동작하면 해당 클래스는 스레드 안전(Thread-Safe) 하다고 말할 수 있습니다. 간단히 말해서 여러 스레드가 클래스에 접근할 때 계속 정확하게 동작하면 해당 클레스는 스레드에 안전하다고 말할 수 있습니다. 특히, 멀티 스레드를 사용할때 스레드 안전성을 잘 고려하여 설계해야합니다. 객체 지향 프로그램에서 멀티 스레드를 잘 활용하면 훨신 좋은 성능의 프로그램을 설계할 수 있지만, 멀티 스레드를 활용할떄는 주의할 점이 있습니다. 여러 스레드가 변경할 수 있는 하나의 상태 변수를 적절한 동기화 없이 접근하면 ..
프로그램을 제대로 돌아가게 작성하는 일은 어렵습니다. 하지만 여러 작업을 동시에 실행하는 프로그램을 제대로 돌아가게하는 것은 더 어렵습니다. 다시 말해 여러 작업을 동시에 실행하는 작업은 순차적으로 실행하는 프로그램보다 오류 발생 가능성이 높습니다. 그럼에도 우리는 왜 작업을 동시에 실행하는 문제에 신경을 써야 할까요? 스레드는 자바 언에에서 피할 수 없는 특성이고 복잡한 비동기 코드를 더 단순한 순차적 코드로 바꿔 복잡한 시스템을 단순하게 개발하 수 있게 해주기 떄문입니다. 게다가 스레드는 멀티프로세서 시스템의 능력을 최대한 끌어낼 수 있는 가장 쉬운 방법입니다. 프로세서 개수가 늘어날수록 여러 작업을 동시에 실행하는 일은 더욱 중요합니다. 스레드는 각기 별도의 프로그램 카운터, 스택 , 지역 변수를 ..