데이터엔지니어 인턴 면접준비하면서 개념공부한 내용
<cs질문>
https://github.com/gyoogle/tech-interview-for-developer
https://github.com/WeareSoft/tech-interview
https://github.com/ksundong/backend-interview-question
<트랜잭션 기본 문법>
https://ahnty0122.tistory.com/134#recentEntries
<데이터 정규화>
https://dongwooklee96.github.io/post/2021/11/06/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D.html
SQL = Structured Query Language
<sql 기본문법>
(1) select * from abc_list where name=‘영래’
(2) insert into abc_list(a, b) values(‘1’, ‘2’)
(3) update abc_list set car=‘bmw’ where name=‘’영래
(4) delete from abc_list where name=‘’영래
(3)
(4)
데이터베이스 엔지니어가 하는일이란? (DBA) Data Base Administration
:데이터를 효율적으로 활용하기 위해, 데이터베이스 시스템 구축 운영 및 관리
트랜잭션(transaction)
: 하나의 작업을 수행하기 위해 필요한 데이터베이스 연산들을 모아놓은 것으로 데이터베이스의에서 논리적인 작업의 단위 또는 장애가 발생했을 때 데이터를 복구하는 작업 단위
<트랜잭션의 특성 (ACID)>
원자성, 일관성, 격리성, 지속성
원자성(Atomicity)
트랜잭션의 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing 방식
수행 도중 장애가 발생하면?
: 지금까지 실행한 연산들 모두 처리를 취소하고 데이터베이스를 트랜잭션 작업 전 상태로 되돌려야 함
원자성 보장을 위해 장애 발생 시 회복 기능이 필요
일관성(consistency)
트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함
격리성(isolation)
수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없을을 의미
여러 트랜잭션이 동시에 수행되더라도 마치 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있도록 제어하는 기능이 필요
지속성(durability)
트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 영구적이어야 함
지속성의 보장을 위해서는 장애 발생 시 회복 기능이 필요
<트랜잭션의 주요 연산>
commit 연산
: 트랜잭션이 성공적으로 수행되었음을 선언(작업완료)
rollback 연산
: 트랜잭션이 수행을 실패했음을 선언(작업 취소)
commit 연산
트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산
commit 연산이 실행되면 트랜잭션의 수행 결과가 데이터베이스에 반영되고 일관된 상태를 지속적으로 유지하게 됨
rollback 연산
트랜잭션의 수행이 실패했음을 선언하는 연산
rollback 연산이 실행되면 지금까지 트랜잭션이 실행한 연산의 결과가 취소되고 데이터베이스가 트랜잭션 수행 전의 일관된 상태로 되돌아감
<트랜잭션의 상태>
활동(active)상태
트랜잭션이 수행을 시작하여 현재 수행 중인 상태
부분 완료(partially committed)상태
트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태
완료(committed)상태
트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태
트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨
실패(failed)상태
장애가 발생하여 트랜잭션의 수행이 중단된 상태
철회(aborted)상태
트랜잭션의 수행 실패로 rollback 연산을 실행한 상태
지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션이 종료됨
철회 상태로 종료된 트랜잭션은 상황에 따라 다시 수행되거나 폐기됨
<트랜잭션 장애>
<저장 장치의 종류>
<트랜잭션의 수행을 위해 필요한 데이터 이동 연산>
디스크와 메인 메모리 간의 데이터 이동 연산 : input / output
메인 메모리와 프로그램 변수 간의 데이터 이동 연산 : read / write
데이터베이스는 비휘발성 저장 징치인 디스크에 상주
트랜잭션이 데이터베이스의 데이터를 처리하기 위해서는 데이터를 디스크에서 메인 메모리로 가져와 처리한 다음 그 결과를 디스크로 보내는 작업이 필요함
input / output 연산 : 블록(block)단위로 수행됨
디스크 블록 : 디스크에 있는 블록
버퍼 블록 : 메인 메모리에 있는 블록
read / write 연산 : 응용 프로그램에서 트랜잭션의 수행을 지시하면 메인 메모리 버퍼 블록에 있는 데이터를 프로그램의 변수로 가져오고 데이터를 처리한 결과를 저장하고 있는 변수 값을 메인 메모리 버퍼 블록으로 옮기는 작업이 필요
<회복>
장애가 발생했을 때 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것
트랜잭션의 특성 보장 + 데이터베이스를 일관된 상태로 유지하기 위해 필수
회복 관리자가 담당: 장애 발생을 탐지하고, 장애가 탐지되면 데이터베이스 복구 기능 제공
<로그를 이용한 회복 연산>
회복을 위해 데이터베이스 복사본을 만드는 방법 -> 데이터베이스 회복의 핵심원리는 데이터 중복
덤프(dump) : 데이터베이스 전체를 다른 저장 장치에 주기적으로 복사하는 방법
로그(log) :
데이터베이스에서 변경 연산이 실행될 때마다 데이터를 변경하기 이전 값과 변경한 이후의 값을 별도의 파일에 기록하는 방법
레코드 단위로 트랜잭션 수행과 함께 기록됨
<회복 기법>
<즉시 갱신 회복 기법>
트랜잭션 수행 중에 데이터 변경 연산의 결과를 데이터베이스에 즉시 반영
장애 발생에 대비하기 위해 데이터 변경에 대한 내용을 로그 파일에 기록, 데이터 변경 연산이 실행되면 로그 파일에 로그 레코드를 먼저 기록한 다음 데이터베이스에 변경 연산 반영
장애 발생 시점에 따라 redo나 undo 연산 실행해 데이터베이스 복구
<지연 갱신 회복 기법>
트랜잭션 수행 중에 데이터 변경 연산의 결과를 로그에만 기록해두고, 트랜잭션이 부분 완료된 후에 로그에 기록된 내용을 이용해 데이터베이스에 한 번에 반영
undo 연산 필요 없고 redo 연산만 사용
로그 레코드에는 변경 이후 값만 기록하면됨 : <T1, X, new_value> 형식
< 검사 시점 회복 기법>
로그 기록 이용하되, 일정 시간 간격으로 검사 시점(checkpoint)를 만듦
장애 발생 시 가장 최근 검사 시점 이후의 트랜잭션에만 회복 작업 수행
로그 전체를 대상으로 회복 기법을 적용할 때 발생할 수 있는 비효율성의 문제를 해결
<미디어 회복 기법>
디스크에 발생할 수 있는 장애에 대비한 회복 기법
덤프(복사본) 이용 : 전체 데이터베이스의 내용을 주기마다 다른 안전한 저장 장치에 복사
디스크 장애 발생하면, 가장 최근에 복사해둔 덤프를 이용해 장애 발생 이전의 데이터베이스 상태로 복구하고 필요에 따라 redo 연산 수행
데이터 정규화
학습 전에 미리 값이 적당한 범위를 유지하도록 모델에 입력할 데이터를 변환하기도 한다. 이러한 작업을 데이터 정규화라고 한다.
———— 클라우드 컴퓨팅 ——————
개념 : 인터넷 기반의 컴퓨팅을 말한다. 인터넷 상의 가상화된 서버에 프로그램을 두고 필요할때마다 컴퓨터나 스마트폰 등에 불러와 사용하는 서비스입니다.
cloud 말그래도 구름에 싸여 보이지 않는 컴퓨팅자원(CPU, 메모리, 디스크 등)을 원하는 대로 가져다 쓸 수 있다. 구름에 싸여 있다는 것은 그 내부를 보려고 하거나 알지 않아도 얼마든지 내가 원하는 것을 꺼내여 사용 가능하고, 인터넷이 연결된 어느 곳에서든 이것을 보장 받을 수 있다.
장점 :
서비를 직접 구매할 때 고려해야 할 전력, 위치, 확장성을 고민하지 않고
데이터 센터 어딘가에 이미 준비되어 있는 서버를 사용하며,
서버 세팅 등을 신경쓰지 않고 서비스 운영에만 집중 가능
또한 서비스 부하에 따라 실시간 확장성을 지원 받을 수 있으며, 사용한 만큼 비용을 지불하기 때문에 서비스 운영에 있어서 효율성이 훨씬 높아진다고 할 수 있다.
서비스 제공 형태 총 3가지
😄 퍼블릭 클라우드(Public Cloud, 공공 클라우드, 개방형 클라우드)
특정 기업이나 사용자를 위한 서비스가 아닌 인터넷에 접속 가능한 모든 사용자를 위한 클라우드 서비스 모델. 클라우드 서비스 제공자(CSP)가 하드웨어, 소프트웨어를 관리하다. 데이터나 기능, 서버 같은 자원은 각 서비스에서 사용자 별로 권한 권리가 되거나 격리 되어, 서비스 사용자 간에는 전혀 간섭이 없다는 장점이 있다
공공기관 클라우드 = Government Cloud
공공 클라우드 = Public Cloud
😄 프라이빗 클라우드(Private Cloud, 사설 클라우드, 폐쇄 클라우드)
제한된 네트워크 상에서 특정 기업이나 특정 사용자만을 대상으로 하는 클라우드로 서비스의 자원과 데이터는 기업 내부에 저장한다. 또한 기업이 자원의 제어권을 갖고 있다. 따라서 보안성이 매우 뛰어나며, 개별 고객의 상황에 맞게 클라우드 기능을 커스터마이징 할 수 있다는 장점이 있다.
😄 하이브리드 클라우드(Hybrid Cloud)
퍼블릭 클라우드와 프라이빗 클라우드를 병행해 사용하는 방식으로 여겨졌으나, 최근에는 개념이 모호해진 경향이 있어 클라우드(가상서버)와 온프레미스(물리서버)를 결합한 형태를 말하기도 한다.
이럴 경우 퍼블릭 클라우드의 유연성, 경제성, 신속성과 물리 서버의 보안성, 안정성 등을 함께 취할 수 있는 장점이 있다.
최근 클라우드를 도입하려는 움직임이 늘면서, 전체 워크로드를 클라우드(가상서버)로 이전하기 보다 주요 데이터는 온프레미스(물리서버)에 남겨 두고 이벤트 또는 신규 서비스처럼 트래픽을 예측할 수 없는 워크로드는 클라우드로 이용하는 구성이 증가하는 추세입니다.
<서비스 유형>
😄 IaaS(Infrasture as a Service)
‘서비스로서의 인프라’ 를 뜻한다, 사용자가 관리할 수 있는 범위가 가장 넓은 클라우드 컴퓨팅 서비스이다.
인프라 수준의 클라우드 컴퓨팅을 제공해 사용자가 서버 OS부터 미들웨어, 런타임, 그리고 데이터 어플리케이션까지 직접 구성하고 관리할 수 있다.
클라우드 서비스 제공업체(CSP, Cloud Service Provider)는 데이터 센터를 구축해 다수의 물리 서버를 가상화해 제공하며, 네트워크, 스토리지, 전력 등 서버 운영에 필요한 모든 것을 CSP가 책임지고 관리한다.
대표적인 IaaS: AWS - EC2, Google - Compute Engine(GCE), 가비아 - g클라우드
😄 PaaS
‘서비스로서의 플랫폼’ 뜻한다, PaaS는 IaaS형태의 가상화된 클라우드 위에 사용자가 원하는 서비스를 개발할 수 있도록 개발 환경(Platform)을 미리 구축해, 이를 서비스 형태로 제공하는 것
PaaS는 운영체제, 미들웨어, 런타임 등을 미리 구축한 상태로 제공하기 때문에 IaaS보다 관리상의 자유도가 낮다. 하지만 PaaS 사용자는 서비스 외적인 부분에 신경 쓸 필요가 없고, 오로지 애플리케이션 개발과 비즈니스에만 집중할 수 있으며, IaaS와 마찬가지로 별도의 인프라를 유지하고 운영하는 데 별도의 인력이 소요되지 않기에 하드웨어 및 소프트웨어 인프라 관리에 드는 비용을 절약할 수 있다.
대표적인 Paas : 세일즈포스닷컴의 Heroku나 Redhat(레드햇)의 OpenShift 등
😄 SaaS
’서비스로서의 소프트웨어’ 를 의미한다, 클라우드 서비스 형태 중 가장 완성된 형태의 클라우드 서비스이다.
클라우드 인프라 위에 소프트웨어를 탑재해 제공하는 형태로 IT인프라 자원뿐만 아니라 소프트웨어ㅏ 및 업데이트, 버그 개선 등의 서비스를 업체가 도맡아 제공한다.
별도의 비용을 들여 소프트웨어 라이센스를 구매할 필요 없이 월간 / 연간 구독 형태의 사용료를 지불하고 제공 업체의 소프트웨어를 이용하게 된다. SaaS를 이용할 경우 사용자는 인프라 구축, 개발 환경 세팅 및 소프트웨어 개발에 소요되는 비용을 절약할 수 있기 때문에 자체적으로 소프트웨어를 개발하는 것 대비 초기 비용을 대폭 줄일 수 있다.
대표적인 SaaS: ‘슬랙(Slack)’, ‘마이크로소프트365(Microsoft 356)’, ‘드롭박스(Dropbox)’ 그리고 ‘세일즈포스(Salesforce)’ 등
클라우드 존재하기 전, 웹 서비스를 운영하는 방식인 웹호스팅, 서버호스팅
<클라우드 컴퓨팅 요약>
<데이터 정규화>
데이터베이스 정규화란 데이터베이스의 설계를 재구성하는 테크닉입니다. 정규화를 통해 불필요한 데이터(redumdancy)를 없앨 수 있고, 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지 할 수 있다.
불필요한 데이터를 제거한다, 테이터 저장을 ‘논리적으로’한다
-1에서 ~ 1사이에 있어야 모델의 정확도가 높아진다
학습 전에 미리 값이 적당한 범위를 유지하도록 모델에 입력할 데이터를 변환하기도 한다 -> 데이터 정규화
정규화(normalization)
입력 변수 X를 최소값은 0, 최대값은 1이 되게 1차 함수를 통해서 변환한다.
표준화(standardization)
입력 변수 X를 평균이 0, 분산이 1인 정규 분포가 되도록 1차 함수를 통해서 변환한다.