728x90

2021/12 9

Postman 헤더로 세션 로그인하기

오늘 회사에서 Admin 페이지를 만들던 도중에 무조건 Spring Security 를 통한 로그인을 거쳐야만 API 호출이 가능한 경우가 있었다. 그래서 최초에 보안 인증 페이지에서 로그인을 하고 거기서 취득한 인증 쿠키를 이용해 API call 을 해야만 했는데.. 이게 Postman 에서 어떻게 계속 쿠키를 이어받아서 쓸 수 있을까를 고민하다가 포스트맨의 Script 를 통해서 해결할 수 있다는 것을 알았다. 사실 Token 을 쓰는 대부분의 경우도 Token 을 어떻게 쉽게 모든 API 에서 계속해서 사용할까를 고민할텐데 그에 대한 해답이 될수도 있다. 백문이 불여일타... 코드로 한번 보도록 하자. @RestController public class AuthController { @PostMap..

Web 2021.12.28

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