위의 다이어그램을 코드로 짜본다. jpa 엔티티 매핑을 생각하며, 짜본다. 1. Member 1. id @Id, @GeneratedValue, @Column(name = "member_id") 2. name 3. address embedded 타입의 Address 엔티티. -> @Embedable 4. orders Member엔티티와 Order엔티티는 양방향 일대다 관계이다. -양방향: 연관관계의 주인 -연관관계의 주인은 보통 일보단 다쪽이다. -즉, mappedBy를 통해 Order쪽에 자신의 pk가 있음을 선언한다. --> @OneToMany(mappedBy = "member") = Order엔티티의 member컬럼(필드)에 자신의 pk가 있다. package jpabook.jpabook.domain..
JPA는 객체를 통해 데이터베이스와 상호작용한다. 위의 코드를 보면 우리는 EntityManager를 통해 1. 객체를 등록 -> 쿼리를 통해 데이터 베이스에 저장 2. 수정 -> 수정된 값을 무언가? 가 알아서 읽어서 데이터베이스에 쿼리를 통해 저장 3. 한 건 조회 -> Member.class 중 특정 id를 조회 하였다. 이렇게 jpa에서는 무언가?를 통해 등록, 수정, 조회 등 데이터베이스와 상호작용을 할 수 있었다. 그 무언가에 대하여 알아보자. 1. 무언가란 무엇인가? 이것은 바로 영속성 컨텍스트라는 것이다. 영속성 컨텍스트 영속성 컨텍스트란 엔티티(객체)를 저장할 수 있는 환경이다. 즉, 로직을 통해 객체 등록 로직 -> 영속성 컨텍스트에 저장 + 객체 정보를 데이터 베이스에 저장하는 쿼리 ..
package jpabook.start; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity //Entity는 이 클래스를 테이블과 매핑한다고 알려준다.->엔티티 클래스 @Table(name="MEMBER") // public class Member{ @Id @Column(name="ID") private String id; @Column(name="NAME") private String username; //매핑 정보가 없는 필드 private Integer age; //Getter, setter public Str..
기본적으로 스프링은 프로젝트의 의존성 추가 등의 시작 과정이 매우 복잡하기 때문에, 이를 쉽게 start.spring.io 를 이용하여 만들 수 있다. 위를 보면 의존성에 1. spring web: 스프링으로 웹을 만들기 위한 라이브러리 2. thymeleaf: jsp같은 java/html/xml 기반 템플릿 엔진 3. spring data jpa 4. lombok: 불필요한 반복되는 코드를 줄이기 위한 의존성 5. h2 database: h2 데이터베이스를 사용하는데 필요한 라이브러리 이렇게 5개가 추가된 것을 볼 수 있다. 그 후 프로젝트를 만든 후 open 해준다. 의존성까지 다 추가했다면, 롬복과 여러 어노테이션을 사용하기 위한 준비를 해야한다. 우측 상단 setting->plugins(검색)에서..
깊이 우선 탐색이란 한곳만 파고, 없으면, 다시 한곳만 파는 방식의 탐색이다. 주로, 어떠한 노드와 여러 갈림길이 있을 때, 어떤 길이 가장 길고, 짧은지를 알 고 싶을 때, 사용한다. DFS의 요소로는 1. 노드에 미리 왔다 감을 표현하는 boolean 배열 2. 노드와 노드를 이어주는 앳지 3. 노드 이렇게 3개가 있다. 그림으로 설명해본다. dfs는 주로 재귀함수로 표현이 될 수 있다. dfs(int value){ 1. 왔다 갔나? (조건) -> yes일 시 return ->no일 시(아직 안와봄) boolean 배열에 true 추가, 연결 리스트의 다음 노드 확인 2. 다음 노드에 dfs 즉, dfs(다음 노드) => 재귀함수 3. 모든 연결리스트를 확인하면 이 dfs는 끝남 } 이런식이다.
comparable과 comparator는 비교자라고 한다. 1. 비교자의 기본 설명 비교자란, 정렬과 같은 어떠한 기준을 통해 자료를 처리할 때, 그 기준을 정의한 것을 뜻한다. 우리가 지금까지 써왔던 Arrays.sort()는 알아서 오름차순으로 정렬을 해준다. 이 또한 Arrays.sort(배열, comparator)가 들어가기 때문이다. 즉, Arrays.sort(배열) -> 이렇게 배열만 매개변수로 넣어주면, 기본 comparator가 적용이 되기 때문에, 오름차순 정렬이 되는 것이다. 2. 비교자는 인터페이스이다. 비교자는 인터페이스이다. Integer, Double, Float 등에 구현이 되어 있는 것을 볼 수 있다. 이렇게 위의 3개의 클래스를 살펴보면 비교자가 구현되어 있는 것을 볼 수..
데이터 링크 계층을 알기 위해서는 LLC와 MAC계층, 프레임을 알 필요가 있다. LLC는 오류 검사, 흐름 제어를 위한 데이터 링크 계층의 일부이고, MAC계층은 물리적으로 데이터를 보내기 위한 데이터 링크 계층의 일부이다. 우선 프레임이다. 1. 프레임 프레임은 데이터 링크 계층으로 분할된 패킷이 ARP를 통해 MAC주소를 포함하여 만들어진 데이터의 단위이다. 프레임은 1-1. 정보 프레임 1-2. ACK 프레임(긍정 응답 프레임) 1-3. NAK 프레임(부정 응답 프레임) 이 3가지가 있다. 현대에는 TCP/IP 프로토콜 프레임을 많이 사용한다. 2. LLC 계층(오류, 흐름제어) LLC 계층에서는 오류 검사, 흐름 제어를 한다. 우선, LCC계층이 무엇을 하는지 알아보기 위해 오류, 흐름 제어가 ..
앞에서 배운 라우팅 시스템은 1. 회선 방식 2. 패킷 교환 방식 3. 프레임 릴레이 4. 메시지 이 4가지가 있었고, 특히 패킷 교환 방식에는 패킷 교환 방식 - 가상 회선 방식 패킷 교환 방식 - 데이터 그램 방식 이 2가지의 방식이 있었다. 위의 방식들은 "데이터"를 중점으로 분류하였다. 지금부터는 "전송 방식"을 중점으로 분류해보겠다. 1. 전송과 교환 -전송: 다음 노드로 전송(안전한 전송에 중점) -교환: 스위칭. 올바른 노드로 패킷이나 프레임을 전송하는 것.(경로 선택에 중점) 2. 전송 방식의 종류 위의 2가지 개념을 보면 전송이란, 라우팅에서 논리적인 경로 설정을 뺀, 그저 보내는 시스템 그 자체이다. 직접 링크{ //간접 링크(호스트-(네트워크)노드-노드-노드(네트워크)-호스트) 직접 ..