Studying 46

Transaction(트랜잭션)

Transaction의 사전적 의미는 DB의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻합니다. 여기서 DB의 상태를 변화시킨다는 것은 SQL 질의어(Select, Insert, Delete, Update...)를 통해 DB에 접근하는 것을 의미합니다. 여기서 작업의 단위는 질의어 한 문장이 아니라 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미합니다. 이 트랜잭션은 작업의 완전성을 보장해주는데, 논리적인 작업 셋을 모두 완벽하게 처리하거나 혹은 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다. 사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고, 시스템의 입장에서는 데이터들을 접근/변경하는 프로그램의 단위가 ..

Stateful & Stateless

요즘은 HTTP를 이용해 HTML, TEXT, Image는 물론이고 Json이나 XML같은 API 파일 등 서버 간 데이터를 주고 받을 때 모두 HTTP 프로토콜을 사용합니다. 이 HTTP의 중요한 특징 중 하나는 무상태 프로토콜(Stateless)을 지향한다는 것입니다. 이는 서버가 클라이언트의 상태를 보존하지 않는다는 것을 의미합니다. HTTP에서는 클라이언트가 요청을 하면, 서버에서 응답을 하는 방식으로 이루어진다고 했는데 예시를 통해 살펴보겠습니다. 1. Stateful Stateful은 상태유지를 의미하며 서버가 클라이언트의 상태를 보존하는 것을 의미합니다. 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것을 의미합니다. 웹 서버로 예를 들자면 브라우저의 상태, 쿠키, 세션 정보를 기억..

Java - DFS 구현

1. DFS DFS(Depth-first Search)을 직역하면 깊이 우선 탐색이라는 뜻으로, 연결된 노드를 따라 방문을 한 뒤에 더 이상 연결된 노드가 없을 때 이전 노드로 돌아가서, 이전 노드에 연결된 노드를 따라 탐색하는 법입니다. 위의 사진에서 1번 노드부터 탐색을 한다고 해보겠습니다. 오름차순으로 방문한다는 가정하에 1 -> 2 -> 6 순으로 진행됩니다. 6과 연결된 노드가 없기 때문에 다시 2번 노드로 돌아가 8번 노드를 방문하게 됩니다. 8번 노드와 인접한 노드는 모두 방문을 끝냈기 때문에 최상위 노드(1번)으로 돌아가 3번 노드부터 시작하여 마찬가지로 오름차순으로 진행하여 3번 노드부터 이어진 노드를 방문합니다. 위의 과정을 거치고나면 1 -> 2 -> 6 -> 8 -> 3 -> 5->..

프레임워크 & 라이브러리

우리가 치킨 집을 창업한다고 생각해보겠습니다. 닭, 소스를 사고 만들어보고 맛이 없으면 버리고 다시 새로 만들어봅니다. 치킨 집의 이름을 정하고 메뉴판도 만들고 매장을 차려야 장사를 시작할 수 있을 것입니다. 그런데 우리가 창업을 할 때는 자기 이름으로 차리는 경우는 드물고 프렌차이즈로 간판을 빌립니다. 여기서 BHX, BBX 등 브랜드가 프레임워크라고 생각하면 됩니다. 1. Framework 뼈대를 뜻하는 프레임워크는 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 제공하는 것을 말합니다. 애플리케이션 개발 시, 필수적인 코드 및 알고리즘, DB 연동과 같은 기능들을 위해 어느정도 뼈대를 제공하며, 사용자는 이러한 뼈대(프레임)에서 애플리케이션을 개발합니다. 앱 구동, 메모리..

OSI 7 Layer

https://refreshment-wg.tistory.com/4 데이터 전달 원리 1. 데이터의 기술적 개념 우선 데이터의 기술적 개념부터 생각해보자. 우리가 흔히 말하는, 컴퓨터 화면을 통해 볼 수 있는 모든 데이터는 컴퓨터 밖 세상의 것들과 크게 다르지 않다. 책처럼 refreshment-wg.tistory.com 데이터 전달 원리라는 글에서 OSI 7 계층에 대해 간략히 적었는데 미흡한 부분이 있어 작성하였습니다. OSI 7 Layer(Open Systems Interconnection Reference Model)은 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층 간 상호 작동하는 방식을 정해놓은 모델입니다. OSI 7 계층이라고도 합니다. 1. 목적 이러한 OSI 모델이 ..

Hashmap 자료구조

해시맵은 Map 인터페이스에 속해있는 Collection으로, 데이터들을 Key와 Value로 구성된 entry 객체를 저장하는 자료구조입니다. 여기서 key는 고유한 속성이지만, Value는 고유한 속성이 아니기 때문에 Value는 중복이 될 수 있습니다. Hash는 특정 키에 대한 값을 빠르게 찾아올 수 있는 장점이 있습니다. key-value가 1:1로 매칭되기 때문에 삽입, 삭제, 검색 과정에서 O(1)의 시간복잡도를 가집니다. 1. Hashmap 선언 import java.util.HashMap; public class Test { public static void main(String[] args) { HashMap hm = new HashMap(); // 타입 설정x Object 입력 Has..

Deque vs list 속도 차이

1. Deque Deque는 Double-ended Queue 입니다. 이는 양 끝에 삽입/삭제를 지원한다는 것입니다. 양 끝에 삽입/삭제 시 O(1)의 시간복잡도를 만족하게 됩니다. 내부적으로는 double-linked list로 구현되어 있습니다. append() : deque의 right end에 요소 추가 appendleft() : deque의 lef end에 요소 추가 pop() : deque의 right end의 요소 삭제 popleft() : deque의 left end의 요소 삭제 2. List Deque와는 다르게 python의 List는 fixed size memory blocks(array)로 구현되어 있습니다. 이름은 List여서 링크드 리스트처럼 보이지만 고정된 사이즈의 메모리를 ..

Tree 구조

트리는 스택이나 큐와 같은 선형 구조가 아닌 비선형 자료구조입니다. 트리는 계층적 관계(Hierarchical Relationship)을 표현하는 자료구조입니다. 이 트리라는는 자료구조는 표현에 집중합니다. 자료에서 무엇인가를 저장하고 꺼내야 한다는 사고에서 벗어나 트리라는 자료구조를 바라보는 것이 좋습니다. 1. 트리를 구성하고 있는 구성요소들(용어) Node (노드) : 트리를 구성하고 있는 각각의 요소 Edge (간선) : 트리를 구성하기 위해 노드와 노드를 연결하는 선 Root Node (루트 노드) : 트리 구조에서 최상위에 있는 노드 Terminal Node ( = leaf Node, 단말 노드) : 하위에 다른 노드가 연결되어 있지 않은 노드 Internal Node (내부노드, 비단말 노드..

Stack & Queue

1. Stack Stack은 선형 자료구조의 일종으로 자료를 쌓아 올리는 형태의 자료구조입니다. Data를 맨 아래부터 쌓기 때문에 가장 먼저 넣은 원소가 늦게 나오고, 나중에 들어간 원소가 가장 먼저 나옵니다. (후입선출 : LIFO=Last In FIrst Out) 자료의 삽입 삭제는 한 곳(Top)에서만 이뤄집니다. 만약 스택이 비어있을 때 자료를 꺼내려고 시도를 하면 Stack Underflow가 발생하고, 반대로 스택이 꽉 차있을 자료를 넣으려고 하면 Stack Overflow가 발생합니다.. 이 Stack은 재귀적인 알고리즘, 후위 표기법 계산, 역순 문자열 만들기에 쓰이며, 웹 브라우저의 뒤로가기, 문서작업에서 Ctrl+z(가장 나중에 수정한 내역을 되돌림)에 쓰입니다. 2. Queue Qu..

가상 메모리

가상 메모리(Virtual memory)는 메모리 관리 기법의 하나로 기계에 실제로 이용 가능한 기억 자원을 추상화하여 사용자에게 매우 큰 메모리로 보이게 만드는 것을 말합니다. 컴퓨터의 주기억장치 상에 2개 이상의 프로그램이 적재되어, 하나의 프로그램이 CPU를 사용하다 입출력 동작을 하게되면, 상대적으로 느린 입출력 장치를 수행시키는 동안 CPU로 하여금 다른 프로그램을 수행하여 컴퓨터의 효율을 증대 시키는 다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 합니다. 가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이며, 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있습니다. 가상 메모리 개발 배경 실행되는 코드의 전부를 물리 ..