java 21에서 가장 주목해야되는 기능은 virtual thread인 것 같습니다. 우리가 만들었던 Thread는 Platform Thread이고 이 Thread는 OS Thread wrapper로 구현되어 있고 전체 수명동안 해당 OS Thread를 사용하게 됩니다. 아래 설명과 같이 Platform Thread는 비쌉니다. 보통 1MB 메모리를 사용한다고 들은 거 같은데 여긴 2MB로 가정하네요 그래서 전체 이용가능한 개수는 최대 OS thread 개수로 제한될 수 밖에 없고 large thread stack과 다른 리소스들을 가지고 있어서 많은 메모리를 사용하게 됩니다. Virtual Thread는 경량 쓰레드여서 높은 처리량을 가지는 동시성 애플리케이션에 적합합니다. 경량 쓰레드라고 하는 이유는..
신규 프로젝트에 버전을 2.7에서 3.x로 변경했습니다. 한번 오픈하고 서비스되기 시작하면 큰 변화는 꿈도 꿀 수 없죠 리더가 대단한 모험가가 아니라면 대부분 안정되게 가려고 합니다. 위에서 상위 버전을 쓴다고 알아주지도 않는데 괜한 모험을 할 이유가 없겠죠 우선 spring boot 3.0으로 가기 위해서 아래 문서를 참고하면 좋습니다. https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0 Preparing for Spring Boot 3.0 Spring Boot 2.0 was the first release in the 2.x line and was published on Feburary 28th 2018. We’ve just release..
오류 메시지 Invalid or missing build flavor [oss] elastic stack 7.10.1 인데 client 7.17.10을 사용했더니 발생함. 같은 버전으로 맞추니 해결됨. 버전이 올라가면서 패키지 구조가 바뀌는 것들이 있는데 맞춰줌. client 6.11 대를 사용하다가 7.10 대에 elasticsearch를 사용했더니 일부 문제가 있었음. index type이 depreacted 되어서 모두 _doc을 사용함. custom type field를 정의해서 유사하게 사용할 수 있음. https://www.elastic.co/guide/en/elasticsearch/reference/7.17/removal-of-types.html Removal of mapping types ..
mysql 8.0을 설치하고 default character set도 맞춰줬는데 datagrip에서 조회를 하면 아래와 같이 보인다. 인코딩이 깨져서 emoji가 datagrip에서 ??로 보임....실제로는 정상적으로 들어감. show variables like'char%'; character_set_client,utf8mb4 character_set_connection,utf8mb4 character_set_database,utf8mb4 character_set_filesystem,binary character_set_results,utf8mb3 character_set_server,utf8mb4 character_set_system,utf8mb3 아래 명령어를 수행하니 emoji도 잘 보이고 cha..
gradle 6.9 -> 8 버전 업그레이드 문제 해결 모음입니다. 문제 Using insecure protocols with repositories, without explicit opt-in, is unsupported. 해결 repositories { mavenCentral() maven { url "http://nexus/maven2" allowInsecureProtocol = true } } 문제 subproject로 이루어진 프로젝트인 경우 compile을 알맞게 api 또는 implementation으로 변경해야함. 해결 api 'com.github.ben-manes.caffeine:caffeine:3.0.5' 문제 Could not find method api() for arguments ..
점점 연차가 높아질수록 면접 때 소프트웨어 아키텍처나 시스템 디자인 설계 등과 관련된 질문이 포함된다. 채팅 및 알림 시스템 설계 등등 정말 도움되는 설계 부분이 많이 나온다. 두꺼운 책이 아닌데도 알찬 내용으로 가득하다. 안정해시설계는 아래 cassandra consistent hashing과 같이 보면 도움이 많이 된다. https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/architecture/archDataDistributeHashing.html Consistent hashing Consistent hashing allows distribution of data across a cluster to minimize reorganization when..
오늘 redis scan 후 delete하는 bash shell 실행 중에 아래와 같은 오류를 봤습니다. CROSSSLOT Keys in request don't hash to the same slot scan 후에 여러 키를 삭제하려고 했더니 같은 slot에 있지 않다고 하네요 bash shell을 수정해서 key 각각 요청하도록 변경했습니다. #!/bin/bash if [ $# -ne 3 ] then echo "Delete keys from Redis matching a pattern using SCAN & DEL" echo "Usage: $0 " exit 1 fi cursor=-1 keys="" while [ $cursor -ne 0 ]; do if [ $cursor -eq -1 ] then cur..
2021년 9월에 java 17 LTS(Long-Term Support)가 나왔고 23년 9월에 java 21 LTS가 나온다. 아래 블로그와 같이 java 17이 발표되면서 LTS 주기가 2년으로 변경됐다. https://blogs.oracle.com/javakr/post/jdk-17 JDK 17 발표 및 새로운 변화 새로운 LTS 버전인 JDK 17이 발표가 되었습니다. 지난 LTS 버전인 11 이후에 3년만에 발표된 LTS 릴리스이고, LTS 릴리스로써 최소 8년 동안 성능, 안정성 및 보안 업데이트가 예정되어 있는 중요한 릴 blogs.oracle.com JDK 릴리즈는 아래 사이트에서 확인가능하다. https://www.java.com/releases/ JDK Releases The releas..
docker desktop 유료화에 대한 대안으로 많은 방법들이 있습니다. https://podman-desktop.io/ Podman Desktop - Containers and Kubernetes | Podman Desktop Podman Desktop - An open source graphical tool for developing on containers and Kubernetes podman-desktop.io https://github.com/abiosoft/colima GitHub - abiosoft/colima: Container runtimes on macOS (and Linux) with minimal setup Container runtimes on macOS (and Linux) ..
코딩 인터뷰 면접 질문에 대해서 정리해놓은 github 문서들이 있네요 github에서 검색하시면 여러가지 자료들이 많이 나옵니다. 역시 github..... https://github.com/jwasham/coding-interview-university GitHub - jwasham/coding-interview-university: A complete computer science study plan to become a software engineer. A complete computer science study plan to become a software engineer. - GitHub - jwasham/coding-interview-university: A complete computer ..
우선 저는 자바 백엔드 개발자로 올해 벌써 18년차입니다. 사회초년생일 땐 대표님과 단둘이 오피스텔에서도 근무하는 회사에 다녔었고, 공공기관, 대기업에 SI 형태로 파견 나가면서 근무하는 중소기업에 오래 머물렀고요 2015년부터는 직원 많은 회사에 다니면서 판교 생활을 했고 아직도 판교에서 근무하고 있습니다. 제가 개발했던 몇몇 프로젝트들 중에 운영되는 것들이 있는데(대부분은 공공기관, 대기업 내부 사이트이거나 폐업으로 서비스 종료 ㅠㅠ) 소개를 하자면 TV포인트 개발에 초기 멤버로 API 및 웹사이트를 만들었고요 시럽(구 스마트월렛)이라는 전자지갑 앱의 백엔드 API 개발, 모바일웹 개발도 했었습니다. 엔씨소프트에서 퍼플이라는 크로스플랫폼을 만들기 위해서 엄청난 야근으로 고생도 많이 했고요 고생을 많이..
spring application과 vue를 같은 프로젝트로 배포할 때 vue history mode로 설정하고 spring application은 아래와 같이 설정해줘야됨. @Component @Order(-2) public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler { public GlobalErrorWebExceptionHandler(ErrorAttributes errorAttributes, WebProperties.Resources resources, ApplicationContext applicationContext , ServerCodecConfigurer serverCodecConfigurer) ..
kafka consumer rebalance 란? 토픽의 파티션이 다른 consumer에게로 할당될 때 이것을 consumer rebalance라고 한다. 다음과 같은 상황에서 발생한다. consumer가 그룹을 떠날 때(leave) group에 다시 들어올 때(join) topic에 파티션이 추가될 때 기본적으로 eager rebalancing이 이뤄지면 아래와 같이 전체 consumer가 할당 받은 partition을 revoke하고 다시 할당을 받는다 이때 모든 consumer는 메시지 consuming을 중지하면서 이 기간 동안 모든 처리가 멈춘다. 이걸 stop the world 라고 부른다. 기본적으로 consumer의 partition.assignment.strategy 설정을 하지 않으면 ..
kafka 기초 학습을 위해서 우선 아래 사이트에서 kafka 설치를 한다. https://kafka.apache.org/quickstart Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 위에 예제 중에 consumer, publisher sh로 학습을 해도 되지만 이미 많은 example 들이 있는 github repository 들이 있다. 아래 kafka github에 있는 examples 들을 받아서 내부 설정등을 바꿔가며 확인한다. https://github.com/apache/kafka.git GitHub - apache/kafka: Mirror of Apache Kafka Mirror of Apach..
spring data embedded mongodb 테스트 중에 아래와 같은 오류 발생. embedded mongodb 실행 중 Could not start process 아래 패키지의 Version enum에 정의되지 않은 버전을 사용하는 경우 발생함. de.flapdoodle.embed.mongo.distribution Version enum에 정의 되어 있는 버전을 사용하도록 설정을 변경한다. V4_2_13("4.2.13"), V4_2_22("4.2.22"), spring: mongodb: embedded: version: 4.2.13
DocWriteResponse 에 type이 _doc으로 안 들어가고 null이 되어서 NPE가 나는 현상 아래처럼 호환되는 기본 헤더를 설정해야된다. HttpHeaders defaultHeaders = new HttpHeaders(); defaultHeaders.add("Accept", "application/vnd.elasticsearch+json;compatible-with=7"); defaultHeaders.add("Content-Type", "application/vnd.elasticsearch+json;compatible-with=7"); ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo("l..
error 확인을 위해서 mockMvc에 ControllerAdvice까지 설정했으나 오류가 발생함. .setControllerAdvice(new CustomControllerAdvice(tracer)) org.springframework.web.util.NestedServletException: Request processing failed CustomControllerAdvice에서 NPE가 발생했음. 해당 부분 NPE 발생하지 않도록 수정함.