Algorithm

  1. Stack

    LIFO(Last In First Out) 구조를 가지고 있으면 후입선출 방식이다. 가장 최근에 유입된 데이터를 먼저 꺼내서 처리하는 방식이다. 스택의 크기는 정해져 있고, 스택에 데이터를 저장하는 액션을 Push라 지칭 하고 가장 최근에 저장한 데이터를 꺼내오는 액션을 Pop이라고 한다.

    만약 스택 크기보다 더 많은 데이터를 저장하면 Overflow 에러가 발생하게 되며, 아무런 데이터가 없는 경우에도 데이터를 꺼내는 액션(Pop)을 수행하면 오류가 떨어진다.

  2. Queue

    FIFO(First In First Out) 구조를 가지고 있으면 선입선출 방식이다. 제일 먼저 유입된 데이터를 먼저 처리하는 방식이다.

    구조는

    Enqueue: 큐 맨 뒤(rear)에서 요소를 추가하는 연산을 말한다.

    Dequeue: 큐 맨 앞(front)에서 요소를 꺼내오는 연산을 말한다.

    front: 큐의 맨 앞의 위치(인덱스)

    Peek: front에 위치한 요소를 읽는 연산을 말한다. 스택과 비교한다면 pop과 동일한 연산이다.

    rear: 큐의 맨 뒤의 위치(인덱스)

    Untitled

  3. Heap

    Heap은 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓 값이나 최솟 값을 빠르게 찾아내도록 만들어진 자료구조이다.

  4. List ⇒ Linked List ⇒ Array List

    배열과 동일한 연속된 데이터를 저장할 수 있는 구조. 배열과 다른 점은 요소를 저장할 수 있는 크기가 유한하지 않다.

    연결 리스트는 ‘노드'라는 객체로 이루어져 있다. Data를 저장할 공간과 다음 Data가 저장되어 있는 주소를 담고 있다. 새로운 DATA가 저장되면 앞서 저장되어 있던 노드에 새롭게 추가된 데이터가 저장된 메모리 주소가 저장된다.

    자바의 경우, Array 타입의 배열은 길이가 고정되어 있다. 그렇기 때문에 데이터를 추가하기 위해서는 길이가 더 큰 Arrray 타입의 배열을 만들어서 그곳에 다시 옮겨야 한다.

    Untitled

  5. HashMap ⇒ Map

  6. 과제

    1. Java로 구글링 없이 Stack과 Queue를 구현해보기(1 hour)
      1. Array 데이터 타입을 이용해서 구현
      2. 1,2,3,4,5,6,7,8,9,10에 대한 데이터를 push() → stack의 경우, pop() ⇒ 10
      3. 1,2,3,4,5,6,7,8,9,10에 대한 데이터를 Enqueue() / Dequeue()
    2. 구글링해서 내가 작성한 코드와 다른 사람이 작성한 코드를 한번 비교해보기(2 hour)
    3. 코드를 작성하면서 만났던 에러 및 회고록 정리해보기(3 hour)

CS지식

  1. Restful API

    Representational State Transfer의 약자. 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.

    HTTP URI를 통해서 자원(Resource)을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 말한다.

    Resource(DB의 데이터)가 있고 HTTP Method와 URI를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.

    Untitled

    Untitled

  2. 비동기 프로그래밍

    비동기 프로그래밍의 구현이 매우 쉽다. 여기서 비동기 프로그래밍이란, 어떠한 요청을 보내고 그 요청에 대한 응답이 올 때까지 기다리는 것이 아니라, 그 다음 로직을 수행하고 있다가 요청에 응답이 오면 그때 응답에 대한 처리를 수행하는 방식을 비동기 프로그맹이라고 한다. 이러한 방식을 사용한다면 스레드를 매우 효율적으로 사용할 수 있다.

    일상 생활로 예를 들면, 스타벅스에서 커피를 받는 방법과 유사합니다. 첫번째, 우리는 커피를 주문하죠. 그리고 아무것도 하지않고 커피만 바라보고 기다리면 그것은 동기방식이고, 그렇지 않고 두번째 핸드폰 켜서 뉴스를 보거나, 전화를 하거나, 또는 함께 온 사람과 대화를 하거나 등등 다른 일을 한다면 이것은 비동기 방식이죠. 커피가 준비가 다 되면 바리스타가 우리를 부릅니다.

    Untitled

  3. Network(TCP/UDP)

    TCP와 UDP의 차이점

    TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름을 제어 및 혼잡 제어 기능을 제공한다.

    UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속이 중요한 서비스에 사된다.

    Untitled

    TCP 3 Way-Handshake

    TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.

    과정

    1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이 때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
    2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락을 한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이 때 서버는 SYN_RECEIVED 상태가 된다.
    3. 클라이언트가 서버에게 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 이 때 서버의 상태는 ESTABLESHED가 된다.

    Untitled

숙제

필수 내용: 간략한 정의에 대한 정리 + 적용(내가 공부한 것으로 기반으로 실생활이나, 실제 코딩에 적용해보는 것)하는 부분까지 기술블로그에 작성하시고, 과제 제출 스레드에 올려주세요.

  1. 4 handshake란 무엇인가?
  2. 컴파일이란 무엇인가?
  3. 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가?
  4. WEB Server와 WAS의 차이점은?
  5. 네트워크 방화벽은 무엇인가?
  6. SSL은 무엇인가?