Spring(21)
-
[JPA] Fetch - Eager, Lazy
Fetch란? Fetch의 사전적 의미는 '(어디를 가서) ~을 가지고 오다' 라는 뜻이다. JPA에서도 이 의미는 일맥상통한다. JPA에서 Fetch는 엔티티의 필드에 DB에서 실제 값을 가져오는 것이고 가져오는 방법에는 여러가지가 있다. 먼저 두 엔티티를 살펴보자. @Entity class Department { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "department") private Set employees = new HashSet(); } @Entity class Employee { @Id @GeneratedValue private Long id; private String name; @M..
2021.12.04 -
[JPA] 연관관계[2/2] - 단방향
단방향 매핑 객체 간의 관계에서는 단방향으로 구현하는 경우가 많다. 지난 시간에 양방향을 알아봤으니 이번에는 단방향을 알아보도록 하자. 양방향을 잘 이해했다면 단방향도 금방 이해할 수 있다. 다대일 다대일 단방향인 경우 한 쪽에서만 연관관계를 가진다. 아래와 같은 경우는 Person이 N, Address는 1인 경우이며 Person에서만 Address를 참조하고 있다. 하지만 이는 DB와는 관계 없다. DB는 여전히 외래 키가 Person에 있는 상태이고 양방향으로 관계를 맺고 있다. 양방향인 경우에서 한 쪽의 참조만 없어진 것이라고 생각하면 된다. @Entity class Person { @Id @GenerateValue private Long id; @ManyToOne @JoinColumn(name ..
2021.12.03 -
[JPA] 연관관계[1/2] - 양방향
객체의 연관관계 객체에서는 참조를 통해서 객체 간의 연관관계를 맺는다. 아래와 같은 경우에는 서로에 대해 참조값을 가지고 있으므로 양방향 연관관계라고 볼 수 있다. @Entity class Person { @Id @GeneratedValue private Long id; private Address address; } @Entity class Address { @Id @GeneratedValue private Long id; private Set persons = new HashSet(); } Person에서 Address에 관심이 없는 경우에는 단방향 연관관계가 되며 다음과 같이 작성할 수 있다. @Entity class Person { @Id @GeneratedValue private Long id;..
2021.12.03 -
[JPA] JPA 사용 시 주의할 점
아래 코드를 살펴보자. public class DepartmentRepository { @PersistenceContext EntityManager em; public Department findById(Long id) { Department dept = em.find(Department.class, id); return dept; } } findById()는 id값으로 Department를 조회하여 해당 id의 객체를 가져온다. 그런데 이때 가져온 객체는 영속 상태일까? 결론부터 말하자면 아니다. em.find()를 처리하는 과정은 트랜잭션으로 수행된다. 그러나 가져온 이후의 값은 영속성 컨텍스트에서 관리되는 것이 아닌 단순 객체가 되는 것이다. 따라서 가져온 후의 처리 또한 영속성 컨텍스트로 관리하기..
2021.12.03 -
[Spring Boot] Spring OAuth 없이 Spring Boot로 Github OAuth 사용하기[2/2]
이전 글에 이어서 본격적으로 OAuth 기능을 구현해보자. 먼저 Github OAuth Api를 확인하자. https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps Authorizing OAuth Apps - GitHub Docs GitHub's OAuth implementation supports the standard authorization code grant type and the OAuth 2.0 Device Authorization Grant for apps that don't have access to a web browser. If you want to skip authorizing your a..
2021.11.22 -
[Spring Boot] Spring OAuth 없이 Spring Boot로 Github OAuth 사용하기[1/2]
스프링 부트 기반으로 Oauth를 다루려고 검색해보면 거의 대부분 Spring OAuth 모듈을 사용해서 해결하는 것 같다. 이번 글에서는 OAuth 라이브러리 없이 직접 Github OAuth를 활용해 Github API에 접근하는 글을 작성하도록 하겠다. 사전 준비 사항 깃허브 아이디 스프링 부트 기반 컨트롤러 매핑 지식 HTTP Oauth 기초 지식 OAuth 간단 정리 OAuth가 뭔지 간단하게 정리하고 가자. OAuth는 서비스 제공자가 직접 사용자의 정보를 관리하지 않고 외부 사이트에 존재하는 사용자의 정보에 대해 서비스 제공자에게 권한을 부여하는 개방형 표준이다. 우리가 평소에 회원가입을 통해 이름, 아이디, 비밀번호 등을 직접 입력하는 방식은 서비스 제공자가 정보를 관리하게 된다. OAut..
2021.11.22