1. 동기 / 비동기 / 블로킹 IO / 논블로킹 IO

  • https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC 참고
  • 동기 / 비동기 : 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점
  • 블로킹 / 논블로킹 : 현재 작업이 블록되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점
  • 동기( Synchronous ) : 요청한 작업에 대해 완료 여부를 따져 순차적으로 처리한다.
  • 비동기( Asynchronous ) : 요청한 작업에 대해 완료 여부를 따지지 않기 때문에 자신의 다음 작업을 그대로 수행한다.
    • 장점 : 느린 작업이 발생했을 때 기다리지 않고 다른 작업을 처리할 수 있기 때문에 시스템 성능 향상에 도움을 준다.
  • 동기 작업은 요청한 작업에 대해 순서가 지켜지고, 비동기는 지켜지지 않을 수 있다.
  • 콜백함수 : 비동기나 논블로킹에서 작업의 완료 여부나 결과에 대한 후처리를 위해 이용되는 방식
  • 블로킹과 논블로킹은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐(블로킹) 안주느냐(논블로킹)로 구분된다.
  • 제어권 : 함수의 코드나 프로세스의 실행 흐름을 제어할 수 있는 권리

2. TCP와 UDP의 차이

  • https://inpa.tistory.com/entry/NW-%F0%9F%8C%90-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%ED%98%B8%ED%95%9C-TCP-UDP-%EA%B0%9C%EB%85%90-%E2%9D%93-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90 참고
  • 프로토콜 : 클라이언트와 서버가 정보를 교환할 수 있도록 하는 메시지 형식에 대한 규칙
  • TCP - 전송 제어 프로토콜
    • IP 규칙으로만 통신하기에 부족하거나 불안정하던 여러 단점(패킷 순서 보장 없음, 패킷 유실)들을 커버해, 패킷 전송을 제어하여 신뢰성을 보증한다.
    • 패킷 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.
    • 데이터를 확실하게 보내기 위해서 3 way handshake이라는 방법을 사용한다. 
    • 3 way handshake 
      • 본격적으로 상대 클라이언트와 연결되기 전에 가상 연결을 해서 패킷으로 보내서 확인하는 동작
      • SYN : 연결을 생성할 때 클라이언트가 서버에 시퀀스 번호를 보내는 패킷
      • SYN-ACK : 시퀀스 번호를 받은 서버가 ACK 값을 생성하여 클라이언트에세 응답하는 패킷
      • ACK : ACK 값을 사용하여 응답하는 패킷
      • ACK 값을 받지 못한 데이터는 재전
    • TCP 데이터 안에 전송 제어, 순서, 정보들이 있기 때문에 패킷을 순서대로 제어할 수 있다.
  • UDP - 사용자 데이터그램 프로토콜
    • 비 연결지향적 프로토콜
    • 데이터 전달과 순서를 보증하지 않는다.
    • TCP와 비교해서 기능이 거의 없어 단순하지만 빠르게 패킷을 보내는 목적 

3. 람다란? 람다의 장점 

  • https://inpa.tistory.com/entry/%E2%98%95-Lambda-Expression 참고
  • 람다 표현식 = 익명 함수 : 함수형 프로그래밍을 구성하기 위한 함수식, 메서드를 간결한 함수 식으로 표현한 것
  • 메서드 타입/이름, 매개변수 타입, 중괄호, return 문을 생략하고 화살표 기호를 넣음

  • 인터페이스(= 함수형 인터페이스)로 선언한 익명 구현 객체만이 람다식으로 표현이 가능하다.
  • 함수형 인터페이스 : 딱 하나의 추상메서드가 선언된 인터페이스. 인터페이스 선언 시 @FuntionalInterface 어노테이션을 붙여주면 두 개 이상의 메서드가 선언되지 않도록 한다. 
  • 장점
    • 코드의 길이를 줄일 수 있다. 
    • 람다 함수는 일급 객체로 취급되기 때문에 메서드를 변수에 할당하거나 매개변수로 넣거나 리턴값으로 사용할 수 있다.
    • 함수형 프로그랭 지원
    • 함수형 프로그래밍의 특성으로 상태 변경이 없고 스레드에 안전하기 때문에 다중 스레드 환경에서 안전하게 사용할 수 있다.
  • 단점 
    • 문서화를 할 수 없다.
    • 익명 구현 객체 기반이기 때문에 디버깅이 까다롭다.

4. 스트림이란? 스트림의 장점 (함수형 프로그래밍과 엮어서)

  • 스트림 : 데이터의 흐름. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하여 가공된 결과를 얻을 수 있다.
  • 원본 데이터를 변경하지 않는다 : 원본의 데이터를 조회하여 원본의 데이터가 아닌 별도의 요소들로 스트림을 생성한다.
  • 일회용이다 : 한번 사용이 끝나면 재사용이 불가능하다. 다시 필요한 경우는 재생성해서 사용해야 한다.
  • 내부 반복자 : 반복 문법을 메서드 내부에 숨기고 있기 때문에 간결한 코드의 작성이 가능하다.
  • 장점
    • 배열과 컬렉션을 함수형으로 처리할 수 있다.
    • 스레드를 이용해 하나의 작업을 둘 이상의 작업으로 나눠서 동시에 진행하는 병렬 처리가 가능하다.

5. Optional 클래스가 무엇이고, 왜 탄생했는지?

  • null을 처리하기 위한 새로운 방법으로 등장
  • 값이 있을 수도 있고 없을 수도 있는 객체를 감싸는 래퍼 클래스
  • 명시적으로 해당 값이 null일 수 있음을 표현하고 NullPointerException을 방지할 수 있는 API를 제공한다.
  • 코드의 가독성을 높이고, null 체크를 강제함으로써 더 안전한 코드를 작성할 수 있게 해준다.

6. ThreadLocal이란?

  • 각각의 스레드 별로 필요한 정보를 저장할 수 있다.
  • 스프링의 데이터베이스 접근 기술은 스레드 로컬을 기반으로 동작하고 있다.
  • 서비스 계층에서 트랜잭션을 시작하도록 커넥션을 커넥션 풀로부터 꺼내오고, Dao 계층에서 해당 커넥션활용해 커밋하거나 롤백하는 동작은 스레드 로컬 덕분에 가능한 것이다.

 

※ 다음주 예습 ※

최범균의 JSP 1~4장

'공부 > f-lab' 카테고리의 다른 글

f-lab 9주차  (0) 2024.05.19
f-lab 8주차  (0) 2024.05.07
f-lab 6주차  (0) 2024.04.24
f-lab 5주차  (0) 2024.04.16
f-lab 4주차  (0) 2024.04.09

+ Recent posts