Spring/Trouble Shooting
-
ObjectMapper LocalTime등 날짜시간 타입 매핑 실패 해결법Spring/Trouble Shooting 2024. 1. 13. 01:21
문제 상황 테스트 코드 작성중에 void createOperatingTime() throws Exception { //given AnimalHospital savedAnimalHospital = getSavedAnimalHospital(); List requests = new ArrayList(); for (DayOfWeekStatus value : DayOfWeekStatus.values()) { HospitalOperationTimeCreateRequest hospitalOperationTimeCreateRequest = HospitalOperationTimeCreateRequest.builder() .dayOfWeekStatus(value.name()) .startTime(LocalTime.of(1..
-
QueryDsl 거리 검색 쿼리 최적화Spring/Trouble Shooting 2023. 12. 9. 16:20
개요 사이드 프로젝트를 진행하면서 검색 API 구현을 담당하였다. 개인 프로젝트등에서는 단순 키워드를 통한 검색을 구현 하였지만 본 프로젝트에서는 정보 제공의 목적으로 거리를 계산해서 제공을 해야하는 상황이 발생했다. 이를 해결하는 과정을 기록으로 남겨두어 나중에 비슷한 상황이 발생하면 다시 참고해보는 용도로 해당 글을 작성한다. 문제 요구사항 해당 문제 상황에서 고려되는 사항은 다음 두 가지가 있었다. 유저의 위도, 경도가 주어지면 해당 건물에 대한 거리가 출력되어야한다. 유저의 위도, 경도가 주어지면 거리순 정렬이 되어야한다. 문제 인식 다른 요구사항에는 적절하게 구현이 완성된 상태였다. 기본적인 QueryDsl을 사용해서 값만 매칭시켜두면 해결되는 문제였기에 큰 어려움은 없었다. 다만 해당 문제를 ..
-
ReflectionTestUtils를 활용한 단위 테스트, 객체의 ID 설정하기Spring/Trouble Shooting 2023. 11. 19. 01:21
문제 상황 질문의 번호와 유저의 번호를 받고, 질문의 작성자 번호가 유저의 번호와 같다면 삭제하는 과정이다. public void deleteById(Long questionId, Long memberId) { Question question = findById(questionId); if (validateQuestionWriter(memberId, question)) { questionRepository.deleteById(questionId); } } private Boolean validateQuestionWriter(Long memberId, Question question) { return question.getMember().getId().equals(memberId); } 그다지 이해하기 어..
-
Spring Test 환경에서 Audit 적용이 안될 때Spring/Trouble Shooting 2023. 11. 13. 17:13
상황 도메인의 설계 구조를 보고 가자 @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @EntityListeners(AuditingEntityListener.class) public class Question { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //... @Embedded private AuditEntity auditEntity; //... @Builder public Question( //.. ) //... this.auditEntity = new AuditEntity(); } } Question이라는 도메인에 AuditEntity를 ..
-
Docker 컨테이너 환경에서 Eureka Client 등록시 ip 문제Spring/Trouble Shooting 2023. 11. 7. 00:41
문제 상황 Eureka 클라이언트를 등록하고 Spring Cloud Gateway를 통해 로드 밸런싱 처리를 하도록 설정해뒀다. 하지만 로드밸런싱 처리는 되지 않았고 직접 ip 주소를 통해 요청을 할 때는 정상적으로 요청이 전달되고, Eureka Server에 등록된 클라이언트의 목록에는 이상이 없었다. 원인은? 문제는 Eureka Client가 등록될 때 클라이언트들이 외부 ip 기준으로 등록되는 것이 아니라, 내부 ip를 기준으로 등록되어 문제가 발생하는 것이였다. 원인은 배포 환경을 Docker를 통해 진행했는데, Eureka Client의 경우 컨테이너 환경에서 배포가 될 경우 알아서 실제 배포되는 ip로 등록되는 것이 아닌 내부 ip를 기준으로 등록되는 것이였다. 알아낸 방법 이를 알아낸 방법은..
-
H2-Console 접속 문제 해결Spring/Trouble Shooting 2023. 11. 6. 20:35
문제 상황 위와 같이 내장 H2 DB를 사용하여 접속하려 하는데 문제가 발생했다. 개발자 도구를 통해서 확인해보면X-Frame-Options이 문제인 것을 알 수있다. 해결 방법 public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http ... .headers(headers -> headers.frameOptions(FrameOptionsConfig::disable)) ... .build(); } 최근 Security 버전이 변경되면서 함수형으로 선언하도록 바뀌었다. 따라서 위와 같이 선언해줘야 한다.
-
[Spring Boot] IntelliJ에서 profiles 옵션이 적용안되던 이유 해결법Spring/Trouble Shooting 2023. 7. 20. 23:08
일단 가장 먼저 프로젝트를 진행함에 있어, Github Action으로 CI/CD를 구축하여 개발하는 중이였다. 개발환경에서는 h2 in-memory DB를 활용했어, 배포환경에서는 MySql을 사용하기 위해 apllication.yml을 배포 환경에는 prod를 적용했다. 따라서 CI/CD는 application-prod.yml을 적용해서 실행되도록 하였는데 실제 환경에서도 돌아가는지 직접 확인하기 위해 개발환경에서 쓰이던 application.yml과 application-prod.yml를 같이 두고 실행해봤다. 따로 사용할 profile 이름까지 지정해서 진행했는데 분명 profile is active: prod 를 확인했다. 그러나 발생하는 오류 Hibernate: drop table if exi..
-
[IntelliJ] 오류해결 Module 'demo.main' production: java.lang.ClassCastException: classSpring/Trouble Shooting 2023. 7. 20. 16:15
다음과 같이 오류가 발생하는 경우가 있다면 Module 'demo.main' production: java.lang.ClassCastException: class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast to class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType (org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType and org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassTyp..