일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- LifeCycle
- OOP
- GraphQL
- Spring
- node.js
- Interceptor
- 프로그래머스
- java
- 알고리즘
- 인접행렬
- 인접리스트
- bean
- css
- 코딩테스트
- html
- JWT
- Linux
- TIL
- REST API
- 자료구조
- winston
- typescript
- nestjs
- javascript
- Deep Dive
- puppeteer
- Kubernetes
- dfs
- MySQL
- 탐욕법
- Today
- Total
목록CS (33)
처음부터 차근차근
0과 1로 숫자를 표현하는 방법컴퓨터가 표현하는 정보 단위를 학습하고, 0과 1만으로 숫자를 표현하는 방법정보 단위컴퓨터는 0 또는 1밖에 이해하지 못한다.비트(bit) : 0과 1을 나타내는 가장 작은 정보 단위Why? 전기를 통해 연산하는, 즉 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법이다. 컴퓨터에는 굉장히 많은 스위치(Transistor)가 있고, on/off 상태를 통해 0과 1로 표현한다.바이트(byte) : 여덟 개의 비트를 묶은 단위로, 여러 숫자 조합을 컴퓨터에 나타내기 위해 비트열을 사용.하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256개의 서로 다른 바이트가 존재할 수 있다.워드(word) : CPU가 한 번에 처..

자료구조 Heap 완전 이진 트리의 일종으로, 우선순위 큐를 위하여 만들어진 자료구조입니다. 최댓값, 최솟값을 쉽게 추출할 수 있는 자료구조입니다. 자세한 내용은 해당 Post를 참조해주세요. [자료구조] Heap Heap Heap tree or Heap이라고 불린다. 여러 개의 값 중에서 가장 크거나 작은 값을 빠르게 찾기 위해 만든 완전 이진트리를 말한다. 우선순위 Queue를 위하여 만들어진 자료구조이다. 힙은 일종의 반 정 hangju95.tistory.com Heapsort 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법 내림차순 정렬을 위해서는 최대 힙을 구성하고 오름차순 정렬을 위해서는 최소 힙을 구성하면 된다. 과정 설명 정렬해야 할 n개의 요소들로 최대 힙(완전 이진 트리 형태)..

MergeSort 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬 에 속하며, 분할 정복 알고리즘의 하나 이다. 분할 정복(divide and conquer) 방법 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 분할 정복 방법은 대개 순환 호출을 이용하여 구현한다. 과정 설명 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의 정렬..

QuickSort 퀵 정렬은 불안정 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속합니다. 분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법입니다. 합병 정렬(merge sort)과 달리 퀵 정렬은 list를 비균등하게 분할합니다. 분할 정복(divide and conquer) 방법 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략입니다. 분할 정복 방법은 대개 순환 호출을 이용하여 구현합니다. 하나의 리스트를 피벗(pivot)을 기준으로 두 개의 비균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의 정렬된 부분 리스트를 합하여 전체가 정렬된 리스트가 되게 하는 방법이다. 퀵 정렬..

이번 시간에는 정렬방법 중 가장 구현하기 쉬운 방법인 버블 정렬, 선택 정렬, 삽입 정렬을 알아보겠습니다. BubbleSort 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환합니다. 버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네번째를, ... 이런 식으로 (마지막 - 1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬합니다. 1회전을 수행하고 나면 가장 큰 자료가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 자료는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두번째 자료까지는 정렬에서 제외됩니다. 이렇게 정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하..
TypeScript를 통해 완전 이진트리를 구현하였습니다. 기본적으로 Tree에 들어가는 Node부터 구현하였습니다. /** Tree에 들어가는 Node 구현 @param {T} data Node에 들어갈 data @returns {TreeNode} */ export class TreeNode { public data: T; public left: TreeNode | null = null; public right: TreeNode | null = null; constructor(data: T) { this.data = data; } } 완전 이진트리 구현 배열을 받아 완전 이진트리를 구현하였습니다. 이진트리 구현 시 조건 없이 완전히 채우는 트리입니다. import { TreeNode } from "./..

Node.js를 공부하다보면, Node.js는 Non-Blocking이라는 장점을 가지고 있다고 나와있습니다. 또한 Blocking에 항상 같이 나오는 동기/비동기를 정확히 알아야 그 둘의 차이점을 알 수 있습니다. 사실 백엔드 공부를 하면서 비동기가 Non-Blocking인거 아니야?? 이렇게 생각할 수 있지만, 이것은 틀린 생각입니다. 동기/비동기 와 Blocking/Non-blocking 은 다른 것인가?? 사실 이 주제는 구글링을 좀만 해 보면 알 수 있습니다. 이 도표는 2006년 8월 말 IBM DeveloperWorks Library에 article로 게재된 글 Boost application performance using asynchronous I/O 에서 사용된 도표입니다. 이 도표는 ..

JWT에도 한계점은 있다? 쿠키와 서버의 단점을 보완해주는 JWT에서도 크나큰 단점이 존재합니다. 바로 토큰이 탈취당하면 만료될 때까지 대처가 불가능하다. 세션은 탈취당한다고 판단이 되었을 때 세션 저장소를 끊어서 탈취당한 세션 ID가 있더라도 세션 저장소에 그 값을 지워 탈취된 후의 상황을 보완할 수 있었습니다. 그러나 이건 서버에서 클라이언트의 상태를 저장하는 Stateful한 상황이고, 토큰은 Stateless 상태입니다. 즉, 토큰을 발급하면 관리는 클라이언트에서 하기 때문에, 탈취를 당했다고 서버에서 판단할 수가 없습니다.(탈취 당하면 답이 없는 상태) 만료시간을 짧게 가져가자 JWT는 발급한 후 서버에서 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 탈취 문제에 ..

JWT란? JWT(JSON Web Token)이란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다. 그리고 JWT 기반 인증은 JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트 식별하는 방식을 의미합니다. JWT는 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것을 의미합니다. 사실 기본적으로 인증하는 방식은 일반 Token 방식과 크게 다르지 않습니다. 다만 이 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어가 있습니다. 따라서 사용자가 JWT를 서버로 전송하면 서버는 성명을 검증하는 과정을 거치게 되며, 완료되면 요청한 응답을 돌려줍니다. Base64 URL-safe Encode 는 일반적인 Base64 Encode 에서 URL ..

서버가 클라이언트 인증을 확인하는 방식으로는 대표적으로 쿠키, 세션 토큰 3가지 방식이 존재합니다. 이번 포스팅은 쿠키 세션, 토큰이을 만든 이유, 인증 방식에 대해서 알아보겠습니다. HTTP의 특징과 쿠키, 세션을 사용하는 이유 쿠키, 세션, 토큰 등을 사용해 클라이언트 인증을 확인하는 이유는, HTTP 프로토콜의 특성이자 약점인 Connectionless, stateless한 특성을 보완하는 이유입니다. 기본적으로 HTTP는 Connectionless와 stateless한 특성을 가지고 있습니다. Connectionless : 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징 헤더에 keep-alive라는 값을 줘서 Connection을 재활용하는데, HTTP 1.1에서는 이것이 D..