Today I Learned.

이론적인 내용을 설명하는 게 정말 어렵다는 것을 느꼈던 하루였다.

알고 있었던 내용이나 몰랐던 내용을 정리해보는 시간을 갖고,

다시 한번 정리해보면서 오늘 정리했던 내용은 완벽하게

설명할 수 있을때까지 말하면서 공부해보자!

JWT특징

- Json Web Token의 줄임말로 권환 확인, SSO에서 널리 사용되는 기술이다.
- 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달하는 방식.
  - .을 기준으로 총 3가지로 구분이 된다
      - Header : JWT 토큰 유형과 서명 알고리즘 두 부분으로 구성된다.
      - Playload : 암호화 되어 있는 정보와 토큰의 발생시간 만료시간이 있다.
          - 쉽게 복호화 할 수 있기 때문에 중요 데이터는 사용하지 않는게 좋다.
      - Signature : 서명은 도중에 변경되지 않았는지 확인할때 사용한다.

아파치 카프카란?

아파치 카프카란  발행(Publish)/구독(Subscribe) 모델의 메세지 큐 시스템으로 분산 환경의 유연성과 확장성을 위해 설계되었다.
Kafka는 기본적으로 Zookeeper , Broker, Producer , Cunsumer로 구성된다.

디자인 패턴

- 프록시 패턴
  - 다른 객체에 대한 대리자(Proxy) 또는 대변인 역할을 수행하는 패턴
- 프록시 패턴을 사용하면, 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다.

- 데코레이션 패턴
  - 객체에 동적으로 기능을 추가할 수 있도록 해주는 패턴
  - 데코레이션 패턴은 기존 객체를 수정하지 않고도 기능을 확장
  - 기존 객체를 변경하는 대신, 객체를 감싸는 데코레이터(Decorator) 객체를 생성
  - 데코레이션 패턴은 기존 코드를 수정하지 않고도 객체의 기능을 확장할 수 있으므로, 코드의 유연성을 높이는 데에 유용.

- 싱글톤 패턴
    - 전역 변수를 사용하지 않고, 오직 하나의 객체만을 생성하도록 보장하는 패턴
    - 싱글톤 패턴은 객체 생성 비용이 큰 경우나, 여러 개의 객체를 생성하면 안 되는 상황에서 사용

- 템플릿 패턴
    - 어떤 작업을 처리하는 일련의 단계들을 정의하고, 각 단계에서 수행되는 구체적인 처리를 서브 클래스에서 구현하도록 하는 패턴
    - 템플릿 패턴은 상위 클래스에서 알고리즘의 구조를 정의하고, 하위 클래스에서 구체적인 구현 담당
    - 데이터베이스 처리에서도 템플릿 패턴이 사용될 수 있다. (JDBC에서는 데이터베이스 처리의 일련의 단계들이 템플릿 패턴으로 구현)
    - 개발자는 추상 클래스를 상속하여 데이터베이스 처리를 구현하면 된다.

- 빌더 패턴 
    - 필요한 데이터만 설정할 수 있음
    - 유연성을 확보할 수 있음
    - 가독성을 높일 수 있음
    - 변경 가능성을 최소화할 수 있음
    - 어느 필드값에 어떤 값이 들어가는지 명시적으로 파악할 수 있다.

HMAC

Hash-based Message Authentication Code
비밀키를 이용하여 메시지를 해싱함으로써 무결성과 부인방지 기능을 부여하는 메시지 인증 코드

모든 해시함수가 사용될 수 있다. HMAC 뒤에 사용 해시 알고리즘을 표기한다.
예시)
HMAC-MD5
HMAC-SHA256
HMAC-SHA3-256

자바스크립트 ES5 ES6의 차이

1. let, const 키워드 추가
    - 변수에 생명주기 영향을 끼치고, 키워드만 봐도 변수의 변화가 생기는지 안생기는지 알 수 있게 되었다.

2. Arrow fucntion 추가
    - 화살표 함수가 추가되어 함수를 간결하게 나타낼 수 있다. 

3. Default parameter 추가 

4. Template literal 추가
    - ${} 중활호 앞에 달러표시를 통해 표현식 삽입 가능 -> 공백이 사라짐.

5. Multi-line string 
    - 백틱을 사용하게 되면 여러 라인의 문자열에 줄바꿈 연산자를 사용안해도 됨.

6. string 메서드 추가
    - includes, startsWith, endsWith

DI(의존성 주입)

다양한 의존성 주입 방법
1. 생성자 주입은 생성자를 통해 의존 관계를 주입
    - 생성자의 호출 시점에 1회 호출 되는 것이 보장
    - 주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우에 강제하기 위해 사용
    - 생성자가 1개만 있을 경우에 @Autowired를 생략해도 주입이 가능한 편의성 제공
    - 따라서, 생성자 주입을 적극적으로 지원한다.

2. 수정자 주입(Setter 주입)
    - 필드 값을 변경하는 Setter를 통해서 의존 관계를 주입하는 방법

3. 필드 주입
    - 필드 주입(Field Injection)은 필드에 바로 의존 관계를 주입하는 방법
    - 필드 주입은 반드시 DI 프레임워크가 존재해야 하므로 반드시 사용을 지양

DFS / BFS

깊이 우선 탐색(DFS)의 특징 · 자기 자신을 호출하는 순환 알고리즘의 형태 를 가지고 있다.
--> 재귀 함수로 구현

BFS(Breadth-First Search)란 너비 우선 탐색이라고도 불리며,
그래프에서 시작 노드에 인접한 노드부터 탐색하는 알고리즘
--> 큐로 구현