전체 글 (5) 썸네일형 리스트형 [DB] 동시성 이슈 및 데드락 발생 해결 코드 리뷰 요청 플랫폼 프로젝트를 진행하던 중 질문 목록 조회 시, 질문에 달린 답변의 개수를 반환해야 하는 요구사항이 있었습니다. 질문은 쓰기 작업보다 읽기 작업이 훨씬 빈번하게 발생한다고 판단했고, 질문 목록에서 매번 답변 테이블을 조회해 개수를 가져오는 방식은 성능 상 비효율적이라고 생각했습니다따라서 질문 테이블에 답변 개수를 저장하는 컬럼을 두고, 답변이 저장될 때마다 해당 컬럼을 업데이트하도록 테이블을 설계했습니다.그러나 이 방식은 동시성 이슈로 인해 실제 답변 개수와 컬럼 값이 불일치할 가능성이 있었습니다. 이 글에서는 낙관적 락과 비관적 락 두 가지 접근 방식을 적용하며, 동시성 문제를 해결해본 과정을 적어보겠습니다.요구사항답변을 저장할 때 질문의 답변 개수 컬럼을 업데이트해야 한다.답변 저.. [JPA] 패치조인에 얽힌 페이징 처리 성능 개선기 문제 상황질문 목록을 페이징 처리를 구현하고 테스트 하던 중 더미 데이터(20만 개)를 기준으로 첫 페이지 조회 속도가 무려 8s 이상 소요되는 문제가 발생했습니다.이번 글에서는 해당 문제의 원인을 파악하고 해결했던 과정에 대해 설명하겠습니다.문제 코드 @Override public List findQuestionsByCriteria(QuestionSearchCriteria criteria, long offset, int size) { BooleanBuilder builder = buildSearchConditions(criteria); return queryFactory.select(question) .from(question) .. [Spring Security] permitAll() 이 적용되지 않았던 원인 분석 및 해결 Jwt 인증 필터를 리팩토링하면서 회원가입 요청 시 SecurityConfig에서 permitAll()로 설정하여 토큰 인증이 필요 없도록 설정했음에도, 요청이 403 에러를 반환하는 문제를 겪었습니다.이번 글에서는 permitAll()이 적용되지 않았던 원인과 이를 해결한 과정을 정리해보겠습니다.permitAll()의 작동 방식 requestMatchers(URL).permitAll() 메서드는 특정 URL에 대해 인증 없이 모든 요청을 허용합니다. 저는 이 설정만으로도 해당 URL에 토큰 없이 접근할 수 있을 것이라 기대했지만, permitAll() 설정은 Spring Security의 필터 체인을 건너뛰도록 설정하는 것이 아닙니다. 즉, permitAll()을 설정해도, 요청은 Security의 필.. [JWT] 토큰 재발급 방식 고민 JWT 인증 방식에서 accessToken과 refreshToken을 재발급하는 방식은 매우 중요한 문제입니다. 이번 글에서는 Refresh Token Rotation (RTR) 방식을 채택하면서, 서버에서만 RefreshToken을 관리하는 방식도 고려했었고, 그 과정에서 발생할 수 있는 보안적인 문제점들을 다뤄보겠습니다. JWT와 토큰의 역할 JWT(Json Web Token)는 인증을 위해 사용되는 문자열 형식의 토큰입니다. 두 가지 주요 토큰이 있습니다: accessToken: 사용자가 인증된 상태를 유지하기 위한 토큰으로, 주로 API 요청 시 사용됩니다. 유효기간이 짧고, 사용자가 인증을 받을 때마다 새로 발급받습니다.refreshToken: accessToken이 만료되었을 때 재발급받기.. [Spring] JSON 매핑 오류와 Java, Kotlin에서의 DTO 구현 Spring Boot 환경에서 프로젝트를 진행하다 보면 컨트롤러와 DTO 간의 JSON 매핑이 실패하는 경우가 간혹 있습니다. 이 글에서는 매핑이 실패하는 이유와 Java, Kotlin에서 각각 DTO를 어떻게 구현하면 되는지 정리해보겠습니다. 기본 개념Controller에서 DTO를 주고받을 때 JSON 직렬화와 역직렬화가 발생합니다:직렬화 (Serialization): Java 객체를 JSON 형식으로 변환합니다.@ResponseBody 사용 시 발생하며, 서버에서 클라이언트로 데이터를 전송할 때 사용됩니다.역직렬화 (Deserialization): JSON 데이터를 Java 객체로 변환합니다.@RequestBody 사용 시 발생하며, 클라이언트에서 서버로 데이터를 전송할 때 사용됩니다.Spring .. 이전 1 다음