Org.springframework.data.mapping.MappingException 오류 해결

상황 SpringBoot에서 MongoDB에 데이터를 저장하고, 저장한 데이터를 파싱하는 과정에서 다음과 같은 오류가 발생했습니다. 실행 코드 // 몽고DB 컬렉션 클래스 @Document(collection = "indicators") @Getter @NoArgsConstructor @Builder @AllArgsConstructor @Slf4j public class Indicator { @Id private String id; private List<MatchIndicator> matchIndicators; private MatchIndicatorStatistics matchIndicatorStatistics; // 메서드 생략 } // 컬렉션 조회 메서드 @Override public Indicator getIndicatorInDB(String SummonerId) { Query query = Query.query( Criteria.where("_id").is(SummonerId)); Indicator indicators = mongoTemplate.findOne(query, Indicator.class, "indicators"); if (indicators == null) throw new RiotDataException(RiotDataError.NOT_IN_STATISTICS_DATABASE); else log.info("indicator founded : {}", indicators.getId()); return indicators; } 오류 코드 Parameter org.springframework.data.mapping.Parameter@691d29ad does not have a name 원인 분석 실제로 MongoDB에서 데이터를 정상 꺼내오는 로그는 다음과 같이 잘 찍혀있었습니다. ...

2024. 4. 2. · 2 분 · 371 단어 · Leaf

Jnuit 테스트에서 객체 필드명 비교하기

상황 기존 코드를 리팩토링하는 과정에서 엔티티 객체에 있던 @Data를 @Getter로 변경중이었습니다. 테스트를 위해 임시로 @Data를 붙여놓고 사용중이었습니다. @Getter // 기존 : @Data @Builder @AllArgsConstructor public class LaneInfo { private TeamPosition teamPosition; private boolean isBottomLane; private int myTeamId; private int myLaneNumber; private int oppositeLaneNumber; private int myBottomDuoNumber; private int oppositeBottomDuoNumber; //...(생략) } 기존에 잘 동작하던 아래 테스트에서 오류가 발생했습니다. //생략 // matchIndicator가 가진 laneInfo와 given에서 주어진 laneInfo 비교 assertThat(matchIndicators.get(0) .getMetadata() .getLaneInfo()) .isEqualTo(laneInfo); 원인 분석 오류 로그는 다음과 같았습니다. Expected :com.ssafy.matchup_statistics.indicator.entity.match.LaneInfo@1150d471 Actual :com.ssafy.matchup_statistics.indicator.entity.match.LaneInfo@6393bf8b 해당 테스트코드는 기존에는 잘 동작했고, 각 필드가 하나라도 달라지면 실패하던 테스트코드였기에 원인이 궁금했습니다. ...

2024. 3. 23. · 2 분 · 335 단어 · Leaf

Springboot Junit 단위테스트에서 로그 레벨 조정하기

로그레벨 변경하기 단위테스트에서 간단하게 로그 레벨을 변경할 수 있습니다. 통합테스트는 @SpringBootTest를 사용하면 /src/test/resources/application.properties에 있는 설정정보를 자동으로 불러오지만, 단위테스트에서는 해당 어노테이션이 너무 무겁기 때문에 사용할 수 없습니다. 바로 코드로 알아보겠습니다. // 단위테스트가 필요한 클래스 내부에 해당 코드를 추가하면 완료입니다. import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; @BeforeAll public void setLogLevel() { final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); logger.setLevel(Level.ALL); } 간단히 코드를 설명드리자면, 단위테스트 시작 전 LoggerFactory로 새로운 loogger를 생성하고 레벨을 변경한 후 테스트를 수행하기 위한 코드입니다. ...

2024. 3. 20. · 1 분 · 106 단어 · Leaf
cover image

[Java]SpringBoot DataSource 이중화(CQRS 패턴) 구현

도입 이전 포스팅 참조 : DB 이중화 및 CQRS 패턴의 중요성 > MySQL Replication Database 구현 실습환경 Docker : v25.0.3 MySQL : v8.3.0 Java : v17.0.9 Spring : v3.2.4 저번 시간에 생성한 Master / Slave DB에 SpringBoot를 직접 연동해서 CRUD를 하는 실습을 진행합니다. 프로젝트 생성 Springboot 프로젝트를 생성합니다. 아래 사진과 같이 JPA, Lombok, MySQL Driver 의존성을 추가하겠습니다. 스프링부트 프로젝트를 위와 같이 의존성을 추가하여 생성합니다. build.gradle 실행 위에서 생성한 프로젝트의 jar파일을 풀고, build.gradle 파일을 intellij 혹은 eclipse로 실행합니다. gradle로 프로젝트를 실행하면 자동으로 소스파일 경로가 생성됩니다. ...

2024. 3. 19. · 6 분 · 1230 단어 · Leaf