
Client 입장
1. RestTemplate 주입
2. 요청 받은 검색어를 Query String 방식으로 Server 입장의 서버로 RestTemplate를 사용하여 요청합니다
Server 입장
1. Server 입장의 서버에서 itemList를 조회하여 요청받은 검색어에 맞는 Item을 반환합니다.
2. 요청 받은 검색어를 Query String 방식으로 Server 입장의 서버로 RestTemplate를 사용하여 요청합니다
Client 입장
1. 요청 받은 검색어를 Query String 방식으로 Server 입장의 서버로 RestTemplate를 사용하여 요청합니다.
Server 입장
1. Server 입장의 서버에서 itemList를 조회하여 요청받은 검색어에 맞는 Item을 반환합니다.
Client 입장
1. RestTemplate의 exchange를 사용합니다.
Server 입장
1. 전달된 header와 body의 정보를 확인할 수 있습니다.
연관관계 고민
- 고객이 음식을 주문 시, 주문 정보는 어느 테이블에 들어가야 할까요?(고객?, 음식?)
연관관계 예시
- 고객 1명은 음식 N개를 주문할 수 있습니다. (고객 : 음식 = 1 : N 관계)
- 음식 1개는 고객 N명에게 주문될 수 있습니다. (음식 : 고객 = 1 : N 관계)
- 결론적으로 고객과 음식은 N : M 관계입니다. (고객 : 음식 = N : M 관계)
- N : M 관계인 테이블들의 연관 관계를 해결하기 위해 orders 테이블처럼 중간 테이블을 사용
DB 테이블 사이의 방향
- DB 테이블들간의 관계에서 방향의 개념이 존재하는가 : 존재하지 않는다 (JOIN문을 사용하여 조회)
JPA (음식 : 고객 = N : 1) (양방향)
- 음식
@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<>();
}JPA (음식 : 고객 = N : 1) (단방향)
- 음식
@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;
}
음식 Entity에서만 고객 Entity를 참조할 수 있습니다.
- 이러한 관계를 단방향 관계라 부릅니다.
- 고객 Entity에는 음식 Entity의 정보가 없기 때문에 음식 정보를 조회할 수 없습니다.