본문 바로가기

etc

vsftpd 모드 설명. vsftpd를 지난번에 설치해 보고 나서 조금더 알아봐야 할 상황이 발생하여 찾아본 내용에 대해여 기록한다. 우선 ftp는 command port와 data port 두 개의 port를 사용한다. 서버 측에서는 일반적으로 21번 port를 command port로 사용하고, 20번 port를 data port로 사용한다. 클라이언트에서는 1024~65535번 사이의 임의의 port를 골라서 command port로 사용하고 선택된 포트에 +1을 한 port를 data port로 사용한다. Ubuntu - vi /etc/vsftpd.confCentOS - vi /etc/vsftpd/vsftpd.conf 1. 엑티브 모드(Active Mode) - 설정파일 수정.: pasv_enable=NO 2. 패시브 모.. 더보기
git 명령어 모음. Git 명령어 모음에 대해서 기록한다. 모든 명령어를 기록하는 것은 아니고 주로 내가 사용했던 명령어에 대해서기록한다. 나중에 더 업데이트를 하도록 하고, 일단 어느정도 기록하도록 하자. - git config --global user.name "유저이름"- git config --global user.email "유저 이메일"- git remote add origin http://github.com/유저이름/프로젝트명.git: 원격저장소 연결.- git remote -v: 연결 상태 확인. - git init: 현재 디렉토리에 git 저장소 생성. - git status: 커밋되지 않은 변경사항을 조회 - git add: git add 파일명- 스테이징 영역에 파일 추가.: git add .- 모든 파.. 더보기
Github 사용법 - 3. 브런치(branch) 이번 내용은 github branch에 대한 내용이다. 브런치가 무엇이고, 왜 사용해야 하는지에 대한 내용은... 생략. 1. Branch 생성. - git branch 브런치명 : 브런치 생성. - git branch 로 현재 생성된 브런치와 현재 활성화된 브런치를 확인. - checkout 명령으로 활성 브런치 변경. - 확인해 보면 TestBranch가 활성화 된 것을 확인 할 수 있다. - 여기서는 빠져 있지만, 코드의 일부를 수정하였다. - 수정 후에 status 를 확인하고, git add -A 로 변경 내용을 추가하고, commit으로 스냅샷을 찍었다. - 대상을 TestBranch로 하여 push 하였다. - TestBranch가 올라온것을 확인 할 수 있다. - 브런치 탭에서도 확인 가능.. 더보기
Github 사용법 - 2. 저장소 앞서 github에 가입을 했고, git-scm을 설치 했다. 이번 내용은 저장소 생성과 파일 커밋에 대한 내용이다. 1. 저장소 생성. - 1번 혹은 2번을 통해서 신규를 저장소를 생성할 수 있다. - 1번에 저장소 이름을 넣어주고, - 2번 설정으로 무료 버전을 선택할 수 있다.: github는 기본적으로 오픈 소스를 지향하기 때문에 private를 선택 할 경우 유료로 할 수 있다. - 3번을 눌러 저장소 생성. - 저장소가 만들어 졌다. 2. 로컬 저장소. - 1번은 이미 앞서 했던 내용이고, - 2번은 로컬 깃 저장소라는 것을 알리는 것이다. - 로컬 저장소로 설정된 모습. 3. 저장소 연결. - 첫 명령어에서 저장소를 연결하였고,: 모자이크 부분은 유저 네임에 해당하는 부분이다. - 다음 명령.. 더보기
Github 사용법 - 1. 설치 이번에는 github 사용법에 대하여 기록하도록 한다. github에 대한 설명은 따로 하지 않도록 한다. 이미 많은 내용들이다른 곳에서 친절하게 설명되어 있으니, 바로 본론으로 들어가자. 1. 계정 생성. - github 홈페이지에 접속해서 계정을 생성한다. - 가입 후 모습. 2. git 설치. - https://git-scm.com/download 에 접속하여 다운 받는다. - 일부 브라우저는 자동 다운로드가 진행된다. - 현재 최신 버전은 2.15.0 이고 이를 다운 받아 실행한다. - 터미널 설정이다. - 설정에 따라 cmd에서도 진행 할 수 있다. - 그림의 순서대로 진행을 한다면 어려움 없이 완료를 할 수 있다. - 완료 된 후의 모습이다. - 여기서 git 명령어를 실행 할 수 있으니, 앞.. 더보기
Ubuntu FTP Server 2. ubuntu ftp server 에 대한 두번째 기록으로 이번에는 테스트에 대한 기록이다. 1. 테스트 파일 준비. - ftp 폴더를 만들어 준다. - test 파일을 만들어 준다. 2. 테스트 AWS 에 파일을 올려두기 위해서는 다음과 같은 체크가 필요하다.1. 인스턴스의 보안 그룹에서 인바운드/아웃바운드에 SSH 추가.2. FileZilla를 통해서 /var/ftp/pub 폴더에 파일 추가.: 이때 권한이 문제 될 수 있다. 만일 문제가 된다면.: sudo chown -R : 경로 로 권한을 변경해 준다.- ex) sudo chown -R ubuntu:ubuntu /var/ftp/pub 더보기
Ubuntu FTP Server 1. Ubuntu에 ftp 서버를 설치해서 활용해 보는 내용을 기록하도록 한다. 1. vsftpd 설치. - vsftpd 를 설치해 준다. - 설정 파일을 수정해야 하니 만일을 대비해서 설정 파일을 백업해 둔다. 2. 방화벽 설정. - 처음은 방화벽이 비활성화 되어 있다. - 방화벽을 활성화 시켜주고. - 순서대로 추가해 주고, 마지막으로 방화벽 상태를 확인하면 추가된 것을 볼 수 있다. 3. 설정 파일 수정. - vi 편집기를 사용해서 설정 파일을 연다. - 정확히 하기 위해 다시 표기하면 sudo vi /etc/vsftpd.conf 이다. - 두 설정을 변경 해 주고. - 다음을 추가해 준다. 파일의 어느 곳에 추가해도 된다.: anon_root : 디렉토리의 사용자를 가리킨다.: no_anon_passw.. 더보기
[STL] 지역 변수를 STL Container에 삽입시 발생하는 일. STL Container에 지역 변수를 push하면 발생하는 일. - 지역변수 1. 함수 내부에 선언된다. 2. Life Cycle은 함수의 종료 시점과 같이 한다. 3. 저장소는 therad-stack 이다. 4. thread-stack은 1Mb 이다. 5. 1Mb를 초과하면??? - 어떻게 되는지는 또 찾아봐야지... 우선 계속 진행. - 지역변수를 STL Container에 push 하면. 1. 지역 변수 선언시 thread-stack에 생성. 2. STL Container에 삽입시 new를 통해서 heap에 할당 된다. : Move Semantics를 통해서 가능. ※ 다음 할 이야기. 1. thread-stack 초과시 어떻게 되는가? 2. Move Semantics 자세히 기술하기. 더보기
[C++] 메모리 가시성과 메모리 장벽 메모리 가시성 (Memory Visiblity)1. 정의- Thread에서 변경한 특정 메모리 값이, 다른 Thread에서 제대로 읽어지는가 라고 할 수 있다 2. 문제- cpu의 메모리 아키텍쳐. 즉, 레지스터와 캐쉬가 존재하기 때문이다. : 각각의 코어는 메인 메모리와 별도로 각각의 레지스터와 캐쉬를 가지기 때문이다.- 컴파일러의 최적화: 컴파일러는 프로그램이 최대한 빠르게 실행될 수 있도록 코어의 레지스터와 캐쉬를 사용하도록 한다. 3. 결론- Shared Memory 모델의 Concurrent, Parallel Programming에서는, 한 코어에서의 값 변경을 여러 코어가 공유하는 메인 메모리로 반영하는 작업을 적절히 수행해야 메모리 가시성을 유지할 수 있다 메모리 장벽 Memory Barri.. 더보기
[C++] Explicit 의미 Explicit는 생성자 앞에 사용하게 되는데. 생성자 앞에 이 키워드를 사용하게 되면 암시적 형변환을 막아준다.예를들어 다음의 코드가 있다고 한다면. class Temp{public:explicit Temp(int number) {};}; void main(){Temp temp(10);} 이런 코드는 정상적으로 동작한다. 하지만. void main(){Temp temp = 1;} 이런건 안된다는 뜻이된다. 만약 explicit 키워드가 생성자 앞에 선언되어 있지 않다면 컴파일러가 암시적으로 형변환하여 성공을 했겠지만, explicit 키워드를 사용함으로 인해서 차단된다. 더보기
[C++] 문자열 분리(strtok, strtok_s) 문자열 분리. strtok, strtok_s 기존에 문자열 분리에 사용되던 strtok 은 첫 인자로 대상 문자열,두 번째 인자로 분리에 기준이 되는 문자를 넣으면 되었다. 즉, #include #include int main (){ char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return 0;} 이런식으로, 사용하면 되었는데... VS 2005부터 CRT라이브러리의 문자열을 다루는.. 더보기
[Network] IRC구조 1. 정의 - 실시간 인터넷 텍스트 메시징 또는 동시 회의 2. 서버 구조(spanning tree) - 시발(始發) 이중화가 2계층 설계로 도입될 때, 루프 또는 중복되는 프레임은 네트워크에 심각한 결과를 가져올 수 있다. STP(Spanning Tree Protocol)은 이러한 문제를 해결하기 위해서 개발되었다. - 개념 루프의 원인이 될 수 있는 여분의 경로를 의도적으로 블로킹하여 네트워크상의 모든 도착지 사이에 오직 논리적인 하나의 경로만이 있도록 책임진다. STA란 Network Topology 상에서 Bridge로 하여금 루프(loop)를 형성하지 않도록 하는 알고리즘이다. 이 말은 임의의 2개의 단말이 프레임을 송수신할 수 있는 경로가 단 하나 이도록 한다는 의미이다. - 설명 그림에서 모.. 더보기
[C++] warning C4996 VS 2005부터 CRT라이브러리의 문자열을 다루는 함수의 안정성에 많은 신경을 쓰면서 기존의 문자열에 _s 를 붙이는 안전함수? 를 제공하고 있다. 해서 이 함수를 사용하지 않으면 위의 warning가 발생하게 된다. 기본적으로 하라는데로 _s 함수를 사용하면 좋겠지만, 이미 어느정도 진행되어 있는 프로젝트에서 해당 함수로 변경하는 것이 조금 고된 일이 된다고 생각된다면다음의 추가로 해결할 수 있다. 미리 컴파일된 해더(stdafx.h) 에 #define _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_OVERLOAD_STANdARD_NAES 1#define _CRT_SECURE_NO_DEPRECATE 이것을 추가한다. 더보기
[SVN] tortoise svn branch merge tortoise svn(이하 svn)을 가지고 trunk 와 branch 간에 merge 하는 방법을 소개한다. svn에서 머지하는 방법은 여러방법이 있는데(merge 관련 팝업메뉴가 여러군데서 뜨기 때문에) 크게 원본인 trunk 디렉토리에서 시작하는 방법(merge to)과 branch 디렉토리에서 시작하는 방법(merge)가 있을 것 같은데, 당연히 결과물도 같고 중간에 거치는 내용도 같기 때문에 취향대로 골라서 사용하면 되겠다. 상황은 trunk에서 branch로 merge하는 상황을 가정한다. (생각해보니 일반적인 상황이라면 branch에서 trunk로 merge 하는게 많을 듯 한데...) #include int main() { printf("Hello world!\n"); printf("fo.. 더보기
[C++] 전방선언과 include 전방 선언은 #include 보다 컴파일 시간을 단축시킨다.하지만, 사용에 주의해야 할 것이 있는데, 예시) - A.h 파일class A {}; - B.h 파일class A; // 전방 선언class B { A m_cA1; // 전방 선언 사용 불가. A* m_cA2; // 사용 가능}; 위에서 보는 것과 같이. 실제 생성되지 않는 동적 타입에서만 사용 가능. 더보기
[C++] GetLastError() 활용 많은 사람들이 GetLastError 함수를 사용하고 있겠지만 이녀석 참 유용하다. 일반적으로 이녀석은 에러 코드를 반환하는데 에러코드 값을 msdn등을 통해서 일일이 찾는건 참으로 번거롭다 ㅡㅡa 하지만 Visual Studio에서는 Error Lookup라는 이름의 툴을 제공한다는거 코드만 집어 넣으면 바로 에러 내용을 보여주니 참으로 좋구나. 그리고! 디버그의 Watch창에 $err,hr 이라고 입력하면 에러 내용을 확인할 수 있다. 예로int WINAPI _tWinMain(HINSTANCE hInstanceExe, HINSTNCE, PTSTR pszCmdLine, int){HANDLE hFile = CreateFile(TEXT("c\\Jeff), 0, 0, NULL, OPEN_EXISTING, 0.. 더보기
[Network] 2-Tier, 3-Tier, n-Tier 1. 개요 2-Tier,3-Tier,n-Tier 등은 중앙집중형 컴퓨팅과 달리 분산 컴퓨팅 환경을 구현하는 구조를 말한다.2. 참고사항 ㅇ 2-Tier 이란 1980년대 LAN 환경에서 ① 화일서버 및 DBMS 서버 등 서버와 ② 클라이언트로 구성된 단순 분산처리의 초기형태를 말한다. - 이 경우에서는 각종 비지니스 로직 (Business Logic)을 전부 클라이언트에서 담당하고 서버는 단지 데이터를 공유하는 형태로서, Fat Client 라고 하여 클라이언트에게 부하가 많아져서 클라이언트 수가 많아지면 유지보수 비용이 증가하게되는 문제점이 있다. ㅇ 3-Tier 이란 각각 서로 다른 플랫폼에서 동작하는 3개의 잘 정의된 독립 프로세스 ① 클라이언트 ② 어플리케이션 서버(또는 웹 서버 등) ③ 데이터베.. 더보기
[Python] Embeding 경로 변경 반나절의 삽질 ㅡㅡ; Python의 경로는 m_pPath = PySys_GetObject("path"); PyList_Append(m_pPath, PyString_FromString(PYTHON_SCRIPT_PATH)); 이런식으로 지정 할 수 있다. PYTHON_SCRIPT_PATH는 실행 파일을 기준으로 스크립트가 위치하는 경로이다 더보기