HTTP 200 OK

Memento mori & Carpe diem

CS 15

event storming이란?

정의DDD설계를 가속화 시킬 수 있는 설계 방법으로 이벤트 중심으로 이해관계자들이 모여 브레인스토밍 하는 워크샵이라 하여 이벤트 스토밍 이라고 부른다. 사용이유MSA를 구축하여 DDD 전략적 설계를 할 때 의존성을 줄이기 위해서는 아키텍처 영역에서 서비스 간 비동기 메시지기반 도메인 이벤트를 활용하는 것이 중요한데 이러한 도메인 이벤트를 통한 의존관계 식별 방법이 용이하지 않기 때문에 이를 한눈에 파악하기 위해 사용한다.  순서도메인 이벤트 식별 > 커맨드 식별 > 외부 시스템 도출 > 엑터 식별 > 흐름 설명 > 어그리게잇 식별 > 컨택스트 경계 정의 > 정책 식별 > 컨텍스트 매핑 도메인이벤트 도출시간의 흐름에 따라 비지니스의 상태 변경을 의미하는 도메인 이벤트를 도출한다. 참여자들은 이벤트 명을 작..

CS 2024.04.28

Decode, Encode, Parse, Stringify 개념과 사용

웹 개발을 하다보면 데이터 변환에 대한 경험을 반드시 마주하게 됩니다. Decode, Encode, Parse, Stringify 와 같이 데이터 형식을 변화시키는 것에 대한 정확한 개념과 언제 사용해야 하는지에 대해 작성해보려고 합니다. 평소 깊게 생각하지 않고 상황에 따라 사용해왔기에 개념 정리를 해보려고 합니다. 예시로 작성된 코드는 파이썬입니다. Decode 디코드는 변형된 형태로 저장된 데이터(인코딩 데이터)를 원래 상태로 되돌리는 것을 말하며 이를 복호화 라고 합니다. 예를 들어 텍스트를 Base64로 인코딩한 경우, 디코딩은 Base64로 인코딩된 텍스트를 다시 일반적인 ASCII나 유니코드 텍스트로 변환하는 것을 말합니다. import base64 encoded_text = 'SGVsbG8..

CS 2024.02.17

Nginx Proxy vs API Gateway(Part. 2)

Gateway와 Nginx Proxy의 차이는? API 프록시와 API 게이트웨이는 모두 기존 API 앞에 위치하여 게이트키퍼처럼 작동하지만 기능에는 큰 차이가 있습니다. 대부분의 경우 API 게이트웨이는 API 프록시가 수행하는 모든 작업과 그 이상을 수행할 수 있습니다. 기능 측면에서 볼 때 아래 다이어그램에 표시된 것처럼 API 프록시는 API 게이트웨이가 보유한 기능의 하위 집합만 있다고 합니다. 그렇다면 Proxy는 Gateway의 완벽한 하위호환일까요?? 개인적으로는 그 간의 설명들을 살펴보니 proxy 자체와 비슷하다기보다는 reverseProxy와 Gateway의 개념이 일치하는 것으로 생각됩니다. 하지만 reverse Proxy가 Gateway와 일치하는 개념이라고 보기에는 석연찮은 부분..

CS 2023.12.20

Nginx Proxy vs API Gateway(Part. 1)

웹 개발자들 대부분은 nginx를 사용해 봤거나 한번쯤은 들어보셨을 거라고 생각합니다. 요즘은 업무중에 K8S와 함께 사용해보니 nginx-ingress라는 개념도 나오고 api gateway도 함께 적용하고 있어서 기초부터 다잡고 싶은 마음에 nginx와 gateway의 차이점과 개념적인 부분들을 정리하고 정확히 이해하기 위해 글을 작성했습니다. 지금부터 nginx와 proxy 그리고 gateway까지 전반적인 개념을 살펴보겠습니다. nginx란? Nginx는 가벼움과 높은 성능을 목표로 하는 웹 서버 소프트웨어로, 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. https://ko.wikipedia.org/wiki/Nginx Nginx는 정적 파일을 제공(HTML, CSS 등)하는 웹서버의 ..

CS 2023.12.09

Connection Pool 테스트와 고찰(2)

1. jdbc yml 설정 1) connectionTimeout (default : 30000 (30 seconds)) 클라이언트가 Pool에 Connection을 요청하는데 기다리는 최대시간을 설정 즉 db 서버에 연결할 때까지의 연결 대기 시간, 최대시간이 지나면 ConnectionTimeoutException이 throw 됩니다. 이 경우 connection-timeout 값을 늘려주거나, maximum-pool-size를 늘려줘야 합니다. 2) maximunPoolSize (default : 10) Pool에 보관가능한 최대 Connection 개수 설정 3) minimumIdle (default : maximumPoolSize와 동일) Pool에서 보관가능한 최소 Connection 개수 설정 ..

CS 2023.11.07

Connection Pool 테스트와 고찰(1)

개요 jdbc와 r2dbc Connection Pool에 대한 고찰과 어떠한 경우에 무엇을 선택해야 할지에 대한 고민을 담은 글입니다. 예전 글에서도 Connection Pool을 정리한 적(Connection Pool이란?)이 있었기 때문에 개념과 사용이유만 짚고 가겠습니다. 직접 구현해본 경험은 없었으므로 간단한 CRUD 예제 프로젝트로 학습했던 내용을 정리했습니다. connection pool 개념 웹 컨테이너(WAS)가 실행되면서 DB와 미리 연결을 해놓은 객체들을 Pool에 저장해 둔다. 이후 클라이언트 요청이 오면 Connection을 빌려주고, 처리가 끝나면 다시 Connection을 반납받아 Pool에 저장하는 방식 사용이유 db에 직접 연결해서 처리하는 경우 드라이버를 불러오고 Conne..

CS 2023.11.07

Cold Stream vs Hot Stream 이란?

Coroutine Cold Stream vs Hot Stream 코루틴에서 Scope와 몇 가지 연산자 등의 학습을 거쳐 flow와 channel이라는 것을 학습하게 되었는데 이 2개의 정확한 차이점은 무엇일까? stream은 정확히 무엇인가?.. 둘 다 무언가 값을 방출하는 것까지는 알겠는데 말이다. 여러 포스팅을 살펴보면 flow는 cold 스트림이고 channel 은 hot 스트림이라고 말한다. 그렇다면 여기서 말하는 스트림이라는 것은 대체 뭘까? flow 와 channel에 대해서 잘 이해하기 위해서는 이 “stream”이라는 것부터 알아야 될 듯해 작성하게 되었습니다. 1. Stream 우리는 hot, cold stream을 정의하는데 많은 혼란을 겪는다. 우리는 Flow는 Cold Stream..

CS 2023.10.31

API 헬스체크

헬스체크란? 서비스의 고가용성(HA, High Availability), 고성능을 위한 부하 분산 등의 이유로 우리는 서버의 이중화(혹은 그 이상)를 하고, 앞에서 어떤 서버로 요청을 보낼지 라우팅 역할을 하는 로드 밸런서를 둔다. 로드 밸런서는 부하를 적절히 분산하여 구축된 여러 서버중 한대에게 클라이언트의 요청을 보낸다. 하지만 요청을 한 서버가 서비스 불가상태라거나 소스코드를 로딩하고 있을 경우에는 서버로 요청을 보내면 안된다. → (장애 유발과 더불어 부하를 더 증가시키기 때문이다) 때문에 로드 밸런서에서는 각 서버의 헬스 체크 API를 호출해서 해당 서버가 현재 서비스 가능한 상태인지 아닌지 주기적으로 체크한다. 즉 헬스 체크는 정상적으로 서비스가 가능한 서버에만 트래픽을 보내서 서비스의 고가용..

CS 2023.08.17

Connection pool

커넥션 풀(DBCP)란? 웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가, 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식 JDBC : Java Data Base Connectivity. 한글로 번역하면, 자바 데이터 베이스 연결, 정의는 DataBase와 연결하기 위한 Java Interface이다. DBCP : DataBase Connection Pool. 역시 간단하게 정리하면 DataBase와 Connection을 맺고 있는 객체를 관리하기 위한 Connection Pool DBCP 직접 사용 VS JNDI : https://itstein.tisto..

CS 2022.12.06

WebFlux

WebFlux란? WebFlux는 Spring 5에 새롭게 추가된 Reactive-stack의 웹 프레임워크이다. WebFlux는 클라이언트와 서버에서 리액티브 애플리케이션 개발을 위한 논블로킹 리액티브 스트림을 지원한다. WebFlux 논블로킹으로 동작하는 웹 스택의 필요성 때문에 등장하게 되었다. 블로킹 : 네트워크 통신에서 요청이 발생하고 완료될 때까지 모든 일을 중단한 상태로 대기 논블로킹 : 네트워크 통신이 완료될 때까지 기다리지 않고 다른 작업을 수행 WebFlux로의 전환 이유 SpringMVC로 개발하고 동작이 잘 되던 서버를 굳이 왜 WebFlux로 전환할까? 전환을 한다면 이에 대한 합리적인 이유가 필요하다. 기존의 springMVC는 하나의 요청에 하나의 스레드가 사용된다. 블로킹 콜..

CS 2022.11.06