Dev(10)
-
[short-note] Spring Webflux: Webclient SOCKS5 Proxy setting with Auth(ID/PW)
0. Introduction Spring Webflux 에서 Netty Webclient 로 외부 Proxy 를 사용하고자 할때 (reactor.netty.http.client) HttpClient 에 Proxy 관련 설정을 한다. 일반적인 HTTP Proxy type 은 많은 예제가 있지만 SOCKS 에 인증용 ID/PW를 해야 하는 경우에 대한 예제는 마땅한 것이 없어 보인다. 이 글은 나의 삽질에 대한 기록. 1. Case 기존에 사용하던 RestTemplate 은 deprecate 될 예정이라 다른 webclient 가 필요한 상황. Request 마다 다르게 써야 하는 Proxy 설정 (전역 설정 사용 지양) Proxy Type, Host, Port, Auth 2. Before - Bug 주의 ..
2023.02.06 -
조건이 복잡한 IF/ELSE-IF 문 리팩토링
개발을 처음 시작하면서부터 지금까지 써온 if 문은 과연 얼마나 될까. 사람의 생각 흐름과 가장 비슷하게 표현되는 문법이라서 그런지 무의식적으로도 많이 써온 것 같다. 하지만 구현해야 하는 로직이 복잡할수록, 다뤄야 하는 객체의 양이 많을수록 무한정 늘어나는 if/else-if 들은 점점 내 시야를 아득히 벗어나 제어할 수 없는 지경에 이르고야 만다. 앞선 enum 의 활용글에서도 언급한 바와 같이 경우에 따라서 enum 으로 if 문을 리팩토링이 가능하다. enum 으로 리팩토링이 가능한 경우는 if 문의 조건식이 특정 value 와 equal 인지를 판별하고 그 value 를 상수로 정의 가능할때 비로소 리팩토링을 할 수가 있었다. 하지만 언제나 그렇듯 코드는 우리가 원하는대로 그렇게 간단한 조건만을..
2023.01.06 -
[Tour of Scala] Unified Types
Tour of Scala 시리즈의 글은 다중패러다임(함수형 + OOP) 언어인 Scala 의 공식 튜토리얼 'Tour of Scala 문서를 톺아보고 학습해보는 글이다. 내용에 따라서 추가된 내용과 생략된 부분이 있다. (중요) 또한 학습은 Scala 3 을 기준으로 작성 되었다. 몇몇 부분에서 2버전과는 다른 내용으로 진행하였다. - 공식 web site : https://www.scala-lang.org - Tour of Scala : https://docs.scala-lang.org/tour/tour-of-scala.html Scala Type Hierarchy `Any` 는 모든 타입의 슈퍼타입이며 최상위에 위치하는 가장 기본이 되는 타입. `equals`, `hashCode`, `toString..
2022.11.15 -
[Tour of Scala] Basics
Tour of Scala 시리즈의 글은 다중패러다임(함수형 + OOP) 언어인 Scala 의 공식 튜토리얼 'Tour of Scala 문서를 톺아보고 학습해보는 글이다. 내용에 따라서 추가된 내용과 생략된 부분이 있다. (중요) 또한 학습은 Scala 3 을 기준으로 작성되었다. 몇몇 부분에서 2버전과는 다른 내용으로 진행하였다. - 공식 web site : https://www.scala-lang.org - Tour of Scala : https://docs.scala-lang.org/tour/tour-of-scala.html Expressions values / variables 다른 언어에도 동일한 개념이 있는 '상수(value)' 와 '변수(variable)'. 이 둘을 구분 짓는 가장 기본적인 ..
2022.10.28 -
[Spring] 같은 계층의 N개의 의존성 리팩토링
배송 추적을 하기 위한 서비스 계층을 개발한다고 가정해보자. 우리는 먼저 간단하게 interface 를 작성하고 각 배송사의 이름으로된 구현체를 작성할 것이다. 그리고 이를 호출하게 되는 서비스까지. // 배송조회 결과를 담을 클래스 // 여기서는 간단하게 문자열 status 만 받도록 한다 public class TrackingInfo { private final String status; public TrackingInfo(String status) { this.status = status; } public String getStatus() { return status; } } public interface DeliveryCompany { TrackingInfo getTrackingInfo(); } ..
2022.10.11 -
enum 의 활용(2) - method 추가
이전 글에서 간단한 조건문을 enum으로 확장하는 방법에 대해서 알아보았다. 각 value 가 enum의 상수에 강력하게 묶여 있다면 enum에 종속적으로 만들어서 코드를 깔끔하게 정리할 수 있었다. 이번에는 enum 상수에 method들을 묶어 보자. 아래와 같은 코드가 있다고 가정해보고 enum으로 refactoring 을 해보자. // DayOfWeek 는 앞선 글에서 정의한 요일 상수를 가진 enum 이다. public void workSchedule(DayOfWeek dayOfWeek) { switch (dayOfWeek) { case MONDAY: case WEDNESDAY: case FRIDAY: this.workAtOffice(); break; case TUESDAY: case THURSD..
2022.09.22