본문 바로가기

전체 글

(77)
관계형 데이터베이스의 키(Key) 관계형 데이터베이스에서 테이블은 행(row)과 열(column)로 이루어져 있고, 각 행을 튜플(Tuple) 또는 레코드(Recode), 열을 속성(Attribute) 또는 필드(Field)라고 부른다. 이 글에서는 행과 열을 튜플과 속성으로 말하도록 하겠다. 키(Key)는 튜플들을 식별하여 구분하는 기준이 될 수 있는 속성을 말한다. 키의 종류에는 다섯 가지가 있다. 후보키(Candidate Key) 기본 키가 될 수 있는 키들을 후보 키라고 한다. 기본적으로 키이기 때문에 후보키를 통해 테이블에서 유일한 튜플들을 식별할 수 있다. 즉, 중복되는 값이 없어야한다(유일성). 후보키는 꼭 한개의 속성 뿐만 아니라 두개 이상의 속성을 가질 수 있다. 그 속성들을 통해 유일한 튜플들을 식별할 수 있으면 후보키..
CPU 스케줄링 CPU 스케줄링 CPU스케줄링은 프로세서가 유휴시간없이 계속 프로세스에 할당되어 실행될 수 있도록 하기 위한 작업이다. 코어가 하나인 시스템에서는 한순간에 오직 하나의 프로세스만이 실행될 수 있다. 다중 프로그래밍의 목적은 cpu 이용률을 최대화하기 위해 항상 실행 중인 프로세스를 가지게 하는 데 있다. 하나의 프로세스는, 어떤 I/O요청이 완료되기를 기다려야만 할 때까지 실행된다. 이렇게 되면 단순한 컴퓨터 시스템에서 cpu는 그저 놀고 있게 된다. 이러한 대기시간을 없애기 위해서 다중 프로그래밍에서는 이러한 시간을 생산적으로 활용하려고 시도한다. 어떤 프로세스가 대기해야 할 경우 운영체제는 CPU를 그 프로세스에서 회수해 다른 프로세스에 할당한다. 이러한 패턴은 반복된다. 이러한 종류의 스케줄링은 운..
스레드와 병행성 스레드란? 스레드는 CPU 이용의 기본 단위이다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 구성된다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다. 전토억인 프로세스는 하나의 제어 스레드를 가지고 있다. 만일 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나 이상의 작업을 수행할 수 있다. 멀티 스레드 프로그래밍의 이점을 다음 4가지 큰 부류로 나눌 수 있다. 응답성: 사용자가 오래걸리는 작업을 시작하는 단추를 클릭했을 떄 비동기 스레드에서 실행된다면 여전히 다른 작업들에 대해서 사용자에게 응답할 수 있다. 자원 공유: 프로세스는 공유 메모리와 메시지 전달 기법을 통해서만 자..
프로세스란? 프로세스란?​ 실행 중인 프로그램으로, 메인 메모리에 적재되어 프로세서에 의해 실행되고 관리되는 상태를 말한다. 하나의 프로세스는 네가지 섹션으로 구분된다. 텍스트 섹션: 실행 코드 데이터 섹션: 전역 변수 힙 섹션: 프로그램 실행 중에 동적으로 할당되는 메모리 스택 섹션: 함수를 호출할 떄 임시 데이터 저장소(함수 매개변수, 복귀 주소 및 지역변수) 함수가 호출될 때마다 함수의 매개변수, 지역변수 및 복귀 주소를 포함하는 활성화 레코드가 스택에 차례로 푸시된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고도 한다. 프로그램은 디스크에 저장된 파일처럼 수동적인 존재, 프로세스는 다음에 실행할 명령어 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 ..
[TIL 2022-3-7] JPQL, BOJ10830 행렬 제곱 JPA JPQL JPA는 SQL을 추상화한 객체지향 쿼리언어 JPQL을 제공한다. JPQL을 통해 검색 조건을 포함한 SQL을 테이블이아닌 객체를 대상으로 검색할 수 있다. 기본적으로 select, from, where, group by, having, join을 지원하기 때문에 거의 유사한 형태로 쿼리작성이 가능하다.(count, sum, av, max, min 등 사용 가능) JPQL은 SQL을 추상화해서 사용하는 것 이므로 특정 데이터베이스에 의존하지 않는다. 즉 데이터베이스가 바뀌더라도 JPQL은 수정할 필요 없다. 결국 JPQL은 하이버네이트에 의해 설정된 SQL언어에 맞게 SQL로 변환되어 실행된다. 기본문법 JPQL 쿼리를 사용해서 나이가 19세 이상인 멤버리스트를 데이터베이스에서 가져와 이..
재귀에서 함수 호출 비용 https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 이 문제를 풀면서 천억단위의 행렬 제곱을 실행하는 알고리즘을 짜야 했다. 처음에 DP를 생각해서 작성하였는데 시간초과가 떴다. 그 후 다른 풀이가 생각나지 않아 결국 검색하여 A^5 = (A^2)^2 * A 와 같이 행렬의 제곱을 부분적으로 나눠서 계산하는 분할정복 알고리즘으로 해결하였다. 그런데 나중에 테스트 해보니 기존의 DP를 활용한 알고리즘과 분할정복을 사용한 알고리즘끼리 10억 단위의 테스트에도 배열 ..
[TIL 2022-3-6] 평범한 배낭 다이나믹 프로그래밍 - 0/1 Knapsack 문제 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 다이나믹 프로그래밍(dp)으로 해결해야하는 문제였다. 실버 정도의 디비 문제는 몇개 풀어봤는데 이문제는 도저히 풀이방법이 떠오르지 않아서 검색을 해보았다. 찾아보니 0/1 Knapsack 이라는 유형의 문제이고 dp를 통해 해결하는 문제라는데 아직 dp 문제를 한두문제 풀어본 나에..
[TIL 2022-2-28]스프링 부트와 AWS로 혼자 구현하는 웹 서비스 http://www.yes24.com/Product/Goods/83849117 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24 가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링 www.yes24.com 그동안 스프링과 JPA를 공부하면서 빨리 하나의 어플리케이션을 개발해 보고싶다는 갈증이 있었던 상황에서 이 책을 만나고 바로 시작하지 않을 수가 없었다. 운좋게 학교 도서관에 해당 책이 있어서 빌리자 마자 어제 오늘 계속 파면서 공부하고 있다. 어플리케이션 부터 AWS에 배포하는 것 까지 가장 한 흐름에 가는게 중요한 것 같아서 모르는 부분..