네이버 클라우드 캠프 25

API Gateway

마이크로서비스 아키텍처에서 중요한 역할을 하는 서버로,클라이언트 요청을 적절한 서비스로 라우팅하고 다양한 부가 기능을 제공하는 중간 계층이다. API Gateway는 마이크로서비스 간의 복잡한 상호작용을 간소화하고 보안, 로깅, 모니터링 등의 기능을 중앙에서 관리할 수 있도록 도와준다.  주요 기능요청 라우팅(Request Routing):클라이언트의 요청을 적절한 마이크로서비스로 라우팅합니다.URL 경로나 메소드에 따라 요청을 다른 서비스로 전달할 수 있습니다.인증 및 인가(Authentication and Authorization):API 요청에 대한 인증 및 인가를 처리하여 보안을 강화합니다.JWT, OAuth, API 키 등을 활용하여 인증 및 인가를 관리합니다.로드밸런싱(Load Balancin..

CSRF & 세션 관리

CSRF(Cross-Site Request Forgery)와 세션은 웹 애플리케이션 보안에서 중요한 개념입니다. 여기서 설명하는 이유는 Spring Security 설정에서 왜 특정 보안 설정을 하는지를 이해하기 위함입니다.세션 관리와 SessionCreationPolicy.STATELESS:상태 없는(stateless) 애플리케이션:상태 없는 애플리케이션에서는 서버가 클라이언트의 상태를 유지하지 않습니다. 모든 요청은 독립적이며, 서버는 각 요청을 개별적으로 처리합니다.RESTful API는 일반적으로 상태가 없도록 설계됩니다. 이는 확장성과 성능 측면에서 유리합니다.SessionCreationPolicy.STATELESS:이 설정은 서버가 HTTP 세션을 생성하지 않도록 합니다.사용자가 각 요청마다 ..

시큐리티_UserDetailServiceImpl

UserDetailServiceImpl 클래스는인자로 받은 사용자 이름(username)을 기반으로데이터베이스에서 일치하는 정보를 찾고, 있으면 User 객체를 반환하며,없으면 예외를 던지는 클래스입니다. 반환된 UserDetails 객체는 Spring Security에서 인증 및 권한 부여에 사용된다.      1. loadUserByUsername 메서드는 username을 인자로 받아 처리한다. 2. userRepository를 사용하여 데이터베이스에서 해당 username과 일치하는 사용자 정보를 찾는다. 3. 사용자가 존재하면 User 객체를 반환한다. 4. 사용자가 존재하지 않으면 UsernameNotFoundException 예외를 던진다.  이 클래스에서 주목할 점은 다음과 같습니다:  •..

Spring Data REST

네, 맞습니다. Spring Data REST를 사용하면, 별도의 컨트롤러 없이도 기본적인 CRUD 엔드포인트가 자동으로 생성됩니다. 따라서, CarRepository와 OwnerRepository를 정의하고, Spring Data REST 설정만 해주면, 기본적인 CRUD 엔드포인트를 사용할 수 있습니다.OwnerCarController와 같은 컨트롤러는 필요하지 않습니다. 다만, 커스텀 로직을 추가하거나 특정한 비즈니스 로직을 수행할 필요가 있을 때는 별도로 컨트롤러를 정의할 수 있습니다.   자동 생성되는 엔드포인트이 설정만으로도 Spring Data REST는 다음과 같은 엔드포인트를 자동으로 생성합니다:Car 엔티티 관련 엔드포인트GET /cars: 모든 Car 엔티티 조회GET /cars/{i..

JWT

헤더 (Header): JWT의 메타데이터를 포함하며, 토큰의 타입과 사용할 서명 알고리즘을 지정합니다.페이로드 (Payload): 실제 정보를 담고 있는 부분으로, 다양한 클레임(claims)을 포함합니다. 클레임은 토큰의 주체, 만료 시간, 사용자 정보 등 다양한 데이터를 담고 있습니다.서명 (Signature): 토큰의 무결성을 검증하기 위한 서명입니다. 헤더와 페이로드를 인코딩한 후, 비밀 키를 사용하여 서명합니다. 이 서명을 통해 토큰이 변조되지 않았음을 확인할 수 있습니다. 비유로 설명JWT를 등기 우편에 비유해보겠습니다.헤더 (Header):역할: 등기 우편 봉투의 외부에 적힌 정보.비유: 등기 우편 봉투에는 발송자와 수신자의 정보, 그리고 우편 종류가 적혀 있습니다. JWT의 헤더는 토큰의..

claim

JWT(JSON Web Token)에서 클레임(Claim)은 토큰 안에 포함된 정보 조각을 의미합니다. 클레임은 사용자에 대한 속성이나 토큰에 대한 메타데이터를 담고 있으며, 세 가지 유형으로 구분됩니다: 등록된 클레임(Registered Claims), 공개 클레임(Public Claims), 비공개 클레임(Private Claims).비유로 설명클레임을 비유로 설명하자면, JWT를 신분증(ID 카드)에 비유할 수 있습니다. 신분증에는 소지자의 정보를 담고 있는 여러 필드가 있습니다.등록된 클레임 (Registered Claims)등록된 클레임은 신분증의 표준 필드와 같습니다. 예를 들어, 신분증 번호, 발행일, 만료일 등이 있습니다. JWT에서는 이러한 필드로 iss(발행자), sub(주체), exp..

React_{children}, import vs const-require

children는 React에서 특별한 프로퍼티로, 컴포넌트의 열림과 닫힘 태그 사이에 중첩된 콘텐츠를 나타냅니다. 이것은 React에서 예약된 키워드로, 컴포넌트가 전달된 자식 요소들을 렌더링할 수 있게 합니다. children을 Children과 같이 다른 이름으로 변경하면, React는 이를 중첩된 콘텐츠를 위한 특별한 프로퍼티로 인식하지 않고 일반적인 프로퍼티로 취급하여, 예상한 대로 콘텐츠가 렌더링되지 않습니다. BasicLayout 컴포넌트에서 children 프로퍼티는 요소 내부에 중첩된 콘텐츠를 렌더링하는 데 사용됩니다. 이것을 Children으로 변경하면 React는 더 이상 이를 특별한 프로퍼티로 인식하지 않게 되어 콘텐츠가 제대로 렌더링되지 않습니다. 예를 들어, 다음과 같이 수정하..

@ElementCollection_임베디드 테이블

Member 클래스와 @ElementCollection의 관계Member 클래스는 @ElementCollection을 사용하여 memberRoleList라는 필드에 여러 개의 MemberRole 객체를 포함합니다. @ElementCollection은 기본적으로 자식 엔티티가 부모 엔티티에 종속되며 독립적으로 존재하지 않는 경우에 사용됩니다.연관관계 설명부모 엔티티: MemberMember 클래스는 데이터베이스에서 독립적으로 존재할 수 있는 엔티티입니다. 이 엔티티는 @Id로 정의된 기본 키 필드인 email을 가지고 있습니다.자식 엔티티: MemberRoleMemberRole은 독립적인 엔티티가 아니며, Member 엔티티에 종속됩니다. Member 엔티티는 여러 개의 MemberRole을 가질 수 있습..

CORS, CSRF

이 코드는 스프링 애플리케이션의 CORS 설정을 정의합니다.addMapping("/")**: 모든 경로에 대해 CORS를 적용합니다.allowedOrigins("*"): 모든 도메인에서의 요청을 허용합니다.allowedMethods("HEAD", "GET", "POST", "PUT", "DELETE", "OPTIONS"): 나열된 HTTP 메서드를 허용합니다.maxAge(300): 사전 요청(프리플라이트 요청)의 캐시 시간을 300초로 설정합니다.allowedHeaders("Authorization", "Cache-Control", "Content-Type"): 지정된 헤더들을 허용합니다.CORS (Cross-Origin Resource Sharing)CORS는 웹 브라우저에서 다른 도메인(출처)의 리소..

JPA_엔티티 그래프

엔티티 그래프를 비유적으로 설명하겠습니다.비유: 쇼핑 카트와 고객 정보상황: 당신은 온라인 쇼핑몰에서 쇼핑 카트와 고객 정보를 처리하는 시스템을 개발 중입니다. 쇼핑 카트에는 여러 개의 상품이 담길 수 있고, 고객 정보에는 고객의 개인 정보와 주문 내역이 포함됩니다.일반적인 로딩 (N+1 문제)상황: 쇼핑 카트에 10개의 상품이 담겨 있고, 이를 데이터베이스에서 로드하려고 합니다.일반적인 방식:먼저 쇼핑 카트 정보를 가져옵니다 (1번의 쿼리).그 후, 각 상품 정보를 개별적으로 가져옵니다 (10번의 쿼리).결과: 총 11번의 쿼리가 실행됩니다. 이를 N+1 문제라고 합니다.엔티티 그래프 (해결책)상황: 같은 쇼핑 카트 정보를 로드하려고 합니다.엔티티 그래프 사용:쇼핑 카트와 연관된 모든 상품 정보를 한 ..