정규화 정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 발생해서 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다. 이상 현상이란 한 개의 값을 가져야 하는 컬럼이 여러 값을 갖거나, 삽입 또는 삭제 시 문제가 발생하는 현상을 말한다. 정규화 과정은 정규화 원칙을 거쳐서 진행되며 정규형(NF, Normal Form)으로 표현한다. 정규화 원칙에는 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형, 제4정규형, 제5정규형 등이 있다. 제1 정규형 ~ 보이스/코드 정규형 까지를 다뤄보자. 제1 정규형 제1 정규형 : 릴레이션의 모든 속성은 하나의 도메인을 갖고 있는 형태 현재 릴레이션은 도메인 값이 여러 개인 속성이 있다. 제1 정..
데이터베이스란 데이터베이스(DB, Database)는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터 모음이다. 이 데이터베이스를 제어 및 관리하는 통합 시스템을 DBMS (Database Management System)라고 하며, DBMS 마다 정의된 쿼리 언어들을 사용하여 데이터베이스를 관리한다. 엔티티 엔티티(Entity)란 사람, 장소, 물건 등 여러 개의 속성을 지닌 명사를 의미한다. 예를 들어 회원이란 엔티티를 보면 회원 (이름, 아이디, 주소, 전화번호) 등이 있으며 서비스에 맞게 속성을 지정한다. 약한 엔티티와 강한 엔티티 엔티티는 약한 엔티티와 강한 에티티로 나뉜다. 예를 들어 방과 건물을 보면, 방은 항상 건물에 종속적이며 건물은 독립적으로 존재한다. 이때 종속적인 방은 약..
CPU 스케줄링 CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야하는 일을 쓰레드 단위로 CPU에 할당하고, CPU 소유권을 결정한다. CPU 스케줄러는 선점형 방식과 비선점형 방식으로 나눈다. 이 알고리즘은 CPU는 최대한 많이 사용하면서, 대기 중인 프로세스는 적게 만드는 것을 목표로 한다. 선점형 방식(preemptive) 선점형 방식은 운영체제가 쓰고있는 방식으로, 실행중인 프로세스를 강제로 중단시키고 CPU 소유권을 할당하는 방식을 의미한다. 라운드로빈, SRF, 다단계 큐 등이 있다. RoundRobin(RR) 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고, 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 들어가는 알고리즘이다. 따라서 x만큼 할당 시간..
운영체제 운영체제란 하드웨어나 소프트웨어 등 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 효과적으로 사용할 수 있는 환경을 제공하는 소프트웨어를 의미한다. 운영체제 역할 CPU 스케줄링과 프로세스 관리 프로세스에 CPU 소유권 할당, 프로세스 생성 및 삭제, 자원 할당 및 반환 관리 메모리 관리 한정된 메모리를 어떤 프로세스에 얼만큼 할당할지 관리 디스크 파일 관리 디스크 파일을 어떻게 보관할 지 관리 I/O 디바이스 관리 키보드, 마우스 등 하드웨어 기기 간 데이터 통신을 주고 받는 것을 관리 운영체제 구조 운영체제는 다음과 같은 구조로 이루어져 있다. GUI가 없고 CUI만 있는 운영체제도 존재한다. 커널 커널이란 운영체제의 핵심 부분으로, 입출력을 관리하며 시스템콜을 처리하고 변..
Paging 페이징이란 프로세스가 할당받은 메모리 공간을 동일한 페이지 단위로 나누어 연속되지 않는 서로 다른 위치에 저장하는 물리적 메모리 관리 기법을 의미한다. 페이징 기법에서는 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 페이지 테이블을 갖는다. 내부 단편화 문제가 발생할 가능성이 있으며, 외부 단편화 문제는 발생하지 않는다. 페이징 메모리 단편화 문제 (Memory Fragmentation) 메모리 단편화 문제란 물리적 메모리 공간이 나눠져서 메모리가 충분히 존재함에도 할당이 불가능한 상태를 말한다. 페이징 기법은 논리적 주소와 물리적 주소가 같은 크기의 페이지로 나누기 때문에 외부 단편화의 문제는 없지만, 빈 공간이 남을 수 있어서 내부 단편화의 문제 가능성이 있다. Segmen..
프로세스 프로세스란 실행파일로 존재하는 프로그램을 메모리에 적재하여 CPU를 할당받아 실행되는 것을 의미한다. 즉, 프로그램이 프로세스가 아니라, 프로그램이 메모리에 적재되었을 때가 프로세스이다. 작업관리자에서 보는 PID가 바로 프로세스 종류들이다. 메모리 적재 이유 메모리에 적재한다는 것은 디스크(하드디스크, SSD)에서 메모리(RAM)으로 옮겨 적재하는 것이다. 적재하는 이유는 CPU가 직접 접근할 수 있는 기억장치는 메모리이기 때문에 적재를 통해 CPU가 PC register를 통해 연산을 할 수 있기 때문이다. 메모리 공간 프로세스에 할당되는 메모리 공간은 Code, Data, Stack, Heap 4개의 영역으로 이루어져 있다. Stack : Compile 시점에 메모리 영역의 크기가 결정된다..
체크 예외와 인터페이스 서비스 계층에서 처리할 수 없는 예외의 의존을 제거해서 서비스 계층을 순수하게 유지할 수 있다. 먼저, 인터페이스를 도입해서 구현체를 쉽게 변경할 수 있도록 만들어보자. 인터페이스 도입 그림 이렇게 인터페이스를 도입하면 서비스는 인터페이스에만 의존하면 된다. 이 때 체크 예외를 사용하는 경우 인터페이스에서도 예외처리를 해결해야한다. 체크 예외 코드에 인터페이스 도입 시 문제점 public interface MemberRepositoryEx { Member save(Member member) throws SQLException; Member findById(String memberId) throws SQLException; void update(String memberId, int ..
자바 예외 이해 예외 계층 스프링이 제공하는 예외 추상화를 이해하기 위해선 자바 기본 예외에 대한 이해가 필요하다. 실무에 필요한 체크 예외와 언체크 예외에 대해 알아보자. Throwable 은 최상위 예외로 하위에 Exception 과 Error 가 있다. Error 는 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch로 잡으면 그 하위 예외까지 잡기 때문에 애플리케이션 로직은 최상위인 Exception 까지만 잡는 것이 올바르다. 참고로 Error 도 언체크 예외이다. Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception..