본문 바로가기

내일배움캠프(Sparta)/Spring25

[Spring] Entity 클래스 간의 관계 외래키의 주인 정하기 외래키의 주인 ➡️ 등록, 수정, 삭제 가능 (관리) 외래키 주인 X ➡️ 읽기만 가능. @JoinColumn() : 외래키의 주인이 활용하는 annotation으로, 컬럼명, null 여부, unique 여부 등을 지정 1) 1 대 1 관계 @OneToOne : Entity 간의 1대1 관계일 때 맺어주는 역할 수행 1-1. 단방향 관계 단방향 관계는 상대 entity 따로 필드가 없어 조회 불가능 1-2. 양방향 관계 양방향 관계는 서로가 상대 entity를 가지고 있음. mappedBy : 외래키의 주인을 지정해줄 때 사용하는 옵션. 외래키의 주인이 아닌 쪽에서 주인 지정 mappedBy의 속성값은 상대 entity(외래키의 주인)에 있는 외래키 필드명을 의미 2) N 대 1 .. 2023. 11. 20.
[Spring] Entity 연관관계 1) DB table 간의 연관관계 ❓고객이 음식을 주문시, 주문 정보는 어느 테이블에 들어가야 할까? 고객테이블 고객 한 명이 음식 여러 개 주문 가능 ➡️ 1 대 N 관계(일대다 관계) 불필요하게 고객의 이름이 중복되는 문제 발생 음식테이블 한 개의 음식은 여러 명의 고객에게 주문될 수 있음 ➡️ 1 대 N 관계(일대다 관계) 불필요하게 고객의 이름이 중복되는 문제 발생 그렇다고 해서 user_id나 food_id를 1,2 이런식으로 여러 개 넣는 것은 추가, 조회 시 많은 문제가 발생할 수 있어 현실적으로 불가능 (이런 방식은 RDBMS에서 불가능) ➡️ 주문에 대한 정보를 기록할 orders 테이블 추가. ❓ DB 테이블들간의 관계에서 방향의 개념이 존재할까? DB에서는 어떤 테이블을 기준으로 하.. 2023. 11. 14.
[Spring] RestTemplate 1) RestTemplate : 서버에서 다른 서버로 간편하게 요청할 수 있도록 스프링에서 제공하는 기능 RestTemplate의 Get 요청 방법 client 입장 서버 RestTemplate 주입 받기 RestTemplateBuilder의 build() 메서드를 사용해 주입 받음. 요청 받은 검색어를 Query String 방식으로 Server 입장의 서버로 RestTemplate를 사용해 요청 public ItemDto getCallObject(String query) { // 요청 URL 만들기 URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .path("/api/server/get-call-obj") .queryPar.. 2023. 11. 10.
[Spring] Spring Security / Validation 1) Spring Security : Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해주는 프레임워크 CSRF : 사이트 간 요청 위조 (Cross-site request forgery) 공격자가 인증된 브라우저에 저장된 쿠키의 세션 정보를 활용하여 웹 서버에 사용자가 의도하지 않은 요청을 전달함. CSRF 설정이 되어있는 경우 html에서 CSRF 토큰 값을 넘겨주어야 요청 수신 가능 쿠키 기반의 취약점을 이용한 공격이기 때문에 REST 방식의 API에서는 disable 가능 Spring Security - Filter Chain Spring에서 모든 호출은 DispatcherServlet을 통과하게 하고 이후에 각 요청을 담당하는 Cotroller로 분배되는데, 이 때 각 요청에 대.. 2023. 11. 9.
[Spring] Filter 1) Filter : 요청과 응답이 서버, 클라이언트에게 가기 전 그 사이에서 특정 작업을 수행하는 도구 웹 애플리케이션에서 관리되는 영역 클라이언트로부터 오는 요청과 응답에 대해서 최초, 최종 단계에 위치해 응답의 어떤 정보를 변경하거나 부가적인 기능 추가할 수 있음. 범용적으로 처리되는 작업들에 활용됨 (ex; Logging, 보안 처리, 인증/인가와 관련된 로직 처리) filter를 사용하면 인증, 인가와 관련된 로직들을 처리함으로써 비즈니스 로직과 인증/인가 로직을 분리하여 관리할 수 있다는 것이 장점. 필터는 하나만 있는 게 아니라 아래의 그림과 같은 형태로 여러 개가 체인 형식으로 묶여 처리되고 있음. LoggingFilter @Slf4j(topic = "LoggingFilter") @Comp.. 2023. 11. 9.
[Spring] JWT / 패스워드 암호화 1) JWT (JSON Web Token) : JSON 포맷을 이용해 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 토큰의 한 종류 일반적으로 쿠키 저장소를 사용해 JWT 전달 JWT 사용 이유 1. 서버가 1대인 경우 Session1이 모든 Client의 로그인 정보를 소유하고 있음. 2. 서버가 2대 이상인 경우 대용량 트래픽 처리를 하기 위해서는 서버가 두 대 이상 운영이 필요함. 중간에서 클라이언트의 요청을 밸런스있게 나눠주는 중간 역할을 하는 Load Balancer가 존재해 Session마다 다른 Client 로그인 정보를 가지고 있을 수 있음. ex Session1 : Client1, Client2, Client3 Session2 : Client4 Session3 : Cl.. 2023. 11. 8.
[Spring] Authentication / Authorization / Cookie / Session 1) Authentication & Authorization Authentication (인증) : 해당 유저가 실제 그 유저가 맞는지 확인하는 절차 (ex; 지문인식, 로그인 ..) Authorization (인가) : 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념 (ex; 관리페이지 - 관리자 권한, 회원/비회원) 웹 애플리케이션 인증의 특수성 일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 서버-클라이언트는 아주 멀리 떨어져 있음 서버의 비용 및 부담을 줄이기 위해 HTTP 프로토콜을 이용해 비연결성(Connectionless)과 무상태(Stateless)로 이루어진 통신을 함 비연결성, 무상태 프로토콜에서 유저 인증에 대한 정보를 어떻게 유지하는 것일까? 인증 방식 1. .. 2023. 11. 8.
[Spring] Bean 1) Bean을 수동으로 등록하는 방법 🤔 Bean 수동 등록은 언제 사용이 될까? - 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들은 수동으로 등록하는 것이 좋음. 🤔 어떤 것을 Bean으로 수동 등록 할까? - 기술 지원 Bean들을 주로 수동으로 등록 함. 수동 등록 장점 비즈니스 로직 Bean 보다는 그 수가 적기 때문에 수동으로 등록하기 부담스럽지 않음 수동등록된 Bean에서 문제가 발생했을 때 해당 위치를 파악하기 쉽다는 장점 존재 Bean 수동 등록하는 방법 Bean으로 등록하고자 하는 객체를 반환하는 메서드를 선언하고 해당 메서드 위해 @Bean annotation 추가 Bean을 등록하는 메서드가 속한 해당 클래스에 @Configuration 설정 Spring 서버가 뜰 때.. 2023. 11. 8.
[Spring] Spring Data JPA / JPA Auditing / Query Methods 1) Spring Data JPA : JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈 JPA를 추상화시킨 Repository 인터페이스 제공 Repository Interface : Hibernate와 같은 JPA 구현체를 사용해 구현한 클래스를 통해 사용 SimpleJpaRepository Spring Data JPA 에서 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해줌 Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면, 해당 인터페이스의 정보르르 토대로 자동으로 SimpleJpaRepository 클래스를 생성해주고, 이 클래스를 Spring 'Bean'으로 등록 인터페이스의 구현 클래스를 직접 작성하지 않아도 J.. 2023. 11. 7.