SMTP는 이메일을 보내기 위해 사용되는 프로토콜이다. 이는 Postfix를 통해 간단히 서버를 구축할 수 있지만, SASL를 사용하는 경우에 상세한 구축법이 없어 이에 대해 명확히 정리하고 기록해두고자 한다. SMTP? SMTP(Simple Mail Transfer Protocol)는 이름 그대로 e-mail 전송에 사용되는 프로토콜이다. HTTP, SIP와 같은 여러 프로토콜의 디자인을 상속하며, 전송 계층으로는 TCP를 상용한다. 특정 메일 서버로 메일을 보낼 경우, SMTP를 사용한다. 하지만 메일 서버와 메일 서버 즉, relay host로 메일을 전달하기 위해서는 SMTP보다는 주로 POP, IMAP, HTTP를 사용하여 메일을 전송한다. SMTP의 `foramt`은 `Header - Blan..
GUI 환경에서는 다양한 MIB Browser를 활용하여, 원격 호스트의 MIB를 탐색할 수 있다. 하지만 CLI 환경에서는 사용하는 방법만 익히게 되면, 보다 많은 기능을 제공하는 Net-SNMP가 있다. 따라서 Net-SNMP를 우분투 환경에 설치하고, 유용한 명령어에 대해 다루고자 한다. SNMP? `SNMP`는 이전 글에서 간략히 어떤 기능을 제공하는 프로토콜인지에 대해 다루었다. 지금부터 나오는 내용을 이해하기 위해서는 `SNMP`에서 사용하는 용어와 구성 요소들에 대해 이해하여야 한다. `SNMP`의 기능 중 manager, agent를 모두 사용할 수 있는 `Net-SNMP`가 있다. 해당 프로그램은 과거에는 압축된 소스 파일을 직접 설치하여야 했지만, 현재는 간단히 설치할 수 있는 환경을 ..
과거에는 네트워크의 구성도가 복잡하지 않고, 관리해야 하는 장비의 수가 많지 않았다. 따라서, 당시에는 각 장치들의 상태에 관한 정보를 관리하기 위해 ICMP(ping)을 사용하였다. 하지만 네트워크의 구성도가 복잡해지고 다양한 장비들이 네트워크를 사용하게 됨에 따라 SNMP가 등장하게 되었다. SNMP의 각 구성요소와 동작에 대한 이해를 해보고자 한다. What is SNMP? SNMP는 `Simple Network Management Protocol`의 약자이다. 앞서 서론에서 이야기하였듯이, ICMP를 대체할 수 있으며 장비들의 상태를 모니터링하거나 설정된 값을 변경(Get/Set)할 때 사용한다. 해당 프로토콜은 네트워크 7 계층 중, `Application`에 속한다. components SNM..
co svn co 소스코드 경로 원격 저장소로 소스를 로컬로 가져온다. up # 전체 소스코드 $ svn up # 특정 파일, 폴더 $ svn up 파일명 또는 폴더명 저장소에 반영된 최신 리비전을 로컬에 반영한다. 나의 commit을 반영하기 전에, 변경된 사항이 있는지 `up`을 통해 반영하여야 한다. ci $ svn ci # 바로 commit message 입력 가능 $ svn ci -m "message" # commit message가 입력된 파일을 이용 $ svn ci -F FILE_NAME log # 상위부터 N개 까지 로그 출력 $ svn log -l 5 무작정 `svn log`를 입력하면, 현재까지의 로그들이 모두 출력된다. diff # 로컬과 저장소의 리비전과 비교 svn diff # 로..
thread safe는 단순히 용어만 보더라도, thread 환경에서 잘 동작하는 구나라는 것을 직관적으로 알 수 있다. 하지만 reentrant는 그렇지 않다. 과거에는 reentrant와 thread safe를 혼용하여 쓰는 책들도 더러 있었다. 이에, 이 둘을 명확히 구분하고 이해해보고자 한다. thread safe `thread safe`는 말 그대로, 멀티 스레드 환경에서도 원래 의도한 대로 동작하는 코드를 의미한다. 예를 들어 `critical section`에 접근하고자 할 때, 스레드 별로 동기화를 하지 않게 되면 원치 않는 결과와 직면하게 된다. char arr[10]; int idx = 0; int func(char c) { int i = 0; if (idx >= sizeof(arr))..
C언어로 동작하는 프로세스는 크게 4가지의 메모리 영역(text, data, heap, stack)을 통해 구성된다. 전역 변수, 지역변수 등 사용되는 위치나 키워드 등에 따라 메모리 영역이 달라지게 된다. 작은 프로그램 단위에서는 크게 신경 쓰지 않아도 되지만, 다루는 자료구조의 크기가 큰 경우 stack overflow와 같은 오류에 직면할 수 있다. 이러한 오류를 방지하기 위해서는 메모리 영역에 대한 명확한 이해가 필요하다. Memory Layout stack & heap stack 함수 호출 시 생성되고, 함수 종료 시 반환되는 영역이다. 즉 지역 변수(local variable)이 할당되는 영역이다. heap 동적으로 할당되는 변수를 위한 영역이다. 예를 들면, malloc 또는 calloc을 ..
네트워크의 계층에서 2 계층은 MAC 주소를 사용하고, 3 계층은 IP 주소를 사용한다. 따라서 각 계층에서는 사전에 정의된 규격 (MAC, IP)를 사용하여 통신이 가능하다. 만약, 2-3 계층으로 통신이 필요다면 ARP, RARP를 통해 각 계층에서 사용하는 주소를 변환하여야 한다. 이에 ARP에 대해 알아보고, 실제 주고받는 패킷을 분석해보고자 한다. ARP? ARP는 `Address Resolution Protocol`의 약자로, 말 그대로 주소 결정 프로토콜이다. ARP를 이해하기 위해서는 4가지의 용어(Term)에 대해 이해하면 보다 쉽게 이해할 수 있다. Cache ARP를 통해 MAC 주소를 확인 후, ARP Table에 정보를 유지하는 것 Cache Timeout ARP Table에 Ca..
이진 탐색 트리를 구현하기 위해, 구글에 여러 코드들을 보았지만, 데이터 타입에 상관없이 사용할 수 있는 코드는 없었다. 이에 이진 검색 트리의 동작 원리나 이해보다는, 구현을 중점으로 글을 정리해보고자 한다. BST? Binary search tree - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Data structure in tree form sorted for fast lookup A binary search tree of size 9 and depth 3, with 8 at the root. The leaves are not drawn. In computer science, a binary s..