개발 일지
-
왜 엔티티를 반환하지 않고 DTO를 반환하는가 - 2개발 일지 2024. 10. 29. 20:32
앞서, 순환참조로 인해 엔티티를 반환하지 않고 DTO를 반환한다고 글을 작성했다. 그렇다면 어디서 순환참조가 발생하는지 먼저 알아야한다.작성했던 예제를 디버깅해보면 요청시에 발생하는 것이 아니라 마지막으로 Controller에서 응답이 나갈 때 순홤참조 오류가 발생한다. ex 메세지 하위에 cause 라는 항목을 보게 되면 JsonMappingException이 발생한다.즉, 응답으로 나가야하는 Json 형식에 데이터를 매핑할 수 없다는 오류가 발생한다. Jackson 라이브러리를 사용해서 객체를 -> Json으로 바꿔주는것 같은데 왜 에러가 발생했을까?먼저, 해당 문제를 보기 전에 Spring Boot에서 기본으로 제공해주는 HttpMessageConverter에 대해서 간단하게 알고 넘어가자 Http..
-
왜 엔티티를 반환하지 않고 DTO를 반환하는가?개발 일지 2024. 10. 23. 18:50
Controller Servcie Repository 이렇게 3개의 레이어로 나눠서 개발하다보면 공통적으로 DTO라는 것을 만들게 된다.왜 DTO를 만들까? 그리고 Repository 계층에서는 왜 엔티티를 DTO로 반환하는가? 처음 배울 당시에는 여러 가지 이유들이 있었다.- 엔티티에 내용이 그대로 노출하는 것은 필요한 정보 외에 다른 정보가 포함되어 있어 보안적으로 취약하다.- 엔티티에서는 무분별하게 setter를 사용하는 것이 좋지 않다.- 엔티티를 그대로 Controller 영역으로 넘기게 되면, Controller가 변경될 때 마다 엔티티에 영향을 미친다. 등등 여러가지 이유들이 있다. 개인적으로 생각했을 때, 이런 이유들이 틀린 것은 아니지만 실제로 개발을 하면서 어느정도 시간이 흘렀을 ..
-
서버 도메인 없이 EC2 서버에 https 적용하기개발 일지 2024. 9. 7. 01:42
서버 도메인 없이 EC2 서버에 https 적용하는 방법을 가볍게 정리하고자한다. 현재 프리티어 서버를 사용하고, 서버 OS는 ubuntu를 사용하고 있다. 1. AWS EC2에 Caddy를 설치한다.Caddy를 ubuntu에 설치하는 방법은 공식문서에도 나와있다. https://caddyserver.com/docs/install Caddy - The Ultimate Server with Automatic HTTPSCaddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Gocaddyserver.com sudo apt install -y debian-keyring debian-archive-k..
-
메소드 오버라이딩시 super 키워드 조심하기개발 일지 2024. 8. 16. 03:03
스프링 시큐리티에서 form 인증 방식의 로그인 구현을 공부하다가로그인이 성공적으로 이루어졌을 때 successHandler에 SimpleUrlAuthenticationSuccessHandler를 상속받는 CustomAuthenticationSuccessHandler를 만들었다. 이 후에 로그인이 성공하면 /home 경로로 리다이렉트 될 수 있게 구현을 해놨지만, 정확하게 되지 않았다.import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import org.springfr..
-
DB 작업시 @Transactional는 항상 써야할까?개발 일지 2024. 6. 28. 03:35
Member, Staff 도메인을 개발하던 중 팀원분이 내 코드에 대한 피드백을 남겨주셨다@Service@RequiredArgsConstructorpublic class MemberService { private final MemberRepository memberRepository; @Transactional public MemberEntity findOrCreateMember(String cookieValue) { return memberRepository.findById(cookieValue).orElseGet(() -> { MemberCreate memberCreate = MemberCreate.builder() .id(cookieValue) .role(RoleType.ANONYM..
-
동일한 bean으로 등록되는 문제개발 일지 2024. 6. 27. 02:16
Filter를 구현하면서 The bean 'anonymousMemberFilter', defined in class path resource [com/jeongseok/ormistackoverflowmember/common/FilterConfig.class], could not be registered. A bean with that name has already been defined 해당 문제를 겪었다. 자세히 읽어보면 anonymousMemberFilter 라는 빈이 이미 등록이 되어있다 라는 이야기다. 오잉.. 나는 별도로 등록해준적이 없는데 왜 등록이 되어있다는거지? 마침 인텔리제이에서 해결책을 제시해줬다 물론 저 방법 그대로하면 해결할 수 있겠지만, 근본적인 문제 해결 방법이 아니라고 생각한..
-
JpaSystemException개발 일지 2024. 6. 27. 02:05
부트캠프 팀원들과 사이드 프로젝트를 진행하면서 멤버 도메인쪽에서 익명 사용자를 저장하기 위한 로직을 작성하던 중 아래와 같은 오류를 만났다. Request processing failed: org.springframework.orm.jpa.JpaSystemException: Identifier of entity 'com.jeongseok.ormistackoverflowmember.member.infrastructure.MemberEntity' must be manually assigned before calling 'persist()’ 이 오류 지금 멤버 테이블에 pk값을 DB에 위임해서 생성하는 방식으로 만들었는데 애플리케이션이 시작하는 시점에 pk가 null인 상태로 시작되기 때문에 오류가 발생했다...