Server Development (64) 썸네일형 리스트형 java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.time.LocalDate java.time.LocalDateTime.date accessible 상황 설명 엔터티를 그대로 클라이언트에 전달해주는 API가 있다. 해당 엔터티는 상위클래스에 LocalDateTime을 통해 생성, 수정에 대해 업데이트 되는 필드이다. 이 데이터는 클라이언트에 전달되지않고 DB에만 저장이 되어야 한다. 하지만 테스트 코드에서 아래와 같이 작성후 테스팅을 할 시에는 해당 오류가 발생한다. .andExpect(MockMvcResultMatchers.content().json(new Gson().toJson(response))); Json으로 변경시 해당 필드에 대한 접근 권한이 없기 때문에 발생한다. 해결방법 - 해당 필드를 반환하지 않는다. 기대 사항 - 해당 필드는 DB에만 저장하는 것이고 사용자에게 보낼 필요가 없는데 이를 구현 가능하다. 1. @Expose 애너테이.. UNIT TEST - JUNIT5, Mockito Mockito - 개발자가 동작을 직접 설정하는 방식으로 가짜 객체를 만들어주는 테스트 프레임 워크 - 가짜 객체를 만들어 Spring내 객체간의 의존성 없이 테스팅이 가능하게 만들어준다. - 가짜 객체로 시뮬레이션(Stub)하여 단위 테스트를 진행하는 원리 관련 애너테이션 - @Mock : 가짜 객체를 만들어 줌. - @Spy : 시뮬레이션을 만들지 않은 메서드 사용시 해당 클래스의 실제 메서드를 그대로 사용하게 해줌 - @InjectMocks : @Mock, @Spy 둘 중 하나로 생성된 가짜 객체를 자동 주입. JUNIT5 + Mockto - 둘을 같이 쓰기 위해서는 결합이 필요하다. - 아래 내용을 클래스 상단에 작성 @ExtendWith(MockitoExtension.class) Mock객체에 .. mappedBy, Cascade 단방향 : 한쪽 엔터티만 반대쪽을 아는 것. 양방향 : 서로 아는 것, 서로 참조하는 관계. -> 조회나 수정을 각각 하는가 한번에 가능한가 차이. mappedBy 배경 보통 RDBMS에서는 조인관계에 대해서 방향을 따지지 않는다. 이는 외래키를 통해 두 관계에 서로 접근이 가능하기 때문이다. 객체 관계에서는 @ManyToOne, @OneToMany @OneToOne 등을 이용해 관계를 정해서 매핑한다. (하지만 이것만 적용하면 단방향 관계가 된다.) 예를 들어, 학교-학생 관계가 있다고 가정하자. DBMS에서는 학생은 학교 아이디를 자신이 가지고 있고 이를 통해 학교에 대한 정보를 확인할 수 있다. 반대로, 학교는 학생 테이블에서 자신의 학교 아이디를 갖는 학생들을 조회할 수 있다. 하지만 객체에서는 .. CI/CD CI / CD (Continuous Integration/Continuous Deployment) - 정의 : 지속 적으로 코드를 합치고 지속적으로 코드를 배포한다. - 필요한 이유 : 만약 CI/CD 프로그램이 없이 개발자들이 수동으로 코드를 합치고 배포한다면 개발자들의 작은 커뮤니케이션 오류 또는 테스트 코드의 부재가 나중에 큰 문제를 일으킬 수 있다. -> 예를 들어, Dev 서버를 로컬로 불러왔을 때, 동작이 안되는 경우 등을 방지 따라서, 여러명의 개발자가 동시에 개발을 하는 환경 속에서 CI/CD 시스템으로 코드를 합치고 배포하는 과정에 안정성을 부여할 수 있다. CI - 원리 : 코드를 Git등에 Commit하는 과정으로 Jenkins등의 CI 툴은 빌드와 테스트를 진행해 문제 발생시 Com.. [dispatcherServlet] in context with path [] threw exception [Request processing failed:오류처리 클래스명] with root cause 1. 문제 발생 과정 로그인 API를 처리하는 과정에서 만약, 해당 아이디 정보가 DB에 없다면 오류 클래스를 생성하고 던진다. 이 후, @RestControllerAdvice는 이 오류 클래스가 생성된다면 이를 읽어서 적절한 조치를 취한다. 나는 해당 오류를 클라이언트에 포장해 전달하고자하는 상황이었다. 하지만 해당 오류가 클라이언트에 전달되지 않고 해당 오류만 발생을 하고 있다. 2. 해결 - 빈 관리의 문제 해당 문제는 빈 관리가 제대로 이루어지지 않아서 발생하였다. 따라서 해당 오류를 겪고 있다면 모든 빈이 제대로 주입되고 있는지 확인할 필요가 있다. Controller - Serice - DAO 주입 제대로 되는지 확인 SpringBoot의 메인 클래스에 만약 @ComponentScan을 통해 .. Parameter 0 of constructor in ... required a bean of type ... that could not be found. 최근한 5일간 해당 오류를 해결하기 위해 많은 노력을 기울였다. 그에 따른 나름의 고찰을 정리해보고자 한다. 1. 기본적인 의미 기본적으로 해당 오류는 연결하고자 하는 빈을 못찾겠다는 의미이다. 현재 서버를 Spring으로 작성하고 있는데, Spring의 가장 큰 특징은 제어의 역전이라고 할 수 있다. 이러한 빈들을 주입할 때, xml을 작성하지 않고도 SpringBoot에서는 자동으로 빈을 주입해준다. 하지만 이 오류는 이러한 주입을 하려고 하는데 주입하고자 하는 빈을 못찾겠다는 의미이다. 2. 해결방법 2-1. 명시해서 알려주는 방법 - 해당 방법은 약간 너가 못찾겠으면 내가 패키지명을 알려줄테니까 거기서 찾아봐라는 의미이다. 아래와 같이 작성시 해당 패키지에서 찾고자 하는 빈을 찾아준다. @Spri.. Lombok @ToString - StackOverflow Error Lombok을 통해 @ToString을 사용할 때 뿐만아니라 다른 애너테이션을 사용할 때, 자주 StackOverFlow가 발생한다. 원인, 해결방법 순으로 블로그를 정리하고자 한다. 원인 : java.lang.StackOverflowError, Handler dispatch failed: java.lang.StackOverflowError 원인 JPA 연관관계 매핑 후, toString()을 사용하게 되면 발생을 한다. 예를 들어, 조인이 되어있는 3가지의 테이블이 있다고 가정하자. 이러한 경우 3가지의 테이블은 서로 양방향 관계인데, 서로 다른 엔터티가 서로 toString을 무한으로 호출하면서 StackOverFlow가 발생하는 것이다. 자세한 예로 Member - Store - Order 해당 테.. Spring - Image Save 이번 블로그에서는 이미지를 저장하는 방법에 대해서 정리해보고자 한다. API를 하나 작성하면서 이미지 저장에 대해서 알아보고자 하는데 기본적인 API 과정은 다음과 같다. 1. 클라이언트가 이미지 입력 2. 이미지 인코딩해서 전송 3. 서버에서 이미지 디코딩 4. DB에 저장 또는 파일 시스템에 저장 1. 클라이언트가 이미지 전송 테스팅을 위해 직접 프론트를 만들 수 있지만 insomnia의 multipart로 데이터를 전송받아 테스팅을 하였다. Multipart Form을 사용하면 Key-Value 형태로 서버에 데이터 전송이 가능한데 이미지 전송 또한 가능하다. 2. 이미지 인코딩해서 전송 기본적으로 이미지는 바이너리 형태의 데이터로 저장되어 있다. 보통 네트워크를 통해 이미지 파일을 서버에 전송시 .. 이전 1 2 3 4 5 ··· 8 다음