본문 바로가기

⚡️CS자문자답!⚡️

[1주에1번자문자답] 병행 제어, 쿠키+세션, 쓰레드에 대한 질문

✋🏻 관계형 데이터베이스란?

키와 값을 관계로 묶어 테이블 형태로 저장하는 데이터베이스입니다.
데이터 항목은 각 항에 저장되며 속성은 열에 표현됩니다.

 

관계형 데이터베이스에서 "관계"란 각 테이블의 행과 행이 연결되는 관계를 맺을 수 있기 때문입니다.
이러한 관계를 통해 한 테이블에 중복 값들에 의해 발생되는 "이상현상"(삽입 갱신, 삭제 이상)을 없앨 수 있습니다.

✋🏻 관계형 데이터베이스의 장점은 무엇이 있나요?

데이터의 정렬, 탐색, 분류가 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