본문 바로가기

Lang

[Java]r2dbc 첫 테스트

마리아디비에서 포스그레로 넘어 가보려고 테스트 시작하는 김에 r2dbc 도 도전해보는 중. 처음이니 일단 무조건 돌아가게만 해보자는 각오로 삽질 시작. 삽질 메모 간단하게, 정확한 설명은 추후에 ...

  1. saveAll 쓸 때는 Flux 타입 리턴 값 지정해주어야 한다고 어디서 보고 그리 했는데 아무 짓을 안한다.  repo.saveAll(..).subscribe(); 이런 식으로 subscribe() 해주니 동작은 하는데 이거 왜 되는지는 아직 모름. 'Reactive Relational Database Connectivity'니 subscribe 한 번 쯤 나와주는게 당연한거다라고 자위하고 곧장 고. 뭐 목표는 이해 보다 실행이니(고민보다 고!) 학습은 후에.
  2. saveAll  시 'Required identifier property not found for ...' 에러 난다는 글 보긴 했는데 이전부터 히스토리 성으로 키값 체크없이 데이터 무조건 insert  하는 구조라  implements Persistable 써왔었기에 구현부 살짝 손봐주는 것으로 문제 통과.
  3. 클래스명과 테이블명이 달라서 @Table(name = "...") 애노테이션을 사용해왔다. 그런데 실행해보니 애노테이션 안 먹고 클래스명이 그대로 테이블명으로 적용되면서 테이블 못 찾는 문제 발생.  샘플 소스들 비교해보고 수정한 결과 @Table("...") 애노테이션을 써야 정상적으로 테이블명이 적용되었다. 차이는 기존 애노테이션은 java.persistance 에 구현되어 있는거고, 뒤의 것은 org.springframework.data.relational.core.mapping.Table 로 구현된거.
  4. id 컬럼 값 없다고 계속 에러 나서 처음에는 위 2번과 관련된 문제라 생각하고 매달렸는데 해결 안나서 고생 좀 하다가 문득 3번과 동일한 문제 아닐까 싶어서 애노테이션을 org.springframework.data.relational.core.mapping.Column 으로 바꾸니 깔끔하게 동작.
  5. db 처리 시간 대략 확인하기 위해 메서드에 스프링의 stopWatch 이용해 수행 시간 찍어주는 코드 삽입 해놨었는데 실행 다 되었는데도 콘솔에 로그가 안 찍힌다. 잠깐 어? 하면서 스크롤 올려보니 DB 인써트 로그 전에 딱 찍혀 있다. r2dbc 너,  non blocking 처리해주는 녀석 맞구나 ㅎㅎ