본문 바로가기

스프링12

스프링 시큐리티 - JWT와 유저 인증 절차 Spring Security와 JWT 인증 구현 상세 가이드1. JWT (JSON Web Token) 개요1.1 특징자가수용적(Self-contained): 필요한 모든 정보를 토큰 자체에 포함Stateless: 서버에 상태 저장 불필요Base64URL 인코딩된 문자열 형태1.2 장점서버 확장성 증가: 세션 저장/관리 불필요다중 서버 환경에서 효율적모바일 애플리케이션 통합 용이CORS 문제 해결 용이1.3 단점토큰 크기: 모든 요청에 추가 overhead저장된 정보 변경 불가: 토큰 재발급 필요토큰 탈취 시 즉각 무효화 어려움2. 구현 상세2.1 JWT 구조 및 생성 (JwtProvider)@Componentpublic class JwtProvider { private final Key key = .. 2024. 12. 25.
스프링 - JPA 다대일 처리 JPA 일대다(OneToMany) 관계 처리 방법1. 페치 조인특징한 번의 쿼리로 연관된 엔티티를 모두 조회일대다 페치 조인은 하나만 사용 가능 (데이터 정합성 문제)페이징과 함께 사용하면 메모리에서 페이징 처리 (성능 이슈)예시 코드.leftJoin(question.answerList).fetchJoin()2. 배치 사이즈특징지연 로딩 시 IN 쿼리를 통해 N+1 문제 해결설정한 배치 사이즈만큼 IN 쿼리로 한 번에 조회페이징과 함께 사용 가능 (실제 DB에서 페이징)네트워크 통신 횟수 감소 설정 방법// 엔티티에 직접 설정@BatchSize(size = 100)private List answerList;// 또는 application.yml에 글로벌 설정spring: jpa: propertie.. 2024. 12. 22.
스프링 - OSIV OSIV (Open Session In View)개념영속성 컨텍스트와 데이터베이스 커넥션을 View 렌더링이 끝나는 시점까지 유지하는 패턴사용 고려사항OSIV true장점: 지연 로딩이 가능하여 엔티티 그래프 탐색이 자유로움단점: 데이터베이스 커넥션을 오래 점유사용: 실시간 트래픽이 적은 ADMIN 페이지OSIV false장점: 데이터베이스 커넥션 사용 시간 최소화단점: View 렌더링 시점에 지연 로딩 불가능사용: 실시간 트래픽이 많은 API 서버서버 분리 운영API 서버 (Production)OSIV=false 설정무중단 배포높은 가용성 유지ADMIN 서버OSIV=true 설정일시적인 중단 허용복잡한 화면 구성에 용이OSIV false 시 코드 패턴// 비즈니스 로직용 서비스@Service@Trans.. 2024. 12. 22.
스프링 - N + 1 문제 JPA N+1 문제와 해결 방안N+1 문제란?N+1 문제는 JPA에서 발생하는 대표적인 성능 이슈입니다. 연관 관계가 설정된 엔티티를 조회할 때 조회된 데이터 갯수(N)만큼 추가로 조회 쿼리가 발생하는 현상을 말합니다.예시 상황@Entitypublic class Answer { @ManyToOne(fetch = FetchType.LAZY) private Question question; @ManyToOne(fetch = FetchType.LAZY) private User user;}// RepositoryList answers = answerRepository.findAll();// 첫 번째 쿼리: SELECT * FROM answeranswers.forEach(answer -> {.. 2024. 12. 17.