Google Developer Student Clubs 1기/GDSC 백엔드 스터디 7

[백엔드 스터디] 7, 8주차 - JPA 연관관계 및 영속성 전이

이번주 주제는 JPA 연관관계 매핑과 영속성 전이입니다. 주제가 비교적 큰 범위로 선정되어 이번 7, 8주차를 기준으로 마무리된다. JPA에서는 아래 세 가지가 중요하다. 방향: 단방향, 양방향 (객체 참조) 연관 관계의 주인: 양방향일 때, 연관 관계에서의 관리의 주체 다중성: 다대일(N:1), 일대다(1:N), 다대다(N:N) 데이터베이스 테이블은 외래 키 하나로 양 쪽 테이블 조인이 가능함. 그러나 객체의 세계는 참조용 필드가 있는 객체만 다른 객체를 참조 가능함. 기본적으로 단방향 매핑으로 하고 나중에 꼭 필요할 때만 양방향을 추가해주면 된다. 연관 관계의 주인을 정하는 건 무엇일까? 두 단방향 관계 즉 (a -> b, b -> a) 에 대해서 제어의 권한 즉 외래 키를 비롯한 테이블 레코드를 저..

[백엔드 스터디] 6주차 - JPA 영속성 컨텍스트

안녕하세요. 이번 6주차에는 JPA 영속성 컨텍스트에 대한 스터디를 진행하고자 합니다. 지난 주차와 마찬가지로 단순 단답 위주의 질문 보다는 서술이 가능한 질문 위주로 연습하도록 합니다. 영속성 컨텍스트란? 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해서 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. em.persist(object) 는 엔티티 매니저를 사용해서 object 엔티티를 영속성 컨텍스트에 저장한다는 의미이다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하..

[백엔드 스터디] 5주차 - ORM과 JPA의 추상화 계층 그리고 특징들

이번 5주차에서는 본격적으로 JPA를 공부하기에 앞서서 ORM 그리고 JPA는 무엇이며 이러한 것들이 필요한 이유에 대해서 알아보는 시간을 가지고자 한다. 이번 주는 간단한 답변보다는 서술할 수 있는 수준에 초점을 맞추고자 합니다. 주제에 앞서 먼저 ORM와 JPA의 기본인 영속성에 대해 짚고 넘어가고자 합니다. Persistence Persistence란 무엇인가? Persistence 즉 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말합니다. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 됩니다. 즉 휘발성이 있습니다. Object Persistence인 영구적인 객체는 무엇일까요? 메모리 상의 데이터를 파일 시스..

[백엔드 스터디] 4주차 - 컴포넌트 스캔 그리고 의존관계 자동 주입

이번 4주차 주제는 컴포넌트 스캔 그리고 의존관계 자동 주입이다. 컴포넌트 스캔이란? 스프링 빈을 등록할 때 구성파일에 @Bean을 등록해서 사용할 수 있었다. 하지만 관리할 빈이 많아지면 이 방식이 관리하기 번거로워진다. 그래서 굳이 빈 설정파일을 만들지 않거나 @Bean을 안쓰고 빈 등록을 할 수 있는 방식을 쓰게 되었다. 그게 @Component를 써서 컴포넌트 스캔을 하는 방식이다. 설정파일이 없다면 의존관계를 어떻게 주입할까? @Autowired를 사용해서 자동 의존관계 주입을 한다. 자동 의존관계 주입은 아래서 살펴본다. 컴포넌트 스캔이란 스프링이 스프링 빈으로 등록될 준비가 된 클래스들을 스캔해서 빈으로 등록해주는 과정을 말한다. @Component 어노테이션이 붙어있는 클래스들은 모두 컴포..

[백엔드 스터디] 3주차 - Bean Scope 그리고 Bean 생명주기

1, 2주차 스터디에서 애매했던 질문에 대한 탐색은 다음과 같다. 1. IoC/ DI를 통해 응집도가 높아지는 이유? 2. 필드 주입의 단점 중 불변성이 있는데 왜죠? https://shanepark.tistory.com/368 -> 필드 인젝션은 immutable 불가라는 단점이 있다.이건 setter 주입에서도 마찬가지인데 필드 인젝션으로 주입받는 클래스는 final로 선언 할 수 없기 때문에 state safe하지 않다고 한다. (오직 Constructor Injection만 final 선언이 가능하다고 합니다. 그외의 방법들은 주입되는 필드에 대해 mutable한 상태를 만든다고 한다. 그래서 생성자주입이 권장되는 이유이기도 하다. https://sightstudio.tistory.com/20) ..

[백엔드 스터디] 2주차 - Spring Container(ApplicationContext)

2주차 백엔드 스터디에서는 Spring Container(ApplicationContext)에 대해 알아보고자 한다. Container란? 스프링에서 컨텍스트(Context)는 스프링이 관리하는 빈들이 담겨 있는 컨테이너라고 이해하면 된다. ApplicationContext란? ApplicationContext는 BeanFactory의 모든 기능을 포함하며, BeanFactory보다 추천되는 개념이다. 트랜잭션 처리, AOP에 대한 처리를 할 수 있으며 BeanPostProcessor, BeanFactoryPostProcessor 등을 자동으로 등록하고, 국제화 처리, 어플리케이션 이벤트 등을 처리할 수 있다. 스프링 컨테이너라고 말하면 일반적으로 ApplicationContext를 의미한다고 보면 된다..

[백엔드 스터디] 1주차 - DI, IoC 그리고 DI Container

백엔드 스터디 1주차 내용을 정리하고자 합니다. 1주차에 다루고자 하는 내용은 DI, IOC 그리고 DI Container 입니다. DI 란? Dependency Injection은 의존성 주입이라고 부릅니다. 쉽게 말해 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴입니다. 인터페이스를 사이에 둬서 클래스 레벨에서 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입해서 유연성을 확보하면서도 결합도를 낮출 수 있는 패턴입니다. 여기서 의존성(Dependency)은 두 클래스 사이의 관계로 설명할 수 있습니다. A 클래스가 B클래스를 A클래스 내부의 변수로 사용한다고 가정할때 A클래스는 B클래스와 의존관계가 형성되었다고 말합니다. 그리고 이런 상황에서 B클래스를 수정하면 A클래스도 수정..

반응형