728x90

전체 글 169

[TypeScript] Json 파일 읽어와서 type 으로 변환하기

최근 TypeScript 를 가끔씩 쓰면서 Json 파일을 읽어와서 쉽게 Type 으로 Convert 할 수 없을까 고민해봤다. 그래서 Generic 을 이용해서 Convert 하는 방식을 생각했다. 이전에 필수적으로 알아야 할 선행지식이 있는데 바로 TypeScript 의 "unkown" 이라는 개념이다. any 랑 비슷하다고 생각할 수 있는데, any 보다는 Java 로 치면 Object 느낌에 가깝다. 사용하는 측에서 타입 추론이 이루어질 수 있게 도와주므로 Json 을 Unknwon 으로 가져오고 Generic Type 으로 추론해야겠다는 생각이 들었다. 따라서 아래와 같은 코드를 작성할 수 있었다. const ENCODING_TYPE = 'utf8'; const NOT_EXIST_JSON_FIL..

TypeScript 2021.12.19

[TEST] When 에서 하나 이상의 메소드 실행 피하기

요즘 테스트 코드를 적을때는 항상 given - when - then 방식으로 많이 작성한다. given 에서는 Test 로 작성될 SUT 에 대한 의존성 주입 및 들어갈 값들에 대한 정의를 내린다. when 에서는 Test 할 로직을 실행하고 then 에서 결과값을 검증한다. 아래도 위와 같이 given - when - then 으로 작성된 테스트 코드이다. class CustomerTest { @Test void purchaseSucceedsWhenEnoughInventory() { //given var store = new Store(); store.addInventory(Product.SHAMPOO, 10); var customer = new Customer(); //when boolean pur..

Test 2021.12.17

[Kotlin Spring] Logger 를 간편하게

Kotlin 은 Lombok 을 적용하기 힘든 구조였어서 아래와 같이 Logger 코드를 계속 반복해서 적용해야 하는 문제점이 있습니다. (최신 버전에서는 Lombok 이 된다고 하나.. 아직 Stable 하다는 소문은 못들어서 사용은 안하고 있긴 합니다.) 왜 안되는지 궁금하시다면 Kotlin 의 컴파일 순서 및 과정을 확인하시면 됩니다. 자바에서는 아래와 같이 Logger 코드를 작성하지 않고도 롬복을 이용해 Logger 를 사용할 수 있었습니다. 이것또한 바이트 코드를 보게 되면 롬복이 자동으로 생성해주는데요. 따라서 코틀린에서도 어차피 계속 작성된다면 간편하게 할 수 있는 방법을 찾아야 했습니다. 그래서 Intellij 의 라이브 템플릿을 이용하기로 했습니다. 사내에서도 라이브 템플릿을 이용하는 ..

Kotlin 2021.12.14

[Spring Batch] Batch Info Table 수동 생성하기

운영 서버에서는 Batch Schema 를 always 나 Embedded 로 설정하지 않을때가 많다. 어떤 배치가 실행됬고, 얼마나 Rollback 됬는지 이런것들을 파악하기 위해서는 정보가 남아있어야 하기 때문이다. 오늘은 간단하게 Batch 정보를 만드는 실습을 해보려고 한다. spring.batch.initialize-schema: never 요 위에 처럼 설정해주자. 수동 설정의 경우 Schema 를 찾아서 업데이트 해주어야 한다. Schema 파일의 경우 Spring-batch-core 부분에 위치하고 있다. 일단 External-Library 에서 위와 같은 디렉토리를 찾자. 아래로 쭈욱 내려보면 아래 사진과 같은 schema DDL 을 기록해둔 파일들이 보인다. 이제 자신에 벤더사에 맞는 ..

Java 2021.12.12

클린 아키텍쳐와 Domain Layer

계층형 아키텍쳐 보통의 3 계층 아키텍쳐는 아래와 같다. 이렇게 되면 표현계층에서는 요청을 받아서 서비스 계층으로 넘긴뒤 도메인 로직을 수행하게 된다. 잘 작성한다면 도메인 로직에 영향을 주지않고, 표현 계층과 영속성 계층의 로직만 변경이 가능하다. 하지만 문제점이 생기는데 도메인 로직이 중점이 아닌 데이터베이스를 중점으로 설계하기 쉬워진다. 객체지향에서 기본적으로 협력에 의한 책임 주도 설계가 기본이 되는데 이때 기본적으로 객체가 가질 수 있는 state 에 의존하는 설계가 아니라 객체간의 협력에서 이룰 수 있는 행동을 기반으로 설계를 진행하는 것이 좋다. 이건 조영호님의 오브젝트 책을 보면 잘나와있는데 데이터를 중심으로 설계하게 되면 외부에서는 협력하는 객체에 대한 정보를 너무 많이 알게 된다. 대표..

Architecture 2021.12.08

[Mac] Kotlin 설치 및 CLI 에서 사용하기

맥 CLI 에서 코틀린을 사용하기 위해서 방법을 찾아보고 있었다. 일단 brew 를 통해 쉽게 설치 가능하다. brew install kotlin 위와 같이 입력하면 정상적으로 설치가 된다. 이렇게 설치되는 코틀린 SDK 는 코틀린 컴파일러 kolinc-jvm 과 코틀린 실행명령어 kotlin 이 포함되어 있다. 기존 javac 와 java 와 맵핑되는 느낌이다. 백문이 불여일타라고 한번 코드로 작성한뒤 컴파일과 실행을 해보자. fun main() { println("Hello World"); } 이제 한번 kotlinc-jvm 을 통해서 컴파일 시켜보자. kotlinc-jvm hello.kt 아래와 같이 잘 컴파일되어 Class 파일로 존재하는 것을 알 수 있다. 한번 Class 파일로 확인해보자. 아..

Kotlin 2021.12.06

협력과 메세지

앞선 포스팅들에서 책임에 관련된 이야기를 계속해서 해왔다. 객체지향에는 또 설명해야할 중요한 개념이 존재하는데 "협력" 과 "메세지" 이다. 이미 앞선 포스팅에서 지겹게 설명했다고 생각할 수도 있지만 이제는 이해를 하기 위해서 현실세계로 잠깐 저 내용을 끌고 와볼까 한다. 이 포스팅은 대부분의 내용이 조영호님의 "오브젝트" 를 읽고 느낀점을 생각으로 정리한 글입니다. 본문 제일 아래에 책 링크가 달려있습니다. 협력과 메시지 개인적으로 이 둘은 떼놓고 설명하기가 힘들다고 생각한다. 과연 이 추상적인 개념은 객체지향 세계에서 어떻게 설명할 수 있을까? 가장 쉽게 설명할 수 있는건 Client - Server Model 로 설명하는 것이다. Client 는 Server 에 Request(요청) 을 보내고 Se..

Architecture 2021.12.02

응집도와 결합도

응집도와 결합도는 소프트웨어 품질을 결정 짓는 요소이다. 대다수의 사람들은 코드를 작성할때 "응집도" 와 "결합도" 를 생각하지 않은채 관성적으로 코드를 적고는 한다. 응집도와 결합도는 무슨 뜻일까? 일단, 이 개념을 이해하기 위해서 알고 있어야 할 선행지식이 있다. 불안정한 부분과 안전한 부분의 분리 바로 "불안정한 부분" 과 "더 안전한 부분" 을 분리해 내는 능력이 필요하다. 예를 들어 아래와 같은 객체가 존재한다고 해보자. Address 는 모든 변수가 public 하게 열려있다. 우리는 앞으로 Public 하다는건 자신의 내부 속사정을 공개한 객체 취급을 할 것이다. 외부에서 이를 어떻게 사용할까? 위와 같이 사용할 수 있을 것이다. 위와 같이 사용했을때 어떤 문제가 발생할 수 있을까? 아니 "..

Architecture 2021.11.28

객체지향 체조

내가 부트캠프를 하던 시절 과제로 코드를 작성하는데 몇 가지 조건을 제한해둔 과제를 받은 적이 있다. 제한해둔 조건은 대략적으로 아래와 같았다. (기억이라 틀릴 수 있음) 1. 절대로 인덴트 depth 가 3 이상이 되지 않도록 하시오. 2. 중복코드를 최대한 없도록 하시오. 3. 하나의 함수가 80줄을 넘지 않도록 하시오. 그 당시에는 "이것이 가능한가?" 라는 물음이 있었다. 근데 또 하다보니 어찌어찌 되긴됬다. 근데 이 중 for 문 부분에서 3뎁스에 도달해서 떨어질꺼란 생각을 했던 기억이 난다. 여튼 그 당시에는 잘 몰랐지만, 이 내용이 객체지향 체조에 들어있던 내용이였다. 그래서 오늘은 객체지향 체조를 정리해보려고 한다. 객체지향 체조 1. 메소드 당 indent depth 는 하나로 제한한다...

Java 2021.11.28
728x90