🌿SPRING/🍀공부 [SPRING] 21

[SPRING][JPA] native query 활용하기

패스트 캠퍼스의 강의 [한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지]를 보고 정리한 글입니다. 더보기 https://fastcampus.co.kr/courses/203525/clips/ 패스트캠퍼스 온라인 강의 - 초격차 패키지 : 한 번에 끝내는 Java/Spring 웹 개발 마스터 fastcampus.co.kr 사용 방법 및 특징 @Query(nativeQuery = true) 로해주면 사용가능 @Query(value = "select * from book", nativeQuery = true) List findAllCustom(); JPQL과 다르게 entity 속성을 사용하지 못함 Entity 명이 아닌 table 명을 써야함! * 이아니라 속성값을 넣어야 한다면 컬럼명을 ..

[SPRING][JPA] @Query 활용하기

패스트 캠퍼스의 강의 [한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지]를 보고 정리한 글입니다. 더보기 https://fastcampus.co.kr/courses/203525/clips/ 패스트캠퍼스 온라인 강의 - 초격차 패키지 : 한 번에 끝내는 Java/Spring 웹 개발 마스터 fastcampus.co.kr @Query란? Query Method 의 커스텀 버전! 일반적으로 @Query까지는 필요가 없으나 2가지의 경우 @Query를 쓰는 게 더 낫다 긴 쿼리메소드의 이름을 가독성이 좋게 수정이 필요한 경우 엔티티 전체가 아닌 필요한 컬럼만 부분적으로 조회가 필요한경우 1. Query Method의 가독성 문제 = Query Method의 이름의 길이가 길 경우 여러가지 조..

[SPRING][JPA] 다대다 매핑 N:M

참고 블로그 더보기 https://ict-nroo.tistory.com/127 [JPA] @ManyToMany, 다대다[N:M] 관계 다대다[N:M] 실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블(조인 테이블) ict-nroo.tistory.com 다대다 [N:M] 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블 (조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다. 2022.09.14 - [DB/RDBMS] - [RDBMS] 관계형 데이터 모델링 1 [RDBMS] 관계형 데이터 모델링 1 더보기 - 참고한 강의 더보기 참고한 강의 http..

[SPRING] Service 와 ServiceImpl

처음 Spring을 배울때부터 채멘에게 배웠던 방식은 Service Interface를 두고 Service 구현체를 따로 두는 방식이었다. 그래서 팀과제를 할때에도 혼자서 꿋꿋이(?) 이 방식을 고수해오고 있었는데 최근 멘토링 중 매니저님께서 ' 이 방식을 사용할 때에 장점은?' ' 하나의 서비스 interface에서 2개 이상의 구현체가 필요할 경우 어떻게 할 것인가?' 하는 질문에서 제대로 대답을 하지 못하였다. 그리고 다른 팀원들도 '왜' 사용하는 지에 대해 물어보는데 그저 어렴풋이 대답할 뿐 확실한 답을 해내지 못하여서 이번 기회에 개념을 다 잡고자 한다. 관습적인 추상화 왜 Service Interface 와 Service Impl Class를 따로 사용하는가? 👀장점 인터페이스와 구현체의 분리..

[SPIRING] [MVC] @EnableWebMvc 어노테이션

참고 블로그 https://pangtrue.tistory.com/84 [Spring MVC] @EnableWebMvc 애노테이션과 WebMvcConfigurer 인터페이스 1. DispatcherServlet과 스프링 컨테이너 스프링 MVC에서 모든 요청의 흐름을 관리하는건 DispatcherServlet이라고 정리했었습니다. DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성 pangtrue.tistory.com 스프링 MVC 2022.08.18 - [SPRING] - [SPRING] MVC 패턴 [SPRING] MVC 패턴 Model - View - Controller 3가지 역할로 프로젝트 구성요소를 구분한 패턴 Model 어플리케이션이 무엇을 할 것인지 정의하는..

[SPRING] Frontend와 협업 ! - CORS 원리 / 설정 (22.10.22 수정)

CORS란? 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS) 교차 출처 ? = 다른 출처! 현재 IP가 아닌 다른 IP로 리소스를 요청하는 구조 즉, 리스소가 자신의 출처와 다를때 교차 출처 HTTP 요청을 실행하게 된다. 출처 (Origin) 란? 요청이 시작된 서버의 위치를 나타내는 문구 구성 스키마 Schema = Protocol 호스트 Host = Domain 포트 Port https://www.domain.com:3000/post https://www.domain.com:3000/post/id=?page=1 https://www.domain.com:3000/main/post/comment 👉 모두 출처 Origin 이 동일한 상태이다 ! SOP Same-..

[SPRING][JPA] Proxy / 지연로딩과 즉시로딩

참고 블로그 JPA에서 프록시는 연관된 객체들을 데이터베이스에서 조회하기 위해서 사용 프록시를 사용하면 연관된 객체들을 처음부터 데이터베이스에서 조회하는 것이 아니라 실제 사용하는 시점에 데이터베이스를 조회 가능 하지만 자주 함께 사용되는 객체들은 조인을 사용해서 함께 조회하는 것이 더 효과적 즉시로딩 지연로딩 ❓❗ 즉시로딩만 사용 시 원하지 않는 연관된 엔티티까지 데이터베이스에서 함께 조회하는 것은 효율적이지 않음 => 이러한 문제를 해결하기 위해 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공 ==> 지연로딩! 프록시 기초 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미루고 싶으면 EntityManager.getReference() 메소드를 사용하면 됩니다. 이 메소드를 ..

[SPRING] [JPA] cascade Type 영속성 전이

특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용 양방향 매핑시에만 가능 @OneToOne, @OneToMany, @ManyToOne 연관 관계가 있는 어노테이션에 cascade() 지원 eg. 부모 엔티티 저장시 자식 엔티티도 저장하도록 하는 경우 더보기 ❗ 쓰면 안되는 경우 => 자식의 연관 관계가 2개 이상일때 ex) C라는 엔티티가 A와 B에 의해서 관리된다 Cascade 종류 ALL: 모든 Cascade를 적용 PERSIST: 엔티티를 영속화할 때, 연관된 엔티티도 함께 유지 MERGE: 엔티티 상태를 병합(Merge)할 때, 연관된 엔티티도 모두 병합 REMOVE: 엔티티를 제거할 때, 연관된 엔티티도 모두 제거 DETACH: 부모 엔티티를 detach(..

[SPRING] AOP 개념

참고블로그 우아한테크 유튜브 Aspect Oriented Programming 관점지향프로그래밍 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점에서 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 말이 헷갈려서 찾아보니 일단은 OOP(객체지향 프로그래밍)의 한계에 대해서 알아야 한다. OOP의 한계 A,B,C 클래스들의 같은 색의 선들은 중복되는 메소드/필드/코드 등을 의미 만약 클래스A의 주황색 을 수정한다면 클래스B와 클래스C도 해당하는 부분을 찾아 수정해야함. 이는 SOLID 원칙에 위배 / 유지보수에도 쉽지 않음. 인프라로직의 중복이 횡단으로 나타나기 때문에 횡단 관심사, 흩어진 관심사 (Crosscutting Concerns..

[SPRING] [JPA] 기본 키 매핑 @GeneratedValue

더보기 개인 프로젝트에서 DB id 들이 사용자 1,2,3,4.. 게시글 1,2,3,4.. 댓글 1,2,3,4.. 이런 식으로 하고 싶었는데 내가 구현한 거는 사용자 1,4.. 게시글 2,5,6.. 댓글 3,7,8.. 이런 식이라 찾아보니 기본키 매핑의 문제였다... ㅎㅎㅎㅎㅎㅎㅎ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 직접할당 : 기본 키를 어플리케이션에서 직접 할당 해주는 방법 (application에서 생성) @Id만 사용하면 됨 자동생성 : 데이터베이스가 자동으로 할당해주는 방법 (db가 생성) @Id와 @GeneratedValue 사용 여러가지로 나뉨! @GeneratedValue(strategy = Genera..

[SPRING] Spring Security - OAuth2.0

: 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준. 사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜. OAuth를 사용하는 서비스 제공자는 대표적으로 구글, 페이스북 등이 있습니다. 국내에는 대표적으로 네이버와 카카오가 있죠. : 로그인, 개인정보 관리 책임을 서드파티 애플리케이션 (Google, Facebook, Kakao 등)에게 위임할 수 있다. (단, 사용자가 기존에 서드파티 서비스에 회원가입이 되어있어야 함) 내가 만든 애플리케이션에서 사용자가 Kakao 로그인을 통해 ..

[SPRING] Spring Security - API 접근 권한 제어

EX) '일반 사용자'는 관리자 페이지에 접속이 인가되면 안됨! 1. 스프링 시큐리티에 "권한 (Authority)" 설정방법 회원 상세정보 (UserServiceImpl) 를 통해 "권한 (Authority)" 설정 가능 권한을 1개 이상 설정 가능 "권한 이름" 규칙 "ROLE_" 로 시작해야 함 예) "ADMIN" 권한 부여 → "ROLE_ADMIN" 스프링 시큐리티를 이용한 API 별 권한 제어 방법 Controller 에 "@Secured" 어노테이션으로 권한 설정 가능 @Secured("권한 이름") 선언 권한 1개 이상 설정 가능 "@Secured" 어노테이션 활성화 방법 (스프링부트 2.7이상도 동일)

[SPRING]Spring Security - 패스워드 암호화

❗ 회원 등록 시 '비밀번호'는 사용자가 입력한 문자 그대로 DB 에 안 된다!! '정보통신망법, 개인정보보호법' 에 의해 비밀번호는 암호화(Encryption)가 의무!! 회원가입시 Password 입력 -> 비밀번호 (암호화 알고리즘)-> 암호화 => DB에 저장 복호화가 불가능한 일반향 암호 알고리즘 사용 그럼 사용자가 로그인할 때는 암호화된 패스워드를 기억해야 할까? ⇒ 아닙니다. 사용자가 로그인을 위해 "아이디, 패스워드 (평문)" 입력 → 서버에 로그인 요청 서버에서 패스워드 (평문) 을 암호화 평문 → (암호화 알고리즘) → 암호문 DB 에 저장된 "아이디, 패스워드 (암호문)"과 일치 여부 확인 1. 암호화 알고리즘을 빈(Bean)으로 등록 security > WebSecurityConfi..

[SPRING] Spring Security framework

: Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크. 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어줌! Spring Security는 ' 인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리한다. 더보기 ※ 인증 ? 해당 사용자가 본인이 맞는지를 확인하는 절차 인가 ? 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 ※ Principal (접근 주체) : 보호받는 Resource에 접근하는 대상 Credential (비밀번호) : Resource에 접근하는 대상의 비밀번호 Filter와 Interceptor는 실행되는 시점이 다름! Filter : Web Application에 등록 // ..

[SPRING] Spring Security - 쿠키 vs 세션 vs JWT + Token

미리 보면 좋은 유튜브 ! https://youtu.be/tosLBcAX1vk ※HTTP 특성 : Stateless / Connectionless = 한번의 요청/응답 시 모든 연결은 끊김. 상태도 종료됨 ❗ 쿠키와 세션 모두 HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됨 ① 쿠키 Cookie - > 시스템을 옮기는 매개체/클라이언트와 서버 사이의 요청/응답에 더해지는 매개체 - > 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 ② 세션 Session : 로그인 시 쿠키가 세션을 저장해서 계속 로그인된 상태인 것 처럼 보이게 요청/응답을 하는 것 -> 서버에서 일정시간동안 클라이언트 상태를 유..