본문 바로가기

분류 전체보기

[프로젝트 자동화] 설치 및 운용 가이드(CruiseControl.net ) 1. 관련 프로그램 설치 - IIS 설치 (windows 7 기준) 1). 제어판의 프로그램 및 기능 선택 -> windows 기능 사용/사용 안함 선택. 2)World Wide Web 서비스를 모두 선택하여 설치하면 IIS 7 설치가 완료된다. - CruiseControl 설치 n 지속적인 업데이트로 설치가 간편해졌다. n n n n - CruiseControl.Net 서비스 시작 n 관리도구의 서비스를 선택한 후 서비스 리스트에서 CruiseConrtol.Net을 선택한다. n - 웹 페이지 접속 n 127.0.0.1/ccnet 에 접속 ( iis 설정이 완료 되어 있어야 한다. ) n - CCTray 설치 n n 4. CCNet.Config 작성. D:\MyProject\Server\trunk\My.. 더보기
UML 작동 다이어그램(Behavioral Diagram) UML 2(시퀀스 다이어그램)서론 OMG가 UML을 개선했던 두 가지 이유. OMG(Object Management Architecture) : 객체지향 기법의 적용과 증진, 분산 컴퓨팅 환경에서의 하드웨어 플랫폼과 운영체제에 영향을 받지 않고, 애플리케이션 통합을 위한 프레임워크 제공을 목표 UML 모델이 Model Driven Architecture (MDA)를 다루기 바랬기 때문이다. 즉, UML이 모델 중심의 표기법으로서 쓰여야 한다는 것을 의미한다. UML 1.x 표기법 세트는 큰 어플리케이션에 적용하기 어려웠으며, 다이어그램을 보다 읽기 쉽도록 만들기 위해서는 표기법 엘리먼트들이 개선될 필요도 있었다. 다이어그램의 목적 시퀀스 다이어그램은 객체들 간 인터랙션을 발생 선서대로 보여줄 때 쓰인다... 더보기
UML 구조 다이어그램(structure diagram) UML 2UML 2의 두 가지 기본적인 구조 다이어그램(structure diagram) 목적은 모델링 되는 시스템의 정적인 구조를 보여주는 것이다. 클래스 다이어그램, 컴포넌트 다이어그램, 객체 다이어그램이 포함된다. 작동 다이어그램(Behavioral Diagram) 시스템의 객체들 간 동적인 작동을 보여준다. 메소드, 협업, 액티비티 등이 포함된다. 액티비티 다이어그램, 유스케이스 다이어그램, 시퀀스 다이어그램 등이 있다. 구조 다이어그램 특징. 모델링 되는 시스템의 정적인 구조를 보여준다. 시간에 상관없이 시스템의 요소들에 초점을 맞춘다. 정적 구조는 시스템에 있는 유형들과 이들의 인스턴스를 나타낸다. 요소들 간 관계를 보여주고 심지어 내부 구조까지도 보여준다. 사용 소프트웨어 라이프 사이클 동안.. 더보기
[Objective-C] plist 간단한 사용법 출처 : http://blog.daum.net/shakalis/3 다음은 plist를 만들어서 내용을 읽어들인 후, 출력하는 예제이다. 1) 우선 새로운 plist를 생성한다.-> xcode의 [resources] 디렉토리에서 오른쪽 클릭-> [add] -> [new file] -> [resource] -> [property list] 2) 작성한 plist를 연다.key type value-----------------------------root dictionary 현재 예제에서는 array를 쓸 예정이므로 type을 dictionary가 아닌 array로 바꾼다.그리고 오른쪽 클릭을 하여 [add row]를 선택하여 데이타를 추가한다. key type value---------------------.. 더보기
[Objective-C] 자료형 변환 (NSNumber, int) 1. int => NSNumber int a = 1;NSNumber *temp = [NSNumber numberWithInt:a]; 2. NSNubmer => int NSNumber *temp = [NSNumber numberWithInt:1];int a = [temp IntValue]; 더보기
[Objective-C] CGRectContainsPoint 애니메이션 중인 Sprite를 터치했는지를 알아낼 수 있는 방법이 무엇이 있을까를 고민하다가발견한 함수. boundingBox를 사용하면 쉽게 가져올 수 있다. 사용법.CCSprite *sprite = [CCSprite spriteWitheFile:@"파일.png"];if( CGRectContainsPoint([sprite boundingBox], touchPoint)){ // 터치}else{ // 터치 안됨.} 더보기
[Objective-C] nonatomic 이란? 처음 아이폰 개발을 시작하면서 nonatomic 는 무슨 뜻인가에 대해서 의문을 가진 적이 있다.이게 귀찮음에 그냥 놓아두다가 알아볼 기회가 있었는데. @property (nonatomic 이런 식으로 쓰여지는데, 기본 속성은 atomic로 선언되어 지고, 이 경우는 lock, unlock을 반복한다. 반대로 nonatomic는 당연히 그걸 하지 않는 것이다. 멀티스레드 환경에서는 atomic를 사용하는 것이 좋겠다. 더보기
[Objective-C] assign, retain, copy 란? 처음 생각없이 objective c는 c를 공부한 사람에는 쉽다는 이야기를 듣고 아무 생각 없이 무턱대로 시작했었다. 그때 가장 문제가 된게 클래스 멤버에 대한 호출이 없다. 가져다 사용하고싶은데, 방법을 모르곘었다. 하지만, 모든 답은 인터넷에 있다. Objective-C 의 @property 에서 assign, retain, copy 의 차이질문 : @property 에서 assign, retain, copy 의 차이 답 : assign 은 그냥 값만 set / get 하는 것retain 은 set / get 할때 retain count 를 올려주고 내려주는 것copy 는 set / get 할때 pointer 가 아닌 value 를 주고받는 것 (단, 변하지 않는 값의 경우 copy 가 아닌 원래 값.. 더보기
[Objective-C] may not respond to 'may not respond to 블라블라 ' 에 관한 에러가 나온다면 함수 이름에 대하여 확인해 보거나.(거의 대부분 오타)혹은 헤더에 함수 선언이 되어 있는지 그리고 인자를 확인하다. 즉.... 1. 함수명 확인(철자).2. 인자까지 포함해서 함수 철자 확인.3. 헤더에 선언되어 있는지 확인. 즉...철자를 철저히... 더보기
[Objective-C] 랜덤 함수 arc4random 이라는 랜덤 함수가 objective c 에 있는데, 다른 곳에도 있는지 사실 잘 모르겠다.일단 랜덤 함수라면 c/c++ 에 익숙한 사람이라면 rand() 함수가 익숙 할 것이다. 하지만 rand()가 사실상 정말로 랜덤하게 값을 가져 오지 않는 다는 것을 알것이다. rand()가 이뤄질 때 생성된 테이블에서 정해진 값을 뽑아 오는 것이니까. 해서 srand(time(NULL))와 같은방식으로 랜덤 테이블을 초기화 해주어야 rand() 함수가 진정 랜덤의 기능을 가질 수 있는데 또한 1초안에 srand(time(NULL))로 초기화 해도 다시 rand() 함수를 호출하게 되면 의미가 없어 지는데, (예를 들어 for문에서 호출된다던지....) arc4random 이 친구는 그런거 필요.. 더보기
[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; // 사용 가능}; 위에서 보는 것과 같이. 실제 생성되지 않는 동적 타입에서만 사용 가능. 더보기
[프로젝트 자동화] 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만번 돌려보는 것만으로 종료해버렸다. 더보기
[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.. 더보기
[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.. 더보기
[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는 실행 파일을 기준으로 스크립트가 위치하는 경로이다 더보기
[SQL] 테이블 변수 이번에 요청을 받은 것은, 1. A, B, C라는 변수를 전달 받아 TABLE1에 업데이트를 한다.2. TABLE2에 해당 데이터가 존재하지 않는다면 INSERT 한다. 라는 것을 요청 받았다. 실상 테이블을 이런식으로 설계를 하면 안되지만, 어쩔 수 없는 기획적인 또한구조적인 사정이 있으니, 일단 가능한 방법을 찾아 보도록 했다. 이 경우 테이블2에 해당 변수가 존재하는지를 알아 볼려면 별도로SELECT를 3번을 하고 INSERT를 최고 3번을 해야 한다. 좀더 간단히 할 수 있을 것 같다는 생각이 들었다. SQL에서 배열을 사용할 수 있다면 이 변수를 하나의 배열에 넣고 LOOP를 돌면서검사하고 INSERT를 할 수 있을꺼 같다. 과연 이런 형태가 가능한가? 일단 배열의 사용은 불가능하다. 이와 비슷.. 더보기
[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 '테이블명.기존컬럼명', '변.. 더보기