SVN 간단한 정리

소스관리솔루션 중에 하나인 SVN 에 대해 초간단히 알아봅시다.

소스관리란 말그대로 소스를 관리해주는 걸 말합니다.

그렇다면 왜 필요할까요?

소스라는게 파일이다보니 늘어나면 밑도 끝도 없이 늘어나는데 이걸 손수관리하기도 그렇고

백업을 계속 만들기도 힘들고, 고친 사람 찾기도 힘들고.... 팀작업시 많은 문제들을 해결하기 위해 나온 겁니다.

실전에서도 많이 사용하니 익혀두시면 눈에 띠는 신입생이 되지 않을까 생각해봅니다.

근데 보통 팀작업 좀 한다는 학생들은 다 씁니다. -_-;;;;;;;;;


1. 서버

http://www.visualsvn.com/server/download/

SVN 서버 콘솔로 구축하면 상당히 귀찮고 암호화문제나 기타 등등으로 귀찮아지기 집니다.

그럴때 요녀석이 제격 입니다.

한타에 아파치, 오픈SSL(SSH 인가 -_-), SVN 이 한번에 설치되어서 상당히 편합니다.

그리고 저장소 만들때도 UI 로 가능하고 유저, 그룹관리도 UI 로 가능합니다.

원터치 설치라서 편하고, 처음에 접속하기가 성공하면 그다음으로 어려울게 없습니다.



2. 클라이언트

클라이언트에는 꽤 많은 종류가 있지만 보통 거북이SVN(TortoiseSVN)를 많이 씁니다.

IDE와 연동은 안되지만 탐색기상에서 직접 제어를 해줘야합니다.

VIsual 계열 IDE 에서서는 VisualSVN 플러그인으로 IDE 상 연동이 가능하고,

무료IDE로는 이클립스가 상당히 지원을 잘해주고 있습니다.



3. 기본용어

SVN 에서의 기본 용어를 말씀드리자면 저장소는 말 그대로 저장되는 장소를 말합니다.

유저가 SVN과 연결해서 소스를 저장하는 곳도 저장소라고 부르고,

서버에 소스를 저장하는 곳도 저장소 라고 부릅니다.

보통은 서버에 있는 저장소는 일반적인 저장소 라고 부릅니다.

영어로는 Repository 라고 합니다.

그리고 보통 쓰는게 Commit 과 Update 가 있는데

Commit 은 서버저장소에 유저가 소스를 올려서 갱신하는 걸 이야기 하고,

Update 는 유저저장소로 서버저장소에 있는 소스를 받아서 갱신시키는걸 얘기합니다.

http://www.pyrasis.com/main/Subversion-HOWTO

를 읽어보시면 좀더 자세한 내용이 있습니다.


팁을 말씀드리면 사용자 여러명이 같은 소스코드를 건들고 생각없이 Commit 하면 충돌(conflict 맞나?)이 생깁니다.

이걸 방지하기 위해 기본적으로 Commit 하기 전에는 Update 를 먼저 해주고 하는게 좋습니다.


이걸 이용하면 팀작업시 버전이 꼬이거나 하는 걸 방지할 수 있고

예전 버전으로 돌아가고 싶을 때 돌아갈 수 있고

branch 를 이용하여 메인 작업소스인 trunk 를 건들지 않고 안전하게 개발도 가능하고,

필요하는 부분을 tags 로 옴겨서 보관할 수도 있습니다.

(윗 내용은 SVN에 좀 익숙해지고 찾아보시는게 좋습니다.)

실전에서도 꼭 SVN 은 아니지만 그와 비슷한 것들을 사용하기 때문에

진입장벽이 좀 있다지만 하나에 익숙해지면 다른 소스관리솔루션에도 금방 적응 하실껍니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by NFIsNOT

2009/08/15 20:51 2009/08/15 20:51
Response
No Trackback , No Comment
RSS :
http://www.nfisnot.pe.kr/rss/response/38

L-Value 와 R-Value

 a = 10;
 a = b;

L-Value(좌변값) 와 R-Value(우변값) 는 배정자(=) 를 기준으로 생각한다.

' = ' 을 기준으로 왼쪽은 저장되는 곳, 오른쪽은 저장될 값이다.

다시 말하면 L-Value는 저장될 주소값이 되는 것이다.

그렇기 때문에 L-Value 는 기본적으로 const 가 아닌 값이 바뀔수 있는 형태가 되어야 한다.

하지만 R-Value 는 상수던 변수던 상관 없게 된다.

정리하자면

사용자 삽입 이미지








(출처 : http://orz.or.kr/tt/orz/entry/L-Value-R-Value )

이런 표가 나오게 된다.

위에서 말했듯이 배정자(=)를 기준으로 L-Value 와 R-Value 를 생각하게 되는데

또 다른 판정이 있는 경우는

1) 함수의 리턴 값으로 리턴 받는 받는 임시 객체는 R-Value
2) T() 와 같이 명백하게 생성자를 호출해서 리턴 받는 값 역시 R-Value
(출처 : http://cafe.naver.com/ecpp.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=143 )

이다.

다시 말하면 명시적 const 가 아닌 경우이다.

흔히 사용하는 식인

a = foo();
b = new a();  // b 는 포인터값이 아닙니다.

에서 foo()의 리턴과 a()의 리턴(생성자도 결국은 자기자신의 주소값을 리턴하는 겁니다.)은

R-Value 이 된다.

저런 R-Value 의 경우 const & 이 되게 된다.

여기서 클래스설계시 문제가 된다.

대입(=), 복사생성자를 사용시 다른 클래스로 넘겨주기 전에

넘겨주는 쪽에서 값을 바꿔줘야 할때가 있는데 ( 예 : std::auto_ptr )

명시적인 const 값을 넘겨줬을 때는 불가능하게 하는 것이 정상이다.

물론 mutable 로 패스할 수 있겠지만 이것은 const 의 기본개념을 깨게 된다.

하지만 명시적인 const 가 아닌 경우

즉, 위 1), 2) 에서는 정상작동이 되게 해줘야 한다.

그래서 중간계층을 이용해서 const 를 피해가게 한다.

형변환 연산자인 operater 를 이용해서 중간계층으로 바꿔주는데

이것을 R-Value 를 L-Value 로 바꿔준다고 한다.

이 과정을 통해 명시적인 const 를 막아주고 임시변수의 경우는 중간계층을 통해

정상수행될 수 있게 해주는 것이다.



http://cafe.naver.com/ecpp.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=143

에 이 내용들이 다 있으나 어려운 면이 많아서 다시 정리해서 썼다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by NFIsNOT

2009/03/19 22:33 2009/03/19 22:33
,
Response
No Trackback , No Comment
RSS :
http://www.nfisnot.pe.kr/rss/response/23

Access 간단한 팁

오늘 어쩌다보니 Access 를 이용한 작업을 했다.

간단한 팁을 쓰겠다.

나름 찾는냐고 고생했으니 말이다.

1. 폼을 만들고, 버튼이나 폼 내에서 스크립트를 실행할 경우
    컴포넌트네임.Value 로 하면 값을 받아낼수 있다.
    텍스트 박스나 선택목록이 아닌 이상 간단한데
    콤보박스나 기타를 이용할 경우
    거기서 지정한 필드들중에 가장 처음값이 넘어온다.
    밑에서 언급하겠지만 확실하진 않고 선택값 중 각 필드로 접근하는 방법이 있는거 같다.


2. VBA 내에서 SQL 쿼리문을 쓰고 싶다면
    DAO 를 이용하는게 좋다.
    물론 ADO 나 여러가지 있지만 내가 쓰면서 찾고 또는 VBA 내에서만 설정하면 되고
    (ADO 의 경우 윈도우 관리에서 설정해줘야한다.)
    엑세스 내에 탑재되어 있는 SQL JET엔진을 이용하기 때문에
    특별히 손댈 필요는 없다.

예제 )
   Dim rst As DAO.Recordset
   Dim strSQL As String
   Dim strVal As String

   strSQL = "SELECT 보정치, 역상성 FROM " + 변수_상성테이블 + " WHERE 상성
             = ( (SELECT 성향  FROM " + 변수_캐릭터테이블 + " WHERE ID = " + 변수_공격자ID + " ) +
                (SELECT 성향 FROM " + 변수_캐릭터테이블 + " WHERE ID = " + 변수_방어자ID + ") );"
   Set rst = CurrentDb.OpenRecordset(strSQL)
   strVal = rst!필드명.Value

   여기서 DAO.Recordset 은 DAO 에서 제공하는 인터페이스라고 보면 된다.
   ASP 로 DAO 를 이용한 MSSQL 에 접근해 본 사람은 이해가 편할 것이다.
   (본인은 한 6년만에 해봐서 그런지 햇갈린다.)
   CurrentDb.OpenRecordset(strSQL) 로 쿼리를 날려주면,
   쿼리값이 rst(DAO.Recordset 인터페이스)로 들어간다.
   이후 rst!필드명.Value 식으로 접근해서 값을 뽑아내면 된다.
   위 예제의 경우는 쿼리값의 레코드가 하나만 나왔을 때의 예이다.
   ID로 Select 해서 얻었으니 그 값은 절대하나라는 보장이 있기 때문에 저런 예가 나온 것이다.
   하지만 그렇지 않을 경우는 레코드값이 다중 일수 있기 때문에
   http://www.n2u.co.kr/lecture2007.asp?rnd_no=8 로 가서
   1. 검색(선택) 하기 를 보면 다중 레코드에 대처하는 법을 알수 있을 것이다.
  

3. 위의 접근법으로 1번 마지막에 해답을 찾아보자면
    콤보박스의 Value 역시 다중 필드의 경우
    (레코드는 하나다. 콤보박스에서 선택된 값만 Value 로 넘어온다.)
    콤보박스명.Value!필드명.Value 로 접근할수 있을꺼 같다.
    실험은 귀찮아서 안해봤다.


 후문
VB 문법은 한 8년만에 처음 봐서 거의 새로 공부하는 식으로 했고,
액세스는 써본적도 없어서 내부 쿼리로만 하려고 했는데,
식 작성기나 스크립트가 아닌 걸로 다른 컴포넌트 값에 접근하려고 하니
접근법을 몰라서 편한 스크립트로 짰다.
SQL 문은 좀더 최적화가 가능하겠지만 본인 SQL 도 7년만에 써봐서 질질 쌌다.


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by NFIsNOT

2009/03/07 02:25 2009/03/07 02:25
Response
No Trackback , No Comment
RSS :
http://www.nfisnot.pe.kr/rss/response/15

SVN 기본 명령어

아무리 TortoiseSVN 을 사용한다고 해도,

용어를 알기 위해서는 기본명령어 목록이라도 보면 도움이 된다.

잘 써 봅시다.

http://wiki.kldp.org/wiki.php/SubversionBook/Reference#AEN1344
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by NFIsNOT

2009/02/26 04:22 2009/02/26 04:22
Response
No Trackback , No Comment
RSS :
http://www.nfisnot.pe.kr/rss/response/8