TIL(Today I Learned)
-
[TIL] 20230302일의 기록TIL(Today I Learned) 2023. 3. 2. 20:41
*20230302의 기록 벌써 부트캠프에서 하는 마지막 프로젝트를 마무리 하기까지의 시간이 2주도 채 안남았다. 최종 프로젝트라고 생각하니 아직 많이 부족하고 그로인해 마음의 여유도 없어서인지 그동안 블로그에 신경을 쓰지 못했다. 따라서 중간기록 삼아 이번 글을 작성해보려 한다.(그냥 일기라 생각하고 쭉 적을거라 글이 길어질 예정 ^^!) 이번 프로젝트의 주제는 '개발자들을 위한 커뮤니티 만들기'이다. 현업 개발자나 예비 개발자, 혹은 누구든지 개발에 관심있는 사람들끼리 소통과 지식공유를 할 수 있는 커뮤니티이다. 기본적인 커뮤니티의 기능인 회원가입 / 로그인, 글 작성, 조회, 수정, 삭제 기능을 가지고 있고, Q&A 게시판에서는 네이버의 지식in 처럼 질문글을 쓴 작성자가 포인트를 걸고, 답변 작성자..
-
[TIL] 카테고리 별 기프트 카드 조회 컨트롤러 수정하기TIL(Today I Learned) 2023. 2. 16. 16:37
*20230216의 기록 어제 카테고리별로 기프트 카드를 조회하는 API를 구현하는데, 바로 전 게시글을 보면 알 수 있듯이 GiftCardCategory 는 Enum 클래스이며, @PathVariable 형식으로 이넘타입을 받는 다는 사실이 너무 찜찜했다. 그래서 생각해 낸 방법이 Enum의 생성자에 매개변수로 Long 타입의 categoryId 를 갖게 해주자는 것이다. 그리고 categoryId의 값을 이용하여 Enum 상수 객체를 반환해주는 static 메서드를 생성해주었다(서비스 단에서 이 메서드를 이용하여 Enum 상수 추출 후 GiftCardRepository에서 findByEnumType(category)을 이용하여 해당 카테고리를 가진 값들 가져옴). 따라서 변경된 GiftCardCate..
-
[TIL] Spring Boot 의 Ambiguous handler methods mapped for 에러TIL(Today I Learned) 2023. 2. 15. 20:05
*20230215의 회고 오늘도 어김없이 팀프로젝트 진행하면서 작성한 API 가 문제없이 잘 돌아가는지 포스트맨으로 테스트를 진행하던 중, 'Ambiguous handler methods mapped for ~~' 라는 에러 메세지를 마주하게 되었다. 구글링을 해본 결과, 중복된 API가 존재해서 이러한 오류가 발생했다고 한다. 그래서 내가 짠 코드를 살펴본 결과 다음과 같은 문제점이 있었다. 두 메서드 모두 @GetMapping 이며 "/gift-card/{파라미터}" 형식의 API를 가지고 있었다. 나는 @PathVariable로 파라미터를 받는 타입이 Enum 과 Long 으로 다르기 때문에 문제가 없을 거라고 안일하게 생각했다. 그러나 스프링 부트에서는 @PathVariable 로 받는 파라미터의..
-
[TIL] @Builder 와 @NoArgsConstructor, @AllArgsConstructorTIL(Today I Learned) 2023. 2. 14. 17:15
*20230214의 회고 오늘 페이징 처리를 하기 위해 Page 로 받아온 것을 Page 로 변환해야 하는 경우가 생겼다. 따라서 빌더패턴을 이용하여 로직을 작성하던 중 오류가 발생하는 것을 겪었다. @Getter 어노테이션이 있어서 값은 분명 다 받아올 수 있을텐데, 왜 값을 인식을 못하는걸까... 정말 난감했다. 그렇게 열심히 구글링을 해본 결과, @Builder 와 @NoArgsConstructor 를 함께 사용하려면 꼭! @AllArgsConstructor 가 함께 있거나 직접 모든 멤버변수를 인자로 받는 생성자를 직접 생성해주어야 한다고 한다!!!!!!! 또한 @Builder 를 사용할 때 @NoArgsConstructor 뿐만 아니라 손수 만든 다른 생성자가 있다면, 그 때도 모든 필드를 갖는..
-
[TIL] Builder 패턴 사용하기TIL(Today I Learned) 2023. 2. 13. 23:54
*20230213의 회고 팀 프로젝트를 진행하던 중 생성자로 매개변수를 많이 받는 생성자를 사용하게 되었다. 팀원분들이 이럴 때 빌더패턴을 사용하면 좋다고 말해주셔서, 빌더패턴에 대해 공부하게 되었다. 1. 빌더패턴 이란? 복합 객체의 생성 과정에서 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 쉽게 말하자면, 객체를 생성할 때 생성자로 내가 받아야 하는 매개변수의 개수나 종류별로 생성자를 만들어주지 않아도 동일한 생성절차를 거쳐 내가 필요한 생성자만 표현해낼 수 있다는 뜻. 2. 빌더패턴의 장점 필요한 데이터만 설정 가능 생성자의 매개변수의 인자가 의미하는 바가 무엇인지 한눈에 파악 가능 변경 가능성을 최소화 할 수 있음 (setter 사용 X) 3. ..
-
[TIL] Controller 에서 Entity 를 그냥 반환하면 안되는 이유 2가지TIL(Today I Learned) 2023. 1. 30. 20:05
*20230130의 회고 저번 프로젝트를 진행하던 도중 Entity를 Controller에서 그대로 반환하니 계속해서 Entity 를 반환하게 되는 무한루프에 빠지는 모습을 보게 되었다. 그 이유는 Entity 객체가 다른 Entity 객체를 참조하고 있기 때문이었는데, 이를 계기로 Controller 에서 Entity를 그냥 반환하면 안되는 이유에 대해서 정리해보려 한다. 1. Controller 에서는 Entity 를 JSON 으로 변환해서 반환할 텐데, 객체가 객체를 가지고 있으면 계속해서 서로의 toString()을 호출하기 때문에 무한루프에 빠지게 된다. 따라서 Entity를 직접 반환하면 안된다. 2. Entity는 충분히 변경될 수 있다. 만약, 변경된다면 컨트롤러의 API 스펙이 모두 바뀌..
-
[TIL] 엔티티와 테이블의 차이TIL(Today I Learned) 2023. 1. 26. 23:26
*20230126의 회고 JPA 공부를 하던 중, 엔티티와 테이블 이라는 개념에 대해 의문이 생겼다. 비슷한 것 같지만 구분해서 사용하는 것 같고, @Entity 와 @Table 의 어노테이션도 따로 존재하는 것을 보니 분명한 차이점이 존재할 것이다. 따라서 이 개념에 대해 한 번 정리해보면 좋을 것 같아서 오늘 찾아보며 공부한 내용을 기록해보려 한다. 객체에 @Entity 어노테이션을 붙이면 JPA가 이 객체를 엔티티로 관리해주게 된다. 엔티티는 실제로 존재하지 않는다. DB상에 물리적으로 존재하는 것은 테이블이다. 엔티티는 현실세계에 존재하는 것을 DB상에서 표현하기 위해 사용하는 추상적인 개념이다. 엔티티는 객체이다! @Entity(name = "~~~~") JPA 에서 사용할 엔티티 이름을 지정해..
-
[TIL] DTO에 왜 @Getter 어노테이션이 필요할까...?TIL(Today I Learned) 2023. 1. 18. 23:52
*20230118의 회고 1. 오늘 마주한 문제 - 심화 팀 프로젝트를 진행하다가 아래와 같은 에러 메세지를 마주하였다. 에러메세지를 가져와보면 이렇다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.market9.dto.SellerResponseDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 2. 해결방법 - @Getter 어노테이션을 DTO 클래스에 붙여주니 에러메세지가 사라지고 잘..