Juhyeng Han 2015-06-21
Spelling corrected docs/*
@b3bb905a6443025a1df9550ca1d9131e5a2fb9a3
docs/ko/spec/project-transfer.md
--- docs/ko/spec/project-transfer.md
+++ docs/ko/spec/project-transfer.md
@@ -1,4 +1,4 @@
-이 문서는 프로젝트 이관 기능에 대해 설명한다.
+이 문서는 프로젝트 이관 기능에 관해 설명한다.
 
 개요
 ---
@@ -10,9 +10,9 @@
 -------------
 
 * 프로젝트 이관 요청은 해당 프로젝트에 관리자 권한을 가지고 있는 사용자만 할 수 있다.
- * 그룹에 속한 프로젝트는 사이트 관리자, 그룹 관리자, 프로젝트 관리자가 요청 할 수 있다.
- * 계정에 속한 프로젝트는 사이트 관리자, 프로젝트 관리자가 요청 할 수 있다.
-* 프로젝트 이관 요청을 보내는 사용자는 프로젝트를 이관 받을 '그룹 이름' 또는 '사용자 아이디'를 입력해야 한다.
+ * 그룹에 속한 프로젝트는 사이트 관리자, 그룹 관리자, 프로젝트 관리자가 요청할 수 있다.
+ * 계정에 속한 프로젝트는 사이트 관리자, 프로젝트 관리자가 요청할 수 있다.
+* 프로젝트 이관 요청을 보내는 사용자는 프로젝트를 이관받을 '그룹 이름' 또는 '사용자 아이디'를 입력해야 한다.
 * 요비는 프로젝트 이관 요청을 수락할 수 있는 사용자에게 프로젝트 이관 요청 이메일을 발송한다.
  * 프로젝트 이관 요청 이메일로 프로젝트 이관 요청을 수락할 수 있는 링크를 보낸다.
  * '프로젝트 이관 요청 수락 링크'는 프로젝트 이관 요청을 보낸 시점에서 하루 동안 유효하다.
@@ -27,11 +27,11 @@
  * 계정으로 보내진 프로젝트 이관 요청은 사이트 관리자와 해당 계정 사용자만 수락할 수 있다.
 * '프로젝트 이관 요청 수락 링크'를 클릭하면 프로젝트 이관을 완료할 수 있다.
 * 프로젝트 이관이 완료되면 다음과 같이 변경한다.
- * 프로젝트의 소유자(owner 속성)를 이관 받은 사용자 계정 또는 그룹 이름으로 변경한다.
+ * 프로젝트의 소유자(owner 속성)를 이관받은 사용자 계정 또는 그룹 이름으로 변경한다.
   * 계정으로 보낸 이관 요청을 수락했을 때는 해당 계정으로 프로젝트 소유자가 바뀐다.
   * 그룹으로 보낸 이관 요청을 수락했을 때는 해당 그룹으로 프로젝트 소유자가 바뀐다.
  * 프로젝트 소유자가 바뀌기 때문에 기존 프로젝트의 이슈, 게시물, 저장소 URL 등이 변경된다.
  * 보낸 프로젝트와 동일한 이름의 프로젝트가 이미 존재하는 경우에는 프로젝트 이름을 변경하여 받는다.
   * 동일한 이름의 프로젝트가 있는 경우에는 프로젝트 이름 뒤에 '-1'을 추가해서 찾아보고 그래도 있는 경우에는 '-2'를 추가하는 식으로 새 이름을 정한다.
-* 프로젝트 이관 요청을 수락한 다음, 또 다시 이관 수락 링크를 사용한 경우에는 이미 처리가 된 요청이기 때문에 404 Not Found로 응답한다.
+* 프로젝트 이관 요청을 수락한 다음, 또다시 이관 수락 링크를 사용한 경우에는 이미 처리가 된 요청이기 때문에 404 Not Found로 응답한다.
 * 프로젝트 이관 요청을 수락할 수 없는 사용자가 해당 링크를 사용한 경우에는 403 Forbidden으로 응답한다.
docs/ko/spec/yobi-organization-plan.md
--- docs/ko/spec/yobi-organization-plan.md
+++ docs/ko/spec/yobi-organization-plan.md
@@ -5,12 +5,12 @@
     * 그룹 관리자(Group Manager) : 그룹 관리자로 등록된 사용자
     * 그룹 참여자(Group Participant)
 * 프로젝트 멤버 = 프로젝트 관리자 + 프로젝트 참여자
-    * 프로젝트 소유자(Project Owner) : 프로젝트를 생성한 사용자 또는 프로젝트를 이관 받은 사용자
+    * 프로젝트 소유자(Project Owner) : 프로젝트를 생성한 사용자 또는 프로젝트를 이관받은 사용자
     * 프로젝트 관리자(Project Manager) : 프로젝트 관리자 권한을 부여 받은 사용자 + 프로젝트 소유자
     * 프로젝트 참여자(Project Participant)
 * 사용자(User) : Yobi에 접속한 모든 사람
-* 로그인 사용자(Guest) : 로그인 한 사용자
-* 익명 사용자(Anonymous) : 로그인 하지 않은 사용자
+* 로그인 사용자(Guest) : 로그인한 사용자
+* 익명 사용자(Anonymous) : 로그인하지 않은 사용자
 
 
 정의
@@ -23,10 +23,10 @@
 -----
 
 * 그룹 생성
-    * 로그인 한 사용자는 그룹을 만들 수 있다.
+    * 로그인한 사용자는 그룹을 만들 수 있다.
 * 그룹 삭제
-    * 그룹 관리자는 자신이 관리자인 그룹을 삭제 할 수 있다.
-        * 그룹이 소유하고 있는 프로젝트가 있다면 삭제 할 수 없다.
+    * 그룹 관리자는 자신이 관리자인 그룹을 삭제할 수 있다.
+        * 그룹이 소유하고 있는 프로젝트가 있다면 삭제할 수 없다.
         * 그룹이 소유하고 있는 모든 프로젝트를 이관/삭제하여 그룹이 소유하고 있는 프로젝트가 전혀 없을 때 삭제 가능하다.
         * 그룹이 삭제되어도 그룹이 소유한 프로젝트의 멤버 구성에는 변함이 없다.
 * 사용자가 할 수 있는 일
@@ -34,39 +34,39 @@
     * 사용자는 그룹의 모든 멤버 리스트를 볼 수 있다.
     * 사용자는 자신이 멤버로 등록된 그룹의 리스트를 볼 수 있다.
 * 그룹 관리자가 할 수 있는 일
-    * 그룹 관리자는 자신이 관리자인 그룹의 프로젝트를 생성/삭제 할 수 있다.
+    * 그룹 관리자는 자신이 관리자인 그룹의 프로젝트를 생성/삭제할 수 있다.
     * 그룹 관리자는 자신이 관리자인 그룹의 모든 프로젝트에서 프로젝트 관리자 역할을 수행할 수 있다.
-        * 프로젝트 멤버는 관리자, 참여자 두 개만 존재 하지만 그룹이 소유한 프로젝트에서는 그룹 관리자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 관리자 롤과 동일한 기능을 수행 할 수 있다.
+        * 프로젝트 멤버는 관리자, 참여자 두 개만 존재하지만 그룹이 소유한 프로젝트에서는 그룹 관리자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 관리자 롤과 동일한 기능을 수행할 수 있다.
     * 그룹 참여자는 자신이 참여자인 그룹의 모든 protected 프로젝트에서 프로젝트 참여자 역할을 수행할 수 있다.
-        * 프로젝트 멤버는 관리자, 참여자 두 개만 존재 하지만 그룹이 소유한 protected 프로젝트에서는 그룹 참여자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 참여자 롤과 동일한 기능을 수행 할 수 있다.
+        * 프로젝트 멤버는 관리자, 참여자 두 개만 존재하지만 그룹이 소유한 protected 프로젝트에서는 그룹 참여자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 참여자 롤과 동일한 기능을 수행할 수 있다.
     * 그룹 관리자는 자신이 그룹 관리자인 그룹에 자신 이외의 관리자를 추가할 수 있다.
         * 따라서 하나의 그룹은 그룹 관리자가 두 명 이상이 될 수 있다.
     * 그룹 관리자는 그룹에 멤버를 추가/삭제를 할 수 있다.
         * 멤버들을 특정 그룹으로 묶어서 편하게 보기 위해서.
         * 특정 프로젝트는 해당 그룹의 멤버들만 접근 가능 하게 만들기 위해서.
 * 그룹 멤버가 할 수 있는 일
-    * 그룹 멤버는 자신이 속한 그룹에서 탈퇴 할 수 있다.
+    * 그룹 멤버는 자신이 속한 그룹에서 탈퇴할 수 있다.
 * 검색
-    * 사용자는 그룹을 찾기 위해 그룹 이름으로 검색 할 수 있다.
+    * 사용자는 그룹을 찾기 위해 그룹 이름으로 검색할 수 있다.
 
 
 Project
 -------
 
 * 생성
-    * 로그인 사용자는 프로젝트 생성시에 프로젝트를 자신이 그룹 관리자인 그룹에 추가 할 수 있다.
-    * 로그인 사용자는 프로젝트 생성시에 프로젝트를 자신에게 추가 할 수 있다.
+    * 로그인 사용자는 프로젝트 생성 시에 프로젝트를 자신이 그룹 관리자인 그룹에 추가할 수 있다.
+    * 로그인 사용자는 프로젝트 생성 시에 프로젝트를 자신에게 추가할 수 있다.
 * 공개 설정
     * 프로젝트 관리자는 프로젝트의 공개 설정을 private, protected, public 중 하나로 설정 할 수 있다.
         * 각 설명은 Rule 참조.
 * 개인이 소유한 프로젝트 이관
-    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 다른 사용자에게 이관 할 수 있다.
-    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 어떤 그룹으로 이관 할 수 있다.
-    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 이관 시킨 후 그 프로젝트의 관리자가 된다.
+    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 다른 사용자에게 이관할 수 있다.
+    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 어떤 그룹으로 이관할 수 있다.
+    * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 이관시킨 후 그 프로젝트의 관리자가 된다.
 * 그룹이 소유한 프로젝트 이관
-    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 사용자에게 이관 할 수 있다.
-    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 다른 그룹으로 이관 할 수 있다.
-    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 이관 시킨 후 그 프로젝트의 관리자가 된다.
+    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 사용자에게 이관할 수 있다.
+    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 다른 그룹으로 이관할 수 있다.
+    * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 이관시킨 후 그 프로젝트의 관리자가 된다.
 
 
 Rule
@@ -99,7 +99,7 @@
 | Anonymous         | X               | X                 | O              |
 
 * 각 프로젝트에서 할 수 있는 일
-    * 그룹 멤버 여부와 상관 없이 프로젝트에 어떤 권한을 가지고 있는지에 따라 할 수 있는 일이 결정된다.
+    * 그룹 멤버 여부와 상관없이 프로젝트에 어떤 권한을 가지고 있는지에 따라 할 수 있는 일이 결정된다.
     * 그룹 관리자는 그룹에 속한 프로젝트의 관리자로 등록되기 때문에 프로젝트 관리자 역할을 할 수 있다.
     * 그룹 참여자는 protected 프로젝트의 참여자와 동등한 권한을 갖기 때문에 프로젝트 참여자 역할을 할 수 있다.
 
docs/ko/technical/access-control.md
--- docs/ko/technical/access-control.md
+++ docs/ko/technical/access-control.md
@@ -10,7 +10,7 @@
 공통
 ----
 
-* 그룹 관리자는 그룹에 대한 모든 권한을 갖는다.
+* 그룹 관리자는 그룹에 대한 모든 권한을 가진다.
 * 그룹 관리자 이외의 모든 사용자는 그룹 관리 권한을 갖지 않는다.
 
 
docs/ko/technical/current-user.md
--- docs/ko/technical/current-user.md
+++ docs/ko/technical/current-user.md
@@ -3,8 +3,8 @@
 session
 -------
 
-- 로그인시 생성되어 브라우저 종료 시점까지 보관되는 cookie 이다.
-- 사용자가 로그아웃 하면 삭제된다.
+- 로그인 시 생성되어 브라우저 종료 시점까지 보관되는 cookie 이다.
+- 사용자가 로그아웃하면 삭제된다.
 - userId(고유ID), logindId(로그인ID), userName(이름) 을 key 로 사용해서 `encoded data` 를 만들고 이를 하나의 cookie value 로 저장한다.
 - `encoded data` 는 각각의 key-value 쌍을 `key:value` 형태의 string 으로 만들고 이를 url encode 한 뒤, `%00` 으로 연결한 값이다.
     - ex) userId%3A1%00loginId%3Atest%00userName%3Atestname
@@ -16,8 +16,8 @@
 token
 -----
 
-- 로그인 유지 기능을 선택하고 로그인시 생성되어 30일간 보관되는 cookie 이다.
-- 사용자가 로그아웃 하면 삭제된다.
+- 로그인 유지 기능을 선택하고 로그인 시 생성되어 30일간 보관되는 cookie 이다.
+- 사용자가 로그아웃하면 삭제된다.
 - 로그인 유지를 위한 정보(로그인ID, hash 값)를 저장한다.
 - `yobi.token` 이란 이름을 사용하며 값을 `로그인ID:hash` 형태로 저장한다.
 - `hash` 는 [Sha256Hash#toBase64()](http://shiro.apache.org/static/1.2.1/apidocs/org/apache/shiro/crypto/hash/Sha256Hash.html) 을 이용해서 얻는다. `source` 로 plain password 를, `salt` 로 사용자별 random 생성된 값을, `hashIterations` 으로 1024 상수 값을 사용한다.
@@ -52,7 +52,7 @@
 -----
 
 - `UserApp#currentUser()` 에서 session 정보가 없을 경우 context, token 정보까지 활용하게 되는데 controller 에 action composition 이 적용되어 있을 경우 `UserApp#initTokenUser()` 보다 먼저 실행 될 수 있기 때문이다. (아래 action composition 실행 순서를 참고)
-- context 를 사용해서 `UserApp#initTokenUser()` 의 결과를 저장해 두는건 하나의 요청 내에서 `UserApp#currentUser()` 의 결과가 token 정보를 중복활용하는 것을 방지하기 위해서이다.
+- context 를 사용해서 `UserApp#initTokenUser()` 의 결과를 저장해 두는 건 하나의 요청 내에서 `UserApp#currentUser()` 의 결과가 token 정보를 중복 활용하는 것을 방지하기 위해서이다.
 
 action composition 실행 순서
 ---------------------------
docs/ko/technical/javascript-module-guide.md
--- docs/ko/technical/javascript-module-guide.md
+++ docs/ko/technical/javascript-module-guide.md
@@ -38,8 +38,8 @@
 
 ## $yobi.loadModule 사용법
 * 만약 yobi.module.Name 이라는 이름의 모듈을 정의한 경우 아래와 같다
-* 첫번째 인자: yobi. 을 제외한 모듈 이름
-* 두번째 인자: 해당 모듈 초기화 함수에 제공될 옵션 객체(Object)
+* 첫 번째 인자: yobi. 을 제외한 모듈 이름
+* 두 번째 인자: 해당 모듈 초기화 함수에 제공될 옵션 객체(Object)
 
 >       $yobi.loadModule("module.Name", {
 >            "sOption": "Option Value"
@@ -50,7 +50,7 @@
     이미 페이지 내에 `<script>` 태그를 이용해 포함한 경우에는 동적 로딩은 시도되지 않는다.
     동적 로딩을 시도하는 파일 경로는 `javascripts/service/yobi.(module.Name).js` 이다.
 * 자바스크립트 파일 로딩이 완료되어 모듈 코드를 사용할 수 있을 때 자동으로 초기화를 시도하며 내부적으로 수행되는 코드는 아래와 같다.
-    이 중 htOption 변수는 $yobi.loadModule() 의 두번째 인자와 동일하다
+    이 중 htOption 변수는 $yobi.loadModule() 의 두 번째 인자와 동일하다
 
 >        new yobi.module.Name(htOption)
 
@@ -60,7 +60,7 @@
 ## 기타
 
 * 최상위 객체에 대한 prototype 확장은 사용하지 않는다. 이는 모든 코드에 영향을 미칠 수 있으며 코드 유지보수를 어렵게 만든다
-* 전역 함수, 전역 변수는 최소화 한다. 네임스페이스를 활용하여 코드의 유효 범위를 한정한다
+* 전역 함수, 전역 변수는 최소화한다. 네임스페이스를 활용하여 코드의 유효 범위를 한정한다
 * HTML 템플릿은 되도록 자바스크립트 파일 내에 포함하지 않는다
 * HTML 템플릿은 정적 페이지내에 `<script type="text/x-jquery-tmpl">` 형태로 위치시키고 자바스크립트는 그 내용을 활용하는 형태로 작성한다
 * HTML 템플릿 문법($.tmpl)은 https://github.com/BorisMoore/jquery-tmpl 참조
docs/ko/technical/javascript-naming-convention.md
--- docs/ko/technical/javascript-naming-convention.md
+++ docs/ko/technical/javascript-naming-convention.md
@@ -3,7 +3,7 @@
 ----
 ## 네임스페이스, 모듈, 함수, 변수 등의 이름을 작성할 때
 
-* 단어를 생략하거나 약어를 사용하지 않는다. 단, HTML,URL 등과 같은 범용적인 약어는 사용할 수 있다. 약어 사용시에는 모두 대문자로 작성한다.
+* 단어를 생략하거나 약어를 사용하지 않는다. 단, HTML,URL 등과 같은 범용적인 약어는 사용할 수 있다. 약어 사용 시에는 모두 대문자로 작성한다.
 * 한글 발음을 로마자로 그대로 표기하지 않는다
 * 특수 문자는 가급적 사용하지 않는다. 단, 상수의 이름에서 단어를 구분하기 위한 용도와 Private 지시자 표시를 위하여 언더스코어(`_`)를 사용한다
 * 2글자 이상 대문자를 연속해서 사용하지 않는다. 단, 상수 이름이나 약어는 예외로 한다
@@ -104,7 +104,7 @@
 
 ## 파일 이름
 
-* JavaScript 파일은 하나의 디렉토리 아래에 서브 디렉토리 단위로 나누어 작성한다.
+* JavaScript 파일은 하나의 디렉터리 아래에 서브 디렉터리 단위로 나누어 작성한다.
 * 프레임워크를 포함한 라이브러리는 {SCRIPT_ROOT}/lib , 프로젝트 내 공통 모듈은 {SCRIPT_ROOT}/common , 페이지 단위의 개별 모듈은 {SCRIPT_ROOT}/service 에 위치하는 것을 권장한다.
 * JavaScript 파일은 네임스페이스를 포함하여 모듈 단위로 구성한다. 파일 이름 규칙은 각각 네임스페이스 + 모듈 이름 규칙을 따른다
 
@@ -142,7 +142,7 @@
 * 함수 선언 사이에는 빈 줄을 삽입한다 (함수와 함수 사이)
 * 변수를 선언한 경우에는 다음에 빈 줄을 삽입하지 않는다.
 * 명령문 간에는 빈 줄을 사용하지 않는다. 단, 소스 코드의 길이가 길어지는 경우 구분을 위해 삽입할 수 있다.
-* 변수를 논리적으로 그룹화 한다. 그룹간에는 빈 줄을 사용하여 구분한다
+* 변수를 논리적으로 그룹화한다. 그룹 간에는 빈 줄을 사용하여 구분한다
 
 >        // on request
 >        var requestDetailId;
docs/ko/technical/pagination.md
--- docs/ko/technical/pagination.md
+++ docs/ko/technical/pagination.md
@@ -53,7 +53,7 @@
 
 Type: Number
 
-첫번째 페이지
+첫 번째 페이지
 
 #### options.hasPrev (default: options.current와 options.firstPage로 계산)
 
@@ -73,7 +73,7 @@
 
 다음 페이지 혹은 이전 페이지 링크를 클릭하거나, 이동할 페이지를 입력하고 엔터를 눌렀을 때 실행될 자바스크립트 함수. pagination.js는 이 함수에게 사용자가 이동하고자 하는 페이지의 번호를 pageNum 매개변수로 넘겨준다. 예를 들어, 사용자가 다음 페이지 링크를 클릭했다면 pageNum은 현재 페이지 번호에 1을 더한 것이 된다.
 
-이 값이 설정되면, 이전/다음 페이지 링크의 href 값은 "javascript: void(0)"이 되며, 페이지 입력창에서 페이지를 임력했을 때 해당 페이지로 이동하는 기능도 동작하지 않게 된다. 즉 모든 페이지 이동 기능을 사용자가 직접 구현해야 한다.
+이 값이 설정되면, 이전/다음 페이지 링크의 href 값은 "javascript: void(0)"이 되며, 페이지 입력창에서 페이지를 입력했을 때 해당 페이지로 이동하는 기능도 동작하지 않게 된다. 즉 모든 페이지 이동 기능을 사용자가 직접 구현해야 한다.
 
 Sync
 ----
@@ -166,7 +166,7 @@
     page-number       = 1*DIGIT
     DIGIT             = <any US-ASCII digit "0".."9">
 
-예를 들어 첫번째 페이지만 요청하는 Range 헤더는 다음과 같다.
+예를 들어 첫 번째 페이지만 요청하는 Range 헤더는 다음과 같다.
 
     Range: pages=1
 
@@ -180,13 +180,13 @@
     complete-length   = 1*DIGIT
     SP                = <US-ASCII SP, space (32)>
 
-예를 들어 총 두 페이지 중 첫번째 페이지만을 반환하는 응답에서의 Content-Range 헤더는 다음과 같다.
+예를 들어 총 두 페이지 중 첫 번째 페이지만을 반환하는 응답에서의 Content-Range 헤더는 다음과 같다.
 
     Content-Range: pages 1/2
 
 서버는 상황에 따라 클라이언트가 요청한 것과 다른 페이지를 돌려줄 수도 있다. 이러한 상황에 대한 예외처리의 책임은 클라이언트에게 있다.
 
-주의: 클라이언트의 요청이 Range 요청이 아니더라도(다시말해 요청에 Range 헤더가 포함되어 있지 않더라도), 서버는 스스로의 판단으로 Content-Range 헤더와 그 헤더에 정의된 페이지만을 응답에 담아 반환할 수 있다. 그러나 이 경우 응답의 상태 코드는 206이어서는 안된다. 206으로 응답할 때는 반드시 요청에 Range 헤더가 포함되어 있어야 하기(MUST) 때문이다.
+주의: 클라이언트의 요청이 Range 요청이 아니더라도(다시 말해 요청에 Range 헤더가 포함되어 있지 않더라도), 서버는 스스로의 판단으로 Content-Range 헤더와 그 헤더에 정의된 페이지만을 응답에 담아 반환할 수 있다. 그러나 이 경우 응답의 상태 코드는 206이어서는 안된다. 206으로 응답할 때는 반드시 요청에 Range 헤더가 포함되어 있어야 하기(MUST) 때문이다.
 
 References
 ==========
docs/ko/technical/uploader-client.md
--- docs/ko/technical/uploader-client.md
+++ docs/ko/technical/uploader-client.md
@@ -9,7 +9,7 @@
 
 yobi.Files
 ----
-먼저 yobi.Files.init() 으로 서버측 API 주소를 설정해야 한다.
+먼저 yobi.Files.init() 으로 서버 측 API 주소를 설정해야 한다.
 공통 페이지인 views/scripts.scala.html 에서 이미 yobi.Files.init() 을 아래와 같이 호출하고 있으므로
 개별 페이지에서는 별도로 호출하지 않아도 무방하다.
 
@@ -65,10 +65,10 @@
 사용 가능한 커스텀 이벤트는 아래와 같으며 .attach("이벤트명", function(){}); 로
 핸들러를 지정하고 같은 방식으로 .detach() 를 이용해 핸들러를 제거할 수 있다.
 
-- beforeUpload: 업로드 시작 전 이벤트. 핸들러 함수는 여러개 지정할 수 있는데 단 하나라도 false 를 명시적으로 반환하면 업로드를 중단한다
+- beforeUpload: 업로드 시작 전 이벤트. 핸들러 함수는 여러 개 지정할 수 있는데 단 하나라도 false 를 명시적으로 반환하면 업로드를 중단한다
 - uploadProgress: 업로드 진행 상태 처리를 위한 이벤트
 - successUpload: 업로드 성공(완료) 시 발생하는 이벤트
-- errorUpload: 업로드 실패시 발생하는 이벤트
+- errorUpload: 업로드 실패 시 발생하는 이벤트
 
 예: 기본 사용법
 ```
@@ -119,7 +119,7 @@
 yobi.Attachments
 ----
 
-yobi.Files 가 서버와의 통신을 담당하고 yobi.Attachments 는 커스텀 이벤트 핸들러를 이용해 화면에 첨부된 파일 목록을 나타내는데 사용한다.
+yobi.Files 가 서버와의 통신을 담당하고 yobi.Attachments 는 커스텀 이벤트 핸들러를 이용해 화면에 첨부된 파일 목록을 나타내는 데 사용한다.
 파일 업로더와 함께 사용할 수도 있고, 단순히 resourceType 과 resourceId 만 지정해서 기존에 첨부된 파일 목록을 표현할 수도 있다.
 yobi.Files 와 달리 new yobi.Attachments 로 인스턴스를 생성하여 사용한다.
 
docs/ko/technical/uploader-server-internal.md
--- docs/ko/technical/uploader-server-internal.md
+++ docs/ko/technical/uploader-server-internal.md
@@ -1,4 +1,4 @@
-이 문서는 파일 업로드 기능의 서버측 동작을 설명한다.
+이 문서는 파일 업로드 기능의 서버 측 동작을 설명한다.
 
 개요
 ----
docs/ko/technical/validation-with-annotation.md
--- docs/ko/technical/validation-with-annotation.md
+++ docs/ko/technical/validation-with-annotation.md
@@ -25,7 +25,7 @@
 
 URL에 해당하는 프로젝트가 없거나 현재 사용자가 읽기 권한이 없을 때 403 Forbidden으로 응답한다.
 
-### 사용예
+### 사용 예
 
 다음 코드는 URL 패턴에 해당하는 프로젝트가 있는지 확인한다.
 
@@ -45,7 +45,7 @@
 
 컨트롤러 클래스에 이 애노테이션을 사용하면 해당 컨트롤러의 모든 메서드에 적용된다.
 
-### 사용예
+### 사용 예
 
 다음 코드는 PullRequestApp 컨트롤러의 모든 메서드에 @IsOnlyGitAvailable을 적용하여 이 컨트롤러에서 처리하는 모든 요청은 GIT 저장소를 가진 프로젝트에 대해서만 동작한다고 설정한 것이다.
 
@@ -69,7 +69,7 @@
 
 * value: 생성 권한을 확인하려는 리소스 타입으로 `ResourceType`을 입력한다.
 
-### 사용예
+### 사용 예
 
 위 코드는 현재 로그인한 사용자가 URL 패턴에 해당하는 프로젝트에 BOARD_POST 타입의 리소스를 생성할 수 있는 권한이 있는지 확인한다.
 
@@ -110,7 +110,7 @@
 
 이밖에 필요한 리소스 타입이 있다면 `Resource.getResourceObject` 메서드에 코드를 추가해야 한다.
 
-### 사용예
+### 사용 예
 
 다음 코드는 resourceType을 명시하지 않았기 때문에 기본값인 PROJECT가 적용되어 현재 사용자가 PROJECT 리소스 타입에 READ 권한이 있는지 확인한다.
 
@@ -136,7 +136,7 @@
 
 현재 요청한 사용자가 익명 사용자일 경우에 alert 창을 보여주고 로그인 폼으로 이동시킨다.
 
-### 사용예
+### 사용 예
 
 다음 코드는 로그인한 사용자가 있는지 확인한다.
 
@@ -153,7 +153,7 @@
 
 URL에 해당하는 프로젝트가 없을 때 403 Forbidden으로 응답한다.
 
-### 사용예
+### 사용 예
 
 다음 코드는 URL 패턴에 해당하는 프로젝트가 있는지 확인한다.
 
docs/ko/technical/views-naming-guide.md
--- docs/ko/technical/views-naming-guide.md
+++ docs/ko/technical/views-naming-guide.md
@@ -9,6 +9,6 @@
   목록: list
   삭제: delete
 
-* 신규(create)와 편집(edit)을 하나의 파일로 작성할 수 있을 때에는 write로 한다
+* 신규(create)와 편집(edit)을 하나의 파일로 작성할 수 있을 때는 write로 한다
 * 파일명은 카멜 표기법 ([CamelCase](http://en.wikipedia.org/wiki/CamelCase))을 준수한다
-* 오류 페이지에 사용되는 템플릿 파일은 error 패키지 아래에 공통적으로 위치시킨다
+* 오류 페이지에 사용되는 템플릿 파일은 error 패키지 아래에 공통으로 위치시킨다
docs/ko/update-next-branch-to-0.8.0.md
--- docs/ko/update-next-branch-to-0.8.0.md
+++ docs/ko/update-next-branch-to-0.8.0.md
@@ -1,6 +1,6 @@
-요비 next 브랜치 사용자 중에서 H2 1.4.184를 사용중인 사용자는 다음과 같은 방법으로 업데이트 하지 않으시면 데이터를 손실 할 수 있습니다.
+요비 next 브랜치 사용자 중에서 H2 1.4.184를 사용 중인 사용자는 다음과 같은 방법으로 업데이트하지 않으시면 데이터를 손실할 수 있습니다.
 
-## 현재 사용중인 H2 버전을 확인하는 방법
+## 현재 사용 중인 H2 버전을 확인하는 방법
 
 요비 프로젝트 홈에 있는 build.sbt 파일에 다음 코드가 있다면 1.4.184 버전을 사용하는 중입니다.
 
@@ -8,12 +8,12 @@
 "com.h2database" % "h2" % "1.4.184",
 ```
 
-위와 같은 코드가 보이지 않거나, 버전이 1.3.176 이라면 아래 가이드대로 업그레이드 하지 않고 바로 소스 코드를 rebase 하거나 pull 하여 업데이트 하여 사용하실 수 있습니다.
+위와 같은 코드가 보이지 않거나, 버전이 1.3.176 이라면 아래 가이드대로 업그레이드하지 않고 바로 소스 코드를 rebase 하거나 pull 하여 업데이트하여 사용하실 수 있습니다.
 
-45e1288 커밋부터 next 브랜치는 H2 1.4.184 버전을 사용해왔는데, cd534d2 버전 이후 부터는 H2 1.3.176(안전된 버전) 버전으로 변경했습니다.
+45e1288 커밋부터 next 브랜치는 H2 1.4.184 버전을 사용해왔는데, cd534d2 버전 이후부터는 H2 1.3.176(안정된 버전) 버전으로 변경했습니다.
 따라서 아래 가이드에 따라 데이터 이관 작업을 해주셔야 합니다.
 
-## 1. 먼저, 현재 사용중인 요비를 멈추고, 데이터베이스를 백업해 두세요.
+## 1. 먼저, 현재 사용 중인 요비를 멈추고, 데이터베이스를 백업해 두세요.
 
 ```
 cp yobi.h2.db yobi.h2.db.bak
@@ -29,23 +29,23 @@
 
 ## 3. 이제 요비를 다시 실행합니다. (!주의! 아직은 다른 사용자가 접근하지 못하게 해주세요.)
 
-사이트 관리자로 로그인 하여 사이트 관리 메뉴에 들어가시면 “데이터”라는 메뉴가 있습니다.
-거기서 데이터 백업 버튼을 클릭하시고 다운로드가 완료 될 때까지 기다리세요.
+사이트 관리자로 로그인하여 사이트 관리 메뉴에 들어가시면 “데이터”라는 메뉴가 있습니다.
+거기서 데이터 백업 버튼을 클릭하시고 다운로드가 완료될 때까지 기다리세요.
 
 이때 오직 사이트 관리자만 요비에 접근해서 백업 작업을 해야 합니다.
 그렇지 않으면 데이터 무결성이 깨질 수 있습니다.
 
-다른 사용자 접근을 막기 위해, 프록시 서버를 사용중이라면 해당 서버를 중단하시고 
+다른 사용자 접근을 막기 위해, 프록시 서버를 사용 중이라면 해당 서버를 중단하시고 
 기존에 사용하던 포트가 아닌 다른 포트로 요비를 실행하시기 바랍니다.
 
-## 4. 백업이 끝났다면 이제 요비를 다시 멈추고 이제 최신 버전의 next 브랜치로 업데이트 하세요.
+## 4. 백업이 끝났다면 이제 요비를 다시 멈추고 이제 최신 버전의 next 브랜치로 업데이트하세요.
 
 ```
 git fetch origin
 git rebase origin/next
 ```
 
-이제 원본에 있는 next 브랜치로 rebase 하거나 pull 을 사용하여 현재 사용중인 요비를 최신 코드로 업데이트 합니다.
+이제 원본에 있는 next 브랜치로 rebase 하거나 pull 을 사용하여 현재 사용 중인 요비를 최신 코드로 업데이트합니다.
 
 ## 5. 데이터베이스 파일을 삭제하세요.
 
docs/logging.md
--- docs/logging.md
+++ docs/logging.md
@@ -14,7 +14,7 @@
 the formats can be differ. See `conf/application-logger.xml`, the configuration
 for logging, for the difference between two formats.
 
-Loggin Configuration
+Logging Configuration
 --------------------
 
 You can configure logging in `conf/application-logger.xml`. See LOGBack
@@ -66,8 +66,8 @@
 * Ident field is always filled with "-".
 * Processing time is filled with "-" if serving a request is failed.
 * For chunked encoding, the time taken to generate response body, e.g. the time
-  taken to read a file from a disk and write it to stream to provides it as
-  a attachment a user requests, is not included in the processing time.
+  taken to read a file from a disk and write it to stream to provide it as
+  an attachment a user requests, is not included in the processing time.
 
 References
 ----------
docs/technical/java-coding-guidlines.md
--- docs/technical/java-coding-guidlines.md
+++ docs/technical/java-coding-guidlines.md
@@ -1,7 +1,7 @@
 Java Coding Guidelines
 ======================
 
-This document describes the guildeline you should follow when write code for
+This document describes the guideline you should follow when write code for
 Yobi in Java.
 
 In this document, The words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT" and
docs/update-next-branch-to-0.8.0.md
--- docs/update-next-branch-to-0.8.0.md
+++ docs/update-next-branch-to-0.8.0.md
@@ -23,7 +23,7 @@
 Just copy existing file like yobi.h2.db to another name.
 And if there is something wrong, then just rename it to yobi.h2.db and run the Yobi with it.
 
-## 2. checkout to export-import branch
+## 2. Checkout to export-import branch
 
 On the remote repository(mainstream), There is a branch named, export-import.
 It supports data backup and restore.
docs/userManual/group/group-overview.md
--- docs/userManual/group/group-overview.md
+++ docs/userManual/group/group-overview.md
@@ -24,12 +24,12 @@
 1. Go to the group page.
 1. Click the sawlike `Group Setting` button.
 1. Click the `Setting` tab.
-1. Change your avatar, name and decription.
+1. Change your avatar, name and description.
 
 
 ## Managing members
 
-You can add and remove users from you group and change the member's right.
+You can add and remove users from your group and change the member's right.
 
 ### Adding members
 
@@ -51,7 +51,7 @@
 1. Go to the group page.
 1. Click the sawlike `Group Setting` button.
 1. Click the `Group Member` tab.
-1. Click the combobox at the right of a member and select a authroization type.
+1. Click the combobox at the right of a member and select an authroization type.
 
 
 ## Authorizations
docs/userManual/issue/issue-use-issue.md
--- docs/userManual/issue/issue-use-issue.md
+++ docs/userManual/issue/issue-use-issue.md
@@ -16,11 +16,11 @@
 
 You can choose an assignee on the issue.
 
-1. Click the `Assignee` drop down box on the right of the the issue page.
+1. Click the `Assignee` drop down box on the right of the issue page.
 1. You will see project members.
 1. Click a member to which you want to assign the issue
 
-To assign an issue to an member means that the member should solve the issue. 
+To assign an issue to a member means that the member should solve the issue. 
 
 Issues are filtered by project member names on `Issues` page.
 
@@ -30,7 +30,7 @@
 
 See `docs/userManual/issue/issue-use-milestone.md` to get more information.
 
-### Lables
+### Labels
 
 You can label issues for categorizing and searching. One or more labels can be added to an issue.
 
docs/userManual/issue/issue-use-labels.md
--- docs/userManual/issue/issue-use-labels.md
+++ docs/userManual/issue/issue-use-labels.md
@@ -4,7 +4,7 @@
 
 A label has name and color and is included in a category.
 
-One or more lables can be attached to an issue.
+One or more labels can be attached to an issue.
 
 
 Category
@@ -38,7 +38,7 @@
 To go to the `Issue Label` page, you should be a project manager.
 
 
-Creating lables
+Creating labels
 ---------------
 
 To create labels:
docs/userManual/member/member-manage-project-memeber.md
--- docs/userManual/member/member-manage-project-memeber.md
+++ docs/userManual/member/member-manage-project-memeber.md
@@ -2,10 +2,10 @@
 
 You can manage project members if you are a project manager. You can delete and change authorizations of members.
 
-There are two kinds of authroization, member and manager. Please refer `docs/ko/technical/access-control.md`.
+There are two kinds of authorization, member and manager. Please refer `docs/ko/technical/access-control.md`.
 
 
-Changing member authroization
+Changing member authorization
 ------------------------------
 
 1. Go to a project.
docs/userManual/notification/notification-watch.md
--- docs/userManual/notification/notification-watch.md
+++ docs/userManual/notification/notification-watch.md
@@ -52,7 +52,7 @@
 Unwatching
 ----------
 
-If you do not want to receive notifications any more, use `Unwatch`.
+If you do not want to receive notifications anymore, use `Unwatch`.
 
 ### Unwatching projects
 
@@ -66,5 +66,5 @@
 
 To unwatch individual items:
 
-1. Go to an items on the `Board`, `Issues` or `Pull Request`.
+1. Go to items on the `Board`, `Issues` or `Pull Request`.
 1. Click the `Unwatch` button to stop getting notifications.
docs/userManual/project/project-create-a-project.md
--- docs/userManual/project/project-create-a-project.md
+++ docs/userManual/project/project-create-a-project.md
@@ -8,7 +8,7 @@
 
 In order to create a project, click the `+` button and `Create new project` on the top right of the page.
 
-### Crerate a new project
+### Create a new project
 
 Fill out the form and click the `Create a project` button.
 
docs/userManual/project/project-watch-project.md
--- docs/userManual/project/project-watch-project.md
+++ docs/userManual/project/project-watch-project.md
@@ -8,7 +8,7 @@
 1. Click the `Watch` button.
 1. Click the `Watch` button on popup.
 
-If you do not need to watch project any more, click the `Watching` button and the `Unwatch` button on popup.
+If you do not need to watch project anymore, click the `Watching` button and the `Unwatch` button on popup.
 
 
 Notifications
@@ -23,4 +23,4 @@
 1. Click your avatar on the top of a page.
 1. Click `Account Settings`.
 1. Click `Notification Settings` tab.
-1. Turn on or off notificaiton you want change.
+1. Turn on or off notification you want change.
docs/userManual/projectSetting/project-setting-setting.md
--- docs/userManual/projectSetting/project-setting-setting.md
+++ docs/userManual/projectSetting/project-setting-setting.md
@@ -4,7 +4,7 @@
 
 Project's logo, name, description, share option and member can be configured.
 
-* Go to the project of which you have authroization.
+* Go to the project of which you have authorization.
 * Click 'Project Setting Button' on top right of a project.
 * Click `Setting` tab and change project's logo, name, description and share option.
 
@@ -45,7 +45,7 @@
 
 This option is only shown when project repository type is GIT.
 
-The value means a branch HEAD of git repository points to. Also the value is default branch on `Code` menu and default `to branch` on new pull request page.
+The value means a branch HEAD of git repository points to. Also, the value is default branch on `Code` menu and default `to branch` on new pull request page.
 
 
 ## Menu Setting
docs/userManual/projectSettings/project-setting-setting.md
--- docs/userManual/projectSettings/project-setting-setting.md
+++ docs/userManual/projectSettings/project-setting-setting.md
@@ -4,7 +4,7 @@
 
 Project's logo, name, description, share option and member can be configured.
 
-* Go to the project of which you have authroization.
+* Go to the project of which you have authorization.
 * Click the 'Project Settings' button.
 * Click `Settings` tab and change project's logo, name, description or share option.
 
docs/userManual/pullRequest/pull-request-overview.md
--- docs/userManual/pullRequest/pull-request-overview.md
+++ docs/userManual/pullRequest/pull-request-overview.md
@@ -1,6 +1,6 @@
 # Pull Request
 
-By using `Pull Request` you can let the original project members know the code changes you've made and ask them to review the code, and you can discuss the alterations with the members. Also your code can be merged when the code review is done.
+By using `Pull Request` you can let the original project members know the code changes you've made and ask them to review the code, and you can discuss the alterations with the members. Also, your code can be merged when the code review is done.
 
 `Pull Request`, however, is only available for projects using a git repository.
 
Add a comment
List