기간
2023/2/6 ~ 2023/2/10

수업
실시간 ZOOM 수업


Day 2(소켓통신(1))

서킷 스위칭과 패킷 스위칭

서킷 스위칭은 직렬화해서 통신마다 전용선을 두는 것. 단점으로 비용이 올라간다.
패킷 스위칭은 전용선x 공유선o 회선이 짧아서 비용을 아낄 수 있음 하지만 A가 데이터를 보내는 동안 다른 곳(보내는 쪽)은 동기화 상태
→ RR알고리즘(라운드로빈) 방식처럼 데이터를 쪼개서 전송(잘개 쪼개진 데이터: 패킷)

패킷은 전송 데이터와 목적지 주소(IP)를 함께 전송
→ 그렇지 않으면 데이터가 몰린다.

데이터 하나하나는 segment(payload에 담김), IP는 heder에 담김
⇒ segement와 header가 패킷

라우터는 전송받은 패킷을 최단경로(트래픽이 낮은)를 찾아서 보냄
:패킷 포워딩

라우터의 용량(RAM)이 꽉 차면 도착한 패킷은 유실됨

보낸 순서는 segment에 붙어서 보내짐(도착 순서 보장이 안 되기 때문에 재조립을 위해서)

받은 세그먼트를 보내진 순서에 맞게 조립(하나가 안 도착하면 다시 요청 후 받음: 신뢰성있는 데이터)
⇒ 패킷 스위칭

동기화

데이터 관점에서의 동기화: 데이터 일치(아이폰과 아이클라우드를 생각하면)
프로그래밍 관점에서의 동기화: 대기 상태. 일의 순서가 있다.

인터페이스와 프로토콜

인터페이스: 상하관계가 있는 규약
프로토콜: 동등한 관계의 규약

라우터를 인터페이스라고 부르는 이유는 경로가 한정되어 있기 때문


Day 3(소켓통신(2))

소켓통신의 기본

TCP/IP 이해
통신하는 프로세스에 번호(Port 번호)를 붙임(범위는 0~65,535 → 2의 16제곱 개 → 2Byte개

BufferedWrite
TCP에서 Socket으로 BufferedRead Segment(세그먼트에는 포트번호와 순번이 들어감 ⇒ 헤더)

바이너리코드가 packet으로 바뀌고 socket을 통해 segment로 바껴 프로세스(애플리케이션)에 도착
→ 역직렬화

직렬화: 기계가 이해하는 데이터로 변환하는 것
역직렬화: 인간이 이해하는 데이터로 변화하는 것

소켓이 직접 하는 건 없기 때문에 애플리케이션이 소켓에서 Buffered Read함

Buffer
버퍼가 꽉 차서 데이터가 도착하지 못함 →버퍼링
애플리케이션이 read해서 데이터를 소비해야 함

반이중과 전이중

  1. 반이중
  • 두 디바이스간 통신선이 하나(선은 stream)
  • 한쪽 디바이스에서 송신과 수신 모두 가능
  • 하나의 통신선으로 송신과 수신을 함. 때문에 동시에 송신과 수신을 할 수 없음

양방향이지만 동시에 송수신 x

  • 동기적(일의 순서가 있음)
  • 데몬이 아니다.

통신

  • 반이중
  • 서버 데몬(죽으면 안 됨)
  • 동시접속 허용 - 멀티쓰레드
  1. 전이중
  • 두 디바이스간 통신선이 두 개(송신선, 수신선)
  • 송신선과 수신선이 각각 존재하므로 데이터 송신과 동시에 수신이 가능

Hello.java → 컴파일 Hello.class → 실행 JVM 동작

JVM
1. 클래스 로드(메모리)
2. static 찾기
3. static 메모리 공간에서 main을 찾음
4. main 실행
5. main의 스택과 큐가 열린다.

static
단 한 번만 메모리에 할당된다.
두 번x, 메모리 관리를 할 수가 없다. 메인 종류시까지 살아있다.

heap(오브젝트)
내가 원할 때 new 해서 할당한다(인스턴스).
그래서 동적 메모리 공간이라고 한다. →제어할 수 있다. 단, 자바는 가비지컬렉션을 한다.

stack
메서드가 호출될 때 잠깐 메모리에 뜬다.
메모리 관리가 필요없다. 왜냐하면 메서드 종료시 다 사라지기 때문


Day 4(MIME 타입)

jar(패키지 모음 압축 파일)

  • 메인메서드x → 라이브러리
  • 메인메서드o → 실행파일
profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글