728x90

분류 전체보기 168

Kotlin 에서 Null 을 다루기

이 예제는 코틀린 쿡북을 읽고 정리한 내용입니다. 아래와 같은 클래스가 하나 존재한다고 해보자. class Person( val first: String, val middle: String?, val last: String, ) 코틀린에는 Nullable(null 을 허용) 이라는 개념이 존재한다. 왜 이런 개념이 필요하지? 라는 의문을 가질 수 있는 사람이 분명 있을 것이기에 간단하게 짚고 넘어가려고 한다. Nullable 을 도입하는 이유는 Null 로 부터 더 안전해지기 위해서이다. 예를 들어 A 라는 변수에 Null 이 대입될 수 있다고 해보자. 자바같은 경우에는 A 라는 변수에 Null 이 들어갈 수 있다는 것을 런타임에 되서야 알 수 있을 것이다. 그렇게 되면 우리는 NullPointerExc..

Kotlin 2022.01.18

2021 늦은 회고

2021 년도가 지나도 2022년이 오면서 개발인생의 첫 시작인 2021년도에 대한 회고록을 남겨볼까 한다. 2021 년도의 여러 사건들 중 나를 이끌어줬던 사건들과 여러가지 일들을 기반으로 회고록을 작성해보려고 한다. 여러 사람들의 블로그의 회고록을 보니 이벤트 기반으로 참 길게쓰는게 오랜 기억에 남는거 같다는 생각이 들었다. 그래서 블로그 글이 다소 길 수 있다. 졸업 대학교 졸업은 2021 년도 2월에 졸업했다. 팬데믹 시대라 졸업 사진 요런것도 찍지 않았고, 그냥 수료증만 개인별로 받아가는 형태로 진행했다. 졸업은 나에겐 큰 이벤트는 아니지만, 인생의 이력서에 계속해서 따라올 하나의 사건 중 하나이고 이제 무언가 날 잡아주는게 없는 상태로 시장에 내놓인 상태로 만들어 주기도 했다. 코드스쿼드 시장..

일일회고 2022.01.17

[Spring] MultiModule 의존성 순서 설정으로 인한 오류

이번에 Spring MultiModule 을 진행하면서 계속해서 Jpa 설정에 관한 오류를 먹고 있었다. 아무리 application.yml 에 설정을 해도 설정이 안먹는 오류가 있었는데 위와 같이 설정을 해줘도 DataSource URL 이 없다고 나온다. 일단 멀티모듈 구조의 패키지를 한번 살펴보도록 하자. 일단 Api 는 Web 계층으로 쉽게 말하면 Controller 계층에 가깝고 Service 와 Entity 는 이름 그대로 Entity(Persistence 계층) , Service(Domain Layer) 라고 생각하면 편하다. 문제는 Service 에서도 Transactional 을 사용해야 해서 JPA 설정을 가지고 있어서 처음에는 아 Service Module 에도 entity 의 app..

Spring 2022.01.17

멀티 모듈 Project 에서 Bean 이 Resolve 되지 않을때 해결

A Module 에서 B Module 의 빈이 Resolve 안되는 경우 현재 내 디렉토리 구조는 아래와 같다. 여기서 Service 에서 Entity 즉 PersistenceLayer 에 대한 Dependency 를 주입받아야 했다. 그런데 Service 계층에서는 Entity 계층에 대한 Bean 의존성을 해석하지 못하고 있었다. 아래 사진처럼. 이유는 무엇일까? 바로 Service 계층에 Bean 을 Resolve 하는 과정에서 스캔대상에 Entity Module 이 포함되어 있지 않기 때문이다. 따라서 우리는 ComponentScan 의 basePackage 에 entity Module 도 추가해주어야 한다. 느낀점 멀티 모듈 Project 를 하면서 Spring 에 대한 지식이 생각보다 높지 않..

Spring 2022.01.15

[Intellij] Save Actions 를 이용한 자동 포맷팅

코드를 작성하다 보면 포맷팅의 일관성이 무너지고는 합니다. 그래서 JavaScript 에서는 Prettier 를 통해서 Indent 나 Tab Size 를 맞추는데요. Intellij 에서는 Java 에서 자동 포맷팅을 편하게 이용하는 방법이 있습니다. 일단 Preference(설정) - Plugin 에서 Save Actions 를 설치해줍니다. 일단 이 플러그인은 간단하게 설명해서 저장 키 (cmd + s 또는 ctrl + s ) 키를 눌렀을때 특정 액션을 트리거 해주는 플러그인 입니다. 우리는 이 트리거에 저장키를 누르면 코드를 다시 재 배열 해주는 기능을 이용할 것입니다. 만약 설치가 된다면 Intellij 를 다시 재시작 해주시길 바랍니다. 이제 저장했을때 코드를 재배열해주는 기능을 장착하기 위해..

Java 2022.01.08

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