본문 바로가기

작업 목록5

Java21에 나온 ZGC-Generation적용해보기 요즘 자바최적화란 서적을 읽고 있다.가비지컬렉터에 대한 얘기가 나오는데, Java21에서 Generation-ZGC가 나오게 되면서 많은 개선이 있었으니 기본 G1GC에서고성능 실시간 처리, 비동기처리, 로그 수집등의 경우 ZGC를 고려해보는 것도 좋지않나해서 마침 지금 만들고 있는 프로젝트에 적용해볼까한다. 지금 적용해보는 프로젝트는 외부와 통신도 많고 WebFlux로 구성되다보니 비동기 처리할 일도 많다. 또한 소켓연결을 통한 실시간처리도 필요한 부분도 있어서 활용하면 좋겠다 생각했다.적용법간단하다. JVM옵션에-XX:+UseZGC -XX:+ZGenerational -Xlog:gc이렇게 적어주면 된다. 다만 -Xlog:gc는 내가 실행되었는지 여부를 파악하기 위해 추가한 것이므로 필요없으면 적지 않아.. 2025. 6. 18.
[Spring-Kafka] Consumer 역직렬화 동적 구성 개요이번에 회사에서 Kafka구축 및 Spring Boot와 통합을 진행하면서 의문이 든게 있다.Kafka Consumer에서 역직렬화를 수행할 때 객체를 자동으로 변환해줄 수 없는가?에 대한 의문이였다.무슨 의미인지 먼저 살펴보겠다.문제 상황Spring-Boot-Kafka 공식 샘플 예제를 받아오면 다음과 같이 코드가 구성되어있다.public record Foo2(String foo) {}public record Bar2(String bar) {}데이터를 주고받을 Record(공식 문서에서는 Class)를 정의해준다.그리고 예제용으로 데이터를 주고받는걸 손쉽게 하기위해 컨트롤러를 작성해준다.@RestController@RequiredArgsConstructorpublic class ProducerCon.. 2025. 4. 11.
[grpc] grpcurl에서 Failed to list services: server does not support the reflection API 라는 에러가 뜰 때 개요GRPC를 테스트하다가 발생한 문제환경window테스트도구: grpcurl해결방법grpcurl의 버전이 낮아서 발생한 문제1.8.3버전을 1.9.3 최신버전으로 업그레이드하니 발생하지 않음.   내 mac에서는 되길래 OS단의 문제인줄 알았다. 혹시 몰라서 mac의 grpcurl버전과 비교해보니 버전이 상이하여 업그레이드 해준 뒤로는 발생하지 않았다. https://github.com/fullstorydev/grpcurl/releases Releases · fullstorydev/grpcurlLike cURL, but for gRPC: Command-line tool for interacting with gRPC servers - fullstorydev/grpcurlgithub.com 해당 주소에서 .. 2025. 4. 3.
JPA, Spring MVC를 이용한 동적 스키마 변경 개요회사에서 신규 프로젝트에 대한 환경셋팅중에 선임님이 이런 질문을 하셨다."JPA를 쓸건데, 동적으로 스키마 변경이 불가능한걸로 알고 있어요. JPA를 빼야할까요?"우리는 보안적인 이유로 고객사마다 스키마를 다르게 쓰고 있다.기존 프로젝트에서는 JPA를쓰지않다보니 요청마다 동적으로 스키마를 교체하여 쿼리를 보냈었다.JPA를 쓰면 동적으로 스키마를 교체 못하는가? 라는 의문을 나한테 주시고 휴가를 가셨다.먼저, 2가지 방법을 찾아서 진행했었다.첫 번째 방법은 요청 들어올때 Filter부에서 고객사에 대한 정보를 파싱해서 해당 정보를 가지고 connection 정보를 생성하여 연결하고 끊는 방식이다. Spring MVC의 Thread Per Request 방식을 이용해 동시성 문제를 해결하기도 하였다.두 .. 2025. 2. 21.
Git Hook을 이용한 CD구축(With Dooray Messenger) 작업 후기 개요지금 있는 팀이 좀 특이한 구조를 가지고 있습니다.특정 부분의 개발 및 유지 보수는 외부 업체에 맡기고 있는데, 외부 업체는 실제 운영서버에 접근을 못합니다. 개발환경 -> 테스트 환경 -> 운영환경 중 개발환경에서만 유지보수가 가능한 상황입니다.이런 상황이기에 테스트환경에 빌드, 배포는 Jenkins와 Git hook을 통해 자동화처리를 해놨었습니다. 여기서 문제는 팀의 Git Flow전략이 달라짐에 따라 테스트환경 배포가 좀 더 빈번하게 일어났는데, 누가 배포했는지, 배포는 잘 되었는지는 팀 내에서 확인이 가능하지만 외부업체에서 이를 확인할 수 없었습니다.예를 들어서 제가 배포하고 3분 뒤에 외부업체가 자동배포를 시작하게되면 Jenkins 권한이 없는 외부업체는 배포가 완료되고 자기것이 배포되었는.. 2025. 2. 12.