개발 일지 8

개발 일지
왜 엔티티를 반환하지 않고 DTO를 반환하는가 - 2

앞서, 순환참조로 인해 엔티티를 반환하지 않고 DTO를 반환한다고 글을 작성했다. 그렇다면 어디서 순환참조가 발생하는지 먼저 알아야한다.작성했던 예제를 디버깅해보면 요청시에 발생하는 것이 아니라 마지막으로 Controller에서 응답이 나갈 때 순홤참조 오류가 발생한다. ex 메세지 하위에 cause 라는 항목을 보게 되면 JsonMappingException이 발생한다.즉, 응답으로 나가야하는 Json 형식에 데이터를 매핑할 수 없다는 오류가 발생한다. Jackson 라이브러리를 사용해서 객체를 -> Json으로 바꿔주는것 같은데 왜 에러가 발생했을까?먼저, 해당 문제를 보기 전에 Spring Boot에서 기본으로 제공해주는 HttpMessageConverter에 대해서 간단하게 알고 넘어가자 Http..

개발 일지
왜 엔티티를 반환하지 않고 DTO를 반환하는가?

Controller Servcie Repository 이렇게 3개의 레이어로 나눠서 개발하다보면  공통적으로 DTO라는 것을 만들게 된다.왜 DTO를 만들까? 그리고 Repository 계층에서는 왜 엔티티를 DTO로 반환하는가? 처음 배울 당시에는 여러 가지 이유들이 있었다.- 엔티티에 내용이 그대로 노출하는 것은 필요한 정보 외에 다른 정보가 포함되어 있어 보안적으로 취약하다.- 엔티티에서는 무분별하게 setter를 사용하는 것이 좋지 않다.- 엔티티를 그대로 Controller 영역으로 넘기게 되면, Controller가 변경될 때 마다 엔티티에 영향을 미친다. 등등 여러가지 이유들이 있다. 개인적으로 생각했을 때, 이런 이유들이 틀린 것은 아니지만 실제로 개발을 하면서 어느정도 시간이 흘렀을 ..

개발 일지
서버 도메인 없이 EC2 서버에 https 적용하기

서버 도메인 없이 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 키워드 조심하기

스프링 시큐리티에서 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..

개발 일지
@Bean vs @Component

스프링 부트로 개발하다보면 @Bean과 @Component 애노테이션을 언제 써야할지 헷갈려서 짧게라도 정리하고자 한다. 둘다 최종적으로 Bean을 생성할 때 사용인것 맞다 하지만 @Bean 애노테이션은 외부 라이브러리들을 Bean으로 등록하고 싶을 때 사용한다.반대로 @Component 애노테이션은 개발자가 직접 컨트롤이 가능한 클래스를 생성할 때 사용한다. 출처: https://jojoldu.tistory.com/27

개발 일지
DB 작업시 @Transactional는 항상 써야할까?

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으로 등록되는 문제

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

부트캠프 팀원들과 사이드 프로젝트를 진행하면서 멤버 도메인쪽에서 익명 사용자를 저장하기 위한 로직을 작성하던 중 아래와 같은 오류를 만났다. 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인 상태로 시작되기 때문에 오류가 발생했다...