[우아한테크코스] 5월 6일 TIL

2 minute read

[Network] TCP/IP

  • TCP/IP란?
    인터넷과 관련된 다양한 프로토콜의 집합(IEEE, DNS, HTTP, TCP, IP, ICMP …)으로 일반적인 네트워크를 동작시킨다.

  • application layer
    File Transfer Protocol, DNS, HTTP와 같이 유저에게 제공되는 어플리케이션에서 사용하는 통신의 움직임을 제어하는 계층
    HyperText Transfer Protocol + Domain Name System: 클라이언트(웹 브라우저) <-> 서버

  • transport layer
    Transmission Control Protocol, User Data Protocol과 같이 어플리케이션 계층에 네트워크로 접속되어 있는 두 대의 컴퓨터 사이의 데이터 흐름 제공
    TCP: 큰 데이터를 보내기 쉽게 TCP 세그먼트란 단위 패킷으로 작게 분해해 관리하는 것(바이트 스트림 서비스)을 제공하는 것으로 데이터를 분해해 보내고 잘 갔는지 확인하는 역할
    three way handshaking이라는 방법을 사용해 데이터를 전송하고 이중 하나라도 실패하면 다시 전송
    송신측은 SYN 플래그로 상대에게 접속함과 동시에 패킷을 보냄  
    수신측은 SYN/ACK 플래그로 송신측에 접속함과 동시에 패킷 수신  
    송신측이 ACK 플래그를 보내 완료 확인
    
  • network layer
    네트워크 상에서 이동 경로를 포함해 패킷(전송하는 데이터의 최소 단위)의 이동 제어
    Internet Protocol(IP): 패킷을 상대방에게 전달(Media Access Control Address는 각 네트워크 카드에 할당된 고유의 주소)
    IP 통신은 다음 중계할 곳인 MAC 주소를 찾아가며 이루어진다. MAC은 변하지 않는다.
    목적지를 찾아가면서도 Address Resolution Protocol이 사용되는데 이는 수신지의 IP 주소를 바탕으로 MAC 주소 찾는다.

  • link layer
    하드웨어 측면으로 디바이스 드라이버, Network Interface Card와 같은 물리적인 부분

송신 계층을 거칠 때마다 헤더를 더해 캡슐화 하고, 수신 계층을 거칠때마다 헤더를 삭제하며 데이터 전달
송신 ---HTTP message---> HTTP data ---TCP segment---> +TCP header ---IP datagram---> +IP header ---network frame---> +Ethernet header

  • World Wide Web을 구성하는 HyperText Markup Language
  • Uniform Resource IdentifierUniform Resource Locator의 서브셋으로 차례대로 스키마, 자격정보, 서버주소, 서버포트, 계층적 파일 경로, 쿼리 문자열, 프래그먼트 식별자 전달

[Spring] service layer의 정의

  • java spring docs에서 정의하는 @Service
    Indicates that an annotated class is a “Service”, originally defined by Domain-Driven Design (Evans, 2003) as “an operation offered as an interface that stands alone in the model, with no encapsulated state.”
    캡슐화된 상태가 없는 모델에 단독으로 제공되는 인터페이스

May also indicate that a class is a “Business Service Facade” (in the Core J2EE patterns sense), or something similar. This annotation is a general-purpose stereotype and individual teams may narrow their semantics and use as appropriate.
혹은 business service facade로 불리는 것
이는 서비스 요청자와 서비스 기능을 구현하는 함수 사이에 느슨한 결합을 제공하고자 하는 레이어로 보는 것

This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.

생각을 하다 보니 어떠한 행위를 수행하기 위해 각 객체가 자신의 책임을 더해가는 것일텐데 그 경우에 controller 또한 흐름을 연결시켜주는 임무가 주였듯이 service 또한 그러해야 하는 것 아닌가?
객체의 타입 변환과 같은 행위가 아니라 어떠한 로직을 가지고 수행하게 된다면 객체 지향적에서 조금은 벗어난 것으로 볼 수 있지 않을까?
그렇다면 예외는 어디서 처리되어야 옳을까?
각 객체가 책임을 다하고 그 안에서 문제가 발생하면 예외가 나오는 것이 옳은 것 아닐까?