본문 바로가기

IT

gRPC란? RPC, gRPC, REST API gRPC와 REST는 API 설계에 사용되는 2가지 방법이다. API는 정의 및 프로토콜 세트를 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘인데, gRPC에서는 한 구성 요소(해당 클라이언트)가 다른 소프트웨어 구성 요소(해당 서버)의 특정 함수를 직접 또는 간접적으로 호출하는 반면 REST에서는 함수를 직접적으로 호출하는 대신 클라이언트가 서버의 데이터를 요청하거나 업데이트를 요청한다. 해당 정의가 무슨 뜻인지 이해됐다면 해당 포스팅을 넘어가도 좋지만 개념이 조금이라도 흔들린다면 이 글을 읽고 도움이 되길 바란다.  RPC(Google Remote Procedure Call)란 네트워크로 연결된 서버 상의 프로시저(함수, 메서드 등)를 원격으로 호출할 수 있는 기능이다. 원격.. 더보기
싱글톤 유의해서 쓰자...(Feat Freemarker Configuration), Lock 리소스를 효율적으로 사용하겠다는 섣부른 판단에 객체를 스프링 빈으로 등록해 싱글톤으로 사용할 경우 필자와 같은 참사가 이루어질 수 있으니 이 글을 읽는다면 도움이 되기를 바란다. 물론 잘 알고 쓰면 싱글톤이 안티패턴이라는 불리는 것이 와닿지 않을 것이다. 기술스펙 (Springboot2.7, Freemarker2.3) 문제는 다음과 같았다.DB에 Freemarker로 작성된 A라는 내용이 들어가야하는 상황인데 아주 간혈적으로, 데이터 상 거의 1/50000의 확률로 B라는 내용이 들어갔다.  비즈니스를 바탕으로 소스를 분석하고 문제가 될 만한 코드를 찾기는 쉽지 않았다. 1/50000로 생각하다보니 무엇보다 상황을 재현하는 것이 불가능한 것처럼 느껴졌다.  비슷한 예제코드를 보자.import freema.. 더보기
@Async와 ThreadPoolTaskExecutor @Async와 ThreadPoolTaskExecutor는 스프링 프레임워크에서 비동기 처리를 위해 사용되는 중요한 요소이다. 성능 개선의 예제로 비동기 작업의 예시를 많이 봤을 것이다. 알아도 손해볼 거 없는 내용이니 간단한 예제 코드를 학습해보자. @Configuration@EnableAsyncpublic class AsyncConfig { @Bean(name = "threadPoolTaskExecutor") public ThreadPoolTaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCoreP.. 더보기
[Java] CompletableFuture의 이해와 활용 Java5에서 추가된 Future는 비동기 작업의 결과를 나타내는 인터페이스다. Future는 작업이 아직 완료되지 않았더라도 결과에 접근할 수 있는 방법을 제공한다. 예제 코드import java.util.concurrent.*;public class FutureExample { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executor = Executors.newSingleThreadExecutor(); // 비동기 작업 생성 Future future = executor.submit(() -> { .. 더보기
Gitlab-Runner .m2 Caching https://sh970901.tistory.com/136 gitlab runner docker in docker 구조대표적인 CICD(Continuous Integration/Continuous Delivery) 도구들 (gitlab runner, github action, jenkins 등) 이 있지만 이 글에서는 gitlab runner를 사용해 구축하는 과정에서 겪었던 이슈와 해결, 궁금증 대한 정리를sh970901.tistory.com상단 포스팅에서 도커 환경의 CI 구성에 대해 간략하게 설명했으니 참고하면 좋을 듯 하다. 이번 포스팅에서는 어떻게 Host와 Gitlab-Runner, 그리고 Runner의 executor Container들이 .m2를 캐싱시킬 것인가에 대해서 작성하려고 한다. .. 더보기
ECS + Fargate EFK Log 수집 (Feat Fluentbit, Opensearch) ECS + Fargate 구축 과정에서 Log 를 보기 위해서는 아주아주 번거롭다.Private Subnet에 구축된 서버리스 환경에 컨테이너에 접근하기 위해 EC2에 접근하고 컨테이너에 접근하여야하는데, 이마저도 ECS에 execute command 설정이 필요하다. 따라서 외부에서 로그를 편하게 볼 수 있는 방법에 대해 고민에 빠졌다. Log Appender를 구축하여 클러스터 외부에 Fluent를 구축하여 한곳에서 로그를 받아 처리할까 했지만 AWS에서는 FireLens라는 기능을 출시했다하여 사용해본 과정과 후기를 적어보려고 한다. Fluentd: 플러그인 구조를 갖고 있는 로그 라우팅, 정제, 변환, 수집을 담당하는 툴Fluent Bit: Fluentd의 경량화 버전 AWS FireLens는 A.. 더보기
gitlab runner docker in docker 구조 대표적인 CICD(Continuous Integration/Continuous Delivery) 도구들 (gitlab runner, github action, jenkins 등) 이 있지만 이 글에서는 gitlab runner를  사용해 구축하는 과정에서 겪었던 이슈와 해결, 궁금증 대한 정리를 담아보려고 한다.   개발관련된 툴들을 docker compose로 관리하기 위해 호스트는 하나의 EC2에서 진행하였고 따라서 gitlab runner를 컨테이너 환경에서 실행하였다. 기본적인 구축 셋은 다른 사람들의 예시가 많으니 참고해도 좋고 문서에 내용을 그대로 진행해도 좋다.https://docs.gitlab.com/runner/install/docker.html  Run GitLab Runner in a.. 더보기
Valve(ErrorReportVavle)를 이용한 내장 톰캣 스프링 톰캣 버전 감추기 이슈는 간단했지만 해결책은 결국 돌고 돌았던 내용을 정리해보려고 한다. (최종 코드는 맨 하단을 참고)일반적인 url path에 대한 400이나 404 등의 에러 핸들링은 성공적으로 진행되었고 문제가 없었다. ErrorController, @ExceptionHandler을 적절히 사용하여 커스텀하게 에러를 핸들링하고 있던 도중 url에 특수문자가 들어간 경우 톰캣의 버전이 노출된다는 요청이 있었고 보안상 막을 필요가 있었다. 첫번째로 의문이 들었다. 왜 내가 만든 ErrorController를 타지 않는 것이지? 디버깅을 해볼 필요도 없었다. 요청에 대한 트레이싱 정보가 아예 애플리케이션에 전달 조차 되지 않았다. 내가 생각한 것보다 더 앞단에서 막는 것 같다는 생각이 들었고 이것저것 찾아보기 시작했다... 더보기

728x90