728x90

전체 글 169

End-To-End Header / Hob-by-Hob Header

End-To-End Header / Hob-by-Hob Header End-To-End Header end-to-end Header 는 마지막 Receiver 에게 전달되어야 하는 Header 입니다. 따라서 Proxy 서버에서 이를 임의로 변경해서는 안됩니다. Cache-Entry 의 일부로 저장되어야 Hob-By-Hob Header 현재 Transaction 에서 사용되는 Header 입니다. Hob-By-Hob Header 가 Final Receiver 에게 갔을때 Client 는 Nginx(Web Server) 와 Keep-Alive Connection 을 맺고 싶어 Connection: keep-alive 헤더를 넘겨주었는데, Nginx 에서 이를 해석하지 못하고 Application Serve..

CS 2022.05.22

AutoScailing Group 만들어보기

Auto Scailing Group 이란? Auto Scailing Group 은 AWS 에서 제공하는 다중 서버 서비스이다. Auto Scailing Group 에 묶인 인스턴스들은 같은 성능과 같은 코드를 가지고 있다. 따라서 우리는 ASG 를 통해 우리가 원하는 서버의 인스턴스를 다수로 늘리거나 줄이는 것을 관리할 수 있다. 실습 일단 ASG(AutoScailing Group) 을 만들기 위해 하나의 인스턴스가 필요한데, 이건 각자 알아서 만들어 오길 바란다. Spring 으로 뛰어와도 좋고 어떤 방식으로던 Server 를 뛰어오면 된다. 이미지 생성 일단 준비해온 인스턴스를 이미지(Amazone Machine Image?) 로 만들어야 한다. 이미지로 만들어야 하는 이유는 우리가 ASG 로 운용할..

AWS 2022.05.18

Kotlin Delegation

Delegation 은 코틀린에서 지원하는 문법적 기능 중 하나인데, 이는 Delegation Pattern 의 Boiler Plate 를 줄여주는 Sugar Syntex 중 하나이다. Delegation Pattern 은 쉽게 말해 상속이 아닌 다른 객체에게 세부 구현을 위임하는 것이다. 공식문서의 예제를 한번 살펴보자. interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main() { val b = BaseImpl(4) Derived(b).print() } 위의 예제는 Derived 의 내부 인터페이..

Kotlin 2022.05.16

Kotlin Class 내부 object 에서 Class Property 참조하는 법

오늘 Kotlin 을 사용하다가 objcet 로 만든 곳에서 Class 내부 Property 를 참조해야 하는 일이 생겼다. 코드는 대략적으로 아래와 비슷한 상황이였다. interface Roach { fun roa() } class Test( val testProperty: String, ) { fun test() { object : Roach { override fun roa() { // testProperty 에 접근하고 싶음 } } } } 처음에는 음 this 를 사용하면 붙어질까? 라는 생각을 했지만 당연히도 익명 클래스의 안이기 때문에 오히려 this 에 맵핑되어 있는 객체는 익명 클래스의 인스턴스 라는 것을 깨닫게 됬다. 그래서 어떻게 할까 하다가 아래와 같은 방법이 되는지도 테스트 해봤다...

Kotlin 2022.05.11

MySQL Hint

MySQL 에서 Hint 란 옵티마이저의 실행계획을 바꾸는 것을 뜻한다. 대부분의 MySQL 책에서 왠만해서 Hint 를 사용하는 일은 없을 것이라고 말했고, 오히려 내가 주는 Hint 가 "훈수" 느낌으로 될 수 있어서 오히려 성능을 악화시킬 수도 있다고 알고 있었다. 그리고 옵티마이저 자체가 대부분 똑똑한 의사결정을 해서 필요하다고 생각하지 않았는데, 오늘 신규프로젝트를 구성하던 도중 잘못사용하는걸 파악했다. 현재 쿼리를 날렸을때 실행계획은 아래와 같다. test1 은 현재 자주사용하는 쿼리에 맞게 인덱스를 구성했는데, PRIMARY 인덱스를 사용해서 현재 filtered 가 10 밖에 나오지 않는다. 인덱스를 구성할때 test1 인덱스를 사용하여 filtered 가 100 이 되는게 내 목표였다. ..

DB 2022.05.09

고차함수에서 Return 이 안되는 이유

코틀린에서 가끔씩 고차함수에서 Return 을 할 경우에 안되는 경우가 있다. 바로 아래 코드와 같은 상황일 경우에 말이다. fun forEach(a: IntArray, action: (Int) -> Unit) { for (n in a) action(n) } fun main() { forEach( intArrayOf(1, 2, 3, 4)) { if (it 3) return println(it) } ) } 이 이유는 무엇일까? 이건 일단 람다 안에서의 return 에 대해서 생각해봐야 하는데, 일단 lambda 안에서의 return 은 가까운 함수 혹은 무언가 람다를 둘러싸고 있는 환경을 반환하려고 시도한다. 즉 위의 코드에서는 return 이라는 함수가 main() 함수를 반환하려고..

Kotlin 2022.05.03

Domain 모델에 Domain 로직을 담아야 하는 이유

최근 DDD 와 관련된 공부들을 꾸준히 해나가고 있는데, 사실 이건 DDD 에 해당하는 것이 아니라 객체지향에서도 당연한 일이기도 하다. 객체가 자신의 행위(Behavior) 에 대한 인터페이스를 제공하는 것은 당연하기 때문이다. 함수형 프로그래밍에서는 객체를 모델로 만들어 두고, 행위를 정의하는 곳을 분리하여 두는 것으로 알고 있다. 하여튼 각각의 프로그래밍 패러다임으로 어떻게 구현하든 도메인 모델에 그와 관련된 행위가 정의되어 있는 것이 좋은 이유에 대해 설명해보려고 한다. 이건 사실 좋은 코드를 작성하는 가장 원칙적인 기준인 응집도에 관한 문제이기도 하다. 응집도에 대한 것을 모른다면 내가 적은 아래 글을 읽어보길 바란다. 나는 좋은 코드를 작성하는 원칙은 전부 응집도와 결합도 부터 시작한다고 생각..

Architecture 2022.05.01

Spring-Cloud-Sleuth 비동기 요청시 서버간 TraceId 보존하는 방법

방법을 찾게 된 계기 Java 나 Kotlin 에서는 ThreadLocal 을 이용가능하다. 주로 Logback 의 MDC 에서도 이 ThreadLocal 을 이용해서 하나의 스레드내에서 동작하는 특정 값을 로깅하기 위해 이용한다. Slueth 또한 MDC 를 이용하는데 MDC 에 traceId 와 spanId 를 저장한다. traceId 를 어떻게 Thread 에서만이 아닌 서로 다른 서버에서도 똑같은 값으로 주어 좀 더 흐름을 찾기 쉽게 만들까? 라는 고민을 하다가 아래와 같이 삽질을 하게 되었다. 예시 백문이 불여일타라고 예시코드로 시작해보자. 일단 ThreadPoolTaskExecutor 를 테스트를 위해서 대충 만들어보자. 이제 Async 에서는 위의 ThreadPoolTaskExecutor 를..

Spring 2022.04.27

오늘자 삽질 - Spring Kafka

회사에서 Spring Kafka 를 연동하던 중에 Local 에서 콘솔로 Topic 에 직접 Message 를 쏘니 잘 안되는 상황이 발생했다. 그래서 처음에는 아 key-serializer 와 value-serializer 가 잘못 설정되어 있나? 라는 생각을 했다. 사실 내가 짠 코드가 아니여서 코드를 디버깅 좀 해보다가 처음에는 KafkaRecord 에 자꾸 코드에서 DeserializerException 을 넣길래 아니 이게 key-value deserializer 가 잘못되어 있는거 아니야? 하고 빼고 하니깐 Default Serializer 인 StringDeserializer 로 값이 넘어와서 잘 보였다. 하지만 Object 로 Mapping 되지 않았다. 그래서 궁금해서 ErrorHandl..

Spring 2022.04.13

Spring Web Flux 에 대해

어제 Block, NonBlock, Sync, Async 에 대해서 정리했는데 참고하려면 아래글을 읽으면 좋을 것 같다 http://roach-wiki.com/doku.php?id=block block [Roach'Wiki] roach-wiki.com 생각해보니 요즘 컴퓨팅 환경을 생각했을때 Spring WebFlux 성능이 진짜 좋을 수 밖에 없지 않나? 라는 생각이 들었다. 사실 그래서 예전에 공부하려다만 Spring Reactor 에 대해서 공부해보려고 한다. 들어오자마자 WebClient 가 나왔는데.. 나중에 Feign, WebClient(Reactor), RestTemplate 성능 테스트를 한번 해봐야겠다. 17일부터 동규님이 NextStep 에서 진행하는 인프라 공방도 수강하니까.. 그거 ..

끄적 2022.04.08
728x90