Computer Theory 22

Computer Theory/Web
웹 서버와 WAS (Django, Nginx, Gunicorn)

django 프로젝트를 하다 보면, gunicorn과 nginx로 배포하는 경우가 흔하다. 하지만 강의나 여러 글만 따라가면서 프로젝트를 진행했기에 gunicorn과 nginx에 대한 개념이 뚜렷하지 않다. 따라서 이에 대한 개념을 잡아보고자 한다. NginxNginx에 알아보기 전 웹서버와 WAS에 대해서 짚고 넘어가자. https://www.youtube.com/watch?v=Zimhvf2B7Es&t=659s    웹서버: 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 콘텐츠를 제공하는 프로그램을 의미한다. 대표적으로는 Apache와 Nginx가 있다.WAS(Web Application Server): DB조회나 다양한 로직 처리를 요구하는 동적인 콘텐츠를 제공하기 위해 만들어진 애플리케이션 서버..

Computer Theory/Os
리눅스와 자주사용하는 쉘 명령어

이번에는 리눅스와 쉘 커맨드에 대해서 알아보고자 한다.  Linux Linux는 서버에서 일반적으로 사용하는 Os 종류 중에 하나이다. 여러 버전이 존재하며 짧지 않은 역사로 안정성과 신뢰성, 등등의 장점을 가지고 있다.  Shell 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램이다. 프롬프트(prompt)를 보여주며 사용자에게 명령을 입력받고 실행하는 역할을 한다.   Shell 작동 흐름쉘은 아래와 같은 작동흐름을 가지고 있다. 실행가능한 프로그램 이름, 인자를 입력한다.파일 시스템에서 실행 가능한 명령이 디스크 어느 부분에 있는지 찾고, fork()라는 system call을 호출함으로써 child process을 생성한다. child process에서 execl(), execvp..

Computer Theory/Web
호스팅(Web Hosting)

이번에는 호스팅에 대해서 알아보고자 한다.   호스팅(Hosting)호스팅이란 어떤 서비스를 빌려서 사용한다는 의미이다. 인터넷에서 호스팅이란 주로 3가지(웹 호스팅, 서버 호스팅, 쿨라우드 호스팅)의 종류로 나누어 나타내고 있다.   웹 호스팅 웹 호스팅은 여러 고객이 하나의 서버를 함께 사용하는 형태를 의미한다. 하나의 서버를 나누어 쓰기 때문에 저렴하게 이용할 수 있고 호스팅 업체의 통합 관리를 받기 편하다. 하지만 사용할 수 있는 하드웨어가 제한적이라는 단점을 가지고 있다.  서버 호스팅서버 호스팅은 고객이 단독 서버를 사용하는 형태를 의미한다. 넓은 하드웨어 공간을 사용 할 수 있고, 서버/운영 관리에 대한 직접적인 권한을 가질 수 있다. 하지만 단독으로 사용하는 만큼 높은 비용을 지불하여야 한..

Computer Theory/Web
도메인과 DNS 그리고 DNS의 작동원리

이번에는 DNS와 그 작동원리에 대해서 알아보고자 한다.   도메인 (Domain)도메인이란 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력 할 수 있도록 영문, 한글로 만든 인터넷 주소를 의미한다. 인터넷에 연결된 모든 컴퓨터는 IPv4 또는 IPv6 중 하나인 공용 IP 주소를 통해 접근할 수 있다. (예 : 127.0.0.1) 하지만 이런 주소는 컴퓨터가 쉽게 처리할 수 있으나 사람들은 해당 서버를 들어가기 위해서 IP주소를 일일이 기억하기 어렵다. 따라서 우리는 이런 IP 주소에 이름을 붙여 사람이 읽을 수 있도록 하는 주소인 도메인 주소를 사용하고자 하였다.  도메인 이름의 구조도메인 이름은 점으로 구분되고 오른쪽에서 왼쪽으로 읽히는 여러 부분으로 구성된 구조를 가지고 있다.  각 부부은 전..

Computer Theory/Design partterns
디자인 패턴과 SOLID 원칙

최근 객체 지향 프로그래밍을 자주 하게 되면서 해당 로직이 어떻게 더 깔끔하게 작성할지, 또는 코드의 유지보수성이 잘 되었으면 하는 생각에 여러 주제를 찾아보다가 디자인 패턴을 접하게 되었다. 따라서 "헤드 퍼스트 디자인 패턴"이라는 책과 여러 웹에 뿌려져 있는 지식을 통해 디자인 패턴을 학습하고, 이를 활용해 보고자 한다. 디자인 패턴디자인 패턴이란 객체 지향 프로그래밍 설계를 할 때 자주 발생되는 문제를 피하기 위해 사용하는 패턴이다. 소프트웨어 설계에 있어 공통적인 문제들에 대한 표준적인 해법과 작명법을 제안하여, 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식이다. "효율적인 코드를 만들기 위한 방법론"이라고 말하기도 한다.  ..

Computer Theory/Web
HTTP란 무엇인가?

이번에는 HTTP 통신에 대해서 알아보고자 한다.   HTTP의 의미HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 하는 프로토콜을 의미한다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트 - 서버 프로토콜이기도 하다.  - 클라이언트 서버 프로토콜 : 주로 클라이언트가 서버에게 요청을 보내여 리소스를 획득하는 프로토콜을 의미한다.  클라이언트와 서버들은 개별적인 메시지를 교환을 통해 통신을 한다. 보통 브라우저인 클라이언트에 의해 전송되는 메시지 요청을 request라고 부르며 이로 인해 서버에서 응답하는 메시지를 responses라고 부른다.  HTTP는  애플리케이션 계층의 프로토콜로, 신뢰가능한 전송 프로토콜이라면 이론상으로는 무엇이든 사용가능하나, TCP혹은 ..

Computer Theory/Web
HTTP 메서드 종류

HTTP Method 종류HTTP 메서드란 클라이언트와 서버 사이에 이루어지는 요청, 응답에 대한 데이터 전송 방식을 말한다. 주요 메소드GET : 리소스 조회POST:  요청 데이터 처리, 주로 등록에 사용PUT : 리소스를 대체(덮어쓰기), 해당 리소스가 없으면 생성PATCH : 리소스 부분 변경 (PUT이 전체 변경, PATCH는 일부 변경)DELETE : 리소스 삭제기타 메소드HEAD : GET과 동일하지만 메시지 부분(body 부분)을 제외하고, 상태 줄과 헤더만 반환OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행..

Computer Theory/Web
API에 대하여

이번에는 API에 대한 기본개념과 그에 대한 REST, Json APIs 등의 기타 개념에 대해서 알아보고자 한다. API API는 Application Programming interface의 줄임말로 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신 할수 있도록 하는 메커니즘을 의미한다. API가 생성된 시기와 이유에 따라 4가지 방식으로 작동할 수 있다. SOAP API 이 API는 단순 객체 접근 프로토콜을 사용한다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환하며, 과거에 더 많이 사용되었지만 유연성이 떨어지는 API 이다. RPC API 원격 프로시저 호출이라고 한다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송 한다. We..

Computer Theory/Web
Transaction과 ACID

오늘은 ACID에 대해서 알아보고자 한다. 트랜잭션(Transaction) 트랜잭션이란 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아놓은 하나의 작업단위를 뜻한다. 데이터 베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질을 말한다. ACID는 Atomicity(원자성), Consistency(일관성), Isolation(격리성, 고립성), Durability(지속성)을 줄인 말이다. Atomicity(원자성) 원자성이란 트랙재션의 안정성을 보장하기 위해 가져야 할 성질 중의 하나이다. 원자성이란 시스템에서 한 트랜잭션의 연산들이 모두 성공하거나 반대로 전부 실패하는 성질..