Peony의 기록 창고 🌼
[Spring] 의존 관계 자동 주입
SpringBoot/Spring Basic 2023. 8. 3. 20:22

주입 방법 1. 생성자 주입 생성자 주입은 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 주로 불변, 필수 의존 관계에서 사용한다. 만약, 생성자가 1개인 스프링 빈이면? @Autowired를 생략해도 자동으로 주입된다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this...

article thumbnail
[Spring Security] 스프링 시큐리티 동작 과정에 대해 알아보자.
SpringBoot/Spring Security 2023. 7. 31. 01:32

GDSC 활동을 하면서 여러 백엔드 분들이 시큐리티에 대해 많이 어려워하시는 것 같아 정리한 내용들을 공유해보려고 합니다. 스프링 시큐리티란 ? 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티에 대해 정리하기 전에 헷갈릴 수 있는 단어들을 먼저 알고 가자. 보안 용어 정리 인증(Authenticate) : 유저가 누구인지 확인하는 절차 인가(Authorization) : 인증된 사용자에 대해 권한을 확인하고 허락하는 것 접근 주체(Principal) : 보호된 대상에 접근하는 유저 비밀번호(Credential) : 대상에 접근하는 유저의 비밀번호 스프링 시큐리티 특징과 구조 보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용할 ..

article thumbnail
[Spring] 컴포넌트 스캔
SpringBoot/Spring Basic 2023. 7. 21. 15:51

지금까지 만든 Appconfig를 보면 @Bean 어노테이션을 붙여서 직접 설정정보에 스프링 빈을 나열하는 형식이었다. 그런데, 내가 만들어야할 스프링 빈이 수백개가 된다면 ? → @ComponentScan을 사용 ! 동작 과정 1. @ComponentScan @Component 어노테이션이 붙은 모든 클래스를 자동으로 스프링 빈에 등록해준다. 이때, 스프링 빈의 기본 이름 : 클래스명 사용, 앞글자만 소문자를 사용한다. MemberServiceImpl 클래스 → Bean 이름 : memberServiceImpl 만약, 클래스에 @Component(“service”)처럼 속성을 설정하면? → service 라는 이름으로 등록된다. 2. @Autowired 의존 관계 자동 주입 생성자에 @Autowired..

article thumbnail
[Spring] 싱글톤 패턴
SpringBoot/Spring Basic 2023. 7. 11. 02:28

싱글톤 패턴 싱글톤 패턴이란? 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 하지만 싱글톤 패턴은 다음과 같은 수 많은 문제점들을 가지고 있다. 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. → DIP를 위반 자연스럽게 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다. 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴..

article thumbnail
[JPA] JPQL 중급 문법
SpringBoot/JPA 기본 2023. 7. 6. 22:37

경로 표현식 .을 찍어 객체 그래프를 탐색하는 것을 경로 표현식이라고 한다. select m.username //상태 필드 from Member m join m.team t //단일 값 연관 필드 join m.orders o //컬렉션 값 연관 필드 where t.name = '팀A' 경로 표현식 용어 정리 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex : m.username) 연관 필드 : 연관관계를 위한 필드 (단일 값, 컬렉션 값) 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 (ex: m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 (ex: m.orders) 경로 표현식 특징 상태 필드 경로 탐색의 끝으로 탐..

article thumbnail
[JPA] 객체지향 쿼리 언어1 - 기본 문법
SpringBoot/JPA 기본 2023. 6. 9. 01:41

JPQL 소개 JPQL은 객체지향 쿼리 언어다. → 테이블을 대상으로 쿼리하는 것이 아닌, 엔티티 객체를 대상으로 쿼리 한다. 예시 비교 모델 Member 엔티티 @Entity public class Member { @Id @GeneratedValue private Long id; private String userName; private int age; ​ @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Team 엔티티 @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ​ @OneToMany(mappedBy = "team") private..

[JPA] 다양한 쿼리 방법 소개
SpringBoot/JPA 기본 2023. 5. 16. 01:13

JPA는 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 다양한 쿼리 방법 맛보기 우리가 배운 것 중에 가장 간단한 조회 방법은 EnfifyManager.find() 를 한 뒤, 객체 그래프를 탐색하는 방법이었다. (a.getB().getC()) 이때, 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL을 사용해보자. JPA의 문제점 JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 : 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. → 애플리케이션이 필요한 ..

article thumbnail
[JPA] 값 타입
SpringBoot/JPA 기본 2023. 5. 8. 00:55

1. 기본 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능. 예) 회원 entity의 키 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자 X → 변경시 추적 불가 값 타입 분류 기본 값 타입 : 자바 기본 타입, 래퍼 클래스(Integer, Long), String 임베디드 타입 : 복합 값 타입 컬렉션 값 타입 기본 값 타입 생명주기를 엔티티에 의존 : 회원 삭제 -> 그 안의 필드도 같이 삭제 값 타입은 공유 ❌ 📌Note : 자바의 기본 타입은 절대 공유 불가능 int, double 같은 primitive type은 공유가 불가능하다..

article thumbnail
[JPA] 프록시와 연관 관계
SpringBoot/JPA 기본 2022. 12. 23. 02:40

프록시 ❓Member를 조회할 때 Team도 함께 조회해야 할까? package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntit..

article thumbnail
[JPA] 고급 매핑
SpringBoot/JPA 기본 2022. 7. 2. 15:40

상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 객체의 상속과 DB의 슈퍼타입-서브타입 관계를 매핑하는 것을 의미한다. : 조인전략(각각 테이블로 변환), 단일 테이블 전략, 구현 클래스마다 테이블 전략(서브타입 테이블로 변환) 기법이 있다. Album, Movie, Book은 모두id, name, price를 가지고 있다(공통 변수) 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE"..