TDD란 무엇인가
Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다. 말 그대로 테스트가 코드 작성을 주도하는 개발방식인 것이다.
HTTP의 GET과 POST 비교
둘 다 HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식이다.
GET: GET 방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 url이 담겨서 전송된다. 때문에 url 상에 ? 뒤에 데이터가 붙어 request를 보내게 되는 것이다. 이러한 방식은 url이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET 방식은 적절하지 않다. (ex. password)
POST: POST 방식의 request는 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다.
용도: GET은 가져오는 것으로 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. SELECT적인 성향을 갖고 있다고 볼 수 있는 것이다. 반면에 POST는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다.
부수적인 차이점으로 GET 방식의 요청은 브라우저에서 Caching할 수 있다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면 기존에 caching되었던 데이터가 응답될 가능성이 존재한다.
4.TCP & UDP
: 전송 계층에서 데이터를 보내기 위해 사용하는 프로토콜이다.
TCP(Transmission Control Protocol: 연결형 서비스를 지원하는 프로토콜이다. 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 흐름 제어 및 혼잡 제어가 이루어진다. 높은 신뢰성을 보장하지만 속도가 느리다.
모든 TCP 연결은 전이중(full-duplex), 점대점(point to point) 방식이다. 전이중이란 전송이 양방향으로 동시에 일어날 수 있음을 의미하며 점대점이란 각 연결이 정확히 2개의 종단점을 가지고 있음을 의미한다.
UDP: 비연결형 서비스를 지원하는 프로토콜이다. 각각의 패킷이 다른 경로로 전송되어 독립적인 관계를 지닌다. handshaking과 같은 절차가 없고, 신뢰성이 낮지만 속도가 빠르다. UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다.
Process vs Thread
프로세스: 메모리상에서 실행 중인 프로그램
스레드: 프로세스 안에서 실행되는 여러 흐름의 단위
기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 소유한다.
Multi Process
: 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 처리하도록 하는 것
장점: 안정성(메모리 침범 문제를 OS 차원에서 해결)
단점: 각각 독립된 메모리를 갖고 있어 작업량이 많을수록 오버헤드가 발생. Context Switching으로 인한 성능 저하
Multi Thread
: 하나의 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 것. 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해준다 .
장점: 독립적인 프로세스에 비해 공유 메모리만큼의 시간 자원 손실 감소. 전역 변수와 정적 변수 공유 가능
단점: 안정성(공유 메모리를 갖기 때문에 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드 작동 불능)
Deadlock(교착상태)
: 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태
시스템적으로 한정된 자원을 여러 곳에서 사용할 때 발생
8-1. Deadlock 필수 조건
Deadlock은 한 시스템에서 다음 4가지 조건이 동시에 성립될 때 발생할 수 있다.
1) 상호 배제(Mutual exclusion): 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.
2) 점유 대기(Hold and wait): 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
3) 비선점(No preemption): 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
4) 순환 대기(Circular wait): 프로세스의 집합(P0, P1, ..., Pn)에서 P0은 P1이 점유한 자원을 대기, P1은 P2가 점유한 자원을 대기... Pn-1은 Pn이 점유한 자원을 대기하며 Pn은 P0이 점유한 자원을 요구해야 한다.