전체 글 166

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

etc 2013.02.13

[프로젝트 자동화] cruisecontrol.net 활용

팀에 빌드 자동화에 대한 이슈가 있어서 적용하는 것을 진행했다... 순탄치는 않았고, 아직도 많이 부족하지만 기억을 위해서 몇자 메모를 해둔다. 1. 필요 프로그램. - cruisecontrol.net: CI 서버계의 할아버지.: 저 커뮤니티가 가장 활발하여 정보를 구하기 쉽다는 장점이 있다.: CI 서버 = cruisecontrol.net 이라고 인식이 될 정도이다.: 안정성이 확보되어 있다고 할 수 있다. - CCTray: cruisecontrol.net을 손쉽게 활용할 수 있도록 해주는 UI툴. 2. 준비. - 1) IIS 서버 설치.: cruisecontrol은 자체 웹서버를 제공하지 않기 때문에 별도의 웹서버를 설치해야 한다.현재 팀은 윈도우 기반이기 때문에 IIS 서버를 설치한다.: 이 IIS..

[Design Pattern] Thread-Safe Singleton

위의 보이는 것은 일반적으로 사용하는 싱클턴의 방법이다. 하지만 이 방법은 Thread-Safe 하지 않다. 그래서 다음과 같이 바꾸었다. 이런식으로 하면 Thread-Safe 하게 된다고 할 수 있다. 하지만 이 방법 역시 무조건 100%확실하다고 할 순 없다. Debug모드에서는 안전하지만 만일 Release모드일때 컴파일러가스스로 최적화를 해버려 Lock에 동시 접근을 하는 경우가 극히 드물게 나타난다는 전설을... 위의 코드를 테스트는 엄청난 귀찮음이 엄습하는 관계로. 이렇게 Thread 1개 만들고, 100만번 돌려보는 것만으로 종료해버렸다.

Design Pattern 2013.02.13

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

etc 2013.02.13

[Design Pattern] The abstract factory pattern example

아래는 추상 팩토리 패턴의 예제로 C 스타일의 예제가 없어서 만들어 봤다. class CDBProcess { public: virtual void LoadCharacter() = 0; };class CSDBProcess : public CDBProcess { void LoadCharacter() { printf("SDB\n"); } };class CXDBProcess : public CDBProcess { void LoadCharacter() { printf("XDB\n"); } };class CDBProcessFac { public: virtual CDBProcess* CreateProcess() = 0; };class CXDBProcessFac : public CDBProcessFac { CDBPro..

Design Pattern 2013.02.13

[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개의 잘 정의된 독립 프로세스 ① 클라이언트 ② 어플리케이션 서버(또는 웹 서버 등) ③ 데이터베..

etc 2013.02.13

[SQL] 테이블 변수

이번에 요청을 받은 것은, 1. A, B, C라는 변수를 전달 받아 TABLE1에 업데이트를 한다.2. TABLE2에 해당 데이터가 존재하지 않는다면 INSERT 한다. 라는 것을 요청 받았다. 실상 테이블을 이런식으로 설계를 하면 안되지만, 어쩔 수 없는 기획적인 또한구조적인 사정이 있으니, 일단 가능한 방법을 찾아 보도록 했다. 이 경우 테이블2에 해당 변수가 존재하는지를 알아 볼려면 별도로SELECT를 3번을 하고 INSERT를 최고 3번을 해야 한다. 좀더 간단히 할 수 있을 것 같다는 생각이 들었다. SQL에서 배열을 사용할 수 있다면 이 변수를 하나의 배열에 넣고 LOOP를 돌면서검사하고 INSERT를 할 수 있을꺼 같다. 과연 이런 형태가 가능한가? 일단 배열의 사용은 불가능하다. 이와 비슷..

DataBase/SQL 2013.02.13

[SQL] ALTER TABLE

어려운 것도 아닌데 자꾸 깜박해서 여기에 적어 놓는다. SQL 에서는 이렇게. 1. 추가. ALTER TABLE 테이블 명 ADD 컬럼명1-1 속성을 줄때 ALTER TABLE 테이블 명 ADD 컬럼명 INT DEFAULT 0 NOT NULL -> INT형으로 NULL을 허용하지 않고 기본값은 0이라는 컬럼을 추가한다. 2. 삭제 ALTER TABLE 테이블 명 DROP 컬럼명 3. 제약조건 추가. ALTER TABLE 테이블 명 ADD CONSTRAINT 제약조건(EX : PRIMARY KEY 컬럼명) 4. 제약조건 제거 ALTER TABLE 테이블 명 DROP CONSTRAINT 제약조건(EX : PRIMARY KEY 컬럼명) 5. 컬럼명 수정 EXEC SP_RENAME '테이블명.기존컬럼명', '변..

DataBase/SQL 2013.02.13