트러블 슈팅 - STANL-2/MOTIVE GitHub Wiki
컬럼, 테이블명 정합성 문제
조회 -> Mybatis / 등록, 수정, 삭제 -> JPA JPA를 통해 DB에 소문자로 등록되기 때문에, Mybatis도 소문자로 맞춰줘야 한다.
SSE Connection pool 초과 문제
Connection을 해제하지 않고 새로고침을 반복하는 문제가 발생하여 Connection Pool이 모두 할당되는 상황이 있었다.
Solution
- OnBeforeUnmount를 통해 client에서 Unmount전에 연결 해제
- 새로운 알림 생성시 중복되는 기존 emitter 삭제
- Jpa open-in-view를 설정하여 Transaction 처리 후 Connection 해제
Open-in-view 설정
spring:
data:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
lettuce:
pool:
max-active: 10
max-idle: 5
min-idle: 2
timeout: 5000ms
jpa:
hibernate:
ddl-auto: update
// open-in-view 설정
open-in-view: false
logging:
level:
org.springframework.security: WARN
open-in-view는 JPA에서 영속성 컨텍스트가 데이터베이스 커넥션을 DB에 언제 돌려주냐를 설정할 수 있다. 예를 들어, @Transactional을 붙은 메소드를 실행하면 (주로 서비스 단이죠) 데이터베이스 트랜잭션이 실행되고, 영속성 컨텍스트가 데이터베이스 커넥션을 받아서 필요한 데이터들을 가져오는데 해당 메소드가 끝이 날 때, spring.jpa.open-in-view=true 면 영속성 컨텍스트가 데이터베이스 커넥션을 반납하지않고,
spring.jpa.open-in-view=false 면 영속성 컨텍스트가 데이터베이스 커넥션을 반납한다. spring.jpa.open-in-view=true 일 때는 Client에게 응답이 되고 난 후에 DB 커넥션을 반납한다.