728x90 Project9 [Project] 인스턴스 서버에 너무 많은 부하가 쏠리다면? 지금부터 우리 서비스의 아키텍쳐를 우선 설명하겟다. 초기 아키텍쳐고 서버에선 jwt을 엑세스토큰과 리프레쉬토큰로 검증해서 사용하고 있는데 문제점이 발생했다.토큰이 유효한지 확인하려면 아래와 같이 계속해서 데이터베이스를 조회하는 과정이 있었다. 이렇게 계속해서 데이터베이스를 거치는 과정은 비용이 클 뿐만 아니라 사용자에게 안좋은 영향을 끼치고 있었다.이러한 문제점을 데이터베이스를 거치는 대신 아래와 같이 Redis를 사용하여 서비스 로직을 단축시키는 아이디어 적용해 우리 서비스에 적용할 수 있었다. 그래서 그다음 아키텍쳐 구조는 아래와 같이 진화할 수 있었다. 우리 서버에서는 자주 조회되는 데이터에 대해서 로컬캐시로 저장하고 있었다. 캐싱전략은 Cash Aside 전략을 사용해 아래와 같은 흐름으로 동.. 2025. 4. 17. [Project] 적절한 풀 사이즈 설정하기 우선적으로 풀이란 무엇이고 왜 해야되는가?? 우선 풀(Pool)이라는 것은 수영장 풀이라고 생각해도 될 것 같다. (유튜브에서 봤었던거같은? 이해가 잘 되었다) 한마디로 우리가 수영장 풀에다 물을 미리 부어놓고 재미있게 놀 듯이 프로그램에서 자원을 미리 생성해두고 관리하는 것을 의미한다.보통 백엔드 관점에서는 2가지로 나뉘는 것 같다. 첫번째는 데이터베이스 커넥션 풀과 쓰레드 풀로 나뉜다. 데이터베이스 커넥션 풀: DB에 연결할 때마다 새 커넥션을 맺는 대신, 일정 수의 커넥션을 미리 만들어 두고 필요할 때 꺼내 쓰는 방식쓰레드 풀: 요청 혹은 작업을 처리할 쓰레드를 매번 새로 생성하지 않고 일정 수의 쓰레드를 유지하며 돌아가게 하는 방식 둘 다 하는 역할은 자원을 미리 생성해두는 건 똑같다. 근데 왜 .. 2025. 3. 26. [Project] Spring 직렬화, 역직렬화 문제 - getWriter() has already been called for this response 프로젝트 진행 중 처음 보는 새로운 에러이다. 정보도 많이 없어서 게시물을 작성한다.2025-02-28T09:25:04.226Z WARN 1 --- [sejong-auth] [io-8080-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Failure in @ExceptionHandler org.example.backend.common.exception.ExceptionControllerAdvice#handleException(HttpServletRequest, Exception)java.lang.IllegalStateException: getWriter() has already been called for this response at org.apache... 2025. 2. 28. [Project] 게시물 N+1 문제 해결기 (쿼리 40 -> 11 -> 1) 프로젝트 진행 중 게시물을 단순 조회를 테스트해보고 있었는데 쿼리가 하나가 아닌 우다닥 나오고 있었다. 사실 이게 나왔을때 좀 기뻣다. 배운 내용을 드디어 적용해볼 수 있겠구나! 유명한 JPA N+1 문제를 드디어 만난거다. 지금은 단순한 로직이라 빨리 찾을 수 있었다. 현재 board 하나를 단순히 조회하는데 위 사진처럼 긴 쿼리가 날아가는 것을 볼 수 있었다. 엄청 아주 긴 쿼리가 날아가는 것을 볼 수 있다. 40개의 쿼리가 단순 조회로 인해 발생하고 있었다. (2개는 처음 나오는 Hibernate) 이녀석이 왜이렇게 날아가나 찾아보니 아래와 같은 로직때문에 이런일이 발생하는 것을 볼 수 있었다.public static BoardResponse of(Board board) { retu.. 2025. 1. 31. 이전 1 2 3 다음 728x90