전체 글
-
스프링으로 시작하는 리액티브 프로그래밍 3 : WebFlux와 R2DBC책책책 책을 읽읍시다/프로그래밍 2024. 8. 9. 22:04
Chapter 15. Spring WebFlux 개요 Spring WebFlux는 리액티브 웹 애플리케이션 구현을 위해 Spring 5.0부터 지원하는 리액티브 웹 프레임워크다.Spring MVC의 기술 스택과 Spring WebFlux의 기술 스택을 비교해 보면서 Spring WebFlux의 기술과 Spring MVC 기술에 어떤 차이점이 있는지 간단하게 살펴보자.서버 : Spring MVC 프레임워크는 서블릿 기반의 프레임워크이기 때문에 아팣치 톰캣 같은 서블릿 컨테이너에서 Blocking I/O 방식으로 동작한다. 반면에 Spring WebFlux 프레임워크는 Non-Blocking I/O 방식으로 동작하는 Netty 등의 서버 엔진에서 동작한다.서버 API : Spring MVC 프레임워크는 서블..
-
스프링으로 시작하는 리액티브 프로그래밍 2 - Reactor 알아보기카테고리 없음 2024. 8. 6. 23:30
Chapter 05. Reactor 개요Reactor 공식 사이트(https://projectreactor.io/)에 들어가면 위와 같이 나온다. 줄이면 리액티브 스트림즈에 기반한 Non-Blocking JVM 어플리케이션이고, 자세히는 아래와 같다.Reactive Streams : Reactor는 리액티브 스트림즈(Reactive Streams) 사양을 구현한 리액티브 라이브러리이다. 다른 라이브러리로는 RxJava가 있다.Non-Blocking : Reactor는 JVM 위에서 실행되는 Non-Blocking 애플리케이션을 제작하기 위해 필요한 핵심 기술이다.Java's functional API : Reactor에서 Publisher와 Subscriber 간의 상호 작용은 Java의 함수형 프로그래..
-
스프링으로 시작하는 리액티브 프로그래밍 1 : 리액티브 입문과 Non-Blocking I/O책책책 책을 읽읍시다/프로그래밍 2024. 8. 5. 23:15
저자 : 황정식들어가며 리액티브 프로그래밍과 Spring WebFlux에 대해 부담없는 수준으로 알려주는 책이다. 개인적으로는 리액티브 프로그래밍에 대해 개념과 간단한 동작원리를 알 수 있어서 나쁘지 않았다. 다만, 이 한권으로 완벽히는 다 못가져갈 것 같고, 나도 다 읽기는 했지만 자바 ORM 표준 JPA 프로그래밍 때처럼 이 기술에 대해 어느정도 감을 잡은 것 같다라는 자신감은 얻지 못했다. Chapter 01. 리액티브 시스템과 리액티브 프로그래밍 'reactive'의 사전적 의미에는 '반응을 하는'이라는 뜻이 있는데, 어떤 이벤트나 상황이 발생했을 때, 반응을 해서 그에 따라 적절하게 행동하는 것을 의미한다. 리액티브 시스템에서 반응을 잘한다는 것은 클라이언트의 요청에 머뭇거리지 않고 반응을 잘해..
-
SCS(Spring Cloud Stream) 뽀개기2카테고리 없음 2024. 6. 5. 23:21
들어가며저번(https://baby-care-dev.tistory.com/69)에 간단한 Spring Cloud Stream(줄여서 SCS) 기반 애플리케이션을 만들어 보았다. 이번에는 SCS 전반적인 내용에 대해 살펴보자. 스프링 공식 문서(https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream.html#spring-cloud-stream-reference)를 참조하였다.프로그래밍 모델아래 그림이 SCS를 가장 간단하고 알기 쉽게 표현해준다고 생각한다. SCS의 핵심 기능은 메세지 브로커와의 연결을 추상화하여 비즈니스 로직에 집중할 수 있는 모델을 제공하는 것이다. JDBC나 JPA처럼 외부 시스..
-
SCS(Spring Cloud Stream) 뽀개기2 - 스프링 가이드 무작정 따라하기책책책 책을 읽읍시다/프로그래밍 2024. 5. 27. 23:52
들어가며 우리 팀에서 각 MSA간 REST API 콜로 강결합되어 있던 코드들을 이벤트 드리븐 방식으로 하나씩 떼어내는 작업을 했다. 이 중 가장 큰 문제는 failover 처리가 전혀되어 있지 않다는 점이다. 아직 베타 단계라 트래픽이 적어서 드러나는 문제는 없지만 잠재적으로 이슈들이 터져나올 딱 좋은 환경이다. 프로젝트 완성도가 높지 않다는 변명만 해대고 있는 중이다 ㅠㅠ 아무튼 그래서 최소한의 에러 처리는 해두기로 했다. 가장 쉬운 방법은 전 회사에서 처럼 컨슈머(kafka) 빈마다 try-catch로 감싸는 것이다. 여기에는 2가지 문제가 있다. 첫째, 컨슈머가 10개쯤은 되는데 다 try-catch로 감싸기 껄끄럽다. 센트리(Sentry)에도 알람을 보내야되고 ES 로그로 수집되게 로깅 작업도 ..
-
부하 테스트 - K6, Grafana, InfluxDB카테고리 없음 2024. 2. 18. 14:53
들어가며 저번 글 3개에서 간단한 REST API를 만들어 Docker로 컨테이너화 하고 Spring Actuator, Prometheus, Grafana로 모니터링 시스템 구축까지 해보았다. 그럼 이제 부하 테스트를 진행하여 어느 수준의 트래픽까지 받을 수 있을지 가늠해볼 수 있다. 3개 작업만 하면 된다. K6로 테스트 스크립트 작성하고, 부하테스트에 따른 지표 데이터를 수집하고, 이 지표를 Grafana로 확인할 수 있게 대시보드를 구성하는 것이다. 아래 그림과 같은 구조로, Grafana 블로그(https://grafana.com/blog/2023/04/11/how-to-visualize-load-testing-results/)에 잘 설명되어 있다. K6 설치하고 스크립트 만들기 K6가 뭔지부터 ..
-
모니터링 체계 구축 - Spring Actuator, Prometheus, Grafana개발 나누고 더하기/자바, 스프링 2024. 2. 15. 22:50
들어가며 이전 글에서 간단한 스프링부트 애플리케이션을 만들어 보고(https://baby-care-dev.tistory.com/65), 이걸 도커 이미지로 만드는 템플릿까지 작성(https://baby-care-dev.tistory.com/66)해 보았다. 이제 부하 테스트 시 지표를 분석(시각화)하는 틀만 만들면 된다. 사실 jMeter나 nGrinder 같은 도구를 사용하면 관련 지표를 시각화해서 보여주긴 하지만, 운영 환경에서와 동일한 지표를 보고 싶기 때문에 운영 환경과 동일한 모니터링 체계를 로컬에 구축하려는 것이다. 우리 회사에서는 Spring Actuator, Prometheus, Grafana로 모니터링하므로 똑같이 구성해주면 된다. 그럼 부하 테스트를 통해 나온 지표를 참고하여 트래픽이 ..
-
스프링 가이드 - docker build책책책 책을 읽읍시다/프로그래밍 2024. 2. 14. 22:51
들어가며 저번 글(https://baby-care-dev.tistory.com/65)에서는 간단한 RESTful API를 만들어보았다. 이번엔 이 프로젝트를 docker 이미지로 빌드해서 코드와 환경설정 등을 다른 사람들도 그대로 가져다 쓸 수 있게 해보자. 그래야 같은 설정으로 각기 다른 엔드포인트들을 테스트해볼 수 있으니까 말이다. 준비물 실행할 스프링부트 application 도커 엔진 : 편하게 Docker Desktop 스프링 가이드 : https://spring.io/guides/topicals/spring-boot-docker#a-better-dockerfile Dockerfile 이란? 이미지를 빌드하는 스크립트라고 보면 된다. 크게 아래와 같은 내용을 기술하며 자세한 내용은 공식 가이드(..