JWT JWT(Json Web Token)이란? JWT는 인증에 필요한 정보들을 암호화시킨 문자열로 RFC7519 표준입니다. 사용자는 JSON 객체를 HTTP Authorization 헤더에 실어 서버로 보내서 헤더에 포함된 JWT 정보를 통해 인증을 할 수 있습니다. 해싱 알고리즘으로는 HMAC SHA256, RSA등이 사용된다. JWT 토큰의 구성 JWT 토큰은 크게 세 부분으로 나뉘는데 Header, Payload, Signature로 불리며 문자열에서 온점(.)으로 구분됩니다. xxxxxx.yyyyy.zzzzz 헤더(Header) Header는 해싱 알고리즘과 토큰의 타입으로 구성됩니다. { "alg": "HS256", "typ": "JWT" } 정보(Payload) Payload는 토큰에 담을 정보를.. 코드숨 5주차 주간 회고 한 것(Fact) 고양이 장난감가게 유효성 추가하기, 회원 관리 만들기 java validation 학습 느낀 것(Feelings) 테스트의 가치 이번에 엔티티를 만들 때 lombok을 이용하였고 롬복으로 인해 getter에 대한 테스트를 작성하였다. lombok의 Getter가 정상적으로 동작하는지 테스트하는 코드를 작성할 필요가 있을까? code coverage를 위해 작성한 코드였지만 lombok이 정상적으로 동작하는지 믿지 못하고 이러한 코드를 작성할 필요는 없을 것 같다. 추가로 lombok에 의해 생성된 코드를 무시하는 방법이 있었다. - jacoco, lombok 사용시 code coverage 일을 시작 전 할 일을 명확히 할 것. 이번 주 과제를 하면서 디버깅에 꽤 시간을 소비한 몇 가지.. 코드숨 4주차 주간 회고 한 것(Fact) 고양이 장난감 등록 Rest api 작성 JPA에 대한 학습 Lombok의 사용과 사용 시 주의할 점 찾아보기 객체지향의 사실과 오해 읽기 느낀 것(Feelings) JavaDoc 작성 JavaDoc 작성에 약간은 익숙해진 느낌이다. 주석에 추상화된 단어를 사용하여 수정해야 할 일이 발생하는 것을 줄이자. 엔티티와 DTO의 관계 이번주 과제를 하면서 작성한 코드를 보다 문득 엔티티와 DTO사이에서 엔티티가 dto에 대해 알고 있는 코드를 작성하였는데 이 부분에서 이상함을 느꼈다. 엔티티가 dto를 알고 있어 도메인 객체가 지저분하다는 느낌을 받았다. ,엔티티(도메인 객체)를 어디까지 노출할 것인가? 엔티티를 DTO로 변환 할 때 어디가 적절한지에 대한 의문이었다. DTO의 사용은 컨트롤.. I/O I/O란? Input, Output의 약자로 입출력이라고도 한다. 키보드를 통해 입력을 받거나 System.out.println()과같이 화면에 출력하는 것들이 대표적인 예 Stream 자바에서 모든 입출력은 스트림을 통해 이루어 지는데 여기서의 스트림은 자바8의 스트림과는 다른 개념이다. 스트림은 단방향 통신만 가능하며 하나의 스트림으로 입력과 출력을 동시해 수행할 수 없다. 스트림은 먼저 보낸 데이터를 먼저 받게 되는 FIFO(First In First Out) 구조로 되어있다. NIO? JDK1.4부터 지원하게 된 NIO는 New Input Output의 약자로 채널과 버퍼를 사용하는 새로운 입출력을 지원하게 되었다. Buffer 읽고 쓰기가 가능한 메모리 영역으로 데이터를 다른 곳으로 전송하는 동.. jacoco, lombok 사용시 code coverage 증상 jacoco에서 Lombok의 @Data 주석이 달린 도메인 클래스의 코드 커버리지가 0%로 나오는 경우가 발생하였다. @Entity @Getter @NoArgsConstructor @EqualsAndHashCode(of = "id") public class Product { //... } 해결법 lombok에서 생성한 코드에 @lombok.Generated를 붙이면 되는데 lombok.config을 추가하여 여러가지 설정을 할 수 있도록 하고 있다. lombok.addLombokGeneratedAnnotation = true를 추가하여 롬복에서 생성한 코드에 @lombok.Generated를 추가해주는 설정을 하면 된다. IntelliJ Auto import *처리 방지 증상 IntelliJ에서 자동 import나 Optimize imports를 할 때 개별 클래스가 아니라 와일드카드로 전체가 import 되는 현상이 발생하게 된다. import * 은 좋지 못한 습관이니 이를 방지해보자. 해결법 preferences - Editor - Code Style - java에 가보면 Class count to use import with '*'과 Names count to use static import with '*'의 기본값이 5와 3으로 낮게 잡혀있는 것을 확인할 수 있다. 이값을 999로 크게 늘린 후 확인해보면 import *이 아닌 개별 import가 되는 것을 확인할 수 있다. 코드숨 3주차 주간 회고 한 것(Fact) JUnit5, MockMVC, Mockito 학습하기 Java 어노테이션 학습 객체지향의 사실과 오해 읽기 느낀 것(Feelings) 테스트에 좀 더 테스트하는 의도를 드러내자 다른 사람이 봤을 때 테스트 코드가 어떤 의도로 작성됐는지 파악하기 힘들다면 좋은 테스트는 아닌 것 같다. A를 테스트하고자 하였는데 B를 테스트하는 코드처럼 보였다. 여전히 이전에 받았던 것과 유사한 피드백이 존재했다. 변수명을 지을 때나 Magic literal 사용에 대해 좀 더 생각하자. 배운 것(Findings) JUnit5로 테스트 코드 작성하기 JUnit에 대해서 약간의 사용법은 알고 있었지만 4에서 5로 넘어가면서 바뀐 점들을 인지하지 못한 채 작성했었는데 변화된 점들에 대해 정리할 수 있었다. 특.. junit5 @Nested 계층구조로 테스트코드 작성하기 Describe - Context - It 구조 BDD(Behaviour Driven Development)에서 테스트 코드를 작성하는 구조로 구조에 대한 설명은 BETTER SPECS에 자세히 설명이 되어있다. 키워드를 간단히 요약해보면 Describe: 테스트할 대상을 명시 Context: ~하면, ~할 때 같은 상황이나 조건을 명시 It: ~한다와 같은 대상이 해야 할 행동을 명시 내가 생각한 구조의 가장 큰 장점은 테스트를 계층적으로 작성하여 수행 결과를 파악하기 좋다는 점이다. 수행 결과가 보기 좋아서 자신이 놓친 경우를 찾기 쉽다. Junit5의 @Nested Junit5부터 @Nested를 사용하여 계층적으로 테스트 코드를 작성할 수 있다. 우선 @Nested를 사용하지 않고 간단한 계산기 .. 이전 1 2 3 4 5 6 7 8 ··· 12 다음