전체 글

개발 공부 공간
개발 잡지식

htop 프로세스 모니터링

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,..

Python/Django

[Django] [웹 기초] 웹서버(web server)와 웹앱서버(web application server)

웹서버 / 웹앱서버 역할 프로그램 웹서버 1. 웹클라이언트의 요청을 받아서 처리하고 응답 2. 정적인 페이지(HTML, 이미지, CSS, JS등)을 웹 클라이언트에게 전달할 때 사용. 3. 동적인 처리가 필요한 경우 웹앱서버로 위임 Apache httpd, Nginx, lightpd, Mongoose 등 웹앱서버 1. 웹서버로부터 위임 받은 요청을 처리하고 웹서버로 응답을 전달한다. 2. 동적 페이지 요청 처리 3. DB연동 기능을 처리 Apache Tomcat, JBoss, Jeus, uWSGI, Gunicom 등 정적 페이지 / 동적 페이지 정적 페이지란? 언제, 누가 요청하더라도 항상 같은 내용을 표시하는 웹페이지이며 HTML, JS, CSS, 이미지로 이루어진 페이지를 말한다. 따라서 웹서버에서 ..

Python/Django

[Django] [웹 기초] HTTP 기초

HTTP 이란? HTTP(Hypertext Trasnfer Protocol)은 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식이다. Hypertext인 HTML,XML 뿐만아니라 이미지, 음성, 동영상, 자바스크립트, PDF, 오피스파일 등 컴퓨터에서 사용하는 데이터는 모두 주고받을 수 있다. 예를들어 https://www.google.com/를 웹브라우저 주소창에 입력하고 Enter를 누르면 웹 클라이언트(브라우저)와 웹 서버 사이에 HTTP연결이 맺어지고 웹 클라이언트는 웹 서버에 Reqeust를 보내게 된다. 웹 서버는 Request에 따라 처리한 뒤 Response를 전달한다. HTTP의 특징은 stateless 이다. 즉, 웹 클라이언트와 웹 서버의 연결이 지속되지 ..

Python/Django

[Django] [웹 기초] 웹 프로그래밍이란

1. 웹 프로그래밍 정의 HTTP(S) 프로토콜로 통신하는 client와 server를 개발하는 것 웹클라이언트는 HTML, CSS, JS로 개발하며 웹서버는 Django와 같은 프레임워크를 사용하여 개발한다. 2. 웹 동작 과정 크롬, 파이어 폭스 같은 브라우저들이 대표적인 웹 클라이언트이며 웹브라우저 외에도 curl등의 클라이언트 프로그램으로 웹서버에 요청(Request)를 보낼 수 있다. 클라이언트로 부터 HTTP(S)프로토콜을 통해 요청을 받은 웹서버에서는 요청을 처리한 뒤 다시 웹클라이언트에게 응답(Response)를 전달한다. 클라이언트에서 서버로 요청은 URL을 통해 하는데 URL은 웹 서버에 존재하는 프로그램에 대한 API라고 할 수 있다. 3. 웹 프로그래밍 활용 웹을 (정학히는 http..

C and C++

[C++][STL] STL을 활용하여 상한값 하한값 단순화

STL을 활용하여 상한값 하한값 단순화하는 방법 보통의 경우 상한값 또는 하한값을 체크하는 경우 아래와 같이 구현한다. 1 2 3 4 5 6 7 if (result > 100) { //상한값 100 체크 result = 100; } if (result >input; input = checkMinMax(input, 0, 100); cout

C and C++

[C++] Template include 오류 해결 방법

헤더와 구현이 분리된 template을 아래와 같이 MyTemplate.h라는 헤더만 include하게 되면 컴파일 시 링크오류가 발생한다. (xcode 에선 Undefined symbol) main.cpp 1 2 3 4 5 6 7 8 9 10 #include #include "MyTemplate.h" int main(int argc, const char * argv[]) { MyTemplate myTemplateInt(1,1); myTemplateInt.show(); return 0; } Colored by Color Scripter cs MyTemplate.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #ifndef MyTemplate_h #define MyTemplate_h temp..

C and C++

[C++] 순환참조(Circular Dependency) 제거하는 방법

순환참조 발생 원인 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(..

리눅스

Unix Domain Socket

IPC를 위한 방법으로 파이프,메세지큐,세마포어,소켓등이 있다. 개발하려는 프로그램의 방향에따라 적적한 방식을 택하면 된다. 그 중 소켓을 이용한 IPC는 기존의 네트워크 통신 방식과 동일하다.(어짜피 네트워크 소켓도 프로세스간의 통신을 위한 것이기 때문에) 그래서 API사용에 있어서 좀더 익숙하고 기존의 네트워크 방식을 로컬방식으로 옮길때 코드상의 큰 수정없이 바로 적용가능하다. 그리고 양방향 통신을 위해 파이프방식 처럼 길을 두개 열어줄 필요가 없이 양방향 통신이 가능하다. 어느정도 규모가 있는 프로그램은 소켓을 이용하기를 추천하고 있다.(아마도 대부분 서버-클라이언트 구조라서 그러는 것 같음.) 뿐만아니라 로컬에서의 통신이기 때문에 UDP방식을 사용하더라도 패킷 유실의 걱정도 없다. 기존의 네트워크..

알고리즘

[무식하게 풀기 - 재귀] N개의 원소중 M개를 고르는 모든 조합 찾는 방법

골라야 할 원소의 수(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

Python/Django

[Django] 간단한 REST API 서버 만들기4 - Class Based View에서 POST, GET, PUT, DELETE 구현

진행순서 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 ..

개발새발
개발 공부 공간