소스 버전관리를 위해서 사용하는 SVN을 설치하고 이전까지는 내부 개발자용으로만 사용하느라 각 Repository 나 Project단위로 접근제어를 할일이 없었습니다.

사용성의 편의(?)를 위해 apache DAV 연동으로 계정만 주어지면 모두 접근이 가능했었기 때문입니다.

 

하지만 외부 프로젝트를 하면서 외부사람들과 교감*(?)을 하기위해 각 프로젝트별로 접근권한을 할당해야 할일이 생겼습니다.

 

svn 프로토콜을 사용하는 방식에서의 접근권한은 어렵지 않게 세팅이 가능한데, 이상하게 apache와 연동하는 http 에서의 접근권한에 대한 참고할 글은 그다지 많지 않아 한시간이나 넘는 삽질을 또 하게 되었습니다. 알면 10분도 안걸리는 일인데 말이죠.

 

이전 redmine + apache + svn 연동 설치과정에 대한 글은 다음을 참고하십시오.

http://gubok.tistory.com/352

 

개략적인 순서는 다음과 같습니다.

 

1. httpd-vhosts.conf 수정

2. access_control 파일 생성 및 수정

3. apache restart

 

1. vhosts.conf 파일 수정

기존 VirtualHost의 Location 부분에 다음 항목을 추가합니다.

SVNPathAuthz on
AuthzSVNAccessFile "D:/Redmine/subversion/svn_access_control.authz"

 

2. svn_access_control.authz 파일은 없습니다. 이름도 임의로 잡아서 생성하면 됩니다. .txt로 해도 됩니다.

저는 좀 뽀대가 있어보이려고 이름도 그렇고 확장자도 authz를 썼을 뿐입니다.

 

access_control 파일을 작성합니다.

이부분에서 좀 혼란을 겪었습니다.

 

[groups]
system= admin
team1 = user1, user2

 

[/]
* =

 

[repositoryA:/]  <== Repository 상 root를 의미합니다.
@system = rw

 

[repositoryA:/trunk/projectA]
@team1 = rw
user3 = r

 

정말 별거 없는데 한시간넘게 헤매다니... 무능한 제자신을 탓해야겠지요...

 

SVN 별로 저장소를 여러개 가져가고 또 저장소별로 프로젝트를 여러개 관리하게 되는데, 위와 같은 방법으로 규칙을 잡아서 작성하면 됩니다.

 

3. 아파치 재시작후 브라우져에서 프로젝트 URL로 접근을 시도 해봅니다.

정상으로 접근이 되면 readonly 사용자를 테스트 하기 위해 eclipse에서 테스트를 해봅니다.

commit을 하려고 하면 다음과 같은 오류(?) 메시지가 나옵니다.

 

Some of selected resources were not committed.
Authentication error.
svn: E170001: Commit failed (details follow):

svn: E170001: Commit failed (details follow):
svn: E170001: MKACTIVITY of '/svn/repositoryA/!svn/act/ae5aeaef-3e01-0010-a2b5-9eref80aae801c': 403 Forbidden (http://localhost:80

 

테스트한 svn full path는 다음과 같습니다. http://localhost/svn/repositoryA/trunk/projectA 입니다.

개인적으로 access_control url 작성시 좀 헷갈렸던 부분이라서 명시합니다.

모든 URL은 Repository 별로 [/]를 시작합니다.

 

이상입니다. 다른분들은 10분만에 모두 해결하시길...  & 도움이 되셨다면 한번씩 꾸~욱 눌러주세요. 아시죠? ㅎㅎㅎ

 

참고 : http://serverfault.com/questions/13853/how-do-i-restrict-repository-access-via-websvn

 



iBatis에서 myBatis로 넘어오면서 selectKey에서 last_insert_id 를 가져오는 방식에 변화가 생겼습니다.

기존 iBatis 방식으로 넘겨받으면 1만 넘어오는데, 이는 increase된 selectKey 가 아닌 inserted row count 입니다.
myBatis에서는 insert시 전달받은 parameter class에 keyProperty로 정의한 값 또는 object로 자동으로 inject 됩니다.

이전 iBatis에서도 그랬는지는 기억이 가물가물하네요. 암튼 경험한 부분을 명시합니다.

 

간단한 예를 들어서 설명합니다.

 

<insert id="insertUser" parameterMap="map">
    INSERT INTO USER (
      NAME, ID, PW 

    )VALUES(
        #{NAME}, #{ID}, #{PW}
    )
<selectKey keyProperty="USER_IDX" resultClass="java.lang.Integer">
    SELECT LAST_INSERT_ID()
</selectKey>
</insert>

 

int insertRowCnt = userMapper.insertUser(map);
int userIdx = map.get("USER_IDX");


다시말해서 위와 같은 방법으로 가져와야 합니다.

 

이전 iBatis에서는 아래와 같이 요청해도 last_insert_id를 리턴해줬던것 같았는데...

int userIdx = userMapper.insertUser(map);

 

만약 map 대신 POJO클래스(UserObject 같은)를 사용한다면 pojo 형태로 keyProperty를 정의합니다.

 

<insert id="insertUser" parameterType="UserObject">
INSERT INTO USER (
  NAME,  ID, PW
)VALUES(
  #{name},  #{id}, #{pw}
)
<selectKey keyProperty="userIdx" resultClass="java.lang.Integer">
    SELECT LAST_INSERT_ID()
</selectKey>
</insert>


int insertRowCnt = userMapper.insertUser(userObject);
int userIdx = userObject.getUserIdx(); <==

 

결론 : 변수로 넘겨준 class에 자동으로 injection된다는 것.

차라리 iBatis를  경험하지 않았더라면 이해가 더 빨랐을 수도 있을것 같습니다. 그저 비슷하려니 하는 막연함이 부른 삽질.

아니면 이전부터 있었던 동일한  기능이었는데, 제대로 알지 못하고 사용했는지도 모르겠습니다. 집에가서 iBatis 책을 찾아봐야겠습니다.

 

이글을 읽는 분들은 부디 저처럼 삽질하지 마시길 바랍니다. 화이팅~

 

 



Spring에서 Custom Error Page를 만들어 테스트 하는데, Chrome에서는 정상적으로 표시가 되는데, IE에서만 나오지 않아서 찾아봤습니다.

 

이유는 Custom Error Page 크기가 너무 작아서라는 군요.

 

 

Custom error page 의 최소 크기는 다음과 같습니다.

 

* 512Bytes이상이어야 하는 페이지

 

400 Bad Request

404 Not Found

406 Not Acceptable
408 Request Time-out
409 Conflict
500 Internal Server Error
501 Not Implemented
505 HTTP Version Not Supported

 

 

* 256Bytes 이상이어야 하는 페이지

 

403 Forbidden

405 Method Not Allowed
410 Gone

 

다음은 Wikipedia에 나온 Custom error page에 대한 내용입니다.

 

Web servers can typically be configured to display a customised 404 error page, including a more natural description, the parent site's branding, and sometimes a site map, a search form or 404 page widget. The protocol level phrase, which is hidden from the user, is rarely customized.

Internet Explorer, however, will not display custom pages unless they are larger than 512 bytes, opting instead to display a "friendly" error page.[3] Google Chrome includes similar functionality, where the 404 is replaced with alternative suggestions generated by Google algorithms, if the page is under 512 bytes in size.[citation needed]. This is a violation of RFC 2616, which states that "user agents SHOULD display any included entity to the user".

Another problem is that if the page does not provide a favicon, and a separate custom 404 page exists, extra traffic and longer loading times will be generated.[4][5]



« PREV : 1 : ··· : 22 : 23 : 24 : 25 : 26 : 27 : 28 : ··· : 61 : NEXT »