728x90

2022/05 16

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
728x90