기타 IT

면접 대비 IT 상식 (2021.06.21.)

차가운오미자 2021. 6. 16. 16:57

데이터베이스

- 데이터를 여러 사용자가 공유하여 사용하는 데 용이하게 하기 위해 데이터를 체계화해서 통합, 관리하는 시스템이다.

- 데이터를 구조화하여, 검색, 갱신의 효율을 증가시킨다. 

- 특징:

  • 실시간 접근성
  • 지속적 변화
  • 동시 공유
  • 내용 참조
  • 데이터의 논리적 독립성

- 장단점:

  장점: 

  1. 데이터의 중복을 최소화한다. -> 저장 공간의 최소화
  2. 데이터를 공유할 수 있다
  3. 일관성, 무결성, 보안성을 유지한다. 
  4. 데이터 접근에 용이하다.

  단점

  1. 데이터베이스를 관리하고 구축하는 전문가가 필요하다
  2. 비용 부담
  3. 데이터의 백업, 복구가 어렵다
  4. 엑세스가 집중될 경우 과부하가 발생한다. 

- 종류:

  • 관계형 데이터베이스: 테이블 간의 관계로 데이터 모델을 정의한다. 이를 위해 ER diagram(Entity-Relation diagram)을 정의한다. 
  • 객체 지향 데이터베이스: 정보를 객체의 형태로 표현한다.

참고)

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

데이터베이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. SQL 데이터베이스 쿼리의 예. 데이터베이스(영어: database, DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다.[1] 작성된

ko.wikipedia.org

 

서버

1. 서버란?

- 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템

- 프린터 제어, 파일 관리, 네트워크 감시/제어, 다른 네트워크와의 연결, 데이터 등 소프트웨어 자원이나 하드웨어 자원을 공유할 수 있도록 도와준다. 

- 클라이언트 수의 많아지면, 각 기능별로 서버를 두어서 역할을 세분화하게 된다. (ex. 파일 서버, 통신 서버 등)

- 잘 알려진 서버 운영체제로는 FreeBSD, Linux, Solaris 등이 있다. 

 

2. 서버 성능의 판단

  • Throughput:  시간 당 처리량, 기준 시간 내에 처리할 수 있는 요청 수
  • Latency: 서버가 클라이언트로부터 요청을 받아서 응답하기까지 걸리는 시간 

참고) https://hyuntaeknote.tistory.com/10

 

운영체제

하드웨어, 소프트웨어 사이에서 이를 관리하는 프로그램. RAM과 스토리지 사이에 존재한다. 

운영체제는 펌웨어와 드라이버를 이용해 CPU 및 주변장치를 관리하고, 응용 프로그램이 실행될 수 있는 환경을 구축해준다. 

운영체제는 사용자 영역과 커널 열역으로 나뉜다.

커널

응용 프로그램들이 안전하고 효율적으로 작동하도록 하기 위해 컴퓨터 자원을 관리하는 운영체제의 핵심적인 부분이다. 

CPU, 메모리, IO 장치 등을 초기화, 관리한다.

 

파일시스템

파일 시스템의 두 가지 의미:

1) 파일과 물리디스크 블록 간의 mapping 제공

2) 디스크에 들어가 있는 파일 전체 (파일시스템에 따라 파일의 배치, 구성이 달라질 수 있다.)

NilFS

nilfs는 write시에 디스크의 다양한 곳에 접근해서 write를 해야한다는 단점을 보완하고자 한다. 따라서 nilfs에서는 write가 순차적으로 발생한다. 따라서 수정시에도 기존 데이터를 찾아 지우고 다시 작성하는 것이 아니라, 아예 그냥 다음 빈 공간에 새로운 데이터를 작성하고, 해당 데이터는 여기에 있다고 마크만 바꿔준다. 

이런 식으로 작동하기 때문에, nilfs는 유효하지 않은 데이터를 지울 garbage collection이 필요하다. 

데이터에 접근 시에, inode와 데이터가 연속적으로 저장되어 있어서, 흩뿌려진 inode에 접근하기 위해서 이들의 위치 정보를 따로 저장해두어야 한다. 이렇게 inode의 정보를 저장한 것이 inode map이다. 

EXT4

파일 저장 시, 파일 생성 시간, 수정 시간, 접근 권한 등의 메타데이터를 inode에 저장한다. inode는 실제 해당 파일의 데이터 블록의 위치 정보를 갖고 있다. 이 inode들은 계층적으로 관리될 수도 있다. (inode를 타고 inode에 접근하고, 또 이걸 타고 다른 inode 에 접근하는 식으로) dentry는 directory를 표현하기 위한 자료구조이다. dentry는 file명과 inode number을 담고 있다. 파일 접근은 우선 dentry에 접근 하고, inode에 접근하고 data block에 접근하는 식으로 작동하게 된다. 

또, inode는 디스크에 흩어져서 저장된다. (데이터 블록들과 함께) 그래서 ext4는 inode의 위치를 담고 있는 superblock이라는 것을 갖고 있다. superblock에는 파일 시스템을 구분하는 번호와 파일 시스템에 대한 정보를 갖고 있다. 즉, read 시에 파일에 접근하기 위해서는 supernode ->(dentry) -> inode -> datablock의 순서대로 접근하게 되는 것이다. 

 

펌웨어

- 주변장치들이 각자의 기능대로 작동하기 위해 저장되어 있는 최소한의 기본적 프로그램. 

- ROM에 기록되는 프로그램이다. 보통 장치가 공장에서 제조될 때 저장된다.

- 특별한 프로그램이나 설비를 이용하지 않는 이상 사용자가 쉽게 변경하거나 삭제할 수 없다.

- 전원이 꺼져도 삭제되지 않는다.

미들웨어 

컴퓨터 개발 회사가 사용자의 요구대로 시스템을 만들어서 제공하는 프로그램이다. 운영체제와 app의 중간에서 조정, 중개하는 역할을 한다. 

 

객체 지향 프로그래밍

- 데이터를 추상화해, 현실의 사물과 비슷한 객체를 만들고, 이들 간의 상호작용으로 코드를 구성하는 방식

- 현실세계를 묘사해서 프로그래밍 한다고 생각한다.

- 예를 들어, 자동차가 있다고 생각하자. 내 자동차도 있고 그의 자동차도 있다. 이들은 모두 주인, 회사 등 각각의 특성을 갖고 있고, 운행한다는 행위를 한다. 엔진, 바퀴 등의 공통적인 속성들이 있으며, 운행이라는 공통적인 행위를 한다. 이렇게 너의 자동차, 나의 자동차, 그의 자동차를 공통적인 특성을 추출해 추상화해서 '자동차' 라는 것을 정의할 수 있다. 이렇게 정의한 개념을 하나의 'class'라고 볼 수 있는 것이다.

 비슷하게, 자동차의 주인, 자동차 manufacturer 등의 속성이 변수가 될 수 있고, 자동차의 운행행위(drive)가 자동차가 하는 하나의 behavior, 혹은 method로 정의될 수 있는 것이다. 

 

- 장점: 

  • 코드 재사용 易
  • 유지보수 易

- 단점:

  • 처리 속도 慢 
  • 용량 多 차지

클래스

- 사물이 지니는 특성(attribute)과 행위를 변수와 함수로 정의함 

- cf) 인터페이스

 

인터페이스

- 일반 변수를 가지지 않는다.

- 모든 메소드가 추상 메소드이다. 

- 인터페이스를 상속한 클래스는 반드시 인터페이스에 선언된 메소드들을 구현해야 한다.

- extends 를 통해 상속한다. 

- 이를 상속하는 클래스들이 반드시 해당 인터페이스의 구조를 갖게 하기 위한 것이다.

- 참고) https://mygumi.tistory.com/257

객체

- 클래스를 실제 객체화한 것. 즉, 클래스의 변수와 함수를 가진 하나의 덩어리를 메모리에 올렸다고 생각

- 실제로 어떤 동작을 하고, 어떤 데이터를 담기 위해서는 일반적으로 객체를 선언해야 한다.

 

상속

- 부모 클래스의 특성과 행위를 물려받음. (implements, extends)

- 다형성의 특징을 가진다. 

  • override를 통해 method 일부분을 변경하여 다르게 정의할 수 있음. (다형성)
  • overload를 통해 같은 이름의 method이지만 다른 형식의 different parameters 로 여러개를 정의할 수 있음. 

- 다중 상속을 위해서는 클래스가 아닌 인터페이스를 사용

 

참고)

https://jeong-pro.tistory.com/95

 

객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)

객체 지향 프로그래밍(Object Oriented Programming) 여러 SW기업 신입사원 기술면접에서 워밍업느낌으로 면접자들 긴장을 풀어줄 겸 처음으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해 설

jeong-pro.tistory.com

 

cf) 구조적 프로그래밍

- 기능별 모듈을 통해 프로그래밍한다.

- 장점: 빠르다, 구현이 쉽다

- 단점: 유지보수 비싸다

 

'기타 IT' 카테고리의 다른 글

IT시사 및 개념 (2021.06.21.)  (0) 2021.06.16