htop 설치 mac OS : brew install htop Linux : apt-get install htop 마우스로 입력가능 CPU, MEM 등 원하는 기준별로 소팅가능해서 편하다. 기본적으로 설치되어 있는 top보다 직관적이고 프로세스를 모니터링하기 편하다. *mac의 경우 F1~F10까지 키입력을 해야할 때 fn키를 함께 눌러준다. 프로세스 정보 PID 프로세스의 ID USER 프로세스의 소유자 PRI 프로세스의 우선순위 NI 우선순위에 영향을 주는 프로세스의 nice 값 VIRT 해당 프로세스가 사용중인 가상 메모리 양 RES 해당 프로세스가 사용중인 물리 메모리 양 (KB) SHR 프로세스가 사용중인 공유 메모리 양 S 프로세스의 현재 상태(zombied, sleeping, running,..
웹서버 / 웹앱서버 역할 프로그램 웹서버 1. 웹클라이언트의 요청을 받아서 처리하고 응답 2. 정적인 페이지(HTML, 이미지, CSS, JS등)을 웹 클라이언트에게 전달할 때 사용. 3. 동적인 처리가 필요한 경우 웹앱서버로 위임 Apache httpd, Nginx, lightpd, Mongoose 등 웹앱서버 1. 웹서버로부터 위임 받은 요청을 처리하고 웹서버로 응답을 전달한다. 2. 동적 페이지 요청 처리 3. DB연동 기능을 처리 Apache Tomcat, JBoss, Jeus, uWSGI, Gunicom 등 정적 페이지 / 동적 페이지 정적 페이지란? 언제, 누가 요청하더라도 항상 같은 내용을 표시하는 웹페이지이며 HTML, JS, CSS, 이미지로 이루어진 페이지를 말한다. 따라서 웹서버에서 ..
HTTP 이란? HTTP(Hypertext Trasnfer Protocol)은 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식이다. Hypertext인 HTML,XML 뿐만아니라 이미지, 음성, 동영상, 자바스크립트, PDF, 오피스파일 등 컴퓨터에서 사용하는 데이터는 모두 주고받을 수 있다. 예를들어 https://www.google.com/를 웹브라우저 주소창에 입력하고 Enter를 누르면 웹 클라이언트(브라우저)와 웹 서버 사이에 HTTP연결이 맺어지고 웹 클라이언트는 웹 서버에 Reqeust를 보내게 된다. 웹 서버는 Request에 따라 처리한 뒤 Response를 전달한다. HTTP의 특징은 stateless 이다. 즉, 웹 클라이언트와 웹 서버의 연결이 지속되지 ..
1. 웹 프로그래밍 정의 HTTP(S) 프로토콜로 통신하는 client와 server를 개발하는 것 웹클라이언트는 HTML, CSS, JS로 개발하며 웹서버는 Django와 같은 프레임워크를 사용하여 개발한다. 2. 웹 동작 과정 크롬, 파이어 폭스 같은 브라우저들이 대표적인 웹 클라이언트이며 웹브라우저 외에도 curl등의 클라이언트 프로그램으로 웹서버에 요청(Request)를 보낼 수 있다. 클라이언트로 부터 HTTP(S)프로토콜을 통해 요청을 받은 웹서버에서는 요청을 처리한 뒤 다시 웹클라이언트에게 응답(Response)를 전달한다. 클라이언트에서 서버로 요청은 URL을 통해 하는데 URL은 웹 서버에 존재하는 프로그램에 대한 API라고 할 수 있다. 3. 웹 프로그래밍 활용 웹을 (정학히는 http..
STL을 활용하여 상한값 하한값 단순화하는 방법 보통의 경우 상한값 또는 하한값을 체크하는 경우 아래와 같이 구현한다. 1 2 3 4 5 6 7 if (result > 100) { //상한값 100 체크 result = 100; } if (result >input; input = checkMinMax(input, 0, 100); cout
순환참조 발생 원인 1) header 파일에서 서로 include하는 경우 2) 서로 Dependency가 발생한 경우 순환참조의 문제점 1번의 경우 서로가 서로의 헤더를 계속 포함시켜 컴파일 시 문제가 발생한다. 2번은 서로가 호출하는 경우로 모듈간의 커플링이 타이트해지는 문제점이 있다. 해결방법 1) 전방 선언을 통한 헤더 구성 전방 선언을 통해 헤더의 include없이 포인터만으로 class를 선언 할 수 있다. A.h 1 2 3 4 5 6 7 8 9 class B;//전방선언 class A { public: A() {}; void call(B* moduleB); void printA(); }; cs b.h 1 2 3 4 5 6 7 8 class A;//전방선언 class B { public: B(..
IPC를 위한 방법으로 파이프,메세지큐,세마포어,소켓등이 있다. 개발하려는 프로그램의 방향에따라 적적한 방식을 택하면 된다. 그 중 소켓을 이용한 IPC는 기존의 네트워크 통신 방식과 동일하다.(어짜피 네트워크 소켓도 프로세스간의 통신을 위한 것이기 때문에) 그래서 API사용에 있어서 좀더 익숙하고 기존의 네트워크 방식을 로컬방식으로 옮길때 코드상의 큰 수정없이 바로 적용가능하다. 그리고 양방향 통신을 위해 파이프방식 처럼 길을 두개 열어줄 필요가 없이 양방향 통신이 가능하다. 어느정도 규모가 있는 프로그램은 소켓을 이용하기를 추천하고 있다.(아마도 대부분 서버-클라이언트 구조라서 그러는 것 같음.) 뿐만아니라 로컬에서의 통신이기 때문에 UDP방식을 사용하더라도 패킷 유실의 걱정도 없다. 기존의 네트워크..
골라야 할 원소의 수(M)가 입력에 따라 달라지는 경우 반복문 보다 재귀를 사용하면 유연하게 대처할 수 있다. 0부터 N-1까지의 수중에 M개를 고르는 모든 경우의 수를 구하는 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include #include using namespace std; int maxN, maxM; void printNumber(vector& picked) { int cnt = picked.size(); for(int i=0; i
진행순서 1. Class Based View인 APIView를 상속하여 UserView 뼈대 만들기 2. POST, GET, PUT, DELETE 함수 구현 1. Class Based View인 APIView를 상속하여 UserView 뼈대 만들기 api_user/views.py에서 APIView를 상속하여 user를 생성, 삭제, 수정, 읽기를 할 수 있는 Class를 만든다. CBV인 APIView를 사용하는 이유는 get, post, update, delete가 클래스내에 함수로 나누어져 있어서 직관성이 좋다. views.py의 UserView의 큰 그림은 아래와 같다. CRUD 함수들이 한 클래스안에 함수별로 나누어진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ..