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)란 너비 우선 탐색이라고도 불리며,
그래프에서 시작 노드에 인접한 노드부터 탐색하는 알고리즘
--> 큐로 구현