본문 바로가기

Spring8

[예외처리] @Valid 예외처리에 사용되는 BindingResult 객체는 무엇일까? 이번 글에서는 @Valid 에 의해 발생되는 MethodArgumentNotValidException.class 에 속하는 'BindingResult' 에 대해 알아보고자 한다. 문제 상황, 찾아보게 된 계기 - MethodArgumentNotValidException 에 속하는 BindingResult 가 무엇인가? (이동) 학습 과정 - BindingResult 파고들기 (이동) 결론 - 예외처리 코드가 동작하는 원리에 대한 이해 (이동) 1. 문제상황 - MethodArgumentNotValidException 에 속하는 BindingResult 가 무엇인가? 더보기 https://github.com/cheese10yun/spring-jpa-best-practices/blob/master/doc/s.. 2022. 7. 17.
Nested Class 에 언제 static 을 붙여야 할까? 이전 DTO 는 어떻게 구성하고, 변환해야 할까? 글에 이어서 dto 를 inner class 로 묶을 때, 각 class 에 static 을 붙여주는 것이 좋은데, 이 상황에서 왜 static 을 붙이는 것이 좋은지 설명하려다 보니 Java 의 Nested Class 부터 알고 넘어가면 좋을 것 같아 정리하게 되었다. Nested Classes, Terminology (이동) Nested Classes 를 왜 사용하는가? (이동) Inner Classes (이동) Static Nested Classes (이동) DTO 를 Nested Classes 로 묶을 때 왜 static 을 붙이는 것이 좋은가? (이동) 1 ~ 4 까지는 oracle 의 공식 문서에서 필요한 내용을 번역한 것이며, 5번이 결론이다.. 2022. 7. 13.
DTO 는 어떻게 구성하고, 변환해야 할까? 지난 번에 DTO 를 사용해야 하는 이유 를 정리해 본 후, 어떻게 매핑하면 될 지에 대해서도 한 번 정리해둔다면 내 생각을 말할 때 많은 도움이 될 것 같다고 생각했다. DTO class 를 어떻게 구성하고 변환할 것인가 1. 처음 공부했던 방식 (이동) 2. 개선했던 방식 (이동) 3. 각 방식에서의 장점과 단점, 내 생각 (이동) 4. 그 당시와 지금의 생각 (이동) 1. 처음 공부했던 방식 처음 Spring Boot 를 접하고 공부를 시작할 때에는 위와 같이 DTO class 들을 작성했었다. DTO 디렉토리 아래에 나름 편하게 구분하고 싶어서 {POST / GET / PATCH / DELETE} + {작업내용} + {Req / Res} 와 같은 네이밍을 가져갔었다. Entity - DTO 매핑방.. 2022. 7. 13.
DTO 를 사용해야 하는 이유 1. 필요한 데이터만을 응답으로 줄 수 있다. 클라이언트로 넘겨줘야 할 정보는 API 마다 상이하다. Entity 자체를 클라이언트에 대한 응답으로 넘기는 것은 불필요한 데이터를 포함할 수 있으며, 혹시 모를 민감 정보 노출 등의 문제를 일으킬 수 있다. 2. Entity 구현을 캡슐화하여 보호할 수 있다. DTO 가 없다면 클라이언트의 요청과 Entity Model 이 강하게 결합되어 클라이언트에서의 요구사항 변화가 Entity 에 영향을 끼치기 쉽다. Entity 는 도메인의 핵심 로직, 속성을 갖고 있으며, 실제 DB 테이블에 대응되는 클래스이므로 함부로 변경되지 않도록 보호되어야 한다. 3. Validation 코드와 Entity 속성 코드를 분리할 수 있다. Entity class 에는 @Col.. 2022. 7. 11.
[Spring] IoC, DIP 와 DI 이해하기 https://youtu.be/8lp_nHicYd4 '우아한 Tech' 채널의 [10분 테코톡] 영상을 정리합니다. 더보기 00:34~01:35 : IoC '제어' 와 '역전' 의 의미 01:36~04:27 : IoC 는 왜 필요할까? 무엇이 달라질까? 04:28~07:25 : DIP 란? 07:26~07:58 : IoC 와 DIP 의 목적 07:59~10:13: 중간정리, IoC 와 DIP 를 적용한 코드와, 그렇지 않은 코드의 차이 10:14~11:03 : DI '의존성' 의 의미 11:04~12:25 : 의존성 주입의 3가지 방법 (생성자, setter, Interface) 12:26~13:04 : 의존성 분리 방법 : DIP 13:05~13:44 : 중간정리, principle :.. 2022. 6. 25.
[Spring boot] 테스트코드의 필요성 이동욱님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 를 읽으며 새롭게 공부한 내용에 대해 정리합니다. chap2 에서는 단위 테스트의 필요성 간단한 테스트코드 작성 롬복을 사용하여 DTO 편하게 다루기 등의 내용이 있었다. 그 중 테스트코드의 필요성에 대해 작성하고자 한다. 1. 단위 테스트의 필요성 첫 번째 이미지는 단위 테스트코드를 작성하여 진행했던 프로젝트이고, 두 번째 이미지는 테스트코드를 몰랐을 때 전부 API 테스트 도구로 테스트했던 프로젝트이다. 책에서 단위테스트가 필요한 이유로는 ​빠른 피드백 / 자동검증 / 기존 기능의 정상 동작 보장 을 꼽았다. 이 책을 진작에 읽었어야 하는지, 아니면 겪어보았기 때문에 더 공감이 가는 것인지는 모르겠지만 정말정말 공감가는 내용이었다. 1. .. 2022. 4. 5.