Spring(4)
-
???: 확장&유연한 설계가 중요해요? 그럼 이걸 안 볼수 없는데?
1. 배경과 한계저는 회사의 기존 인증/인가 시스템을 개선하기 위한 작업을 진행했습니다. 회사는 Spring Security를 사용해 인증/인가 시스템을 구축하려 했으나, 도입 과정에서 여러 문제에 직면했습니다. Spring Security는 강력한 기능을 제공하지만, 설정이 복잡하고 유지보수가 어려운 단점이 있었습니다.또한, 기존 전역 필터와 새롭게 도입하려는 Spring Security Filter Chain 간의 충돌 문제가 발생했습니다. 기존 시스템은 전역 필터를 통해 인증과 인가를 처리하고 있었고, 이 필터들이 Spring Security의 Security Context를 사용하고 있었습니다. 이로 인해 새로운 Spring Security Filter Chain과 충돌이 발생했고, 이를 해결하기..
2024.10.13 -
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 -
Spring MVC? MVC 패턴? 뭐가 다른 건가
스프링의 정석(이하 스정)에서 Spring MVC 에 대한 이론적인 정리를 했을 때 다음과 같았다. 1. 컨트롤러의 코드들을 크게 분류하면 3 가지이다 입력 처리 출력 2. 각 컨트롤러마다 처리의 과정은 다르지만, 입출력의 과정은 거의 비슷하다. 즉, 모든 컨트롤러가 위의 3 가지를 다 가지고 있다면 입출력 코드의 중복을 초래한다. 3. 이를 위해 모든 입력을 받는 DispatcherServlet 을 만들고, 들어온 입력에 대해 처리를 하는 Controller, 그리고 이러한 처리의 결과를 출력한 View 로 나누게 된다. 4. 이때 Controller 와 View 는 별개이므로, 처리의 결과물을 출력쪽으로 보내기 위한 매개체로 Model 을 사용한다. 그리고 이는 DispatcherServlet 이 만..
2022.09.28