✋🏻 관계형 데이터베이스란?
키와 값을 관계로 묶어 테이블 형태로 저장하는 데이터베이스입니다.
데이터 항목은 각 항에 저장되며 속성은 열에 표현됩니다.
관계형 데이터베이스에서 "관계"란 각 테이블의 행과 행이 연결되는 관계를 맺을 수 있기 때문입니다.
이러한 관계를 통해 한 테이블에 중복 값들에 의해 발생되는 "이상현상"(삽입 갱신, 삭제 이상)을 없앨 수 있습니다.
✋🏻 관계형 데이터베이스의 장점은 무엇이 있나요?
데이터의 정렬, 탐색, 분류가 NoSql계열에 비해 빠릅니다.
또한 데이터의 무결성과 일관성을 보장합니다.
정규화를 통해 중복을 줄일 수 있습니다.
✋🏻 병행 제어를 사용하는 이유는 무엇인가요?
동시에 여러 개의 트랜잭션이 병행 수행할 때 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것입니다.
동시성 제어를 통해 데이터의 일관성을 유지하면서 데이터 공유를 최대로 활용할 수 있고 응답 시간 감소와 단위 시간당 트랜잭션 처리 건수를 최대로 가져갈 수 있습니다.
✋🏻 병행 제어에는 무슨 방법이 있나요?
- 잠금(Locking)
- ->하나의 트랜잭션이 사용하는 data를 다른 트랜잭션이 접근하지 못하게 락을 설정하고 사용하는 것입니다.
- 확장 - 차단 - 수축
- 트랜잭션 lock 획득 → 데이터 연산 수행 → 트랜잭션 lock 반납
- 문제점 : 직렬성을 보장하지만 교착상태를 예방할 수 없다.
- 락의 종류
- 공유락 : 사용중인 데이터를 다른 트랜잭션이 읽기 허용, 쓰기 금지
- 베타락 : 사용중인 데이터를 다른 트랜잭션이 읽기, 쓰기 모두 금지
- 락의 종류
- 확장 - 차단 - 수축
- 타임 스탬프 방식
- 각 트랜잭션이 데이터에 접근할 시간을 미리 지정하고 그 순서에 따라 데이터에 접근하여 수행하도록 합니다.
- 교착 상태가 발생하지 않습니다.
✋🏻 트랜잭션의 정의와 사용하는 이유는 무엇인가요?
데이터베이스 상태를 변화시키기 위해서 한번에 수행되어야만 하는 작업의 단위를 말합니다.
ACID를 모두 보장하면서 트랜잭션이 안전하게 수행되어야 합니다.
- 원자성(Atomicity) : 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.]
- 커밋 or 롤백
- 일관성(Consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
- 트랜잭션 수행 전 후에 데이터 모델의 모든 제약 조건(기본 키, 외래 키, 도메인 제약조건)을 만족하는 것
- 조건 변경 시 "트리거"를 통해 일관성을 유지하는 방법이 있다.
- 독립성(Isolation) : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
- 병행 처리로 인한 독립성 파괴 --> 병행 제어로 극복!
- 영속성(Durability) : 트랜잭션이 성공적으로 완료 되었으면 결과는 영구적으로 반영되어야 한다.
✋🏻 DDL, DML, DCL의 정의에 대해 말해주세요
- DDL : 스키마, 도메인, 테이블, 뷰, 인덱스, 제약 조건 등의 데이터 전체 구조를 정의하거나 제거할 때 사용
- ex) create, alter, drop, truncate
- DML : 데이터베이스의 레코드를 조회, 수정, 삭제
- ex) select, insert, update, delete
- DCL : 데이터베이스에 접근하거나 객체에 권한을 주는 등
- ex) grant, revoke, commit, rollback
✋🏻 프로세스와 쓰레드의 차이는 무엇이 있나요?
프로세스란?
- 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스
- 운영체제로 부터 시스템 자원을 할당받는 작업의 단위
- 할당받는 자원 : CPU 타임, [Code, Data, Stack, Heap]으로 구성된 메모리 영역
- 기본적으로 프로세스당 최소 1개의 쓰레드를 가짐
각 프로세스는 서로 독립적인 주소 공간에서 실행되므로 다른 프로세스의 변수 또는 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스에 접근하기 위해선 IPC(Inter-Process-Communication)을 사용해야만 한다.
쓰레드란?
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 특징
- 쓰레드는 프로세스 내의 Code, Data, Heap영역은 공유하고 Stack영역만 따로 할당받아 사용합니다.
- 쓰레드는 프로세스 내에서 여러 흐름이 실행되는 것이므로 프로세스 내 자원을 서로 공유하며 실행할 수 있습니다.
- 각각의 쓰레드는 별도의 레지스터와 스택을 가집니다.
✋🏻 힙과 스택의 차이는 무엇인가요?
- 힙 : 사용자의 동적 할당. 런타임에 크기 결정
- 스택 : 지역 변수, 매개 변수. 컴파일 타임에 크기 결정
스택을 스레드마다 독립적으로 할당하여 독립적인 실행의 흐름을 가질 수 있습니다.
✋🏻 PCB(Process Control Block)란?
- PCB 는 특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조입니다.
- 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU 를 반환해야 하는데, 이때 작업의 진행 상황을 모두 PCB 에 저장하게 됩니다. 그리고 다시 CPU 를 할당받게 되면 PCB 에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행합니다.
✋🏻 자바에서 프로세스가 존재할까요?
- 존재하지 않습니다
- 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록
- 스레드 개념만 존재하며 JVM이 멀티스래딩만 지원
- JVM이 운영체제 역할을 합니다.
- 즉 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고 스레드 코드가 생명을 가지고 실행을 하도록 JVM에 요청
✋🏻 잠금 기법의 단점과 그에 대한 해결책은 무엇이 있을까요?
- 단점 : 하나의 프로세스가 해당 자원에 대한 처리가 끝날 때까지 다른 프로세스가 기다려야 하며 데드락이 발생.
- 해결책 : 공유되는 자원을 최대한 줄임.
- ex) 전역변수 최소화
✋🏻 쿠키와 세션에 대해 설명해주세요
HTTP 통신의 특징인 "비연결성"과 "무상태성"의 단점을 보완하기 위해서 사용합니다.
*특징*
세션은 서버의 자원을 사용하며 쿠키는 서버의 자원을 사용하지 않습니다. (자원)
보안은 세션이 뛰어나고 속도는 쿠기가 빠릅니다. (속도 & 보안)
쿠키는 브라우저 종료와 상관없이 유효기간 까지 유지되지만 세션은 브라우저 종료 시 삭제됩니다. (종료시점)
쿠키란?
- 쿠키는 브라우저에 저장되는 키:값이 들어있는 작은 데이터 파일
- 쿠키는 클라이언트의 상태 정보를 로컬(브라우저)에 저장했다가 참조
ex) 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?", 쇼핑몰의 장바구니 기능, 자동로그인 등..
세션이란?
- 사용자 정보 파일을 서버측에서 관리
- 클라이언트가 요청을 보내면 해당 서버가 클라이언트에 유일한 ID를 부여하는데 이것이 세션 ID임
ex) 로그인 같이 보안상 중요한 작업을 수행할 때 사용
✋🏻 쿠키 대신 세션을 사용할 때의 단점은 무엇일까요?
세션을 많이 사용하면 보안성이 좋아지지만 서버의 메모리를 많이 사용해 서버의 성능이 하락할 수 있으므로 쿠키와 세션을 적절하게 사용해야 합니다.
✋🏻 쿠키의 종류에 대해 설명해주세요
- Session Cookie : 보통 만료시간(Expire date) 설정하고 메모리에만 저장되며 브라우저 종료시 쿠키를 삭제.
- Persistent Cookie : 장기간 유지되는 쿠키(예를 들어 Max-Age 1년), 파일로 저장되어 브라우저 종료와 관계없이 사용.
- Secure Cookie : HTTPS에서만 사용, 쿠키 정보가 암호화 되어 전송.
- Third-Party Cookie : 방문한 도메인과 다른 도메인의 쿠키 보통 광고 베너 등을 관리할 때 유입 경로를 추적하기 위해 사용.
쿠키는 브라우저에 저장되므로 보안성이 상대적으로 약합니다. 그래서 중요한 정보는 Secure Cookie를 사용합니다.
✋🏻 캐시란?
이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것을 말합니다.
같은 자원을 로드(load)해야할 때, 해당 자원을 다시 불러오지 않고 캐시되어 있는 자원을 사용합니다.
캐시에 있는 것을 재사용하기 때문에 경우에 따라 변경된 자원을 참조할 수 없는 경우가 생깁니다. (프록시 서버와 오리진 서버..)
✋🏻 JWT란 무엇인가요?
- JSON Web Token
- Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
- Header, Payload, Signature로 구성
세션은 사용자의 수 만큼 서버 메모리를 차지하기 때문에, 최근에는 세션의 문제를 보완한 토큰 기반의 인증방식을 사용하는 추세입니다.
Reference
'⚡️CS자문자답!⚡️' 카테고리의 다른 글
[1주에 1번 자문자답] OSI 7 계층, 시스템 콜, Spring 특징 (0) | 2021.05.03 |
---|---|
[1주에 1번 자문자답] VLDB 기술, 힙, 인터럽트, 추상클래스 인터페이스, 서블릿 (0) | 2021.04.20 |
[1주에 1번 자문자답] 정규화, JVM, PCB, WAS 관련 질문 (0) | 2021.04.15 |
[1주에1번자문자답] 데이터베이스에 대한 자문자답 (0) | 2021.04.04 |
[1주에 1번 자문자답] About.. 객체지향, HTTP, 선택&삽입 정렬 (0) | 2021.04.04 |