본문 바로가기

전체 글

(32)
Dart : isolate 일반적인 프로그래밍 언어는 순차적으로 코드 실행한다. 그렇게 코드를 실행 중에 처리시간이 긴 작업(특히 UI와 관련된 상황 or 서버통신)을 만나면 프로그램이 기다리는 것처럼 느낄 수도 있다. 이러한 상황을 해결하기 위해, 요청한 작업의 결과를 기다리지 않고 바로 다음 작업으로 넘어감(비동기)으로써 프로그램의 실행을 기다리지 않게끔 한다. 이러한 문제 해결 방식을 비동기 프로그래밍(Asynchronous programming)이라고 한다. ⇒ 보통 Sub Thread(서브 쓰레드)를 생성해서 작업을 할당하는 것을 비동기 프로그래밍 이라고 한다. 안드로이드 Kotlin 개발에서는 Coroutine 을 통해 비동기 프로그래밍 하기를 구글 Jetpack에서 적극 권장하고, Flutter는 Future, Str..
JWT 는 만능이 아니다. 이 포스팅은 기본적인 JWT 이해가 있다고 생각하고 글을 작성하였습니다. 우리는 JWT 를 사용할때, JWT의 장점만 생각하고 단점에 대해 크게 고민없이 JWT를 사용하곤 한다. 모든 기술에는 장단점이 존재하며, JWT 에도 단점이 있다. JWT 의 구조 JWT는 HEADER.PAYLOAD.SIGNATURE 이렇게 3가지의 필드가 존재한다. 모든 필드는 JSON으로 표현되며 이러한 JSON 필드들을 각각 Base64 인코딩하고 (.)을 기준으로 하나의 값으로 합친 것이 JWT 이다. JWT 공격 방법 JWT는 Base64로 encoded JSON 값이며, Base64를 Decode하면 누구나 내용을 볼 수 있기 때문에 JWT 안에는 중요한 정보는 없어야 한다. JWT Signature Secret Cra..
Hash • 데이터를 빠르게 저장하고 가져오는 기법 중 하나 해시 함수 (짧게는 그냥 해시)는 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수를 말한다. 쉽게 말해, 아무리 큰 숫자를 넣더라도 정해진 크기의 숫자가 나오는 함수이다. 위의 1,3번째 "Hello" 는 hashcode 적용 하더라도 같은 데이터를 추출한다. Hash Table key-value 데이터들의 모음집 ⇒ key 를 이용하여, 데이터를 저장하거나 or 꺼내온다 아래의 예시는 데이터가 Hash Table에 어떻게 저장되는지를 그림으로 표현한다. Key Value John Smith 521-1234 Lisa Smith 521-8976 Sandra Dee 521-9655 Key = (”John Smith”) Key..
Queue(원형 큐 : Circular Queue) 이전 선형 큐 글에서 "선형큐를 Array 로 구현했을때, 상당히 비효율적이다" 라고 이야기 했었다. 원형 큐는 큐를 Array로 구현하되 Array로 구현했을때 일어나는 단점을 보완한 자료구조이다. front 와 rear 의 index 모두가 같은 인덱스를 가리키고 있다면, 해당 Circular Queue 는 비어있는 것이다. 데이터를 넣을 때 rear 인덱스 이동 데이터를 추가할 경우 1. front 는 정지해 있고, 2. rear 만 1칸씩 움직이면서, 데이터를 추가한다.(Enqueue) 데이터를 뺄때 front 인덱스 이동 데이터를 삭제할 경우 1. rear는 정지해 있고 2. front 는 1칸씩 이동하면서, 데이터를 추출한다.(Dequeue) 원형 큐(Circular Queue) 는 꽉 채울때..
Queue(선형 큐) 선입선출(First-In-First-Out : FIFO) : 먼저 들어간것이 먼저 나온다 Queue 이전에 배웠던, LinkedList로 구현한다. Queue 를 Array 로 개발하는 것은 상당히 비효율적이다.(특히 삭제시, 데이터를 1칸씩 앞으로 땡겨와야 한다.) => 다음 포스트에 나오겠지만, 원형 큐가 생겨나게 된 이유이다. offer : 삽입 (Enqueue) 1. 처음에 Dummy Head 와 Dummy Tail 이 한곳에 동시에 저장 되어 있다. 2. 데이터가 삽입이 이루어 지면서, Tail 노드를 뒤로 이동시킨다. poll : 추출 (Dequeue) 1. 데이터(result) 의 pointer 를 끊어낸다. = 제거 2. Head의 next pointer 를 재설정 한다. ⇒ 뒤에 쌓여 있..
Stack • 후입선출(Last-In-First-Out - LIFO) : 마지막에 들어간 것이 제일 빨리 나온다. push pop peek
Double LinkedList List 의 종류 (3가지) ArrayList LinkedList Single LinkedList Double LinkedList Double LinkedList 만의 특징 1. single 방식과 달리 double 은 Node 에 Preview point 가 있다. 각 Node가 서로를 가리키고 있다. 2. Dummy Head, Dummy tail 노드를 가지고 있다. - Double LinkedList 의 처음 생성 모습 (Head 와 Tail 만 존재한다) 실제로 데이터가 들어오게 되면 아래와 같은 모양이다. Double LinkedList 의 시간복잡도 추가 : add : O(1) Single 방식에서는 맨 끝에 데이터를 추가하기 위해서는 N번 만큼 이동한 뒤에 데이터를 추가 했어야 했다. 하지만..
Single LinkedList List 의 종류 (3가지) ArrayList LinkedList Single LinkedList Double LinkedList Single LinkedList Single LinkedList 를 보통 일반적인 LinkedList라고 부른다. LinkedList는 데이터가 따로 떨어져 저장되고, 1개의 저장공간 안에서 연속을 유지하기 위해 그다음 공간의 주소를 가지고 있게 된다. 위의 그림에서 파란 네모 공간을 링크드 리스트에서는 Node 라고 한다. Node는 데이터 공간 (오른쪽 상자) Next Node Point : 다음 연결 지점, 그다음 공간의 주소를 가지고 있음 (왼쪽 상자) 그림을 통한 이해 아래의 그림은 4개의 Node를 가지는 LinkedList 이다. 맨앞의 Node : Head 맨끝..