HTTP 200 OK

Memento mori & Carpe diem

전체 글 65

Rancher Desktop

Rancher Desktop을 사용하던 중 문득 이것에 대해 잘 알지 못한다는 생각이 들었습니다. 그래서 생각이 난 김에 가볍게 개념을 정리해보려고 합니다. Docker Desktop 의 유료화로 인해 그에 대한 대처방안으로 VM + minikube 또는 Rancher Desktop 이렇게 크게 2가지로 대체하는 것 같습니다. 1. VM + minikube minikube 는 가벼운 쿠버네티스 구현체이며, 로컬 머신에 VM 을 만들어 하나의 노드로 구성된 간단한 클러스터를 생성하는 로컬 쿠버네티스 엔진이다.(쿠버네티스와 비교하자면 쿠버네티스는 컨테이너의 클러스터를 단일 시스템으로 관리하는 것) 쿠버네티스는 마스터 노드와 하나 이상의 워커 노드로 구성되어 있는데 단순 개발 테스트를 위해 플랫폼 구성이 어려..

Kubernetes 2024.01.06

BlockHound - Blocking 코드 존재여부 확인

사용이유 Spring Webflux나 Coroutine을 사용할 때는 모든 코드가 reactive 하게 동작하길 원합니다. 비동기 처리를 하면서 느낀내가 만든 코드가 점은 비동기로 데이터가 처리되는것인지 동기형식으로 처리되는 것인지 확인해볼 수가 없다는 것이였습니다. 그저 비동기 문법에 맞게 코드를 만들었을뿐.. 즉 비동기로작성한 코드에 blocking 코드가 존재하는지 확인해주는 도구가 바로 blockhound입니다. BlockHound란? BlockHound는 webflux 에서 사용하는 reactor 팀에서 개발한 도구로 애플리케이션에서 blocking 코드가 작성되었는지 여부를 검출해주는 도구입니다. 직접 작성한 코드 뿐만 아니라, 서드 파티 라이브러리에서 사용한 블로킹 코드도 전부 검출합니다...

Spring 2023.12.24

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

글또 9기를 지원하며 - 삶의지도 작성

삶의 지도글또를 지원하면서 그동안의 삶을 되돌아보며 삶의 지도를 작성해 볼 수 있는 좋은 기회를 얻은 것 같습니다. 혼자서는 생각하지 못했을 일입니다. 글또를 운영하시는 분들과 글또를 알게 해 주신 이름 모를 블로거분에게 감사합니다. 꿈이 없던 지난 날어렸을 적에는 꿈 없이 흘러가는 대로 살아왔습니다. 관심이 가는 일은 많아서 이것저것 여러 가지를 경험해 봤지만 무엇이든 금방 질리고 뒷심이 부족했습니다. 별 다른 꿈이 없었기에 부모님이 추천하신 과에 진학했고 돈이 부족하면 아르바이트를 했으며 공부도 하고 놀기도 하면서 정처 없이 시간을 보냈습니다. 하지만 마음 한편으로는 '내가 하고 싶은 일이 무엇일까' 하며 꿈에 대한 갈망을 가슴속에 품고 살았습니다. 무기력하게 살고 싶지 않았기에 꿈을 찾고자 다방면으..

활동 2023.11.08

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

[Kotlin] Result란?

Result란? Result는 동작이 성공하든 실패하든 동작의 결과를 캡슐화하여 나중에 처리할 수 있도록 하는 것이 목적입니다. Result 클래스는 runCatching 함수의 반환형이며 코루틴에서 에러 처리를 할 때 권장하는 방식이기도 합니다. runCatching 블록 안에서 성공/실패 여부가 캡슐화된 Result 형태로 리턴합니다.(Js의 Promise와 유사) - Result 클래스 멤버 isSuccess & isFailure 블록의 실행이 성공하면 (블록내에서 예외처리가 발생하지 않았을때) isSuccess 변수를 확인하여 알 수 있습니다. 역으로 블록의 실행이 실패했다면 isFailure 변수를 통해 확인 할 수 있습니다. if (colorName.isSuccess) { //성공시 호출 } ..

Kotlin 2023.09.12

[Kotlin] Error Handling

kotlin Error Handle을 하기 전에 어떠한 상황에서 에러 상황을 처리할지 정해야 한다. Type-safe Error Handling → Either Type Either Type은 Left && Right에 특정 value가 들어갔을때 미리 정의한 type과 일치하지 않는다면 .left() && .right() 를 사용해 success/fail을 커스텀할 수 있다. sealed class Either data class Left(val value: L): Either() / error data class Right(val value: R): Either() // success Sealed class는 하나의 type value를 사용하는 제한적인 상황일때 다양한 기능을 해당 value로 구현..

Kotlin 2023.08.26