전체 글85 스프링 - 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. 스프링 - REST API REST API 설계 완전 가이드기본 규칙URL은 리소스를 나타내며, 동사가 아닌 명사 사용리소스는 복수형으로 사용계층 관계는 '/'로 표현URL 마지막에 '/' 포함하지 않음언더바(_) 대신 하이픈(-) 사용소문자 사용리소스 네이밍# 좋은 예시/api/v1/posts/api/v1/users/{id}/comments# 나쁜 예시/api/v1/getPosts # 동사 사용/api/v1/user_comments # 언더스코어 사용/api/v1/createNewUser # 행위 표현HTTP 메서드메서드용도예시GET리소스 조회GET /usersPOST리소스 생성POST /usersPUT리소스 전체 수정PUT /users/123PATCH리소스 부분 수정PATCH /users/1.. 2024. 12. 17. DB - B 트리를 사용하는 이유 B트리(B-tree)와 데이터베이스B트리의 기본 구조와 동작 원리B트리는 다음과 같은 특징을 가진 균형 트리 자료구조입니다:각 노드는 여러 개의 키(key)를 가질 수 있습니다.노드의 키들은 항상 정렬된 상태를 유지합니다.각 노드는 M차 B트리일 때 최대 M-1개의 키를 가질 수 있습니다.루트 노드를 제외한 모든 노드는 최소 ⌈M/2⌉-1개의 키를 가져야 합니다.간단한 3차 B트리의 예시입니다: [4] / \ [2] [6] / \ / \[1] [3] [5] [7,8]B트리를 사용하는 이유1. 디스크 접근 최적화데이터베이스에서 B트리를 사용하는 주된 이유는 디스크 I/O를 최적화하기 위해서입니다. 이는 다음과 같은 특성 때문입니다:디스크는 블록 단위로 데이터.. 2024. 12. 16. 스프링 시큐리티 - 간단한 인증절차 정리 1. 스프링 시큐리티의 인증과 인가1.1 인증 (Authentication)사용자 요청 ---> 인증 필터 ---> 인증 성공/실패 | | +------------------------+ | | 인증 프로세스 | +---> | 1. 자격증명 확인 | | 2. 사용자 존재 확인 | | 3. 비밀번호 검증 | +------------------------+인증은 사용자가 본인이 맞는지를 확인하는 과정입니다. 일반적으로 다음 단계를 거칩니다:사용자가 자격증명(credentials)을 제공시스템이 해당 정보를 검증인증 성공 시 보안 컨텍스트에 인증 정보 저장1.2 인가 (Authori.. 2024. 12. 16. 스프링 - 스프링 시큐리티를 이용한 로그인 구현하기 (1) Spring Security와 React 인증 구현 정리스프링 부트와 리액트틀 이용하여 서버 - 클라이언트 구조를 만들고, 스프링 시큐리티를 이용하여 로그인하는 기능을 만든다. 내용이 방대하기 때문에 천천히 하나씩 설명해나가려고 한다. 우선 전체적인 느낌만 살펴본다.1. 기본 설정SecurityConfig 설정@Configuration@EnableWebSecuritypublic class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .cors(cors -> cors.configurationSource(corsConfigu.. 2024. 12. 15. 스프링 - 트랜잭션 이해 (2) Spring 트랜잭션의 이해1. 트랜잭션 동작 원리Spring의 트랜잭션은 프록시를 통해 작동@Transactional이 선언된 메서드 호출 시, 트랜잭션 프록시가 먼저 개입[Client] -> [@Transactional Method] | v [Transaction Proxy] | v [Real Method]2. 트랜잭션 동기화 매니저ThreadLocal을 사용하여 트랜잭션 정보 관리각 스레드별로 독립적인 트랜잭션 관리// TransactionSynchronizationManagerprivate static final ThreadLocal> resources;private static final ThreadLocal .. 2024. 12. 13. 스프링 파라미터 처리 과정 Spring MVC 요청 처리 및 Validation 흐름1. 클라이언트 요청 처리클라이언트의 HTTP Request 전송 (JSON/폼 데이터/쿼리 파라미터)DispatcherServlet이 요청 수신HandlerMapping을 통해 적절한 HandlerMethod(컨트롤러 메서드) 검색DispatcherServlet이 HandlerAdapter에게 핸들러 실행 요청2. ArgumentResolver 처리HandlerAdapter가 메서드 파라미터에 맞는 ArgumentResolver 선택ArgumentResolver의 파라미터 종류별 처리:@RequestBody: JSON -> 객체 변환 (Jackson ObjectMapper)@ModelAttribute: 요청 파라미터 -> 객체 변환 (DataBi.. 2024. 12. 12. 웹 - 스프링에서 카카오 로그인 연동하기 카카오 로그인 구현 절차1. 사전 준비카카오 개발자 사이트에서 애플리케이션 등록REST API 키 발급Redirect URI 설정 (/login/oauth2/code/kakao)동의항목 설정 (닉네임, 프로필사진 등 필요한 정보 선택)2. Spring 설정application.yml - OAuth2 클라이언트 설정 (client-id, redirect-uri 등)yml형식 대신, properties 파일에 같이 설정할 수 있다.build.gradle - spring-boot-starter-oauth2-client 의존성 추가3. 클래스 구성SecurityConfig - OAuth2 로그인 설정, 성공 후 리다이렉트 경로 지정OAuth2UserService - 카카오에서 받은 사용자 정보를 처리하는 서비스.. 2024. 12. 12. 이전 1 2 3 4 5 6 ··· 11 다음