면접을 준비하면서 알아야할 기본적인 CS를 간단하게 정리해보았다.
- 객체지향 프로그래밍 OOP(Object Oriented Programming)
- REST API(Representational State Transfer)
- DNS (Domain Name System)
- HTTP와 HTTPS 비교
- 프로세스와 스레드
- 스크립트 언어와 컴파일 언어
1. 객체지향 프로그래밍 OOP(Object Oriented Programming)
SOLID라 불리는 5가지 설계 원칙
1. SRP(Single Responsibility Principle) 단일 책임의 원칙
작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는데 집중되어 있어야 한다.
2. OCP(Open Close Principle) 개방 폐쇄의 원칙
소프트웨어의 구성요소는 확장에는 열려 있고 변경해는 닫혀 있어야 한다.
3. LSP(The Liskov Substitution Principle) 리스코브 치환의 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
4. ISP(Interface Segregation Principle) 인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
5. DIP(Dependency Inversion Principle) 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
객체지향 프로그래밍의 4가지 특성
1. 추상화
세부적인 사물들의 공통적인 특징을 파악한 후 하나의 집합으로 만들어내는 것
2. 캡슐화
객체지향은 캡슐화를 통해서 한 곳의 변화가 다른 곳에 미치는 영향을 최소화
캡슐화란 객체가 내부적으로 기능을 어떻게 규현하는지 감추는 것.
3. 상속
일반화 관계라고도 함. 여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립
4. 다형성
서로 다른 클래스의 객체가 같은 메세지를 받았을 때 각자의 방식으로 작동하는 능력
2. REST API(Representational State Transfer)
어떤 요청을 보낼때 자원과 행위를 명시적으로 표현하는 것. 그래서 그 모습 자체로 어떤 동작이나 정보를 위한 것인지 추론이 가능한 것.
자원은 URI로 표현 - 주로 명사를 사용(ex. member, leader, coach...)
자원에 대한 행위는 HTTP Method(GET, POST, PUT, PATCH, DELETE)로 표현한다.
3. DNS (Domain Name System)
웹사이트의 도매인 주소와 아이피 주소를 이어주는 시스템
예를 들어 tistory.com이라는 도메인 주소를 찾는다면
우선 로컬 DNS 서버에 해당 url이 있는지 찾아보고 없다면
루트 DNS서버에 문의해서 .com이 등록된 서버의 ip주소를 받음
그 다음 com에 해당하는 DNS서버에 해당 url을 문의. tistory.com의 DNS서버의 ip 주소를 알려줌
4. HTTP와 HTTPS 비교
http는 서버와 클라이언트가 자원을 주고받을 때 쓰는 통신 규약
http는 텍스트 교환이라서 누가 네트워크에서 신호를 가로채면 내용이 노출될 수 있어서 보안 문제가 생김.
이런 보안 문제를 해결해주는 것이 HTTPS S는 secure을 의미한다.
HTTPS는 정보를 암호화 하고 웹사이트가 신뢰할만한 곳인지 검증한다. 이때 공개키 방식을 사용한다. 서버를 만드는 기업에서 CA와 계약을 맺어서 클라이언트에게 서버측이 안전한 곳인지 판별할 수 있게 해준다.
5. 프로세스와 스레드
프로그램이 실행되고 있는 상태를 프로세스라고 함
병렬성 - 프로세스 하나에 코어가 여러개라 한번에 여러개
동시성 - 프로세스가 여러일을 조금씩 해서 동시에 진행되는 것처럼 보임
한 프로세스 안에도 여러 일이 동시에 진행됨. 브라우저에서도 다운받기, 동영상 재생 등의 작업들이 동시에 진행 -> 스레드
스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
6. 스크립트 언어와 컴파일 언어
스크립트 언어 (Scripting Language)
- 소스 코드를 컴파일하지 않고 인터프리터로 소스 코드를 한줄한줄 읽어 바로 실행하는 방식으로 동작하는 언어
- 컴파일을 하지 않고 바로 실행한다는 특징이 있지만, 소스 코드를 읽으며 실행하기 때문에 프로그램의 실행 시간은 느리다.
- 소프트웨어의 동작 내용을 대본(스크립트)로 보고 제어하는 언어
- 언어 예시 Python R, Ruby
컴파일 언어 (Compiled Language)
- 소스 코드를 컴파일한 후 기계어를 CPU/메모리를 통해 읽어 실행하는 방식으로 동작하는 언어
- 컴파일을 하기 때문에 규모가 큰 프로그램이라면 컴파일 시간이 오래 걸릴 수 있지만, 컴파일 후의 기계어를 통해 프로그램을 실행하기 때문에 실행 시간은 빠르다.
- 언어 예시 C++, Java C, C#
'TIL' 카테고리의 다른 글
[노마드코더 북클럽] 클린코드 2. 의미있는 이름 (0) | 2022.02.20 |
---|---|
[노마드코더 북클럽] 클린코드 1. 깨끗한 코드 (0) | 2022.02.19 |
업비트 Open API 사용해보기 (1) | 2021.11.07 |
도커 컴포즈 (0) | 2021.09.29 |
도커 볼륨 (0) | 2021.09.24 |