매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

전체 글 77

Docker란?

https://www.youtube.com/watch?v=LXJhA3VWXFA  Docker 어플리케이션을 패키징할 수 있는 툴 컨테이너 : 어플리케이션 + 시스템 툴 + 디펜던시운영체제에 관게 없이 쉽게 배포 , 안정적으로 구동. 도커컨테이너어플리케이션 런타임에 필요한 환경들을 갖추고, 언제 어디서든 실행할 수 있음.이것저것 설정하는 번거로움을 해결해줌. vm 과 비슷한게 아닌가? 컨테이너 엔진이 호스트 OS를 사용해서개별적인 컨테이너를 만들어서, 각각의 어플리케이션을 고립된 환경에서 실행될 수 있게 해줌컨테이너 엔진 : 도커 컨테이너를 만들기 위해서?Dokerfile > Image > Container 구동 Dockerfile 컨테이너를 어떻게 만들건지? 레시피 이다.CopyfileInstall de..

Docker 2024.06.25

논리학의 기초: 증명, 명제, 공리

증명- 증명은 특정한 공리들을 가정하고, 그 가정 하에 어떤 명제가 참이라는 것을 보여주는 것 명제- 논리학적으로 뜻이 분명한 문장을 말하며, '참' 혹은 '거짓'임을 검증할 수 있는 '객관적 사태'가 포함된 문장 공리- 논리학이나 수학 등의 이론체계에서 가장 기초적인 근거가 되는 명제.- 증명할 필요 없이 자명한 진리이자 다른 명제들을 증명하는 데 전제가 되는 원리로 가장 기본적인 가정- 지식이 참된 것이 되기 위해서는 근거가 필요하나 근거를 소급해 보면 더이상 증명하기 곤란한 명제에 다다르는데 이것이 공리

이산수학 2024.06.18

Lego, 개발자가 된 이유

상상한것을 현실로 만드는 매력에 빠져 개발자가 되었습니다. 레고가 내 인생에 미친 영향 나의 블로그 테마, 슬로건, 아이디는 레고와 관련된 것이 많다. 레고와 관련된 것이 많은 이유는 내 인생에서 레고가 가진 상징적인 의미가 크며, 개발자가 된 이유이기 때문이다. 이 글을 통해 레고가 나의 삶에 어떠한 영향을 미쳤는지, 그리고 왜 개발자가 되었는지 정리해 보고자 한다. 어떤 계기인지 기억은 안 나지만, 유년기 시절 부모님이 레고 장난감을 사주셨었다. 첫 레고 장난감은 하단 이미지와 비슷한 경찰 도시를 만드는 테마였다. 박스를 뜯자 와르르 쏟아지는 레고, 조립 설명서를 기반으로 차근차근 레고시티를 만들었다. 블럭을 집어서 차곡차곡 쌓았다. 때로는 조립 설명서를 봐도 어떻게 만드는지 잘 몰라서 헤맸던 적도 ..

[WebClient] WebClient Bean 구성

RestTemplate을 Bean으로 등록하여 전역적으로 사용하듯이, WebClient도 Bean으로 등록하여 사용하는것이 일반적으로 생각된다. 마침 인터넷에서 WebClient를 커스터마이징하고 Bean으로 등록하여 사용하는 코드가 있었다. WebClient 사용법을 정리하며 ChatGpt에게 WebClient 커스터마이징 이유를 물어본 적(Reactor Netty를 커스텀하는 이유?)이있다. 간단하게 얘기하면, 커스텀을 통해 다음과 같은 이점을 누릴 수 있다. 네트워크 통신 효율을 높히고, 보안을 강화할 수 있다. 또한 TCP/IP 설정, 프록시 구성 등 다양한 네트워크 요구사항에 대응할 수 있게하여 어플리케이선 요구사항을 충족시킬수 있다. 네트워크 동작 추적 설정을 통해 디버깅 및 모니터링이 용이..

Spring/WebClient 2024.03.28

[WebClient] Synchronous Use

WebClient은 결과를 기다리기 위해 끝에서 Blocking 하는 동기식으로 사용될 수 있습니다. Person person = client.get().uri("/person/{id}", i).retrieve() .bodyToMono(Person.class) .block(); List persons = client.get().uri("/persons").retrieve() .bodyToFlux(Person.class) .collectList() .block(); 그러나 여러 호출이 필요한 경우에는 각 응답마다 Blocking 하는 것을 피하는 것이 더 효율적입니다. 대신 결합된 결과를 기다릴 수 있습니다. Mono personMono = client.get().uri("/person/{id}", per..

Spring/WebClient 2024.03.28

[WebClient] Context

Attributes 는 필터 체인에 정보를 전달하는 편리한 방법을 제공하지만, 이는 현재 요청에만 영향을 줍니다. 만약 flatMap을 통해 중첩된 추가 요청에 영향을 주거나 concatMap을 통해 실행된 후 추가적인 요청에 영향을 주는 정보를 전달하려면 Reactor Context를 사용해야 합니다. Reactor Context는 모든 작업에 적용되도록 반응적인 체인의 끝에 채워져야 합니다. 예를 들어: WebClient client = WebClient.builder() .filter((request, next) -> Mono.deferContextual(contextView -> { String value = contextView.get("foo"); // ... })) .build(); clie..

Spring/WebClient 2024.03.28

[WebClient] Attributes

요청에 속성을 추가할 수 있습니다. 이는 필터 체인을 통해 정보를 전달하고 특정 요청에 대한 필터의 동작을 영향을 주고 싶을 때 편리합니다. 예를 들어: WebClient client = WebClient.builder() .filter((request, next) -> { Optional usr = request.attribute("myAttribute"); // ... }) .build(); client.get().uri("https://example.org/") .attribute("myAttribute", "...") .retrieve() .bodyToMono(Void.class); 참고로, WebClient.Builder 수준에서 defaultRequest 콜백을 전역적으로 구성할 수 있으며, ..

Spring/WebClient 2024.03.28

[WebClient] Filter

WebClient.Builder를 통해 클라이언트 필터(ExchangeFilterFunction)를 등록하여 요청을 가로채고 수정할 수 있습니다. 아래 예제에서 볼 수 있습니다. WebClient client = WebClient.builder() .filter((request, next) -> { ClientRequest filtered = ClientRequest.from(request) .header("foo", "bar") .build(); return next.exchange(filtered); }) .build(); 이는 인증과 같은 cross-cutting concerns? 에 사용할 수 있습니다. 아래 예제는 정적 팩토리 메서드를 통해 기본 인증을 위한 필터를 사용하는 방법을 보여줍니다...

Spring/WebClient 2024.03.28