공부/Spring

JPA로 양방향 연관관계를 설정하면 N+1 문제가 발생할 수 있다는 얘기를 많이 들어봤다..이번 프로젝트에서도 양방향 연관관계를 설정한 만큼이번 기회에 N+1 문제가 무엇이고 해결 방법에는 무엇이 있는지 정리하고자 한다! N+1 문제`N+1 문제`는 JPA에서 발생할 수 있는 데이터베이스 쿼리 최적화와 관련된 중요한 성능 문제 중 하나이다. 내가 진행했던 프로젝트에서 예를 들면 Shop - Menu 엔티티들은 서로 연관관계를 맺는다Shop은 여러 개의 Menu를 가지니까 Shop이 `@OneToMany`로 Menu 필드를 가지고 Menu가 `@ManyToOne`로 Shop 필드를 가질 수 있을 것이다. (쉽게 말하면 Shop-Menu -> 일대다 관계) 그럼 특정 Shop의 Menu 필드를 조회하는 시나..
MSA는 각 서비스가 독립적으로 배포되기 통신되므로 보안이 매우 중요하다.데이터 보호, 인증 및 권한 부여 등을 통해 시스템의 보안성을 확보해야 한다. 📌 OAuth2 `OAuth2`는 `토큰 기반`의 인증 및 권한 부여 프로토콜이다.클라이언트 어플리케이션이 리소스 소유자의 권한을 얻어 리소스에 접근할 수 있도록 한다. 📌 JWT`JWT` (Json Web Token)은 JSON 형식의 자가 포함 토큰으로, 클레임을 포함하여 사용자에 대한 정보를 전달한다.JWT는 헤더, 페이로드, 서명으로 구성되고 암호화를 통해 데이터의 무결성과 출처를 보장한다. `JWT`의 주요 특징으로는 자가 포함, 간결성, 서명 및 암호화가 있다.자가 포함 토큰으로 토큰 자체에 모든 정보를 포함하고 있어 별도의 상태 저장이 필..
📌 API 게이트웨이`API 게이트웨이`는 클라이언트의 요청을 받아 다양한 백엔드 서비스로 라우팅하고 다양한 부가 기능을 제공하는 중간 서버이다.즉 클라이언트 요청을 받아 적절한 서비스로 전달하는 역할을 수행한다. 그 외에도 인증 및 권한 부여, 로드 밸런싱, 모니터링 및 로깅 등의 기능을 수행한다. 📌 Spring Cloud Gateway`Spring Cloud Gateway`란 Spring 프로젝트의 일환으로 개발된 API 게이트웨이로 MSA 아키텍처에서 널리 사용된다.동적 라우팅, 필터링, 모니터링, 보안 등의 기능을 제공한다. `Spring Cloud Gateway`를 사용하려면 관련 의존성을 추가해야 한다.dependencies { implementation 'org.springfram..
📌 서킷 브레이커`서킷 브레이커`란 MSA 간 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다.외부 서비스 호출 실패 시 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 한다.상태 변화는 Closed -> Open -> Half Open 순으로 변화한다. 📌 Resilience4j`Resilience4j`는 서킷 브레이커 라이브러리이다.다양한 서킷 브레이커 기능을 제공한다!`Fallback` 메서드를 통해 호출 실패 시 대체 로직을 제공하여 시스템 안정성을 확보한다.또한 서킷 브레이커 상태를 모니터링하고 관리할 수 있는 다양한 모니터링 도구를 제공한다. `Resilience4j`를 사용하려면 gradle 의존성을 추가해야 한다.dependencies { impleme..
이번에는 FiegnClient와 Ribbon (로드 밸런싱) 내용에 대해 정리하려고 한다. 📌 로드 밸런싱`로드 밸런싱`이란 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 시스템의 성능과 가용성을 높이는 기술을 말한다.즉, 서버 간 트래픽을 고르게 분배하여 한 서버에 부하가 집중되는 것을 방지한다.종류에는 클라이언트 사이드 로드 밸런싱 / 서버 사이드 로드 밸런싱이 있다. 우리는 클라이언트가 직접 여러 서버 중 하나를 선택하여 요청을 보내는 방식인 `클라이언트 사이드 로드 밸런싱`을 사용해볼 것이다.  📌 FeignClient`FeignClient`는 Spring Cloud에서 제공하는 HTTP 클라이언트로, Restful 웹 서비스를 호출할 수 있다.`Eureka`와 같은 서비스 디..
💡 Today 요약오늘은 MSA 강의 1주차를 수강했다다 처음 듣는 용어들이라 생소하고.. 낯설었지만 자주 반복해서 들으니 대충 감이 오는 것 같다반복 학습하여 내 것으로 만들자 💡 What I did?알고리즘 문제MSA 1-1 ~ 1-5 수강 💡 What I Learned?MSA`MSA`(Microservices Architecture)는 애플리케이션을 독립적으로 배포하고 관리할 수 있는 작은 서비스들로 나누어 구성하는 소프트웨어 아키텍처 스타일을 말한다.각 서비스는 `특정 비즈니스 기능`을 담당하며, `독립적`으로 개발, 배포, 확장될 수 있다.따라서 특정 기능에 대한 성능 최적화와 확장이 용이하다. Spring Cloud`Spring Cloud`는 MSA 구현을 위한 다양한 도구와 프레임워크를..
Spring 프레임워크에서 애플리케이션을 구조화하는 데 사용되는 주요 레이어는 `Domain`, `Repository`, `Service`, `Controller`이다. 각 레이어는 특정한 역할을 담당하여 애플리케이션의 모듈화와 유지보수성을 높인다. 각 레이어의 역할은 다음과 같다. 📌 각 계층의 역할`Domain`도메인 계층은 애플리케이션의 `핵심 비즈니스 로직과 엔티티`를 포함한다. 주로 비즈니스 객체, 엔티티, 밸류 객체 등을 정의한다. `Repository`레포지토리 계층은 데이터 저장소와의 상호 작용을 담당한다. 주로 데이터베이스에 접근하여 CRUD 작업을 수행한다. `Service`서비스 계층은 애플리케이션의 비즈니스 로직을 포함한다. 여러 `도메인 객체와 레포지토리의 조합을 통해 비즈니스 ..
📌 의존성 주입이란?Spring Boot에서 `의존성 주입(Dependency Injection, DI)`은 객체 간의 의존 관계를 자동으로 설정해주는 중요한 개념이다.이를 통해 코드의 `결합도`를 낮추고, `테스트 용이성`과 `유지보수성`을 높일 수 있다. 의존성 주입을 통해 클래스 간의 결합도를 낮출 수 있다. 결합도가 낮아지면, 한 클래스의 변경이 다른 클래스에 미치는 영향을 줄일 수 있다. 이는 코드의 유지보수성과 확장성을 높이는 데 중요한 역할을 한다. 예를 들어, 클래스 A가 클래스 B에 직접 의존하는 경우, B의 변경사항은 A에 직접적인 영향을 미치게 된다. 하지만 의존성 주입을 사용하면, A는 B의 구체적인 구현이 아니라 인터페이스나 추상 클래스에 의존하게 되어, B의 구현 변경이 A에 ..
린구
'공부/Spring' 카테고리의 글 목록