오늘의 교재와 키워드

교재

  • 운영체제(공룡책) : 1,2장
  • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 1장 사용자 수에 따른 규모 확장성키워드캐시, 메모리, 커널, NoSQL, 로드밸런서, 데이터베이스 다중화, 메세지큐, 고가용성

스터디 내용

운영체제

  1. 레지스터와 캐시와 램의 차이?
    • 레지스터 : flip-flop(1bit)의 집합. 데이터와 명령어 저장. 최대 처리 용량은 CPU의 처리 용량을 따라간다.
    • 캐시 : CPU 내부에 존재하는 저장공간. 명령어를 저장하는 공간과 데이터를 저장하는 공간 둘로 구분. 또는 레벨별로 구분(L1,L2...)
    • 램 : CPU 외부에 존재하는 메모리, 버퍼의 역할(느린 저장장치를 보조), 여기까지가 주기억장치이고 휘발성.
  2. 커널의 정의
    시스템의 모든 것을 제어한다. 특징으로 보안, 자원관리, 그리고 추상화를 담당하고 있다. 커널의 종류는 위키피디아를 참조.
  3. Interface란?
    • 사전적인 정의
      • 전기 신호의 변환으로 중앙 처리 장치와 그 주변 장치를 서로 잇는 부분. 또는, 그 접속 장치.
      • 키보드나 디스플레이 등등 사람과 컴퓨터를 연결하는 장치
      • 소프트웨어끼리 접촉,공통되는 부분. 순화어는 '접속'
      • 위키피디아
        • 인터페이스, 또는 접속기는 서로 다른 두 개 이상의 독립된 컴퓨터 시스템 구성 요소 간에 정보를 교환하는 공유 경계(shared boundary)이다. 컴퓨터와 사용자 간의 통신이 가능하게 하는 장치나 프로그램을 의미하기도 한다.
  4. Runtime Environment란?
    컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. 운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있다.
    => 프로그램을 실행시키기 위해 필요한 환경 혹은 상태
  5. (심화) JAVA의 정체성, 인터프리터와 컴파일러
    • 인터프리터의 정의 : 프로그래밍 언어의 소스 코드를 해석함과 동시에 실행시키는 프로그램 혹은 환경. OS종속적
    • 컴파일러의 정의 : 순화어 해석기, 번역기, 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 언어로 옮기는 언어 번역 프로그램. (위키피디아). 흔하게 프로그래밍 언어를 컴퓨터가 이해하기 쉽게 기계어로 바꾸는 행위도 컴파일에 해당.
    • 자바는 인터프리터를 쓸까요, 컴파일러를 쓸까요?**
      • 정답 : 둘 다.
      • 설명 : .javac -> .class로 컴파일을 하고, class파일(byte코드)을 프로그램 실행 환경에 맞게 변환하면서 인터프리터를 사용한다.
      • 장점 : .class로 컴파일하면서 보안을 지킬 수 있고, 인터프리터를 사용하면서 그게 리눅스가 되었던, 맥이 되었던, 윈도우가 되었던 프로그램을 실행시킬 수 있다.(물론, 외부 코드에 의존성이 없다고 가정하면)
      • 단점 : 속도가 느리다

가상 면접 사례로 배우는 대규모 시스템 설계 기초

  1. RDBMS에서 지켜야 할 4가지 요소는?
    • Atomicity, Consistency, Isolation, Durability
  2. NoSQL의 종류는?
    • key-value : redis
    • graph : Neo4j
    • document store : MongGo DB
    • column store : Kassandra
  3. NoSQL에서 key-value방식과 문서저장소, 컬럼저장소의 차이는?
    • 문서저장소 : key-value 형식인데, 이제 이 value를 문서 타입으로 저장(json, xml 등의 표준들 또는 스키마가 정의된 구조가 존재하는 value)
    • Column store : Column store 그림 설명한 자료 row 내에 key(column)-value 데이터의 쌍이 있다고 생각하면 된다. 각 row는 key(column)의 수가 동일하지 않아도 된다. => 데이터 압축이 가능, 데이터 쓰는 데 용이
  4. NoSQL의 각 종류별 유리한 상황
    • key-value : 데이터 캐싱, 이미지와 오디오 파일 등 비정형 데이터 저장
    • document store : 속성 단위로 객체가 관리될 때, value에 json과 같은 계층을 가진 schema를 사용할 때(key-value에서 좀 더 나아가서)
    • Column store : 데이터 수정 작업이 많을 때, 디스크의 I/O 속도를 올릴 때 사용. RDBMS보다 메모리 사용에 이점이 있다.
  5. 로드밸런서의 역할은?
    • 트래픽을 다수의 서버에 분산시키는 장치이다.
    • 트래픽의 균등 배분과 고가용성 담당
    • 웹 서버 다중화와 연결된다.
    • Scale-out과는 다른 개념.
  6. 데이터베이스 다중화란? 샤딩이랑 같은 건가?
    서버 여러대를 중복 구성해서 일부가 장애가 되었을 때 시스템의 가용성을 유지하는 방법. 샤딩은 데이터 덩어리를 나누어서 저장하는 방법. 트래픽을 나누는 데 사용할 수 있다. 데이터베이스 다중화에는 replication을 사용한다.
  7. 메세지큐의 프로토콜은?
    • MQTT : Message Queue Telemetry Transport. Publisher-Subscriber 사이에 broker 존재. publisher와 subscriber는 topic을 공유한다.
    • AMQP : Advanced Message Queue Protocal. 중간에 Exchange라는 라우터가 존재(분배) Exchange와 message queue간의 매핑 룰을 binding이라 한다.
  8. 메세지큐의 특징은?
    • Asynchronous : Queue에 메시지 넣기 때문(우편 시스템을 생각해보라)
    • Decoupling : 양 끝 단과 분리 가능.
    • Resilience(탄력성) : 일부가 실패해도 전체는 영향을 받지 않는다
    • Redundancy(과잉) : 실패 시 반복 가능
    • Scalable : 다수의 프로세스들이 큐에 메세지를 보낼 수 있다
    • Guarantees : 작업이 처리된 것을 확인 가능
  9. Kafka와 RabbitMQ의 차이는?
    • RabbitMQ : 여러 소스에서 스트리밍 데이터를 수집하고 처리를 위해 다른 대상으로 라우팅하는 분산 메시지 브로커
    • Kafka : 실시간 데이터 파이프라인 및 스트리밍 애플리케이션을 구축하는 데 사용되는 스트리밍 플랫폼. 높은 처리량을 요구하는 실시간 데이터 피드 처리 혹은 대기 시간이 짧은 플랫폼 운영을 목표. 빅데이터, 스트리밍, 대용량.
    • 둘 다 사용처가 달라서 설계가 다르다. RabbitMQ의 경우 AMQP, Kafka는 MQTT방식을 채택하고 있다. 그리고 RabbitMQ는 메시지의 우선순위를 지원하나 Kafka는 그렇지 않다. 스트리밍이 메시지의 동등 취급에서 오는 말인가...
    • 차이점을 상세히 설명해둔 페이지AWS
  10. 메시지 큐의 장점 : 메세지큐의 특징을 읽어보세요
  11. 메시지 큐의 단점 : 큐를 사용하면서 큐 운영 규칙을 정해야 하고 지원이 필요하며, 큐에 메시지를 I/O하면서 오는 오버헤드가 발생할 수 있다. (좋은 것이 있다면 그에서 오는 나쁜 것이 있지...)
  12. 고가용성이란?
    시스템을 오랜 시간 동안 중단 없이 유지할 수 있는 능력

소감

  • 책을_미리미리_읽어_옵시다
  • 공룡책을 버리지 맙시다

+ Recent posts