Programming/SpringBoot
Spring Logging (2) : Console Log? AWS CloudWatch? 실행환경별로 로그 남기기
Spring Logging (2) : Console Log? AWS CloudWatch? 실행환경별로 로그 남기기
2021.10.31이전 포스팅에서 HTTP별로 Trace Id를 부여하고, 각 HTTP 요청과 응답에 대해 콘솔 로그를 출력하는 부분을 다뤘다. 이번 포스팅에서는 Spring Active Profile에 따라 콘솔로그를 출력할지, AWS CloudWatch로 로그를 전송할 지 설정하는 부분을 안내한다. 만약 Active Profile이 dev, prod라면 AWS의 CloudWatch로 보내고, 그 외의 경우 콘솔로그를 출력하도록 한다. (AWS IAM 사용자에게 CloudWatch 정책 권한을 넣어두자.) build.gradle 의존성 추가 dependencies { ... implementation 'ca.pjer:logback-awslogs-appender:1.4.0' //logback to aws cloudwatc..
Spring Logging (1) : HTTP Request/Response 로그 남기기
Spring Logging (1) : HTTP Request/Response 로그 남기기
2021.10.29서비스를 운영하면서 서버가 받는 HTTP 요청과 서버가 제공하는 응답을 로그로 남긴다면, 추후 무슨 일이 생겼을 때 추적이 용이하다. 이번 포스팅은 Spring Boot을 사용하여 로그 남기기 시리즈 중 첫번째 포스팅이다 🥳 본 포스팅에서는 Spring Boot을 사용하여 HTTP 요청과 응답에 대한 로그를 남기고, 이 로그를 추적하기 용이하게 HTTP 요청당 Trace Id를 부여하겠다. 다음 포스팅에서 실행중인 프로파일(dev, prod 등)에 따라 콘솔에 로그를 출력할지, 혹은 AWS CloudWatch에 로그를 전송할지 설정하는 예제까지 다룬다. 작업 결과 미리보기 맨 아래 두 줄의 로그를 잘 봐보자. HTTP Request와 Response에 대한 로그를 출력하고 있다. 그리고 하나의 HTTP ..
Filter, Interceptor, AOP의 간단 용도
Filter, Interceptor, AOP의 간단 용도
2021.10.23Filter Spring이 아닌 톰캣과 같은 웹 컨테이너의 영역 ex) HTTP 또한 Spring이 아닌 WAS에서 처리하는 것이니까 HTTP Request/Response에 대한 로깅은 Filter에서 처리하는 게 적절 Interceptor Spring이 제공하는 레이어로, DistpatcherServlet 이 호출되기 전, 호출된 후에 끼어들기 때문에 Spring Context 내부에서 요청과 응답을 가공할 수 있음 ex) Spring Security, 인증 처리를 하는 것이 적절 AOP Spring 내에서 흩뿌려진 반복적인 코드를 한 곳에 모아서 응집력있게 관리할 수 있어 유지보수에 효울적이고, 좀 더 비즈니스 로직에 집중할 수 있으며, 변화 수용에 용이함 ex) 인가, 로깅 등 비즈니스 로직 전/..
Spring JSR 380 Validation 적용과 테스트 코드 작성
Spring JSR 380 Validation 적용과 테스트 코드 작성
2020.11.01유효성(Validation)을 체크하는 Java bean인 JSR 380(또는 Bean Validation 2.0)에 대해 간단히 알아보겠다. Java 8 버전 이상의 버전이 요구되며, 필요한 의존성을 추가해야한다. (의존성에 대해서는 추천자료를 참고하길 바람) Java 8 버전 이상의 버전이 요구되며, Spring boot 2.3 이후부터는 validation 의존성을 추가해야한다. org.springframework.boot spring-boot-starter-validation or implementation 'org.springframework.boot:spring-boot-starter-validation' 유효성 체크 정의 유효성 체크를 하고 싶은 DTO에 검증 어노테이션와 관련 메시지를 정의..
Jackson Property - Custom PropertyNamingStrategy 적용
Jackson Property - Custom PropertyNamingStrategy 적용
2020.07.16Jackson에서는 필드명을 직렬화/역직렬화하는 네이밍 전략(PropertyNamingStrategy)을 제공한다. 기본적으로는 카멜 케이스를 제공하고 있으며, 전역적으로 네이밍 전략을 변경하거나 혹은 특정 클래스(DTO)에만 전략을 설정할 수도 있다. 다만, 내가 원하는 '대문자_스네이크_케이스' 전략이 지원 대상이 아니어서 커스텀이 필요한 상황이었다. Camel Case(카멜 케이스) : camelCase Snake Case(스네이크 케이스) : snake_case 내가 원하는 대문자 스네이크 : SNAKE_CASE Jackson이 지원해주는 네이밍 전략은 아래와 같다. PropertyNameingStrategy 클래스에 대한 공식 문서를 살펴보면 자세한 정보를 얻을 수 있다 (일부 네이밍 전략은 S..
Springboot EhCache 3 - 환경설정부터 self-invocation 처리까지
Springboot EhCache 3 - 환경설정부터 self-invocation 처리까지
2020.07.12Ehcache 3 버전을 Spring Boot에 적용해보겠다. Ehcache 3 버전부터는 JSR-107 cache manager를 구현했다고 한다. 참고로 Spring 4.1버전부터 JSR-107 annotations을 강력하게 지원해주기 시작했다. EhCache 2.x 버전과 3.x 버전의 환경설정 포맷 및 사용방법이 조금 달라졌다. 다들 사용중인 버전에 맞추어 환경설정하기를 바란다. (tti, ttl, expiry 등 캐시 유지기간에 대한 속성을 적용하려면 버전과 환경설정이 일치해야한다.) 다음과 같은 목차로 포스팅을 구성하였다. Ehcache 적용하기 의존성 등록 Spring cache management 활성화(@EnableCache) Ehcache 캐시 설정 캐시 적용 (내부에서 호출되는 경우..
Springboot 개인정보 암복호화 저장 (4) 암복호화 시점과 주체 선정 - JPA AttributeConverter
Springboot 개인정보 암복호화 저장 (4) 암복호화 시점과 주체 선정 - JPA AttributeConverter
2020.07.01개인정보 암복호화 시점과 주체에 대해 어떤 고민을 하였는 지 공유하겠다. 다른 방법들도 많겠으나 나는 세 가지 후보에 대해서 고려하였고, JPA AttributeConverter를 사용하기로 결정했다. 이를 어떻게 적용하였는 지 간단히 코드를 공개하겠다. JPA AttributeConverter filter를 이용해 view controller 시점에 변경 서비스 단에서 암복호화 함수 사용 암복호화 시점/주체 별 고려사항 1. JPA AttributeConverter JPA에서 제공해주는 속성 변환기로, 아래 그림과 같이 Java Entity와 DB 사이에서 동작한다. 암복호화 기능 외에도 대소문자 처리나 포맷 변경을 위해서 사용하기도 한다. 장점 암복호화 대상이 Entity 클래스에 명확하게 드러나기 ..
Springboot 개인정보 암복호화 저장 (3) DB에 저장하기(의외의 복병, 인코딩과 모델링)
Springboot 개인정보 암복호화 저장 (3) DB에 저장하기(의외의 복병, 인코딩과 모델링)
2020.06.27SEED 알고리즘으로 데이터를 암복호화하는 기능까지 구현했다. 이제는 암호화된 데이터를 String 형태로 DB에 저장하고, DB에 암호화된 String 데이터를 복호화하여 보여주면 된다. 이를 위해 두 가지를 진행하면 된다. 1. 암호화된 데이터를 DB에 저장할 수 있는 형태로 변환 (base64나 hex로 인코딩하여 DB에 저장) 2. 암호화된 데이터의 타입과 길이로 테이블의 컬럼 변경 (타입별로 암호화된 데이터 길이 테스트) 이전 코드의 문제점 이전에 구현했던 SEED 클래스와 테스트 코드를 다시 살펴보고 문제점을 확인해보자. public class Seed { private static final byte[] pbszUserKey = "testCrypt2020!@#".getBytes(); priv..
Springboot 개인정보 암복호화 저장 (2) 암복호화 알고리즘 - KISA 블록암호 SEED
Springboot 개인정보 암복호화 저장 (2) 암복호화 알고리즘 - KISA 블록암호 SEED
2020.06.23암호화 알고리즘을 선택하는 것은 정부 기관 KISA 인터넷진흥원에서 제공하는 표준 안내서를 참고하였다. 데이터 암호화에 대한 가이드는 다른 출처에서도 찾아볼 수 있다. 하지만 KISA의 안내서를 선택한 이유는 KISA가 공신력이 있는 기관이고, 우리나라 법률을 반영한 안내서를 제공하고 있을 것이라는 생각이어서다. 참고로 개인정보에 대한 법률 조항은 기관마다 조금씩 다른데, 이 때는 모두 충족하는 것을 원칙으로 한다. 어떤 알고리즘을 선택해야할까? 데이터의 성격에 따라 암복호화 알고리즘 유형이 다르며, 유형 내에서도 다양한 암복호화 알고리즘이 존재한다. 패스워드는 일방향(해쉬함수) 암호화, 바이오 정보는 블록암호 알고리즘을 선택하기를 권고하고 있다. KISA에서 2017년에 개정한 개인정보 암호화 안내서를..
Springboot 개인정보 암복호화 저장 (1) A-Z 과정 기록
Springboot 개인정보 암복호화 저장 (1) A-Z 과정 기록
2020.06.21이직 한 달 차, Springboot 한 달 차. 신규 프로젝트를 인수인계 받았다. springboot, Gradle, JPA로 기본적인 개발이 된 상태였고, 나는 요구사항에 따라 암복호화, 외부 API 연동, DB 모델링 변경, UI 변경을 하게 되었다. 이번 암호화 적용기를 통해 다룬 분들과 미래의 내가 더 정교하고 깔끔하게 진행하기를 바라며 경험을 공유한다. 이번 포스팅은 4-5개로 진행될 예정이고, 다음 포스팅에는 암호화 알고리즘을 어떻게 선택했는 지에 대해 말하겠다. 프로젝트 배경 간단 설명 이번에 맡게 된 디지털 헬스케어 관련 프로젝트는 환자의 건강검진 기록을 외부 병원 API에 송신하여 환자의 기대수명과 건강나이, 질병 발병률을 예측해주는 서비스이다. 환자의 건강검진 기록은 임시로 저장되며,..