2013년 12월 23일 월요일

centos svn 서버 구축

centos svn 서버 구축

1. 설치
# yum install -y subversion

2. 폴더 생성 및 Repository 생성
# mkdir /home/svn
# cd /home/svn
# svnadmin create --fs-type fsfs {repository name}
# chmod -R g+w {repository name}

3. 설정하기
# cd /home/svn/{저장소 이름}/conf
conf 폴더 안에 보면 설정파일이 세 개 있다..
1)
# vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
realm = {Repository Group Name}
2)
# vi passwd
[users]
{아이디} = {비번}  
3)
# vi authz
[{저장소 이름}:/]
{아이디} = rw

4.방화벽 설정
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 3690 -j ACCEPT
# service iptables restart
* 방화벽 포트 설정이 에러가 날 경우 리눅스 자체의 setup 커맨드를 이용해서 방화벽 3609(tcp, upd)를 열어줄것

5. 환경파일설정
svnserve를 서비스로 구동시키려면 아래와 같이 환경설정파일을 추가해줘야한다
# vi /etc/sysconfig/svnserve
위 경로에 파일이 존재하지 않을텐데 vi편집기로 파일을 생성해서 아래의 내용저장
OPTIONS="--threads --root /{repository 디렉토리}"

6.서버 기동
# svnserve -d -r /home/svn/ --listen-port 3690
# killall svnserve 

7. 기본 폴더 생성
# export SVN_EDITOR=/usr/bin/vim
# svn mkdir svn://{Server domain or IP}/{저장소 이름}/trunk
* 위 명령어 치면 에디터가 뜨는데 :wq!  명령으로 저장후 닫은후 계속(C)를 선택하면 된다.
* trunk 생성 시 "Store password unencrypted (yes/no)?" 에서 yes 또는 예(리눅스 인코딩이 한글의 경우)를 입력
# svn mkdir svn://{Server domain or IP}/{저장소 이름}/branches
# svn mkdir svn://{Server domain or IP}/{저장소 이름}/tags
#기본폴더 확인
svn list svn://{Server domain or IP}/{저장소 이름}
branches/
tags/
trunk/

8. 소스 코드 import
8.1 이클립스에서 작업
이클립스에서 이미 생성된 프로젝트를 share project 메뉴를 통해 trunk에 하면 root에 커밋이 되버린다. 따라서 svn repositories 에서 위의 작업으로 생성된 리파지토리를 추가 trunk선택 후 메뉴에서 import 한다. trunk에서 checkout 할것.

8.2 터미널에서 작업
svn server 로그아웃 후 로컬 작업
# svn import -m "initial import" ./project_folder/ svn://[user_name]@[server_name]/[repository_path]/project_name/trunk/
* branches, tags는 클라이언트에서 필요할때 커밋하는게 편함

추가의 경우
2, 3, 7, 8 만 작업할면 된다


==================== 참고 ==============================
아래 두 사이트를 비교해 가서 설정 할 것



 ** 방화벽 포트 설정이 에러가 날 경우 setup을 이용해서 방화벽 3609(tcp, upd)를 열어줄것
 ** trunk 생성 시 "Store password unencrypted (yes/no)?" 에서 yes 또는 예(리눅스 인코딩이 한글의 경우)를 입력

svn 구축 후 trunk, branches, tags에 소스 import(branches와 tags는 필요에 따라)

기본적으로 trunk에서 작업하고 tag 또는 branches를 사용하고 싶을 때는 UI툴 보다는 터미널에서 svn copy로 작업하는게 빠르겠다.

==================================================
구축 후 새로운 프로젝트(=repository)를 추가 할 경우
1. repository 생성
2. conf 파일 수정
3. trunk, branches, tags폴더 생성
4. 로컬 프로젝트를 서버의 trunk로 import
svn import -m “new import" ./test_app/ svn://username@xxx.xxx.xxx.xxx/project_name/trunk/
5. 서버의 trunk에서 tags, branches로 카피
6. IDE에서 svn tool로 checkout(프로젝트 하나당 리포지토리하나)
7. 끝

2013년 11월 18일 월요일

Remove my project from SVN source control

출처

http://iphonedevsdk.com/forum/iphone-sdk-tools-utilities/96459-remove-my-project-from-svn-source-control.html

1. cd to the top level project directory in Terminal
2. find ./ -name .svn -exec rm -rf {} \;

2013년 11월 11일 월요일

다른 프로젝트를 참조하는 웹 프로젝트에서 classnotfoundexception일 발생할 경우

Build Config에서 참조 프로젝트가 추가되어 있는 지 확인 후
Project의 Properties > Deployment Assembly > Add...후 배포 경로에 프로젝트를 추가 해 주면 되더라.

* 주의) 실제 배포 시 위의 두 가지 설정과는 별개로 참조되는 프로젝트는 jar파일로 만들어 lib폴더에 배포해줘야 함.

2013년 11월 10일 일요일

XCode 5 에서 신규 프로젝트 svn서버에 넣기

Xcode 5, Export Project to SVN repository


http://stackoverflow.com/questions/18894195/xcode-5-export-project-to-svn-repository

2013년 8월 12일 월요일

스프링 기반 웹프로젝트 구축

 JEE용 이클립스 다운

 프로젝트 인코딩 설정(java 및 페이지파일등등)
Window>Pref..>General>Content Types에서 페이지파일 UTF-8으로 설정
Window>Pref..>General>Workspace에서 UTF-8으로 설정

 이클립스(JEE) market place에서 sts설치


◆ 이클립스 market place에서 subversive 설치(+커넥터)


 Dynamic web project 생성


 폴더 및 스프링 설정


 초기페이지 /WEB-INF/view/의 페이지로 리다이렉션
/index.jsp -> /web-inf/view/main.jsp
스프링시큐리티 세팅 후 삭제

 jquery, ajax 세팅
각 메뉴는 일반 submit으로 1:1로 페이지를 만들고 페이지 내부는 ajax로 처리
all ajax는 history back을 고려했을 때 문제가 있음.

 json 세팅
jackson-all-1.9.0.jar
json-lib-2.3-jdk15.jar
json-lib-ext-spring-1.0.2.jar
json-simple-1.1.1.jar
+
http://json-lib.sourceforge.net/ (필요한 라이브러리 리스트)

 mybatis설정

 log4j설정

 스프링시큐리티 설정

 jQuery validation

 jQuery i18n
스크립트단 jQuery i18.properties
html단 spring tag(MessageSource)
http://viralpatel.net/blogs/spring-3-mvc-internationalization-i18n-localization-tutorial-example/


2013년 7월 21일 일요일

String 을 Byte 단위로 자르는 함수

출처 http://dreamchaser.tistory.com/10

/**
* String 을 BYTE 단위로 자르는 함수
* @author 박동규
* @param startIndex, length
* @return String 잘려진 문자열
*/
public String cutStringToByte (String str, int startIndex , int length) {
byte[] b1 = null;
byte[] b2 = null;
try{
if(str == null ) {
return "";
}
b1 = str.getBytes();
b2 = new byte[length] ;
if( length > (b1.length - startIndex) ) {
length = b1.length - startIndex;
}
System.arraycopy(b1,startIndex,b2,0,length);
} catch (Exception e) {
e.printStackTrace();
}
return new String(b2);
}

2013년 5월 30일 목요일

Xcode 에서 프로젝트 복사해서 별도의 프로젝트 생성하기

1. 파인더에서 프로젝트 폴더로 가서 프로젝트 폴더를 통채로 별도의 폴더에 복제
2. 복제된 폴더의 프로젝트 파일을 연다.
3. 왼쪽 창에서 프로젝트 루트를 선택한 후 오른쪽 인스펙터의  project name 창에서 원하는 프로젝트 명을 입력한 후 엔터를 누르면 target, pch, info 파일 등을 rename할 거냐고 물어본다.
4. rename 선택하면 끝

2013년 5월 29일 수요일

안드로이드 레이아웃 겹치기

혹시 저작권에 문제가 된다면 연락주시면 삭제하겠습니다.

레이아웃 겹치기

카메라 어플을 쓰다보면 기능을 조작하는 부분과 화면이 보이는 2가지 레이아웃을 겹치게 되
데 이것을 한번 해봅시다.


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       >
<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="16sp"
       android:text="이것은 바닥에 있는 레이아웃입니다."
       />
<Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="바닥의 버튼"
       />
</LinearLayout>

over.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:background="#40ffff00"
    >
<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="16sp"
       android:text="이것은 위쪽에 겹쳐진 레이아웃입니다."
       />
<Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="위쪽의 버튼"
       />
</LinearLayout>


자바파일

package com.android.ex85;

import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class ex85 extends Activity {
       public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             Window win = getWindow();
             win.setContentView(R.layout.main);//첫번째에 메인을 깔고

             //그다음 인플레이션으로 겹치는 레이아웃을 깐다
             LayoutInflater inflater = (LayoutInflater)getSystemService(
                           Context.LAYOUT_INFLATER_SERVICE);
             LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.overnull);
            
             LinearLayout.LayoutParams paramlinear = newLinearLayout.LayoutParams(
                           LinearLayout.LayoutParams.FILL_PARENT,
                           LinearLayout.LayoutParams.FILL_PARENT);
             win.addContentView(linear, paramlinear);// 부분이 레이아웃을겹치는 부분
             //add 기존의 레이아웃에 겹쳐서 배치하라는 뜻이다.
       }
}




2013년 3월 10일 일요일

XCode 에서 svn서버 연동해서 소스 관리

출처: http://wizardee.tistory.com/109
혹시 저작권에 문제가 된다면 연락주시면 삭제하겠습니다.

1. 로컬디스크에 있는 프로젝트를 리모트 서버에 추가
Organizer에서 Add Repositories...로 추가
Location: svn://xxx.yyy.zzz/svn-root-dir/
Type: svn

Organizer의 Root를 선택 후 trunk폴더를 선택
mobile/ios/wowpad/trunk 가 선택된 걸 확인 후 import를 눌러 로컬디스크의 프로젝트 폴더의 루트 폴더를 선택 후 임포트.

Trunk에서 프로젝트가 임포트 된 걸 확인. 히스토리 확인도 여기서 가능.

2. 체크아웃
Trunk를 선택 후 다시 프로젝트 폴더를 선택 후 체크아웃. 로컬디스크의 프로젝트와 다른 폴더를 선택 할 것.

끝.


xcode에서 svn설정하는 방법에 대한 초간단 설명~!!
현재(2012년 9월4일) xcode의 버전은 요거다.

OS는 요거고..

1. 우선, xcode에서 프로젝트를 생성해 본다.(뭐든 상관없다. 여기선 empty application으로 생성~)
생성하면, 아래와 같이 디렉토리와 파일들이 주루룩 생성된다.
2. 이제 SVN연동을 한다. xcode 메뉴에서 Window -> Organizer 를 선택하고 Repositories를 선택하면 화면에 현재 연동하고 있는 SVN 서버 목록들이 보이거나 처음 연동이라면 아무것도 보이질 않을 것이다.
화면 좌측 하단에 '+' 메뉴를 눌러 SVN 서버를 추가한다.
3. Name은 원하는 이름을 쓰고, Location에는 SVN서버주소(IP도 상관없음)와 Repository명을 써 준다.(물론, 현재 접속하려는 SVN서버가 외부에서 접속이 가능하고 Repository 또한 생성이 되어 있다는 전제하에 설명하는 것임~!)
정상적으로 입력이 되면 아래 화면처럼 인증을 요구하는(Authentication required) 메세지와 함께
Type이 자동으로 Subversion으로 변경된다.(만약 Git서버거나 하면 git 타입으로 변경될 듯~)
-> 혹시 이미 전에 프로젝트 파일을 만들면서 git 기능을 추가했던 프로젝트 들은 계속 repository 가 svn 서버가 아닌 로컬 git 폴더로 될 때가 있는데, 해결 방법은 Finder에서 숨김파일 보기를 활성화 하고 프로젝트 폴더에 있는 .git 폴더를 삭제한 후, 다시 변경해 보면 된다.

자 그럼~ 입력이 다 되었으면, 과감하게 'Next'~!
4. SVN 디렉토리 관리 규칙이 있다면 그에 맞게 입력하고 그렇지 않다면 가볍게 'Add' 버튼 클릭~!
5. SVN연결이 되면 좌측에 SVN서버 정보와 'Root'라는 메뉴가 생성되고 해당 SVN서버에 접속을 위해
Username / Password를 입력하라는 화면이 나온다. 여기서 잠깐~!! 무슨 이유인지는 모르겠으나, 해당 SVN서버에 접속할 수 있는 계정이 패스워드가 지정되어 있으면, 나중에 파일 커밋등을 할 때 인증실패 에러가 발생한다.
이럴 땐, 해당 계정에 패스워드를 없애주면 해결이 되는데.. 이러한 원인을 검색을 해 본 결과, xcode에서는 입력받은 패스워드 정보를 막상 SVN에 접속할 때는 사용하지 않는다고 한다.(이런 말도 안되는 경우가.. ㅜㅠ)
암튼.. xcode에서 SVN접속할 때 사용되는 계정은 패스워드 없이 생성을 해 놓도록 한다.(이 부분은 많이 의심쩍긴  함. -.-a;;) 
6. SVN에 정상적으로 접속이 되면 현재 해당 Repository에 생성되어 있는 다른 프로젝트 정보들을 볼 수 있다.
7. 여기서 우측 하단에 import 메뉴를 선택하여, 좀전에 생성한 프로젝트를 SVN에 올린다.
8. 메세지(코멘트) 넣는 것도 습관화가 필요..(이렇게 디폴트 메세지 사용 말고.. ㅡ.ㅡ)
9. import가 정상적으로 되었다면, 아래 화면과 같이 디렉토리와 파일들이 보일 것이다.
10. 그리고 나서, 로컬에 있는 해당 프로젝트를 삭제하고 xcode를 다시 실행한다.(중요~!!)
이상하게 xcode에서는 SVN에 프로젝트를 올린 후에 로컬에 프로젝트를 삭제하고, SVN으로부터 다시 체크아웃 받아야 실제 SVN연동이 완료가 되는 것 같다.(아주 번거롭다.. 혹시 뭔가 다른 설정이 필요한 걸까??)

11. xcode가 재실행 되었으면, xcode메뉴에서 Window -> Organizer 를 선택한 후, 체크아웃 할 프로젝트를 선택한 후, 좌측하단에 있는 체크아웃 메뉴를 선택한다. 
12. 체크아웃이 완료가 되었으면, 해당 프로젝트를 open할 것이냐고 물어본다. 당근 open을 클릭하자~!
(다시한번 말하지만, 체크아웃 전에 반드시 로컬에 프로젝트를 삭제해 놔야 한다! -.-+)
13. 체크아웃이 정상적으로 되었다면, 파일 하나를 수정해 보자. 여기서는 main.m에 간단한 코드를 추가해 봤다.
14. 코드 추가 후, 해당 파일의 서브메뉴(?)에서 'Source Control -> Commit Selected Files'를 선택하면..
15. 로컬과 서버에 있는 파일을 비교해서 화면에 보여준다. 별 문제가 없으면, 반드시(!) 메세지(코멘트)에 적당한 문구를 넣고 commit 을 실행한다.(메세지를 넣을 때까지 화면이 넘어가지 않는다. ㅡ.ㅡa;;)
16. Window -> Organizer 를 선택해서 해당 프로젝트를 선택하면, 조금전 했던 작업에 대한 내용이 히스토리로 보여진다.

여기까지 보여졌다면, 일단 SVN 서버와의 연동은 끝났다고 볼 수 있다. 이클립스에서는 정말 간단하게 되었던 것들이 xcode에서는 왜이리 제대로 안되는 건지 이해가 안 된다. ㅜㅜ SVN 접속시 계정의 패스워드가 없어야 하는 것이나, 프로젝트 import 후 바로 SVN 연동이 되는 게 아니라, '로컬 폴더 삭제 -> 해당 프로젝트 그대로 체크아웃'을 해야 연동이 되는 것 역시나 이해가 ㅜㅠ;;(xcode를 수시로 재실행해야 하는 상황도 영~ ㅜㅠ.. 내가 뭘 그리 잘못한건지..)

이상, xcode와 SVN연동에 혹시나 참고가 될까 해서 정리해 본다~ :)

2013년 3월 3일 일요일

2013년 2월 27일 수요일

D.U.N.S Number 무료발급

D.U.N.S Number 무료발급

https://developer.apple.com/kr/support/ios/D-U-N-S.html 에서
D-U-N-S Number 조회 도구 에서 작성해서 보내면....

나이스디앤비에서 연락이 온다. 추가서류 스캔해서 보내면 몇 시간 후에 D.U.N.S Number가 발급됐다고 DNB에서 메일이 온다.

끝. 돈 벌었다...

2013년 2월 20일 수요일

번들ID개념잡기( Provisioning > XCode > AppStore )

http://kapps.co.kr/bbs/board.php?bo_table=m52&wr_id=20