본문 바로가기

⚡️CS자문자답!⚡️

[1주에 1번 자문자답] 정규화, JVM, PCB, WAS 관련 질문

✋🏻 데이터베이스를 정규화 하는 이유는 무엇인가요?

데이터베이스의 잘못된 설계로 발생할 수 있는 "데이터 중복""이상 현상"을 해결하기 위해 정규화를 수행합니다.

이상현상에 종류에는 삽입 이상, 갱신 이상, 삭제 이상이 있습니다.

✋🏻 데이터베이스 이상 현상에 대해 설명해주세요.

삽입 이상은 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 현상입니다.

갱신 이상은 중복되는 데이터 중 일부만 수정했을 때 발생하는 데이터 불일치 현상입니다.

삭제 이상은 어떤 데이터를 삭제하려면 원하지 않는 데이터도 삭제되는 현상입니다.

 

✋🏻 정규화의 장점과 단점

  • 장점
    • 데이터베이스 변경 시 이상현상 제거
    • 데이터 중복 최소화
    • 사용자에게 데이터 모델을 의미있게 제공
  • 단점
    • 테이블 분해로 인해 테이블 간 조인 연산이 많아져, 조회에 대한 응답시간이 느려짐

✋🏻 N정규화에 대해 설명해주세요.

1차 정규화는 각 로우마다 컬럼의 값이 "원자 값"으로 존재하는 것입니다.

-> 한 컬럼이 동시에 존재하게 되면 -> 각 컬럼값을 각각의 튜플로 만들면 원자값으로 만들 수 있다.

 

2차 정규화는 테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것입니다. (기본키가 아닌 속성이 기본키에 완전 함수 종속되는 것)

-> 테이블의 기본키의 일부로 다른 컬럼을 결정할 수 있다면 부분 함수적 종속이 존재하는 것이므로 이러한 컬럼을 다른 테이블로 쪼개서 정규화를 수행합니다.

 

3차 정규화는 기본키가 아닌 속성이 기본키에 이행적 함수 종속이 되지 않는 것입니다.

-> 이행적 함수 종속이 일어나지 않도록 테이블을 분리해줍니다.

 

✋🏻 JVM,JRE,JDK

JDK는 자바 개발 키트로 자바 실행 환경(JRE)와 컴파일러, 디버거 등의 개발도구를 말합니다. (JDK에 JRE가 포함됨)

JRE는 자바 구동 환경을 뜻합니다. (실행만 필요할 때 JRE만 있으면 된다.)

 

JVM은 자바 가상 머신으로 운영체제에 독립적으로 동작합니다.

JVM이 OS로부터 프로그램에 필요한 자원을 할당받고 바이트 코드를 클래스로더가 읽어들이고 자바 API와 함께 실행합니다.

- JAVA와 OS사이의 중개자 역할 + Garbage Collection을 통한 메모리 관리

 

Interpreter

Execution Engine이 바이트 코드를 명령어 단위로 읽어서 수행한다. 한 줄씩 수행하기 때문에 느리다는 단점이 있다.

JIT

인터프리터 방식으로 프로그램을 수행하다가 일정한 기준을 넘어가면 바이트 코드 전체를 컴파일하여 네이티브 코드로 변환시킨다. 이 후 인터프리터 방식을 사용하지 않고 네이티브 코드를 바로 실행한다. 

JIT를 사용하는 JVM은 해당 메서드가 얼마나 자주 사용되는지 체크하고 일정기준을 넘어서면 컴파일을 수행하게 된다.

 

✋🏻 PCB란 무엇인가요?

프로세스 제어 블록(PCB)는 프로세서의 정보를 담고있는 커널의 자료구조 입니다. (프로세스 생성 시마다 고유의 PCB 생성)

프로세스는 작업을 처리하다가 상태가 전이되면 현재까지의 수행 정보를 PCB에 저장하고 CPU를 반환하고 다시 CPU를 점유하게 될 때 PCB를 참조해 진행 중이던 작업을 이어갈 수 있습니다.

 

PCB 정보

  • PID
  • 상태 : 준비 / 대기 / 실행 등의 상태
  • 포인터 : 다음 실행될 프로세스 포인터
  • Register save area : 레지스터 관련 정보 (현재 작업 상태와 스택 등)
  • Priority : 스케줄링 및 프로세스 우선순위
  • 메모리 할당 자원 정보
  • Account : CPU 사용시간
  • 입출력 상태 정보

✋🏻 웹서버와 WAS의 차이는 무엇인가요?

웹서버는 (HTTP 프로토콜 기반) 클라이언트 요청을 서비스하는 기능을 제공합니다.

주로 정적인 컨텐츠를 제공하거나 동적인 컨텐츠 제공을 위한 요청 전달(WAS로)을 수행합니다.

 

WAS는 동적인 컨텐츠 제공을 위해 만들어진 애플리케이션 서버입니다. 예를 들어 DB를 조회하거나 복잡한 비즈니스 로직을 처리하는 것이 있습니다.

WAS는 "웹 컨테이너", "서블릿 컨테이너"라고 불리며 분산 트랜잭션, 보안, 쓰레드 처리 등이 DB와 함께 수행됩니다.

 

웹서버는 정적 컨테츠에 대해 빠르게 응답할 수 있지만 모든 요청을 예상하고 응답을 만들 수 없기 때문에
우리는 WAS를 통해 요청에 맞는 로직을 그때마다 실행해서 DB에서 값을 가져오고 결과를 만들어서 요청에 응답해야합니다.

이를 통해 우리는 서버의 자원을  효율적으로 사용할 수 있습니다.