Spring(5)
-
HttpMediaTypeNotAcceptableException: Could not find acceptable representation
위와 같은 코드를 작성했고 이 Controller에서 DB 조회 후 MemberResponseDTO에 담아 보내게 되는 단순한 로직이다. 전에는 갑자기 잘 되던 api 가 ResponseDTO로 바꾸고 나서 잘 안 되길래 뭔가 싶더니 HttpMediaTypeNotAcceptableException라는 에러가 났다. 그래서 직접 에러를 검색해 보니, 클라이언트가 받을 수 있는 response를 만들 수 없다는 에러이다. 실제로 postman에서도 다음과 같은 에러가 나온다. 하지만 로그를 보면 즉, DB에 쿼리를 하는 과정까지는 문제가 아니었음을 알 수 있다. 그렇다면 쿼리를 하고 나서 클라이언트에게 올바를 형태를 주지 못한다는 것이고, 그래서 DTO를 봤더니 @Getter 가 없었다. 여러분은 꼭 @Ge..
2023.10.30 -
비밀번호의 암호화 위치, 엔티티 내부 vs 서비스 계층?
위와 같은 단순한 게시판 프로젝트를 진행 중에 있다. 회원 엔티티의 password 필드는 프론트엔드에게서 받은 비밀번호를 암호화하여 저장하는 필드이다. 회원가입을 할 때 보통은 이 암호화라는 작업을 MemberService 계층 안에서 작업한다. public class MemberService { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; //회원 등록 @Transactional public void registerMember(MemberRegiDTO memberRegiDTO) { String name = memberRegiDTO.getName(); String passwor..
2023.10.17 -
필드 Null 체크 없애기, Optional<String> vs String?
최근 게시판 프로젝트로 끝까지 한번 해보자 라는 프로젝트를 진행하고 있던 와중,참 거슬리는 코드가 눈에 들어왔다.저게 틀린 코드라고 생각하지는 않았기에 저렇게 적었다만은,뭐랄까 참 지저분해 보이는 코드라서 리팩토링 욕구(?)가 솟았다. 그래서 어떻게 할까 고민을 하던 와중 먼저저 코드의 의미, 기능을 생각해보니 다음과 같았다. MemberUpdateDTO 의 Null 이 아닌 필드들만 DB에 업데이트 하기! 즉 필드의 null 체크를 좀 더 야무지게 할 수 있는 방법을 찾으면 됐다.그러다 Java 8 부터 도입된 Optional 을 사용하면 훨씬 더 안전하고,Java 표준 스펙에 의거한 코드를 만들 수 있지 않을 까 생각했다. 그래서 MemberUpdateDTO 의 null 이 올수 있는 필드를 Opti..
2023.10.13 -
Day 7 : 왜 굳이 웹 서버 프레임워크를 사용해야 하나?
2023.05.24 - [Project ISL/프론트엔드] - Day 6 : 첫걸음은 '레이아웃 설계'로부터 Day 6 : 첫걸음은 '레이아웃 설계'로부터 2023.05.18 - [Project ISL/프론트엔드] - Day 5 : 세계지도 인터랙션, 국가별 호버 이벤트와 법규(?) Day 5 : 세계지도 인터랙션, 국가별 호버 이벤트와 법규(?) 2023.05.17 - [Project ISL/프론트엔드] - Day 4 : 노력 xpmxf4.tistory.com 2023.05.14 - [Project ISL/기획] - Day1 : "일단 시작" 이 아니라 "설계부터" Day1 : "일단 시작" 이 아니라 "설계부터" 예전 개발을 막 시작했을 시절에는 일단 코드부터 작성하고 봤는 데 이제는 코드부터 들입다..
2023.05.25 -
Spring MVC? MVC 패턴? 뭐가 다른 건가
스프링의 정석(이하 스정)에서 Spring MVC 에 대한 이론적인 정리를 했을 때 다음과 같았다. 1. 컨트롤러의 코드들을 크게 분류하면 3 가지이다 입력 처리 출력 2. 각 컨트롤러마다 처리의 과정은 다르지만, 입출력의 과정은 거의 비슷하다. 즉, 모든 컨트롤러가 위의 3 가지를 다 가지고 있다면 입출력 코드의 중복을 초래한다. 3. 이를 위해 모든 입력을 받는 DispatcherServlet 을 만들고, 들어온 입력에 대해 처리를 하는 Controller, 그리고 이러한 처리의 결과를 출력한 View 로 나누게 된다. 4. 이때 Controller 와 View 는 별개이므로, 처리의 결과물을 출력쪽으로 보내기 위한 매개체로 Model 을 사용한다. 그리고 이는 DispatcherServlet 이 만..
2022.09.28