전체 글 126

JPA의 엔티티 매핑

JPA에서는 데이터베이스의 테이블과 객체를 annotation으로 연결합니다. 주요 에너테이션 @Entity 에너테이션이 명시된 클래스의 인스턴스를 엔티티로 식별합니다. 일반 자바 객체와 구별하는 에너테이션입니다. 해당 클래스는 @Id가 선언된 식별자 필드가 있어야 합니다. 에너테이션의 name 속성을 지정하지 않으면 JPA는 클래스 이름을 엔티티 이름으로 등록합니다. @Id 엔티티 객체의 식별자 필드를 지정합니다. JPA에서 엔티티 객체를 등록하기 위해서 반드시 식별자 필드가 있어야 합니다. @Table 엔티티 이름과 테이블 이름이 다를 경우, 해당 에너테이션으로 매핑할 테이블을 지정합니다. 속성 name : 매핑할 테이블을 지정합니다. catalog : DB 카탈로그를 지정합니다.(MySQL) sch..

블로킹/논블로킹과 동기/비동기

Blocking/Non-Blocking 함수 호출에서의 관점입니다. 어떤 함수의 호출에서 어떤 행위의 결과를 기다리면 블로킹입니다. 어떤 함수의 호출에서 어떤 행위의 수행여부와 관계없이 결과를 바로 받으면 논블로킹입니다. Synchronous/Asynchronous 동기/비동기는 행위에 대한 관점입니다. 여러 행위가 순차적으로 수행된다면 동기입니다. 여러 행위가 비순차적으로 수행된다면 비동기입니다.

컴퓨터공학 2021.06.20

동시성(Concurrency)과 병렬성(Parallelism)

동시성/병행성(Concurrency) 하나의 코어(CPU)가 여러 스레드를 번갈아가며 작업을 수행하는 것입니다. 한꺼번에 여러 작업을 다룹니다. 아래의 방법을 통해서 교착상태(Deadlock)에 빠지지 않도록 주의해야 합니다. 상호배제, 임계 영역, 동기화 TCB를 바탕으로 Context Switching이 발생합니다. 병렬성(Parallelism) 여러 개의 코어(CPU)가 각각 물리적으로 작업을 수행합니다. 한꺼번에 여러 작업을 처리합니다. PCB를 바탕으로 Context Switching이 발생합니다.

스레드(Thread)와 프로세스(Process)

소개 스레드 프로세스 내부의 흐름 공유자원(code, data, heap)과 개별자원(stack)이 있음 TCB에 상태정보 저장 프로세스 프로그램 각각 독립된 메모리 영역이 있음(code, data, stack, heap) 서로 간 메모리 영역을 침범할 수 없음 프로세스 당 최소 1개의 스레드가 있음 PCB에 상태정보 저장 멀티 프로세싱 CPU가 여러 개가 존재하여 1개 이상의 프로세스를 동시에 처리하는 것입니다.(병행성) 메모리 침범 문제가 OS 차원에서 해결되어 메모리의 독립성이 보장됩니다. 각 프로세스가 메모리 상에 독립적인 영역을 소유하여 작업량이 많을수록 오버헤드가 발생합니다. Context Switching으로 인하여 성능 저하가 발생합니다. 멀티 스레딩 1개의 프로그램에서 여러 스레드가 각각..

퀵 정렬(Quick Sort)

소개 매우 빠른 정렬 알고리즘입니다. 피벗(pivot)을 기준으로 그룹을 나누어 모든 그룹에 요소가 1개일 때 정렬을 마칩니다. 배열의 요소가 n개 있을 때 시간복잡도는 O(n log n) 구현 // 분할 정복 패러다임 public class QuickSort { public void quickSort(int[] arr, int left, int right) { int pl = left; int pr = right; int pivot = arr[(pl + pr) / 2]; do { // 피벗보다 큰 요소를 찾습니다. while (arr[pl] pivot) { pr--; } // 왼쪽과 오른쪽 포인터가 서..

쉘 정렬(Shell Sort)

소개 도널드 쉘(Donald L. Shell)이 고안한 정렬 알고리즘입니다. 삽입 정렬의 장점은 살리고, 단점은 보완한 정렬 알고리즘입니다. 단순 삽입 정렬 장점 : 정렬을 마친 상태에 가까울수록 정렬속도가 높아짐 단점 : 삽입할 위치가 멀수록 이동횟수가 증가함 정렬할 배열의 요소를 그룹으로 나누어 그룹별 삽입정렬(H-정렬)을 수행합니다. 그룹을 합치며 정렬을 반복합니다. 증분값 H는 초깃값이 너무 크면 효과가 없습니다. n(배열의 요솟수)/9 값을 넘지 않도록 합니다. 배열의 요소가 n개 있을 때 시간복잡도는 O(n^1.25) 구현 public class ShellSort { public void shellSort(int[] arr) { // 증분값 h int h; // h의 초기값을 구합니다. for..

RESTful API

소개 REST란 Representational State Transfer의 약자로 2000년에 Roy Fielding의 박사학위 논문에서 최초로 등장했습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로서 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했습니다. 구성 REST API는 아래의 요소로 이뤄져 있습니다. 자원(Resource) : URI 행위(Verb) : HTTP Method 표현(Representations) 특징 Uniform Interface URI로 지정한 자원에 대한 조작 방법을 통일하고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일입니다. Stateless 작업을 위한 상태정보를 저장하고 관리하지 않습니다. 세션/쿠키를 관리하지 않기 때문에 API 서버는 단..

삽입 정렬(Insertion Sort)

소개 선택한 요소를 선택한 위치의 앞쪽에 있을 수 있는 올바른 위치에 삽입합니다. 2번 째 요소부터 선택해서 정렬 작업을 수행합니다. 선택한 요소 앞쪽은 항상 정렬되어 있는 구간입니다. 정렬이 수행되면서 정렬된 구간을 탐색하는 내부 반복문의 반복 횟수는 증가합니다. 배열의 요소가 n개 있을 때 시간복잡도는 O(n^2) 구현 public class InsertionSort { static void insertionSort(int[] arr) { // 정렬은 배열의 2번째 요소부터 시작합니다. for (int i = 1; i < arr.length; i++) { int j; int temp = arr[i]; // 정렬된 구간을 뒤에서부터 앞으로 순회한다. // 처음 temp와 arr[j]는 같은 대상이다. ..

SQL DML

SELECT 기본 검색 SELECT [ALL || DISTINCT] 속성_리스트 FROM 테이블_리스트; SELECT 뒤에 속성에 산술연산을 수행할 수 있습니다. (+, -, *, /) 조건 검색 SELECT [ALL || DISTINCT] 속성_리스트 FROM 테이블_리스트 WHERE 속성 비교연산자 값; 비교 연산자 (=, , , =) 논리 연산자 (AND, OR, NOT) LIKE 검색 SELECT [ALL || DISTINCT] 속성_리스트 FROM 테이블_리스트 WHERE 속성 LIKE 부분값; _ : 1개의 문자 % : 0개 이상의 문자 NULL 검색 SELECT [ALL || DISTINCT] 속성_리스트 FROM 테이블_리스트 WHERE 속성 IS [NOT] NULL; 정렬 검색 SELEC..