Subversion, Bitnami Redmine 다운, 설치 및 저장소 연동 그리고 백업과 복원



이 글에서는 우리가 자주 사용하는 SVN Subversion과 Bitnami Redmine을 Windows7에 다운, 설치 및 저장소 연동, 

그리고 백업과 복원에 대해서 정리를 한다. 내 스스로가 나중에 잊어버리지 않기 위해...;; 요즈음 머리가;;


여기 자료들은 Subversion SVN과 Redmine 설치를 위해서 웹 검색을 하면서 모은 자료이기도 하다.

그때그때 정리해서 저장을 해 뒀지만, 어느 분의 웹에서 검색을 했던 자료인지는 저장해 두지를 않았다;; 구찮기도 하고;;

본인이 작성한 자료를 삭제하라고 하면 삭제를 해야하지 않을까 싶다. 

문제가 되는 자료가 있다면 거침없이 하이킥을;;


다만 조금이라도 도움이 되는 분이 있으면 그것으로 대 만족이다.

일단 내 자신의 만족을 위해서 작성했다. ^^



0. 목표 및 진행순서

목표는 Linux에 비해서 접근이 쉬운 Windows7 환경에서 Subversion과 Redmine의 저장소 연결을 통해서,

소스코드 버전 관리(Subversion SVN) 및 프로젝트 관리 시스템(Redmine)의 모든 환경을 쉽게 셋팅하는 것이 목표다.

물론 장비 이동등으로 인한 백업 및 복원도 포함한다.


소스로 직접 인스톨 하고 싶은 사람은 최신 버전을 받아서 커맨드 입력을 해도 되지만, 여기서는 패스한다.


진행 순서는 아래와 같다.


1. Subversion 다운로드 및 설치(Setup-Subversion-1.6.6.msi)

  1-1. 다운로드

  1-2. 설치

  1-3. SVN Repository 생성

  1-4. SVN Repository 정보 셋팅

  1-5. SVN Commit시 반드시 Message 남기기

  1-6. Subversion 구동방법

    1-6-1. 수동 구동

    1-6-2. 서비스 구동

    1-6-3. 서비스 삭제

    1-6-4. SVNSERVE Manager 사용


2. SVNSERVE Manager 다운로드 및 설치(SVNManager-1.1.2-Setup.msi)

  2-1. 다운로드

  2-2. 설치

  2-3. 실행 및 셋팅

  2-4. 방화벽 해제


3. TortoiseSVN 다운로드 및 설치(TortoiseSVN-1.8.8.25755-x64-svn-1.8.10.msi)

  3-1. 다운로드

  3-2. 설치

  3-3. 실행 및 정보 셋팅
  3-4. 사용방법


4. Bitnami Redmine 다운로드 및 설치(bitnami-redmine-2.6.0-1-windows-installer.exe)

  4-1. 다운로드

  4-2. 설치

  4-3. 실행 및 셋팅


5. Redmine의 저장소에 Subversion 연동하기

  5-1. 연동 방법

  5-2. 일감 및 저장소


6. SVN 데이터 백업(Backup) 및 복원(Restore)

  6-1. SVNServer IP 변경 데이터 및 히스토리 보전한 상태로 이동 및 백업

  6-2. 백업(Backup) - Dump

  6-3. 복원(Restore) - Create, Repository 생성

  6-4. 복원(Restore) - Load

  6-5. Relocate


7. Bitnami Redmine 데이터 백업(Backup) 및 복원(Restore)

  7-1. 백업 전 알아야 할 사항

  7-2. 백업(Backup)

    7-2-1. 구동 서버 Stop

    7-2-2. 첨부파일 백업

    7-2-3. DB ID & PW 체크

    7-2-4. ID & PW를 이용하여 SQL 데이터를 백업

  7-3. 복원(Restore)

    7-3-1. DB ID & PW 체크

    7-3-2. 백업 SQL 파일 복사

    7-3-3. 빈 Redmine DB 생성

    7-3-4. SQL 데이터 복원

    7-3-5. DB Migration

    7-3-6. 첨부파일 복원

  7-4. 서비스 실행


그럼, 팀 작업을 위해 필수인 Subversion, Redmine 두가지 프로그램에 대한 다운, 설치, 백업 및 복원에 대해서 알아보자.




1. Subversion 다운로드 및 설치

1-1. 다운로드

일단 Subversion 을 아래에서 다운 받는다.

예전하고 다르게 메뉴가 변경이 되어서.. 현재 1.8.10까지 나와 있는데, 

1.6.6 버전까지만 인스톨 버전을 제공해서 1.6.6 버전을 기준으로 합니다. (소스가 아닌 쉽게 인스톨 하는것이 기준;;)


https://subversion.apache.org/를 통해서 찾아 들어가다보면 아래의 소스포지 사이트에서 다운 받을 수 있음

http://sourceforge.net/projects/win32svn/files/1.6.6/의 Setup-Subversion-1.6.6.msi 클릭



1-2. 설치

Setup-Subversion-1.6.6.msi 파일을 더블클릭해서 설치한다.(default로 설치)


중요!! 이 아래의 Subversion과 관련한 모든 설치에 대한 부분은 편의상 아래와 같이 가정한다.

D:\SVNProject> 라는 폴더에 프로젝트 데이터를 저장한다고 가정하고, D:\SVNProject 폴더를 생성한다.

<프로젝트명>은 ProjectX로 한다.


1-3. SVN Repository 생성

폴더 생성이 완료되면 검색(윈도우키 + R)에서 cmd를 입력해서 띄운 후, D:\SVNProject>로 이동한다.

아래와 같이 실행해서 프로젝트 SVN Repository를 생성한다. <프로젝트명>은 ProjectX.

D:\SVNProject>svnadmin create --fs-type fsfs ProjectX



1-4. SVN Repository 정보 셋팅

메모장을 열어서 D:\SVNProject\ProjectX\conf 폴더안의 authz / passwd / svnserve.conf 파일을 아래와 같이 수정한다.

모든 유저에게 모든 권한 부여를 기본으로 설명하고, 폴더별 권한은 설명으로 대체한다.

수정사항은 주황색으로 표시한다.


<svnserve.conf>

anon-access = none                     # 익명사용자의 액세스가 불가함(default는 # anon-access = read)

auth-access = write                     # 인증 사용자의 쓰기가 가능함(default는 # auth-access = write)

password-db = passwd                 # 패스워드 정보로 passwd 파일을 사용함(default # password-db = passwd)

realm = Welcome to ProjectX !!    # SVN 접속시 뜨는 인사말(선택사항으로 realm = 뒷부분을 수정하면 된다.)


#authz-db = authz                      # 인증 정보로 authz 파일 사용(선택사항)

: 이 부분을 사용하면 폴더별로 권한 설정이 가능함, authz 부분 참조.  이 부분이 주석이면 모든 유저에게 모든 권한 부여


<passwd>

: SVN 접속시 계정 정보(ID) 및 패스워드 설정

# User 1

babytook = 1234


<authz>

: 계정을 그룹화 하거나 폴더별 권한 설정, 모든 유저에게 모든 권한으로 설정하므로 여기서는 수정할 내용이 없다.


주의!! svnserve.conf 파일의 authz-db = authz 가 주석이 아닐 경우에만 의미있다. 

authz 가 주석이면 모든 유저에게 모든 권한 부여가 되고, 여기도 전부 주석처리이거나 아무것도 없어야 한다. 


주석이 아닐 경우 아래의 내용 참조

---------------------------------------------------------------------------------

[/]

babytook = rw                 # babytook 계정으로 루트에 쓰기삭제 가능


아래는 세부사항이다.


Users 

    사용자 계정을 관리합니다.

    한글 이름을 사용할 수 있습니다.

    비밀번호에는 한글을 사용할 수 없습니다


Groups 

    계정을 그룹으로 묶어서 관리합니다.

    아래와 같은 양식으로 작성합니다.


    group = user1, user2, ...


Authz 

    접근권한을 설정합니다. 다음과 같은 형태로 권한을 설정할 수 있습니다.

      - 단일 사용자                                   

      - [groups] 섹션에서 정의된 그룹 사용자         

      - 와일드크드 '&star;' 는 모든 사용자를 의미함 

      - 롤 앞에 '~' 를 붙이면 반전을 의미함        


    접근권한 설정은 다음 3가지로 할 수 있습니다.

      - 'r' 읽기    

      - 'rw' 읽기/쓰기

      - '' 권한없음 


    예) 아래와 같이 작성하면 다음의 접근권한 제어가 발생한다.

      - sysadmin 계정은 모든 경로에 읽기/쓰기 가능

      - sys 그룹은 모든 경로에 읽기/쓰기 가능

      - adm 그룹은 tags, branches, trunk 경로에 읽기/쓰기 가능

      - dev 그룹은 trunk 경로에만 읽기/쓰기 가능

      - 계정이 없는 사용자도 읽기는 가능


        [/]

        @sys = rw

        * = r

        

        [/tags]

        @sys = rw

        @adm = rw

        * = r

        

        [/branches]

        @sys = rw

        @adm = rw

        * = r

        

        [/trunk]

        @sys = rw

        @adm = rw

        @dev = rw

        * = r

---------------------------------------------------------------------------------


1-5. SVN Commit시 반드시 Message 남기기

팀원들 중에 새로운 파일을 Commit시 간혹 아무런 내용없이 파일만 올리는 사람들이 종종 있다.

이런 팀원들을 위해서 반드시 Message를 남겨야만 Commit이 되도록 설정하는 방법이다.


D:\SVNProject\ProjectX\hooks 라는 폴더가 있다.

그 폴더안에 메모장을 열어서 pre-commit.bat 파일을 생성하고 아래와 같이 입력하면 된다.

---------------------------------------------------------------------------------

@echo off   

 :: Stops commits that have empty log messages.         

@echo off   

 

setlocal   

 

rem Subversion sends through the path to the repository and transaction id   

set REPOS=%1   

set TXN=%2            

 

svnlook log %REPOS% -t %TXN% | findstr . > nul   

if %errorlevel% gtr 0 (goto err) else exit 0   

 

:err

echo --- Message가 없으면 Commit을 할 수 없어요 --- 1>&2

echo --- Message를 작성해 주세요. ProjectX --- 1>&2

exit 1

---------------------------------------------------------------------------------


1-6. Subversion 구동방법

설치 및 셋팅이 완료 되었으므로 마지막으로 서버를 띄우는 작업이 남아있다.


1-6-1. 수동 구동

D:\SVNProject>svnserve -d -r D:\SVNProject

하지만, 매번 이렇게 구동하는 것이 귀찮기 때문에, Windows가 부팅되면 자동으로 시작되게끔 

서버를 아래와 같이 Windows 서비스로 등록한다.


1-6-2. 서비스 구동

커맨드 창에서 아래와 같이 입력하면 서비스에 등록이 된다.

주의사항으로는 등호(=) 다음에 공백이 하나 있어야 한다.


C:\>sc create svnserve binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r D:\SVNProject" displayname= "Subversion Svnserve" depend= tcpip start= auto


1-6-3. 서비스 삭제

C:\>sc delete svnserve


1-6-4. SVNSERVE Manager 사용

다른 방법으로는 아래의 SVNSERVE Manager를 통해서 조금 더 편리한 방법을 제공한다.

그리고 SVNSERVE Manager를 통해서 하위에 여러가지 프로젝트를 동시에 구동이 가능하다.

이 부분이 궁극적인 목적이기도 하다.



2. SVNSERVE Manager 다운로드 및 설치

2-1. 다운로드

아래의 경로에서 SVNManager-1.1.2-Setup.msi를 클릭해서 다운 받는다. 감사의 말씀도 필수 ~~

http://www.pyrasis.com/main/SVNSERVEManager 



2-2. 설치

SVNManager-1.1.2-Setup.msi 파일을 더블클릭해서 설치한다.

(설치 경로는 Subversion이 설치된 경로의 bin폴더에서 실행되므로 default로 설치하면 된다.)


2-3. 실행 및 셋팅

설치가 완료되고, SVNSERVE Manager를 실행하면 아래와 같은 화면이 뜨는데,

아래 화면과 같이 셋팅한 후 Start를 누르면 Subversion이 구동된다.



<세부셋팅>

Subversion Repository Root --> D:\SVNProject

Port --> 3690

Settings Run Mode --> Normal

Automatically run program when you log on --> V(체크)


말 그대로 Root다. 하나의 프로젝트 뿐만 아니라 그 하위 폴더에 다양한 프로젝트를 구동가능하다.

이전에 프로젝트명을 ProjectX라고 Repository를 생성했는데, ProjectA, ProjectB 등으로 추가 생성이 가능하다는 말이다.


Automatically run program when you log on에 체크해 두고, 서비스에 추가하거나 

간단한 방법으로는 시작 프로그램에 바로가기를 만들어 두면 윈도우 시작시 자동으로 Subversion Server가 구동된다.


물론 Stop을 누르면 멈추게 되고, Exit를 누르면 프로그램 종료, Hide나 오른쪽 위 상단의 X 버튼은 minimize가 된다.


2-4. 방화벽 해제

Subversion의 목표는 팀 프로젝트이므로 다른 컴퓨터에서 동시에 여러 유저가 접속하는데 포트 방화벽을 해제해 줘야 접속이 가능하다.


제어판 -> Windows 방화벽 -> 고급설정 -> 

<고급 보안이 포함된 Windows 방화벽 창> 인바운드 규칙 -> 우클릭해서 새규칙(N) -> 

<새 인바운드 규칙 마법사 창> 포트 -> TCP(T) / 특정 로컬 포트(S) 3690 -> 연결허용(A) -> 규칙 적용 시기(각각 체크) -> 이름, 설명 입력(예 SVNProject)



3. TortoiseSVN 다운로드 및 설치

앞에서 서버 셋팅이 끝났으므로 팀원들 각각의 컴퓨터에서 서버로 접속을 해야 한다.

이 접속하는 클라이언트 프로그램을 개발자들이 거부기라 부르는 TortoiseSVN 이다.


3-1. 다운로드

아래의 경로에서 TortoiseSVN-1.8.8.25755-x64-svn-1.8.10.msi 파일을 다운 받는다.

http://tortoisesvn.net/downloads.html



3-2. 설치

TortoiseSVN-1.8.8.25755-x64-svn-1.8.10.msi 파일을 더블클릭해서 설치한다. (default로 설치)


3-3. 실행 및 정보 셋팅

설치가 끝나면 D:\SVNProject 폴더로 이동한 후, 마우스 우클릭해서 SVN Checkout.. 을 선택하면, 아래와 같은 화면이 뜬다.



아래의 <IP> 부분에 자신이 셋팅한 컴퓨터의 IP주소를 입력해 준다.

URL of repository: svn://<IP>/ProjectX 입력

Checkout directory: D:\SVNProject\ProjectX 입력


그리고, OK 버튼을 클릭하면 아래와 같은 계정 정보(ID) 및 패스워드를 입력하는 화면이 뜨고,

SVN Server에 있는 데이터를 받아오게 된다.




3-4. 사용방법

거부기의 사용방법에 대해서는 웹 검색을 해 보면 정말 많이 나와 있으므로 패스한다.


일반적인 사용법은 다들 아시겠지만, 기본적인 것만 보면 아래와 같다.


Add : 소스 데이터를 추가할 때

Commit : 소스 데이터를 서버에 올릴 때

Update : 신규 데이터를 서버로부터 받을 때

Export : 외부로 소스만 따로 백업할 때


이것으로 SVN Server와 각각의 팀원들의 Client 연동을 통해서 소스 버전 관리를 할 수 있다.



4. Bitnami Redmine 다운로드 및 설치

4-1. 다운로드

일단 Bitnami Redmine을 아래에서 다운 받는다.



4-2. 설치
bitnami-redmine-2.6.0-1-windows-installer.exe 파일을 더블클릭해서 설치한다. (default로 설치)
설치하는데 시간이 좀 걸린다.


설치에 어려움이 있거나 하진 않고, 설치에 대한 자세한 부분은 아래와 같이 순차적으로 인스톨 진행을 하면 된다.


기본 디폴트 경로를 지정하면 된다.


레드마인에서 관리자(Admin)인 user(디폴트) 계정 정보를 생성한다.

여기서 생성한 이름 및 패스워드를 사용하게 된다. 첫 로그인 이후 변경 가능하니 걱정없다.


Subversion을 미리 인스톨해서 3690 포트를 사용하고 있으므로, 여기서는 3691을 포트로 지정한다.

각자 자신이 원하는 포트를 지정하면 된다.




이메일로 통보해 주는 기능으로 기본 gmail 을 사용한다.

자신의 gmail 패스워드를 기록해 두면 일감 등록시 이메일로 전송이 된다.

다른 메일은 직접 정보를 넣어주면 된다.


클라우드 호스팅은 패스한다.



설치 완료 !!



4-3. 실행 및 셋팅
실행을 하게 되면 아래와 같은 레드마인 초기화면이 뜨게 된다.


Bitnami 레드마인 인스톨 후 어플 구동시 화면





레드마인 초기화면..

Access Bitnami Redmine Stack 클릭하면 아래와 같은 레드마인 초기화면으로 이동한다.


우측 상단의 로그인 클릭



관리자 user(디폴트) 계정으로 로그인




세부적인 관리나 프로젝트 관련 부분은 직접 사용해 보면 알 수 있으므로 패스한다.

단지 Redmine의 저장소에 Subversion을 연동하는 부분만 알아보겠다.



5. Redmine의 저장소에 Subversion 연동하기


5-1. 연동 방법

연동 방법은 의외로 간단하다. 프로젝트를 생성하고 나서 설정탭안의 저장소 탭을 클릭해서

+ 저장소 추가 를 눌러주고 SVN 정보를 입력해 주면 된다.




SVN URL 주소와 접속할 때 사용하는 계정 정보를 넣어주면 된다.



저장소가 추가된 모습이다.



5-2. 일감 및 저장소

이걸로 작업내역 부분에 SVN 작업 내용도 함께 공유가 된다.

일감에서 추가를 할 때, 공유할 팀원을 선택하면 그 팀원의 이메일로 함께 공유도 된다.


저장소 탭을 클릭해 보면 아래와 같은 SVN 내용이 보이게 된다.

데이터가 Commit 되면 바로 갱신이 된다. 

차이점이나 기타 기능은 직접 만지작 거리다 보면 알게 될 것이다.




6. SVN 데이터 백업(Backup) 및 복원(Restore)


6-1. SVNServer IP 변경 데이터 및 히스토리 보전한 상태로 이동 및 백업

D:\SVNDatas 하위에 있는 ProjectX 폴더의 데이터를 기준으로 하고, 히스토리를 보전한 상태로 복원하는 것을 기준으로 한다.

가장 중요한 IP가 변경되거나 다른 장비로 이동하는 것도 가능하다.


도움말은 아래와 같다.

svnadmin --help create


6-2. 백업(Backup) - Dump

첫번째로 기존 데이터 전체를 백업한다.

D:\SVNDatas안의 ProjectX SVN 데이터를 덤프떠서 현재 D:\SVNDatas 안에 ProjectX.dump를 생성한다.

<Command> D:\SVNDatas>svnadmin dump D:\SVNDatas\ProjectX > ProjectX.dump



프로젝트가 여러개일 경우 프로젝트별로 각각 Dump 뜬다.


6-3. 복원(Restore) - Create, Repository 생성

저장될 Repository를 생성한다. 기본 리비전 0

<Command> D:\SVNDatas>svnadmin create --fs-type fsfs ProjectX



6-4. 복원(Restore) - Load

생성한 Repository안으로 현재 D:\SVNDatas 폴더안의 ProjectX.dump 파일을 밀어 넣는다.

그러면 이전 히스토리도 같이 저장된다.

<Command> D:\SVNDatas>svnadmin load D:\SVNDatas\ProjectX < ProjectX.dump



6-5. Relocate

TortoiseSVN 안의 Relocate를 이용해서 IP 변경을 한 후 SVNServe Manager로 접속하면 잘 되는것을 확인할 수 있음

경로는 신경쓰지 마시길...;;




이것으로 SVN 백업 및 히스토리 복원은 마무리 된다.




7. Bitnami Redmine 데이터 백업(Backup) 및 복원(Restore)


7-1. 백업 전 알아야 할 사항

bitnami를 이용하여 설치한 레드마인 버전 2.6.0-1 기준으로 한다.

C:\Bitnami\redmine-2.6.0-1 여기에 인스톨 한 것을 기준으로 한다.(기본셋팅)

레드마인 버전이 다른 경우는 아래 7-3-5. DB Migration 부분을 참조한다.


Subversion SVN 백업은 바로 위 6항목의 백업하는 방법을 이용해서 별도로 백업해야 한다.


7-2. 백업(Backup)

7-2-1. 구동 서버 Stop

manager tool을 실행시켜 구동되고 있는 서버를 모두 stop 한다.

단, mysql DB는 제외한다.(Apache, Subversion, redmine, remine2 모두 stop)



7-2-2. 첨부파일 백업

아래의 경로에 있는 files 폴더를 폴더 채로 모두 압축해 둔다.

C:\Bitnami\redmine-2.6.0-1\apps\redmine\htdocs\files


7-2-3. DB ID & PW 체크

아래 경로의 database.yml 파일을 메모장으로 오픈해서 DB ID & PW 체크해 둔다.

C:\Bitnami\redmine-2.6.0-1\apps\redmine\htdocs\config\database.yml


database: bitnami_redmine

username: bitnami

password: c8db869edb



7-2-4. ID & PW를 이용하여 SQL 데이터를 백업

아래 경로 mysql bin으로 이동한다.

C:\Bitnami\redmine-2.6.0-1\mysql\bin


그리고, 아래의 내용을 실행한다. (주의사항 : -p 뒤에 바로 붙여서 c8db869edb 패스워드를 입력해야 함)

C:\Bitnami\redmine-2.6.0-1\mysql\bin>mysqldump.exe -u bitnami -pc8db869edb bitnami_redmine > redmine_backup.sql

이렇게 진행하면 redmine_backup.sql 파일이 mysql\bin에 저장되고, 프롬프트가 떨어짐



데이터 백업이 완료 되었다.



7-3. 복원(Restore)

보통 새로운 장비로 이동하는 것을 기준으로 하므로, 새로 인스톨 되는 경로도 역시 C:\Bitnami\redmine-2.6.0-1 로 한다.

password는 XXXXXXXXXX 라 가정한다.


7-3-1. DB ID & PW 체크

새로 인스톨 된 redmine의 database.yml 파일을 메모장으로 오픈해서 DB ID & PW를 체크한다.

C:\Bitnami\redmine-2.6.0-1\apps\redmine\htdocs\config\database.yml


7-3-2. 백업 SQL 파일 복사

아래 경로 mysql bin으로 이동하고, 이 폴더에 redmine_backup.sql 파일을 복사한다.

C:\Bitnami\redmine-2.6.0-1\mysql\bin


7-3-3. 빈 Redmine DB 생성

mysql에 접속해서 빈 redmine용 DB를 생성한다.


C:\Bitnami\redmine-2.6.0-1\mysql\bin>mysql.exe -u bitnami -pXXXXXXXXXX

mysql> drop database bitnami_redmine;

mysql> create database bitnami_redmine;

mysql> exit



7-3-4. SQL 데이터 복원

백업 되어있는 redmine_backup.sql을 이용하여 데이터를 복원한다.

(주의사항 : -p 뒤에 바로 붙여서 XXXXXXXXXX 패스워드를 입력해야 한다.)

C:\Bitnami\redmine-2.6.0-1\mysql\bin>mysql.exe -u bitnami -pXXXXXXXXXX bitnami_redmine < redmine_backup.sql



7-3-5. DB Migration

DB Migration : 상위 버전으로 업그레이드 할 경우에 필요하다.(동일한 버전 복원시는 필요없다.)

백업할 때의 DB 내용은 예전 버전의 DB이므로, 새로운 버전으로 변경해주는 작업이 필요하다.


아래 경로로 이동

C:\Bitnami\redmine-2.6.0-1\apps\redmine\htdocs


ruby의 rake 도구를 사용하여, DB 업그레이드

PATH=D:\Bitnami\redmine-2.6.0-1\ruby\bin;%PATH%

rake db:migrate RAILS_ENV=production

rake redmine:plugins:migrate RAILS_ENV=production


그러면 기존 복원했던 DB의 정보를 모두 현재 버전에 맞게 이전 해주면서 정리된다.


7-3-6. 첨부파일 복원

기존 압축했던 파일을 아래의 경로에 덮어 쓴다.

D:\Bitnami\redmine-2.6.0-1\apps\redmine\htdocs\files 



7-4. 서비스 실행

이제 manager tool을 실행시켜 구동되고 있는 모든 서버를 start 시키면 복원까지 완료된다.




이것으로 Subversion 과 Bitnami Redmine 의 인스톨과 백업 및 복원까지 완료되었다.
이렇게 정리해 뒀으니 나중에 까먹지 않겠지 ㅎㅎ;;

스스로에게 만족 ^^



Posted by 노을삼킨별
,