TIL - 0521

스프링부트

Entity 관계 설정하기 : 게시글 쓰기

  • 관계를 설정해주기위해서 테이블에 관계 키를 설정해줘야함 : FK(foreign key) 외래키
  • FK : 테이블의 컬럼 중 다른 테이블의 레코드를 같이 조회(참조)하기위해 필요한 키 - 다른 테이블의 ID를 FK로 사용함(데이터 무결성을 보장하기위해 - NULL이거나 존재하거나(PK))
  • 관계 설계하기
    • 어디에서 조회할 것인지에 따라 단방향, 양방향 관계 맺기가 가능함 : 어노테이션으로 관계를 설정할 수 있음
    • 게시글 쓰기 : 1명의 유저가 여러 게시글 ID를 가지는 레코드를 저장할 수 있으니 OneToMany, 여러 게시글은 레코드 저장할 때 1명의 유저 ID를 각각 저장할 수 있으니 ManyToOne, 하지만 아직까지는 유저 레코드로 게시글을 조회하는 기능을 넣지않았으므로 게시글에만 관계설정(단방향)해줌
@Entityy
public class Question {
	@Id
	@GeneratedValue(starategy = GenerationType.IDENTITY)
	private Long id;
	
	@ManyToOne
	@JoinColumn(foreignKey = @ForeignKey(name = "fk_question_user"))
	private User user;
	.
	.
}

  • @JoinColumn : 현재 엔티티에서 관계를 맺을 엔티티의 키 값을 정의할 때 사용하는 어노테이션
  • @ForeignKey : 데이터베이스 FK 설정

네트워크

통신하려면 프로토콜 스택에 의뢰하자

  • 웹클라이언트(브라우저)를 비롯한 네트워크 어플리케이션은 자체적으로 통신 기능을 갖지못함 : OS에 통신 대상과 데이터를 건네주고 위임하는 방식으로 통신을 함
  • 프로토콜 스택 : OS에 내장되어있는 네트워크 제어 프로그램, IP 변환할 때 DNS 서버에 요청하는 것도(리졸버가 IP가 담긴 응답 메세지를 받아 IP 추출한 뒤 브라우저에 응답해줌), 소켓을 생성하는 것도(내부에 메모리 공간을 할당하고 기록), 통신 동작도 여기를 거침, TCP or UDP 프로토콜에 맞춰 데이터 통신을 함

소켓의 실체는 기록이다

  • 소켓은 통신에 대한 기록이다 : 요청 IP:포트, 응답 IP:포트, 현재 상태(LISTENING, ESTABLISHED 등), PID(소켓 통신을 하는 프로세스의 PID)
  • netstart : 현재 로컬의 소켓 목록을 보기위해서 사용하는 명령어
$ netstat
tcp4       0      0  192.168.0.2.58086      XXX.X31.XXX.1X3.https  ESTABLISHED
  • 소켓 생성을 요청했던 네트워크 어플리케이션에는 소켓을 리턴하지않고, 소켓을 식별할 수 있는 정보가 담긴 디스크립터를 리턴해줌
    • 네트워크 어플리케이션에서는 디스크립터를 메모리에 기록해두었다가 통신할 때 디스크립터를 프로토콜 스택에 건네어 통신을 함