728x90

분류 전체보기 173

[AWS] MFA 인증 제거하기

최근에 핸드폰을 바꾸게 되면서 기존 핸드폰에 MFA를 등록해둔걸 제거해야만 했다. 그래서 허둥지둥 AWS 공식문서를 보고 쉽게 제거하는 법을 찾아보았다. 언제 또 찾아볼거 같아서 그냥 블로그에 남겨두려고 한다. 핸드폰 바꾸기전에 꼭 MFA 를 제거해라. 생각안해두면 진짜 큰일난다. 위의 보안자격증명 메뉴를 눌러주자. 그럼 아래와 같은 화면이 나오는데 또 빨간 버튼을 눌러주면 된다. 보면 내가 등록해둔 MFA 가 보인다. 이제 저 MFA 를 제거해주기 위해서 작업(관리) 를 누르자. 여기서 제거를 눌러주면 잘 제거된것을 확인할 수 있다.

AWS 2022.01.05

[Git] git squash 로 로그 줄이기

회사에서 코드를 작성하다보면 Feature 마다 브랜치를 따로 생성하고 후에 릴리즈 브랜치에 이를 머지하는 식으로 주로 운영된다. 단순히 Merge 하게되면 가지도 여러갈래로 보이고, 여러 브랜치들이 머지되다보면 좀 보기 힘들어지기도 한다. 그래서 Rebase 를 이용해 Squash 를 이용해서 이력을 보기 쉽게 만드는 법에 대해서 공부해보자. 위와 같이 로컬에서 여러 작업을 했는데 release 브랜치에 머지할때는 하나의 커밋으로 이력을 남기고 싶다고 해보자. 우리는 그렇다면 Rebase 를 통해서 Initial Commit 으로 돌아가야 한다. git rebase -i 8e5fc... 이제 여기서 우리는 first commit 만을 가져가고 나머지는 sqaush 를 진행해줄 것이다. 그래서 secon..

Git 2022.01.04

Spring Request Body Binding 파헤쳐보기

스프링에서는 리퀘스트로 올리는 문자열을 Enum 으로 바꾸는 등 자동으로 값을 변환해주는 기능을 가지고 있다. 예를 들면 @RequestBody 라던가 @RequestParam 처럼 문자열 값을 가져와서 우리가 지정한 타입으로 바꿔준다. 코드로 보면 설명이 더욱 명확하다. data class User( val name: String, val password: String, val role: Role ) @PostMapping("/test") fun test(@RequestBody user: User): String { log.info(user.toString()); return "Hello" } 간단하게 테스트를 하기위해 작성된 코드임을 알수 있다. 일단 Server 에 아래 JSON 을 한번 전달해보자..

Web 2022.01.02

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