한 서버에서 다른 서버에 요청을 진행할 때 사용할 수 있도록 Spring에서 제공하는 기능
RestTemplate은 주입 받을 때 단순 생성자가 아닌, build를 사용해야 한다
private final RestTemplate restTemplate;
// RestTemplateBuilder의 build()를 사용하여 RestTemplate을 생성합니다.
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
아래 깃허브 링크에 상세히 주석을 달아두었음!
1) 서버 역할
2) 클라이언트 역할
일반 DB 테이블에는 방향의 개념이 없지만, JPA Entity에서는 참조가 필요하기 때문에 방향이 필요하다.
Entity 내에서는 테이블 관의 연관 관계를 N : 1 등의 관계를 설정한다.
서로의 정보를 조회하기 위해 실제 컬럼으로 존재하지는 않지만 Entity 상태에서 다른 Entity를 참조하기 위해 아래와 같은 방법을 사용한다.
DB 테이블에 현재 음식 Entity와 고객 Entity는 서로를 참조
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user")
private List<Food> foodList = new ArrayList<>();
}
List<Food> foodList = new ArrayList<>()한 엔티티에서만 상대 엔티티를 참조한다.
@OneToOne (참조)도 사용하지 않음@JoinColumn() : 외래 키의 주인이 활용하는 애너테이션 @Test
@Rollback(value = false) // 테스트에서는 @Transactional 에 의해 자동 rollback 됨으로 false 설정해준다.
@DisplayName("1대1 단방향 테스트")
void test1() {
User user = new User();
user.setName("Robbie");
// 외래 키의 주인인 Food Entity user 필드에 user 객체를 추가해 줍니다.
Food food = new Food();
food.setName("후라이드 치킨");
food.setPrice(15000);
food.setUser(user); // 외래 키(연관 관계) 설정
userRepository.save(user);
foodRepository.save(food);
}
mappedBy 옵션을 사용한다@OneToOne(mappedBy = "user")
- 외래 키의 주인 Entity에서
@JoinColumn()애너테이션을 사용하지 않아도 default 옵션이 적용되기 때문에 생략이 가능합니다.
- 다만 1 대 N 관계에서 외래 키의 주인 Entity가
@JoinColumn()애너테이션을 생략한다면 JPA가 외래 키를 저장할 컬럼을 파악할 수가 없어서 의도하지 않은 중간 테이블이 생성됩니다.- 따라서 외래 키의 주인 Entity에서
@JoinColumn()애너테이션을 활용하시는게 좋습니다.- 양방향 관계에서
mappedBy옵션을 생략할 경우 JPA가 외래 키의 주인 Entity를 파악할 수가 없어 의도하지 않은 중간 테이블이 생성되기 때문에 반드시 설정해주시는게 좋습니다.
외래 키의 주인인 필드에 객체를 넣는다!
외래 키의 주인만이 외래키를 control 할 수 있다.
양방향의 경우 주인이 아니어도 외래키를 조회할 수는 있다. 즉, 외래키의 주인이 아닌 곳에서 조회하고 싶다면 양방향 설을 해야 한다.