본문 바로가기
Back-end

2023.08.02 TIL

by 신재권 2023. 8. 2.

Java

패키지

  • java : 자바 기본 패키지
  • javax : 자바 확장 패키지
  • org : 일반적으로 오픈 소스
  • com : 일반적으로 회사 패키지

java.lang 패키지는 자동으로 프로그램에 포함된다.

접근 제어자

  • public : 누구나 접근 가능
  • protected : 같은 패키지 내에 있거나 상속받은 경우에만 접근 가능
  • default : 아무런 접근 제어자를 적지 않을 때이며, 같은 패키지 내에 있을 때만 접근 가능
  • private : 해당 클래스 내에서만 접근 가능

상속

상속을 하면 상위 클래스에 선언 되어 있는 public 및 protected로 선언되어 있는 모든 변수와 메서드를 내가 갖고 있는 것 처럼 사용할 수 있다.

즉, 다른 패키지에 선언된 부모 클래스의 접근 제어자가 없거나 private 으로 선언된 것들은 자식 클래스에서 사용할 수 없다.

하위 클래스의 생성자에서 super()를 명시적으로 지정하지 않으면 컴파일 시 자동으로 super()가 추가된다.

상위 클래스의 생성자를 호출하는 super()는 반드시 자식 클래스의 생성자에서 가장 첫 줄에 선언되어야만 한다.

Overriding

오버라이딩은 상위 클래스의 메서드와 동일한 시그니처를 갖는 하위 클래스의 메서드가 존재할 때 성립된다.

오버라이딩된 메서드는 상위 클래스와 동일한 리턴 타입을 가져야 한다.

오버라이딩된 메서드의 접근 제어자는 상위 클래스에 있는 메서드와 달라도 되지만, 접근 권한이 확장되는 경우에만 허용된다. 접근 권한이 더 축소되면 컴파일 에러가 발생한다.

참조 자료형의 형변환

상속 관계가 성립되면 형변환이 가능하다.

기본 타입에서 형변환이 int → long에서 자동으로 형변환이 가능 하듯이, 하위 클래스 → 상위 클래스로 형변환이 가능하다.

하위 클래스에서는 상위 클래스의 역할을 수행할 수 있기 때문이다.

하지만 상위 클래스 → 하위 클래스로는 명시적으로 타입을 지정해주어야 한다.

또한 부모 타입의 실제 객체는 자식 타입이어야 한다.

instanceof 를 사용하면 객체의 타입을 확인할 수 있다.

instanceof 를 사용하여 객체 타입을 확인하고 명시적으로 타입을 지정해 형변환을 할 수 있다.

만약, 객체 타입을 확인하지 않고 명시적 형변환을 하면 중간에 에러가 발생할 수 도 있다.

Polymorphism

상속을 통해 상위 클래스의 속성과 메서드를 하위 클래스가 물려받게 된다.

다형성은 하위 클래스가 상위 클래스의 메서드를 오버라이딩 하여 자신만의 구현을 제공하거나, 인터페이스를 구현함으로써 다양한 형태로 동작할 수 있는 능력을 의미한다.

이를 통해 같은 상위 클래스 타입으로 여러 개체를 다룰 수 있다.

 


Network

PC, 스마트폰도 서버도 TCP/IP 사용

PC와 스마트폰 등이 통신하는 규칙을 프로토콜이라 한다.

복수의 프로토콜을 조합한 것이 네트워크 아키텍처이다.

TCP/IP는 TCP와 IP를 중심으로 하는 프로토콜의 집합으로, 네트워크의 공통 언어이다.

PC, 스마트폰 등의 OS에도 TCP/IP가 내장되어 있으므로 통신이 가능하다.

각종 네트워크 기기 전반을 호스트라고 한다.

TCP/IP 계층 구조

TCP/IP 계층구조는 다음과 같다.

  • 애플리케이션 계층 : HTTP, SMTP, POP3, IMAP4, DHCP, DNS 등
  • 전송 계층 : TCP/UDP
  • 인터넷 계층 : IP, ICMP, ARP, RARP 등
  • 네트워크액세스 계층 : 이더넷, 무선 LAN, PPP 등

각 층의 프로토콜이 모두 정상적으로 제기능을 해야 통신이 이뤄진다.

한 계층이 기능을 발휘하려면, 그 하위 계층은 정상 동작한다는 것을 전제로 한다.

 

애플리케이션 계층은 애플리케이션에서 다룰 데이터 형식과 절차를 결정한다.

전송 계층은 애플리케이션에 데이터를 할당한다.

인터넷 계층은 엔드투엔드 통신을 한다.

네트워크액세스 계층은 프로토콜은 자류롭게 선택할 수 있고, 통신 상대와 같은 것이 아니여도 된다.

 

각 계층에 포함된 프로토콜을 조합해 애플리케이션이 통신된다.

네트워크액세스 계층

네트워크 액세스계층(네트워크 인터페이스층)의 역할은 같은 네트워크 안에서 데이터를 전송하는 것이다.

하나의 네트워크는 라우터와 레이어 3 스위치로 구획되어 있는 범위, 또는 레이어2 스위치로 구성하는 범위 이다.

즉, 레이어2 스위치에 연결된 PC의 네트워크 액세스 계층에서 같은 레이어2 스위치에 연결돤 다른 PC의 네트워크 액세스 계층까지 데이터를 전송할 수 있다.

이 때 0, 1 디지털 데이터를 전기신호 등의 물리적 신호로 변환해 전송 매체로 전달한다.

네트워크액세스 계층의 구체적인 프로토콜은 유선 이더넷이나 무선 LAN, PPP 등이 있다.

꼭 통신 상대와 프로토콜이 같을 필요는 없다.

인터넷 계층

한 네트워크에 모든 기기가 연결되는 건 아니다.

인터넷계층은 많은 네트워크 사이에서 데이터를 전송하는 역할을 한다.

네트워크끼리 연결하고 데이터를 전송하는 기기가 라우터이다.

라우터에 의한 네트워크 간 전송을 라우팅이라 한다.

원격지 네트워크에서 최종적인 출발지와 목적지 사이의 데이터 전송을 가리켜 엔드투엔드 통신이라 한다.

인터넷 계층에 포함되는 프로토콜은 IP, ICMP, ARP, RARP 등이 있다.

엔드투엔드 통신에 이용하는 프로토콜은 IP이고, 나머지 프로토콜은 IP를 도와주는 프로토콜이다.

전송 계층

전송 계층의 역할은 데이터를 적절한 애플리케이션에 배분하는 일이다.

최하층부터 전송 계층까지 바르게 동작하면, 데이터를 송수신할 수 있다.

전송 계층 프로토콜은 TCP와 UDP 이다.

TCP를 사용한다면 데이터가 유실되도, 그 사실을 검출해 데이터를 다시 보낼 수 있다. 즉, TCP는 엔드투엔드의 신뢰성을 확보해 주는 기능이 있다.

그외에도 데이터의 분할 및 조립도 한다.

애플리케이션 계층

애플리케이션 계층의 역할은 애플리케이션의 기능을 실행하기 위한 데이터의 형식과 처리 절차 등을 결정하는 것이다.

0 과 1이 아닌 문자와 이미지등 인간이 인식할 수 있도록 데이터를 표현한다.

애플리케이션층에 포함된 프로토콜은 HTTP, STMP, POP3, DHCP, DNS 등 여러가지가 있다.

HTTP는 웹 브라우저에서 이용한다.

SMTP, POP3는 전자 메일에서 사용한다.

애플리케이션 층에 포함된 프로토콜이 반드시 애플리케이션에서 사용하는 건 아니다.

DHCP와 DN는 애플리케이션의 통신을 준비하기 위한 프로토콜이다.

프로토콜 제어정보 헤더

애플리케이션이 데이터를 주고 받게하려면 복수의 프로토콜을 조합할 필요가 있다.

각 프로토콜에는 각각의 기능을 실현하기 위한 제어 정보(헤더)가 필요하다.

데이터를 전송하는 프로토콜이라면 헤더에는 출발지와 도착지 주소가 지정된다. 각 프로토콜은 데이터를 전송할 때 헤더를 추가한다.

헤더를 추가하는 처리를 캡슐화라 한다.

수신측에서 데이터를 받으면 각 프로토콜 헤더를 바탕으로 적절하게 처리하여 헤더를 벗겨내고 다시 다른 프로토콜로 처리를 넘긴다. 이런 동작을 역캡슐화 또는 비캡슐화라 한다.

물리적인 신호로 변환

웹 서버 애플리케이션은 다음과 같이 동작한다.

웹 브라우저 데이터는 HTTP 헤더로 캡슐화 되어 TCP로 넘어가고, TCP 헤더가 추가되고, 다시 IP 헤더가 추가되고, 마지막으로 이더넷 헤더와 FCS(Frame Check Sequence)가 추가되면 네트워크로 내보낼 데이터 전체가 완성된다.

FCS는 에러 체크를 위한 정보이다.

TCP/IP 상위 계층 프로토콜부터 하위 계층 프로토콜의 헤더가 점차 캡슐화되면서, 네트워크로 내보는 데이터는 여러 프로토콜의 헤더가 추가된다.

마지막에는 이더넷 규격에 대응하는 물리적 신호로 변환해 전송 매체로 내보낸다.

0과 1의 데이터로 전송

전송 매체로 내보낸 물리적인 신호는 목적지 웹 서버까지 다양한 네트워크 기기를 거친다.

네트워크 기기는 수신한 물리적 신호를 일단 0과 1의 데이터로 되돌리고, 각 네트워크 기기에 동작에 대응하는 헤더를 참조하여 데이터를 전송해 간다.

헤더로 목적지 확인 후 수신

웹 서버까지 물리적 신호가 도착하면 0과 1 데이터로 변환후, 이더넷 헤더를 참조해 자기 앞으로 온 데이터인지 확인한다.

또한 FCS로 데이터 오류를 검출한다.

만약 자기 앞으로 온 데이터라면 이더넷 헤더와 FCS를 제거하고 IP 헤더 처리를 넘긴다.

IP 헤더를 다시 자기 앞으로 온 데이터가 맞다면 IP 헤더를 제거하고 TCP로 데이터 처리를 넘긴다.

TCP는 TCP 헤더를 참조해 어느 애플리케이션의 데이터 인지 확인하고 TCP 헤더를 제거하고 웹 서버 애플리케이션으로 데이터 처리를 넘긴다.

애플리케이션까지 데이터가 도달하면 HTTP 헤더와 그 뒤의 데이터 부분을 처리한다.

통신은 양방향으로 이루어지기 때문에 양쪽에서 위 과정을 반복한다.

'Back-end' 카테고리의 다른 글

2023.08.06 TIL  (0) 2023.08.07
2023.08.04 TIL  (0) 2023.08.04
2023.08.01 TIL  (0) 2023.08.01
2023.07.31 TIL  (0) 2023.07.31
2023.07.30 TIL  (0) 2023.07.30