전체 글

Code/git

[Git] Sub directory를 새 저장소에 옮기고 sub module로 변경하기

코드를 관리하면서, 여러 프로젝트에서 동일한 코드를 사용하게 되는 경우가 종종 발생한다. 이러한 상황이 발생하게 될 경우 보통은 코드의 복사/붙여넣기를 통해 코드를 관리하게 된다. 이러한 복사/붙여넣기 방식은 코드 관리에 어려움을 겪게 될 수 있는데, 어떤 프로젝트에는 반영된 부분이 다른 프로젝트에는 반영이 되거나 누락되는 경우가 흔히 발생하게 된다. 이러한 부분은 git을 사용할 경우 공통된 부분의 코드에 대해 sub module 기능을 이용하여 분리하게 될 경우 편리하게 개선 할 수 있다. sub module이란 파일을 직접 갖는게 아니라 다른 코드 저장소(repository)에 있는 코드를 링크만 하는 방식이다. 이러한 특성을 이용하여 공통된 부분을 폴더로 분리하고 별도의 저장소로 분리한 뒤 해당 ..

Code/svn

[svn] svn code export : svn에서 코드를 export 해오기

svn을 사용하다보면 github에서 zip download와 유사하게 코드의 수정 이력과 같은 정보 없이 데이터만을 export (download) 가져올 경우가 종종 존재한다. 이러한 동작을 위해 svn에서는 export 라는 기능을 제공하고 있으며, 필요시 특정 revision에 대한 코드만을 가져올 수도 있다. svn export에 대한 help 정보는 아래와 같다. export: 버전관리 정보 없는 깨끗한 사본을 받아옵니다. 사용법: 1. export [-r REV] URL[@PEGREV] [PATH] 2. export [-r REV] PATH1[@PEGREV] [PATH2] 1. 리비전 REV에 해당하는 URL 의 내용을 PATH에 받아 옵니다. 만약 REV가 지정되지 않으면 HEAD(최신 리..

Programming/QT

[QT] static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE

QT를 이용하여, 개발을 하다 보면 자주 만나는 메시지다. QVariant와 같은 QT에 미리 지정된 템플릿 클래스를 이용하다 보면 위와 같은 에러 메시지를 종 종 볼 수 있는데, 사용자 정의 클래스/타입이 미리 선언되어있지 않아 발생하는 오류다. enum ENUM_TYPE { ENUM_1, ENUM_2 } QVariant v; v.value(); // 에러 이는 헤더 파일에 Q_DECLARE_METATYPE(TypeName) 과 같이 작성하면 해당 문제는 해결된다. enum ENUM_TYPE { ENUM_1, ENUM_2 } Q_DECLARE_METATYPE(FSStatus); QVariant v; v.value();

OS/Linux

[CentOS] SWAP 빈도 조절하여 성능 개선

리눅스 시스템에서는 메모리가 부족해 질 경우 발생하는 오류 (메모리 할당 오류 등)를 방지하기 위해 SWAP 영역을 사용한다. SWAP 영역이란 메인 메모리의 공간이 부족해 질 때 메모리의 일부를 디스크에 저장하고, 사용하는 순간에만 잠시 메인 메모리(RAM)에 불러와 사용하기 위한 공간이다. OS, 커널의 정책마다 SWAP 영역으로 내보낼 메모리 를 선정하는 방법이 다르며, 어느 시점에 내려보낼지에 대한 설정도 제각각 이다. 또한 같은 OS, 커널을 사용한다 하더라도 시스템 설정값의 변경을 통해 서로 다른 결과가 나타날 수 있다. 위의 사진과 같이 아직 메인 메모리의 공간이 남아 있음에도, 미리 SWAP영역으로 내보내는 경우가 발생하기도 한다. CentOS에서는 스왑에 대한 정책을 sysctl 또는 /..

OS/Linux

[CentOS 7] Multicast Packet을 Loopback으로 송/수신

본 포스트에는 centos의 lo interface (localhost interface)에 route를 추가하여 Multicast packet을 local pc로만 송/수신 하고, NIC카드를 통해 외부로 나가지 않도록 처리하는 방법에 대해 서술하고자 한다. 기본적으로, Multicast의 IP 대역은 아래와 같이 지정되어 있다. 이 중, 224.0.0.0 - 224.0.0.255가 Local range로 되어있으나, 이는 TTL이 1인 multicast packet을 생성 및 전송하는 역할을 수행한다. 따라서, 생성된 패킷은 네트워크를 태워 보내지게 되고, 로컬 망 내의 다른 장비들도 해당 패킷이 수신된다. 따라서 완벽한 Loopback을 위해 Multicast 관련 패킷이 local interfac..

DB

[mysql/mariadb] Database export 하기 (db dump)

DB Dump는 간단한 명령어를 통해 가능하다. mysqldump -u ID -p DBNAME > FILE_NAME ID, DBNAME, FILE_NAME에 적절한 값을 입력하면 된다. 만일, Table의 데이터 없이 schema만 백업하고 싶으면 다음과 같은 명령어를 사용하면된다. mysqldump -u ID -p --no-data DBNAME >FILE_NAME 옵션에 추가된 --no-data 가 dump를 뜨면서 table 내의 데이터를 무시하도록 하는 역할한다.

Programming/QT

[QT] C++ std::string과 QString 간의 문자열 형 변환 방법

개요 QT C++로 프로그램을 작성하면, 타 라이브러리와의 연동을 위해 std::string 을 QString으로 변환하거나, 그 반대를 수행해야 하는 경우가 잦다. 이를 해결하기 위한 방법은 다음과 같다. std::string -> QString QString의 함수 이용 QString은 std::string을 QString으로 변환해주는 함수 QString::fromStdString 함수를 제공한다 사용 예시 std::string str ="Hello, World!"; QString qstr = QString::fromStdString(str); 위의 방법을 사용하면 손쉽게 형 변환이 가능하다. string pointer 이용 std::string을 QString으로 변경하기 위한, char 배열로 ..

Programming/C & C++

[C++] different underlying type in enum 'enum class TypeName'

Error 발생 원인 enum class를 선언하고, 공통 헤더에서 prototype만 정의하려는 시도를 진행하였으나, 제목과 같은 에러가 발생하였다. 이러한 현상은 enum class의 구현부의 underlying type과 prototype의 underlying type이 서로 달라 발생하는 오류이다. 예제 코드 global.h enum class Type; enumclass.h #include "global.h" enum class Type : unsigned int { A, B, C } 위와 같이 global.h에는 별다른 type을 지정안했으나, enumclass.h에는 별도의 타입이 지정되어 있을 때 발생한다. 해결 방법 이러한 부분은 아래와 같이 타입을 지정해주면 해결 된다. 예제 코드 gl..

후유증
개인공간