트러블 슈팅 - STANL-2/MOTIVE GitHub Wiki

컬럼, 테이블명 정합성 문제

조회 -> Mybatis / 등록, 수정, 삭제 -> JPA JPA를 통해 DB에 소문자로 등록되기 때문에, Mybatis도 소문자로 맞춰줘야 한다.

SSE Connection pool 초과 문제

Connection을 해제하지 않고 새로고침을 반복하는 문제가 발생하여 Connection Pool이 모두 할당되는 상황이 있었다.

Solution

  1. OnBeforeUnmount를 통해 client에서 Unmount전에 연결 해제
  2. 새로운 알림 생성시 중복되는 기존 emitter 삭제
  3. 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 커넥션을 반납한다.