Series 26

표준 예외 처리에서 로깅까지 (1)

이전에 코드스쿼드에 공개해서 반응이 뜨거웠던(?) 표준 예외 처리가 있습니다. 하지만 실무를 하다 보니 부족한 점이 보이고, 고도화하는 김에 로깅까지 해야겠다고 생각해서 글을 작성해봅니다. 이전의 repository 도 남기지만 굳이 참고하지 않고 본 코드만 따라오셔도 무방합니다. [deprecated] 표준 예외 처리 표준 예외 처리에서 로깅까지 Step 1. 리팩터링 이전에 작성한 표준 예외 처리를 리팩터링 하는 것으로 시작하겠습니다. 1. ExceptionAdvice 분리 2. 테스트 케이스 이 정도로 장애 원인을 추적할 수 있나? 실무에서는 장애를 추적하기 위해 장애 난 시점만이 아닌 연관된 흐름을 봐야 합니다. 하지만 Step 1 에서는 logId 가 에러 발생 시점에만 존재하기 때문에 동시에 ..

Spring Security 로 회원 가입을 구현해보자 (3)

Step 4. Custom Annotation 을 통해 로그인 정보 가져오기 1. Custom Annotation 구현 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface LoginMember { boolean required() default true; } annotation 은 기본 값을 true 로 두고 필요한 api 에서만 사용합니다. @Component public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver { private static final String AUTHORIZATION_HEADER = "au..

Spring Security 로 회원 가입을 구현해보자 (2)

Step 3. JWT 적용 1. 준비 // build.gradle dependencies { implementation 'io.jsonwebtoken:jjwt-api:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' } // application.yml application: jwt: secreat: ${SECREAT:341242FF3617E8D58D7A4F6FEED56FEB8619CF82B9B00829A02E161A4418BFA2} 본 예제에서는 jwt 생성시 HS256 알고리즘을 사용합니다. HS256 알고리즘을 위해서는 secreat 이 256 bit 이상이어야하..

Spring Security 로 회원 가입을 구현해보자 (1)

생각해보니 저는 이미 구현되어 있는 인증을 가져다 쓰기만 할 뿐, 그 내부 구조는 이해하지 못하고 개발해온 것 같습니다. 그래서 이번 사이드 프로젝트에는 Spring Security 를 활용해 암호화부터 JWT 까지의 회원 가입을 구현했고 그 기록을 남겨봅니다. 아쉽게도 Spring Security 는 이해가 깊지 못해 일부 저의 방식으로 구현한 내용이 있습니다. 내용을 읽는데 참고해주세요. 코드는 일부 각색되었습니다. 각 Step 별 자세한 코드는 repository 의 서브 branch 를 참고해주세요. Spring Security 로 회원 가입을 구현해보자 Step 1. 회원 가입 @Entity public class Member { @Id @GeneratedValue(strategy = Gener..

기술 '잘' 선택하기

최근 회사에 DB 형상 관리 라이브러리를 새로 적용할 일이 생겼습니다. 익숙한 것은 flyway 였지만 요즘은 오픈소스가 워낙에 많고, 내가 모르는 더 좋은 라이브러리가 있지 않을까?하는 생각에 찾아보기 시작했고, 그 과정이 생각보다 재미있었기에 글을 작성해봅니다. 결론부터 말하자면 flyway를 선택했습니다. 이하에서는 라이브러리 대신 기술이라는 단어를 사용합니다. 기술을 검색하기 시작했을 때 제가 알던 키워드는 형상관리, flyway 단 2개였습니다. 1. 구글 검색하기 개발의 알파이자 오메가 구글 검색입니다. 1 페이지에 모두 같은 기술로 도배되어있기에 사실상 여기에서 flyway를 선택하고 끝내도 이상하지 않습니다. 하지만 관련 검색어를 보면 다른 키워드도 보입니다. 조금 더 검색해봅시다. 2. ..

Series/실전! 2021.05.07

enum 을 조회하는 방법

회사의 enum 조회 코드를 보다가 불현듯 이펙티브 자바와 블로그에서 본 개선 방법이 생각나서 실험을 해봤습니다. Spring boot 2.x.x, Java 11 테스트 코드 Repository Link enum 조회 시 Stream, Array, Map의 성능 차이는 얼마나 될까? @Getter @AllArgsConstructor public enum CategoryColor { YELLOW(0, "#FEDE00"), BLUE(1, "#85C4E7"), ORANGE(2, "#F3AC13"), ... ; private final int order; private final String code; public static final Map categoryColorMap = new HashMap(); sta..