분류 전체보기
[스터디] 배워서 바로 쓰는 스프링 프레임워크
[스터디] 배워서 바로 쓰는 스프링 프레임워크
2020.07.22스터디 시작 : 2020년 7월 23일, 중간 중간 스터디 과정에 대해 내용 업데이트 예정 Springboot을 사용하는 회사로 이직했다. (입사 3개월 차ㅎㅎ) 자바도 까먹은 지 오래이고, 웹 개발도 처음이라 제로 베이스로 시작하는 것과 다름이 없어서 공부가 시급했다. 입사하자마자 작은 프로젝트에 투입되었기 때문에 당장 개발을 위해 실무에 적합한 도서인 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 읽었다. 근무 시간에는 Spring boot 프로젝트를 하고, 퇴근 후에는 책을 봤다. (이 책은 당장 실무에 투입되어야 하는 분께 추천한다.) 실무형 책도 도움이 많이 되었지만 두 달 정도 기본적인 CRUD를 개발하고 나니, 정석대로 이론 공부가 필요하다고 판단되었다. 어떤 기능을 추가하거나 조작하..
네이버클라우드 ubuntu 서버에 NGINX 설치 및 포트포워딩
네이버클라우드 ubuntu 서버에 NGINX 설치 및 포트포워딩
2020.07.18이번 포스팅에서는 네이버 클라우드에서 서버를 생성하고 NGINX 설치를 진행해보겠다. CentOS로 NGINX를 설치했을 때에는 수월하게 진행되었는데, ubuntu로 설치할 때에는 오류가 떠서 당황스러웠다. 때문에 ubuntu에 nginx 설치하는 방법에 대해 참고했던 문서를 정리해보겠다. 서버 생성 서버 생성은 네이버클라우드 공식문서를 보고 진행하였다. 네이버클라우드 서버 생성 가이드: https://www.ncloud.com/guideCenter/guide/1 서버 : ubuntu-18.04 (bionic) 아래와 같이 생성하였다. 네이버는 조금 독특하게 인스턴스가 한 겹 감싸져 있다. 위에서 말하는 포트 포워딩 정보가 뜻하는 바는, 내가 생성한 인스턴스와 네이버에서 제공하는 내 계정의 사설IP+PO..
[책 리뷰] 강추 후기 - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
[책 리뷰] 강추 후기 - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
2020.07.16스프링 부트와 AWS로 혼자 구현하는 웹 서비스 완독 리뷰 후기를 올린다.책을 구매했을 때에는 저자가 '기억보다 기록을' 블로그를 하시는 이동욱님인 줄 몰랐다. (블로그 감사히 보고 있습니다.) Spring Boot를 쓰는 회사에 이직하게 되면서 당장 프로젝트를 시작해야하는 상황이었다. 보름 정도는 업무 설명을 듣고, 환경 설정, 소스 훑으면서 조그마한 수정을 하며 알음알음 알아갔다. 이렇게는 안되겠다 싶어서 당장 개발에 도움이 될 만한 실습 책을 알아보기 시작했다. 회사에서 사용하는 스펙이 들어간 키워드 springboot, lombock, gradle, jpa, aws 등이 포함된 스프링 부트 책을 찾다가 발견했다. (박수)후기 바로 간다. 1. 저자의 정성이 느껴지는 친절하고 매끄러운 예제사실 프로..
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 캐시 설정 캐시 적용 (내부에서 호출되는 경우..
CI Travis Could not parse 오류 - yml 문법 검사하기
CI Travis Could not parse 오류 - yml 문법 검사하기
2020.07.08Gitgub의 무료 CI Tool인 Travis로 자동빌드를 구축하던 중 아래와 같은 오류가 발생했다. IntelliJ는 별다른 말을 하지 않았는데, 막상 build를 하니 오류가 발생하였다. 업로드한 yml 파일에 문법 오류를 검사하기 위해 yml lint 사이트에 접속하였다. 사이트 접속 정보 : http://www.yamllint.com/ 사이트에 yml 파일 내용을 복붙하고 [Go] 버튼 수행 시, 어느 부분에서 오류가 발생했는 지 알려준다. 불필요한 인덴트가 있어서 build가 실패했었다. intelliJ가 왜 안알려줬지? 하고 보니까 내가 노란색 경고창을 무시했던 거였다. intelliJ Plugins에도 yml 문법을 체크해주는 것들이 많이 있는데, 나는 YAML 플러그인을 설치했다. yml..
Java 단일 요소의 배열 Collections.singletonList vs Arrays.asList
Java 단일 요소의 배열 Collections.singletonList vs Arrays.asList
2020.07.06나의 개발 친구 intelliJ가 친절하게 알려주었다. 단일 요소의 배열에는 asList() 대신 singletonList()를 사용해달라고. intelliJ가 괘 이러한 가이드를 주었는지 IntelliJ의 설명을 읽어 보자. [요약] 메모리 절약을 위해서 요소가 없거나(empty) 하나인 경우에는 Collections.emptyList() 또는 Collections.singletonList()를 사용해라. Arrays.asList()는 배열의 요소가 한 개여도 Collections.singletonList()보다 사이즈가 크다는 것을 추측해볼 수 있다. 각 메소드에 대해 자세히 알아보자. Collections.singletonList() 변경여부 : immutable (불변) 사이즈 : size가 1로..
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에 송신하여 환자의 기대수명과 건강나이, 질병 발병률을 예측해주는 서비스이다. 환자의 건강검진 기록은 임시로 저장되며,..
예측 모델의 성능 진단 도구 Accuracy와 ROC curve
예측 모델의 성능 진단 도구 Accuracy와 ROC curve
2020.06.16예측 모델의 성능을 평가하기 위한 방법은 많은 것들이 있다. 그 중에서 흔히 사용하는 진단 도구인 정확도(Accuracy) 그리고 민감도(sensitivity)와 특이도(specificity)를 사용한 ROC curve를 알아보도록 한다. 회사에서 진행중인 프로젝트 중 건강 상태를 예측해주는 AI 모델의 API를 호출하여 환자들에게 제공해주는 서비스가 있다. 해당 모델은 다른 회사가 만들었지만, 서비스의 핵심 API인 만큼 최소한 사업 계획서의 내용을 이해하고자 본 포스팅을 작성하게 되었다. 예측 모델의 결과가 아래와 같이 정리되어 있다고 가정하고, 이 모델을 정확도(Accuracy)와 ROC curve를 통해 평가해보겠다. 예측 모델 결과 (예시) 이진 분류(Binary Classification)으로..