OSIV 설정과 지연 로딩 문제 해결 과정
·
프로젝트/PICK-O
이전 게시글에서 설명했듯이, OSIV 설정을 `false`로 변경했더니 오류가 발생했습니다. 따라서, 이번 포스팅에서는 OSIV와 엮인 개념들과 현재 직면한 이슈 해결과정을 작성하려고 합니다.OSIV란?`Open Session In View`로, HTTP 요청이 처리되는 동안 영속성 컨텍스트를 유지하는 기능입니다. 영속성 컨텍스트란, 간단하게 이야기 해 어플리케이션과 DB사이에 엔티티를 저장하는 논리적인 영역입니다.   OSIV 활성화`JpaTransactionManager`의 동작 과정을 파악하기 위해 디버깅 설정을 추가했습니다.logging: level: org.springframework.orm.jpa.JpaTransactionManager: DEBUG 그 후에, `@Transactional..
갑자기 프로젝트가 터져버린 이유?
·
프로젝트/PICK-O
결론부터 두괄식으로 이야기를 하자면, OSIV = true 설정으로 인하여 SSE으로 구현한 알람 기능에서 커넥션 풀을 반환하지 않아 생긴 문제였습니다.문제상황프로젝트를 배포한지 오랜 시간이 흘렀는데 그 전에는 아무런 문제가 없다가 최근에 개발 서버와 운영 서버 모두가 터졌다는 연락을 받았습니다.  원인을 찾기 위해 그라파나에서 디버깅을 시도했는데, 해당 에러 메세지가 눈에 띄었습니다.2025-02-09 17:08:44.225[ERROR] [balancetalk.global.utils.LoggingAspect] [http-nio-8082-exec-19]- [RESPONSE] 200 Unable to acquire JDBC Connection [HikariPool-1 - Connection is not a..
성능 테스트 툴 선정 및 테스트 결과
·
프로젝트/PICK-O
밸런스 게임 도메인저희 PICK-O 서비스에선 크게 두가지 주제로 사용자가 글을 작성하거나 조회할 수 있는데요, '톡픽'과 '밸런스 게임'이 그 두가지 입니다. 밸런스 게임의 경우, 한 세트당 10개의 게시글을 작성해야 하며 제목, 상황 설명, 사진 첨부 등을 할 수 있습니다.  밸런스 게임을 조회하는 방법은 현재 4가지가 있습니다.인기순으로 밸런스 게임을 조회태그값을 기준으로 인기순 조회현재 밸런스 게임의 태그값은 취향, 커플, 월드컵이 있습니다.최신순으로 밸런스 게임 조회밸런스 게임 단건 상세조회 따라서, 4가지 API에 대해서 유저가 많은 상황을 가정하여 성능테스트를 진행했습니다.성능 테스트 툴 선택 기준저희 팀은 성능 테스트를 k6로 사용하기로 했는데, 결정하기에 앞서 Ngrinder, K6, J..
JWT토큰과 RefreshToken
·
프로젝트/PICK-O
프로젝트에 JWT 토큰을 도입하기로 결정하면서, 먼저 구조에 대해서 알아보겠습니다. 구조 JWT 토큰은 헤더, payload, signature 세 부분으로 나뉘어져 있습니다. Header 헤더 값에는 JWT에서 사용할 해시 알고리즘에 대한 정보가 담겨있습니다. return Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS512, secretKey) .compact(); 코드에서 HS512 알고리즘을 이용했기 때문에, 헤더값에서 해당 정보를 확인할 수 있었습니다. Payload 서버에서 사용자에 대한 데이터를 저장하는 부분입니다. 저는 사용자의 이메일과 id..
프로젝트에 JWT를 도입하게 된 과정
·
프로젝트/PICK-O
이 포스트에선 프로젝트에 JWT 인증 방식을 채택하기 까지의 과정, 그리고 도입하면서 생긴 문제들을 해결한 방법에 대해서 써보려고 합니다. 우선 JWT를 이야기 하기전에, 인증과 인가에 대한 개념을 짚고 넘어가야 합니다. 인증 (Authentication) 인증은 특정 방법을 통해서 사용자의 신원을 검증하는 것을 말합니다. 여기서 말하는 특정 방법이란, 비밀번호 인증 앱 얼굴 인식 이와 같은 여러 방법들이 존재합니다. 인터넷 뿐만 아니라, 실생활에서도 대입할 수 있는데 편의점에서 주류를 구매하기 위해서 신분증으로 인증하는 것도 사용자의 신원을 검증하는 과정이라고 볼 수 있습니다. 인가 (Authorization) 인가란, 사용자에게 특정 리소스나 기능에 엑세스 할 수 있는 권한을 부여하는 프로세스를 의..