본문 바로가기

분류 전체보기

(15)
[자료 구조] 해시 테이블(Hash Table) key-value 쌍의 데이터를 입력받아 빠른 탐색을 가능하게 하는 자료구조이다. 각 해시 테이블의 hash function에 key 값을 집어넣어 얻은 해시값을 위치로 key-value 데이터 쌍을 저장합니다. key 에 해당하는 value 값을 찾을 때 다른 주소의 탐색없이 Hash function에 key 값을 넣은 결과값의 위치만 확인하면 되기에 빠른 탐색이 가능하다. 여기서 value값을 저장하는 위치를 버킷(슬롯)이라고 한다. Hash Function Hash Function은 각 key값에 해당하는 고유한 인덱스 값을 얻기 위해 존재한다. Division Method Index = key % 테이블의 크기 Digit Folding Key의 각 자리 문자를 ASCII 코드로 바꾼 값을 합한 값..
[OS] Process 프로세스(Process)는 프로그램이 메모리에 로드되어 CPU를 할당받아 실행되는 것을 의미한다. 하나의 프로그램이 여러 프로세스가 될 수 있다. 구조 각 프로세스는 Code, Data, Stack, Heap 영역이 메모리를 할당 받습니다. Code : 실행한 프로그램의 코드가 저장 Data : 전역변수와 Static변수 저장 프로그램 시작과 끝을 함께함 Heap : 사용자가 직접 공간을 관리하는 영역 (malloc / free), compile time에 크기가 정해짐 Stack : 함수 호출과 관련된 지역 변수와 매개변수 저장, runtime에 크기가 정해짐, Heap과 Free 영역을 공유함 State 1. New : 프로세스가 생성된 상태 2. Ready : 프로세스가 CPU에 할당되기를 기다리는..
[보안] JWT(JSON Web Token) 캡스톤 프로젝트에서 유저의 로그인을 JWT를 통해 validation 하는 것을 구현한 적이 있다. 프로젝트를 리팩토링 하던 중 이부분에 대해서 개선할 방법은 없을까 하는 마음에 JWT에 대해 정리해보고자 하였다. 다행히 JWT 공식 홈페이지에 이에 대해 잘 정리가 되어있어서 이를 번역하고 추가로 조사한 것들을 정리해보았다. JWT 란 JSON Web Token(JWT)는 당사자들 사이에서 정보를 JSON 객체로 안전하고 전송하기 위한 작고 독립적인 토큰 기반인증이다. 구조 xxxxx.yyyyy.zzzzz Header Header는 사용된 해시 암호화 알고리즘과 JWT라는 것을 알리는 Type 부분으로 이루어져 있다. { "alg" : "HS256", "typ" : "JWT" } Payload Claim..
[자료구조] 큐(Queue) FIFO(First In First Out), LILO(Last In Last Out) 즉 선입선출의 규칙를 가지고 있는 자료구조이다. FILO(First In Last Out) 의 규칙을 가지고 있는 스택(Stack) 과는 반대의 성격을 가지고 있다. 데이터의 삽입, 삭제가 빨라서 데이터의 입출력이 자주 일어나는 경우 사용한다. 프린터 작업 처리 , CPU task scheduling, BFS, Cache 용어 Front (Head) : 논리적으로 가장 앞에 있는 데이터의 위치, 데이터를 Dequeue 할 수 있는 위치이다. Rear (Tail) : 논리적으로 마지막에 있는 데이터의 위치, 데이터를 Enqueue 할 수 있는 위치이다. Enqueue : Queue에 데이터를 삽입. Rear에 데이터를 ..
[자료구조] LinkedList vs ArrayList LinkedList와 ArrayList는 같은 List라는 이름을 달고 있지만 data 구조나 장단점에서 확연한 차이를 보인다. LinkedList에 대해 정리해보며 ArrayList와는 어떤 차이가 있는지 정리해보았다. LinkedList 각 노드가 데이터와 다음 노드의 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 데이터가 물리적, 논리적으로 연결되어 있는 배열 리스트와는 다르게 연결 리스트는 데이터가 논리적으로만 연결 되어있다. ArrayList https://mson-it.tistory.com/3 [자료구조] Array vs ArrayList Array 미리 할당된 크기 내에서 연관된 data를 메모리와 index가 연속적이고 순차적으로 저장하는 자료구조이다. ..
[자료구조] Array vs ArrayList Array 미리 할당된 크기 내에서 연관된 data를 메모리와 index가 연속적이고 순차적으로 저장하는 자료구조이다. ArrayList 연관된 data를 메모리와 index가 연속적이고 순차적으로 저장한다는 점에서는 Array와 비슷하지만 미리 할당된 크기보다 더 큰 data가 들어왔을 경우 capacity를 늘린다. Performance 기본적인 구조가 비슷하기 때문에 두 자료구조가 비슷한 시간 복잡도를 가진다. Search O(n) Append O(1) Insertion (append가 아닌) O(n) - 해당 index를 기준으로 뒤에 있는 index의 data를 한칸씩 뒤로 밀어야한다 Delete(맨 끝) O(1) Delete O(n) - Insertion 과 같은 이유이다. Access O(1..
[Spring] 패키지 구조(계층형, 도메인형) 예전에 개발했던 서비스를 리팩토링 하던 중 프로젝트의 구조를 정리할 필요성을 느꼈다. 백엔드 부분을 혼자 개발하다보니 패키지 구조에 대해 많이 신경쓰지 않아 이런 문제가 발생한 것 같다. 다른 분들은 어떻게 하고 계신지 조사해본 결과 크게 두가지로 패키지 구조가 나눠진 것을 알 수 있었다. 계층형 기존에 서비스를 개발할 때 사용하던 구조이다. 서비스 계층에 따라 패키지를 설계하는 방식이다. 장점 서비스에 대한 이해가 없더라도 전체적인 구조를 파악하기 쉽다. 중복된 코드가 발생할 가능성이 적다. 단점 특정 기능을 수정하려고 하면 모든 계층에 그와 관련된 코드가 있어서 수정하기 어렵다. Github이나 여러 툴들을 사용해 협업시 개발자들 사이에서 merge conflict가 날수도 있다. 도메인형 리팩토링 ..