전체 글 39

동기와 비동기

동기 (Synchronous) 작업들이 순차적으로 진행되는 방식이다. 작업이 진행되고 있을 때 다른 작업이 동시에 진행될 수 없다. 비동기(Asynchronous) 응답에 관계없이 다음 작업이 시작된다. 작업이 들어온 순서대로 진행되지 않을 수 있다. '동기 실행'에 비해 더 빠른 시간 안에 작업들을 처리할 수 있다. 자바로 동기 비동기 구현해보기 아래와 같은 메소드가 있다고 할 때, public class SyncAsync { public static void main(String[] args) { ... } public static void dough(String dish) { System.out.println(dish + " >> Dough"); } public static void sauce(St..

힙이란?

힙 우선순위 큐를 구현하는 가장 효율적인 자료구조이다. 완전 이진 트리의 일종이며, 여러 개의 값들 중 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다. 반정렬 상태 (느슨한 정렬 상태)를 유지한다. 힙 트리에서는 이진 탐색 트리와 달리 중복된 값을 허용한다. 배열을 이용하여 구현한다. 0번 인덱스는 사용되지 않으며, 특정 위치의 노드번호는 변하지 않는다. 힙의 종류 최대 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리 최소 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리 힙의 삽입 마지막 노드 다음 노드에 새로운 요소를 삽입한다. 삽입한 노드가 부모 노드보다 크면 자리를 바꾼다. 부모 노드가 삽입한 노드보다 클 때까지 반복한다. 힙..

CORS란 + 스프링부트에서 CORS 에러 해결하기

Origin (출처) Protocol + Host + Port 셋 중 하나만 달라도 다른 출처를 나타낸다. SOP (Same-Origin Policy) -> 동일 출처 정책 -> 웹 브라우저가 SOP를 지키는 경우, 다른 출처의 리소스 (API 호출 등) 사용 불가 -> 보안성이 뛰어나다. -> 그러나 외부에서 API를 호출하는 것이 불가피하므로, 이를 위한 예외조항이 있는데 이것이 CORS이다. CORS (Cross-Origin-Resource Sharing) -> 교차 출처 리소스 공유 -> 브라우저에서 다른 출처의 리소스를 공유하는 방법 -> CORS 정책을 위반하면 CORS 에러가 발생한다. CORS 동작 방법 1. 단순 요청 방법 (Simple Request) 서버가 Access-Control-..

트리

트리란? 하나의 루트 노드를 가지며, 0개 이상의 자식 노드를 갖고 있다. 각 노드들은 간선으로 연결되어 있다. 비선형 자료구조이며 계층적 관계를 표현한다. 사이클이 없는 하나의 연결그래프이다. 노드가 N개인 트리는 항상 N-1개의 간선을 가진다. 루트에서 어떤 노드, 또는 임의의 두 노드 간의 경로는 유일하다. 순회하는 방법에는 Pre-Order, In-Order, Post-Order가 있다. 관련 용어 노드의 크기(Size): 자신을 포함한 모든 자손 노드의 개수 노드의 깊이: 루트에서 어떤 노드에 도달하기까지 거쳐야 하는 간선의 수 노드의 레벨: 트리의 특정 깊이를 가지는 노드의 집합 노드의 차수(Degree): 노드의 자식 수 트리의 차수: 트리의 최대 차수 트리의 높이: 루트 노드에서 가장 깊숙..

정렬 알고리즘 (합병, 퀵, 힙, 쉘, 기수)

합병 정렬 (Merge Sort) 분할 정복 알고리즘 (Divide & Conquer) 이다. 주어진 배열을 원소 하나하나로 쪼갠다. 쪼갠 원소들을 정렬하면서 다시 합친다. 퀵 정렬 (Quick Sort) 분할 정복 알고리즘 (Divide & Conquer) 이다. 임의의 원소로 pivot을 정한다. pivot을 기준으로 pivot보다 작은 수끼리, pivot보다 큰 수끼리 새로운 배열을 만든다. 새로운 배열에서 다시 pivot을 정하고 같은 과정을 반복한다. 힙 정렬 (Heap Sort) 힙 자료구조를 사용한다. 오름차순으로 정렬할 땐 최소 힙 트리, 내림차순으로 정렬할 땐 최대 힙 트리를 사용한다. 오름차순으로 정렬하는 경우, 완전 이진 트리 형태의 최소 힙을 만든다. 삭제연산을 수행한다 -> 최댓값..

트랜잭션

트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 하나의 트랜잭션은 Commit 되거나 Rollback 된다. 트랜잭션의 성질 원자성 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 전혀 반영되지 않아야 한다. 트랜잭션 내 모든 명령은 완벽히 수행되어야 하며, 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. 일관성 트랜잭션이 성공적으로 완료되면 항상 일관성 있는 데이터베이스 상태로 변환된다. 트랜잭션 수행 전과 후에 시스템 고정요소의 상태는 같아야 한다. 독립성 하나의 트랜잭션이 실행 중일 경우, 다른 트랜잭션 연산을 수행할 수 없다. 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션에서 수행결과를 참조할 수 없다. 지속성 트랜잭션의 결과는 시스..

CPU 스케줄링

스케줄링의 단계 고수준 스케줄링 (=장기 스케줄링, 작업 스케줄링) 시스템 내의 전체 작업 수를 조절한다. 작업 요청이 오면 시스템의 상황을 고려하여 작업을 승인할지 거부할지를 결정한다. 메인프레임과 같은 큰 시스템에서 사용된다. 중간 수준 스케줄링 (=중기 스케줄링) 프로세스가 활성화된 후에도 시스템의 부하를 조절하기 위해 프로세스 중 일부를 보류 상태로 보내기도 하고, 다시 활성화시키기도 한다. 저수준 스케줄링 (=단기 스케줄링) 준비 상태에 있는 프로세스를 실행 상태 또는 대기 상태로 보내기도 하며, 타임아웃으로 준비 상태로 돌려보내기도 한다. 스케줄링의 목적 공평성: 모든 프로세스가 자원을 공평하게 배정받아야 한다. 효율성: 시스템 자원이 유휴 시간 없이 사용되어야 한다. 안정성: 우선순위를 사용..

정렬 알고리즘 (버블, 선택, 삽입) + 자바구현

버블 정렬 (Bubble Sort) 인접한 두 요소를 비교하여 왼쪽 요소가 오른쪽 요소보다 크면 서로 바꾼다. 배열의 끝까지 비교하면 마지막 요소는 그 위치가 최종적으로 정렬된 요소이다. 다시 처음으로 돌아와서 두 요소끼리 비교하며 자리를 바꾼다. 배열의 크기가 N이라면, (N-1) + (N-2) + ... + 1 = N * (N-1) / 2번 비교를 수행한다. 시간복잡도: O(N^2) 자바 코드 import java.util.Scanner; public class BubbleSort { public static void main(String[] args) { Scanner scn = new Scanner(System.in); int n = scn.nextInt(); int[] arr = new int[..

HTTP와 HTTPS의 차이

HTTP (HyperText Transfer Protocol) 클라이언트(웹브라우저)가 서버와 데이터를 주고 받기 위한 통신규약이다. TCP/IP 위에서 동작하며 80번 포트번호를 사용한다. 상태가 없는 (stateless) 프로토콜이다. -> 상태가 없다는 것은 각각의 요청이 서로 독립적이라는 의미이다. HTTPS HTTP에 데이터 암호화가 추가 된 프로토콜이다. 각종 포털사이트에서 HTTPS를 권장하고 있다. -> http보다 https에 검색어 순위에서 우선순위를 부여 함 SSL 인증서를 사용하여 데이터를 암호화한다. 인증된 기관에서 인증서를 발급받아야 하며 비용이 발생한다. 포트번호는 443번을 사용한다.

탐색 알고리즘 (선형, 이진, 해시)

탐색 알고리즘 원하는 값을 검색하기 위한 알고리즘이다. 선형 탐색 알고리즘 (Linear Search Algorithm) 탐색 알고리즘 중 가장 간단한 알고리즘이다. 처음부터 원하는 값이 나올 때까지 하나하나 살펴보는 방법이다. 최악의 경우는 원하는 값이 가장 마지막에 있을 경우이며 O(n) 의 시간복잡도를 갖는다. ... 이진 탐색 알고리즘 (Binary Search Algorithm) 배열의 중앙에 있는 값을 목표한 값과 비교하여 중앙값의 왼쪽 구간 또는 오른쪽 구간을 검색 범위로 정한다. 정렬된 리스트에서 사용한다. 최악의 경우 시간복잡도는 O(logN)이다. 해시 탐색 알고리즘 (Hash Search Algorithm) 해시함수를 이용하여 계산된 해시값을 인덱스로 사용하는 방법이다. 데이터와 in..