*아직 작성중인 포스트입니다.
출처 : https://mangkyu.tistory.com/88
[OOP란?]
현실 세계를 프로그로밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아 프로그래밍 하는 기법. 코드로 작성하면 재사용성과 변형가능성일 높일 수 있다.
[OOP 5가지 설계 원칙]
SOLID
-SRP(Single Responsibility Principle, 단일 책임 원칙) : 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
-OCP(Open-Closed Principle, 개방 폐쇠 원칙) : 클래스는 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
-LSP(Liskov Substitution Principle, 리스코프 치환 원칙) : 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야한다.
-ISP(Interface Segergation Principle, 인터페이스 분리 원칙) : 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야한다.
-DIP(Dependency Inversion Principle, 의존 역전 법칙) : 클라이언트는 추상화에 의존해야하며, 구체화에 의존해선 안된다.
[절차지향 프로그래밍 vs 객체지향 프로그래밍]
[Restful API]
REST API에서 REST는 REpresentational State Transfer의 약자로, 이를 해석하면 네트워크가 전이되는 것에 대한 표현이다.RESTAPI는 이를 표현하기 위해 Resource, Method, Representation 3가지를 사용한다. 이 3가지를 통해 상태가 전이되는 것을 표현한다면 우리는 RESTful한 API를 작성했다고 하는 것이다.
-Resource(자원, URI)
-Method(요청방식, GET or POST등)
-Representation of Resource(자원의 형태, JSON or XML 등)
[함수형 프로그래밍]
함수형 프로그래밍의 가장 큰 특징은 immutable data와 first class citizen으로서의 함수입니다. 함수형 프로그래밍은 부수효과가 없는 순수함수를 이용하여 프로그램을 만드는것이다. 부수효과가 없는 순수 함수란 데이터의 값을 변경시키지 않으며 객체의 필드를 설정하는 등의 작업을 하지 않는 함수를 의미한다.
[메모리 구조]
[프레임워크와 라이브러리 차리]
[ 동기와 비동기의 차이 ]
동기(Synchronous) 방식
요청을 보내고 실행이 끝나면 다음 동작을 처리하는 방식
순서에 맞추어 진행되기 때문에 제어하기 쉽다.
여러가지 요청을 동시에 처리할 수 없어 효율이 떨어진다.
동기 방식의 예시로는 콜센터 종업원이 일을 처리하는 방식이 될 수 있다. 콜센터의 직원은 한 손님의 전화 응대가 끝난 후에 다음 손님의 응대를 진행할 수 있다.
비동기(Asynchronous) 방식
요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청이 동작하는 방식
작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 사용할 수 있다.
작업이 완료된 결과를 제어하기 어렵다.
비동기 방식의 예제로는 이메일이 있다. 우리는 한 사람에게 이메일을 보냈을 때 답변을 받지 않고도 이메일을 다시 보낼 수 있다.
[ SQL Injection ]
SQL Injection이란 공격자가 악의적인 의도를 갖는 구문을 삽입하여 공격자가 원하는 SQL을 실행하도록 하는 웹해킹기법입니다. 예를 들어 아래와 같은 간단한 SQL 문이 있을 때 INPUT1에 'OR 1=1--을 넣는 것입니다.
INPUT1으로 'OR 1=1--을 넣으면 보이는 것처럼 뒤의 내용은 주석처리가 되고 WHERE 문은 항상 참이 됩니다.
이러한 공격을 방지하기 위해 특수문자 및 SQL 예약어들을 필터링하거나 SQL 오류 메세지를 노출하지 않는 등의 방법을 취해야 합니다.
[ 메세지 큐(Message Queue)란? ]
메세지 큐(Message Queue)란 Queue 자료구조를 이용하여 데이터(메세지)를 관리하는 시스템으로, 비동기 통신 프로토콜을 제공하여 메세지를 빠르게 주고 받을 수 있게 해준다. 메세지 큐에서는 Producer(생산자)가 Message를 Queue에 넣어두면, Consumer가 Message를 가져와 처리하게 된다. 메세지 큐에는 Kafka, Rabbit MQ, AMPQ 등이 있다.
[ TDD(Test-Driven Development) ]
TDD(Test-Driven Development)는 매우 짧은 개발 사이클의 반복에 의존하는 개발 프로세스로, 개발자는 우선 요구되는 기능에 대한 테스트케이스를 작성하고, 그에 맞는 코드를 작성하여 테스트를 통과한 후에 상황에 맞게 리팩토링하는 테스트 주도 개발 방식을 의미합니다.
개발자는 테스트를 작성하기 위해 해당 기능의 요구사항을 확실히 이해해야 하기 때문에 개발 전에 요구사항에 집중할 수 있도록 도와주지만 테스트를 위한 진입 장벽과 작성해야 하는 코드의 증가는 단점으로 뽑힙니다.
[ DDD(Domain-Driven Design) ]
DDD(Domain-Driven Design)는 실세계에서 사건이 발생하는 집합인 Domain(도메인)을 중심으로 설계하는 방법입니다. 옷 쇼핑몰을 예로 들면 손님들이 주문하는 도메인, 점주들이 관리하는 도메인 등이 있을 수 있습니다. 이러한 도메인들이 서로 상호작용하며 설계하는 것이 도메인 주도 설계입니다. 도메인 주도 설계에서 도메인은 각각 분리되어 있는데, 이러한 관점에서 MSA(MicroService Architecture)를 적용하면 용이한 설계를 할 수 있다. DDD에서는 같은 객체들이 존재할 수 있는데, 예를 들어 옷 구매자의 입장에서는 (name, price)와 같은 객체 정보를 담지만, 판매자의 입장에서는(madeTie, size, madeCountry) 등이 있을 수 있습니다. 즉, 문맥에 따라 객체의 역할이 바뀔 수 있는 것이 DDD입니다.
[Call By Value와 Call By Reference 차이]
예를 들어 아래와 같은 코드가 있다고 할 때, a라는 새로운 변수가 생성되어 Call By Value로 전달되기 때문에 메모리를 많이 사용하지만 a를 변경하여도 원래 값인 f는 영향을 받지 않습니다.
[ 아스키코드와 유니코드, EUC-KR과 UTF-8 차이 ]
아스키코드
- 영문 알파벳을 사용하는 문자 인코딩 방식
- 1바이트로 표현되며, 8비트 중에서 1비트는 통신 에러 검출을 위한 용도로 비워져 사실상 7비트만 사용됨
- 128개의 부호밖에 표현할 수 없었고, 더 많은 문자를 표현하고자 여러 가지 인코딩 방식이 등장함
EUC-KR
- 아스키코드에는 미국에서 사용되는 숫자나 알파벳만 들어있었기 때문에 한글 같은 다른 문자체계는 표현이 불가능
- 나라들마다 문자열 표를 만들어서 사용했는데, 이때 탄생한 것이 EUC-KR
- 1바이트의 아스키코드와 달리 EUC-KR은 2바이트로 구성됨
- 나라마다 다른 문자열 셋을 만들면 통일되지 않은 표현 방식에 의해 문제가 발생하여 유니코드가 등장함
UTF-8
- 전 세계 문자를 하나로 통합한 문자열 셋(유니코드)를 만들었는데, UTF-8은 유니코드의 한 종류임
- 유니코드는 1~4byte로 인코딩하는 가변 크기 인코딩 방식으로, 사용 빈도가 높은 글자는 적은 공간을 차지함
- UTF-16은 고정 길이(2또는 4바이트)를 사용한다는 점과 바이트 순서에 따라 2가지 형식이 존재한다는 점에서 다름
[ Docker(도커)와 Kubernates(쿠버네티스) ]
Docker는 컨테이너 기반의 가상화 기술입니다. 기존에는 하드웨어를 가상화하였기 때문에 Host OS 위에 Guest OS를 설치해야 했습니다. 하지만 이러한 방식은 상당히 무겁고 느려 한계가 많이 있었습니다.
그래서 이를 극복하고자 프로세스를 격리시킨 컨테이너를 통해 가상화를 하는 Docker(도커)와 같은 기술들이 등장하게 되었고, 도커를 통해 구동되는 컨테이너를 관리하기 위한 Kubernates(쿠버네티스)가 등장하게 되었습니다.
[동적쿼리]
동적 쿼리란 실행시에 특정 조건이나 상황에 따라 쿼리 문장이 변경되어 실행되는 쿼리문을 말합니다.
컴파일시에 SQL 문장을 확정할 수 없는 경우에 사용합니다. 실행 시점에 따라 where절에 조건이 달라질 때 사용합니다.
쿼리문이 변하냐 변하지 않느냐에 따라 정적쿼리/동적쿼리가 됩니다.
[대칭키, 비대칭키 암호화 방식]
대칭키와 비대칭키는 양방향 암호화 방식입니다.
대칭키는 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘입니다.
이는 중간에 누군가 암호키를 가로채면 정보가 유출될 수 있다는 단점이 있는데 이런 문제를 보완한 방식이 바로 비대칭키 입니다.
비대칭키는 암호화와 복호화할 때 서로 다른 키를 쓰는 알고리즘입니다.
타인에게 절대 노출되어서는 안되는 개인키와 공개적으로 개방되어 있는 공개키를 쌍으로 이룬 형태입니다.