이 정보를 만든 원본 정보는 bitnami의 redmine 업그레이드 문서(https://docs.bitnami.com/installer/apps/redmine/administration/upgrade/)를 참고했습니다. 그 중, 업그레이드를 하기 전에 먼저 백업하는 부분만을 추출했습니다.


1. 7zip 준비.

압축 프로그램, 특히 command line으로 바로 실행할 수 있는 프로그램이 필요합니다. 저 같은 경우에는 7zip을 사용했으며, 설치된 7zip 프로그램들 중에 7z.exe 만을 사용했습니다. 일단 이 프로그램을 bitnami 에 설치된 위치에 사용했습니다.


2. Date 값 확인.

한글판 Windows를 사용하고 있다면, 거의 다 되겠지만, 일부 다른 언어권의 경우에는 Date 값을 조회할 때 폴더로 사용하기 다소 부적합 구성의 값이 나오는 경우가 있습니다.

이를 확인하는 방법은 간단합니다.

echo %date%

만일 yyyy-MM-dd 형식으로 나온다면 큰 문제는 없습니다. 만일 원하는 형태의 값이 안나온다면, google 등을 통해 날짜 값을 원하는 값으로 재 조립해주는 스크립트를 따야 합니다. 대개 for 문을 이용해서 땁니다.

저는 위의 명령을 넣으니 그냥 2019-10-24 이렇게 나와서 그냥 사용했습니다.


3. 설치 경로 확인.

Binami에서 제공하는 설치 프로그램으로 설치했다면, 대개 C:\Bitnami\redmine-4.0.1-3 뭐 이런식으로 잡혔을 겁니다. 이 경로를 파악해주셔야 합니다. 저 같은 경우에는 D:\Bitnami\4.0.3-3 에 설치되어 있습니다.


4. MySQL 접근 계정 확인하기.

MySQL 백업을 해야 하는데, 접근 계정 및 암호를 모른다면, 자동으로 백업하는 기능을 만들 수 없습니다. 실행할 때 마다, 암호를 물어보게 되는데, 매번 입력하는게 생각보다 어렵습니다. 게다가, Bitnami 솔루션으로 설치를 한 경우 자신에게 설치된 redmine용 MySQL 계정 정보를 잘 모르는게 당연합니다.

설치 경로를 기준으로 아래의 폴더로 이동합니다.

d:\Bitnami\4.0.3-3\apps\redmine\htdocs\config\

그리고 그 안에 있는 database.yml 파일을 엽니다.

내용을 보시고, 그 중, production: 에 있는 username과 password를 확인합니다.
대개 username은 bitnami 이고 password는 뭔가 랜덤하게 생성된 이상한 값일 겁니다. 이 정보들을 적당하게 보관하세요.


5. 백업 배치 파일 만들기.

위의 1~4까지의 정보를 가지고 아래의 배치 파일을 업데이트하면 됩니다.

SET BITNAMI=D:\Bitnami
SET BITNAMI_HOME=%BITNAMI%\4.0.3-3
SET BACKUPFOLDER=%BITNAMI%\Backup\%date%

IF NOT EXIST %BACKUPFOLDER% MKDIR %BACKUPFOLDER%

DEL /F /Q %BACKUPFOLDER%\*.*

%BITNAMI_HOME%\mysql\bin\mysqldump -u bitnami -p9109d4ddb7 --databases bitnami_redmine --add-drop-database > %BACKUPFOLDER%\bitnami_redmine.sql

%BITNAMI%\7z a -t7z -r "%BACKUPFOLDER%\redmine_files.7z" "%BITNAMI_HOME%\apps\redmine\htdocs\files\*.*"

%BITNAMI%\7z a -t7z -r "%BACKUPFOLDER%\redmine_plugins.7z" "%BITNAMI_HOME%\apps\redmine\htdocs\plugins\*.*"


맨 먼저 Bitnami 폴더를 잡아주세요. SET BITNAMI 옆의 경로 값인데, 이 위치에 Backup 이라는 폴더를 만들어 날짜별로 백업본을 담을 예정입니다.

그리고 SET BITNAMI_HOME 에 추가적인 경로를 넣어주세요. Redmine 홈은 버전 정보까지 해서 뭔가 더 있을 겁니다. 더 있는 값을 넣어주면 됩니다.

마지막으로 mysql\bin\mysqldump 에 있는 –p 에 앞서 확인헀던 암호로 넣어주세요. 주의할 사항은 –p 와 암호 사이에 공백이 있으면 안됩니다.

적당히 위의 내용으로 cmd 혹은 bat 파일을 만들고 실행해주시면 됩니다.


6. Task Schedule(작업 스케줄러)를 이용해서 자동 실행 설정.

주기적으로 자동 실행할 수 있도록 만들어주면 됩니다.



7. 마무리

백업 자체의 내용은 별 내용은 없습니다. 먼저 MySQL을 백업하고, files 폴더 안의 파일들과 plugin 폴더를 백업하는 정도 입니다. 다만, files 및 plugin 안의 내용이 많을 수 있어 압축하여 묶어주는 정도가 특이점 정도겠네요.

한 큐에 완성되었다고 내비두지 마시고, 반드시 배치 파일을 실행해서 잘 동작하는지 체크해주시는 것 잊지 마시고요~

2019. 10. 23. 오후 4:49

728x90

Escrow라는 단어가 나타난 문서가 생겨서 매우 난감했다. 난감한 이유는 뜬금없이 나타나 어떤 의미를 갖는 것 같은데, 대체 무슨 의미를 나타내는 지 알 수 없었다.


단어 자체를 보면 그 단어의 이미는 무슨 예탁, 계약에 의한 거래 자체 뭐 그런 뜻으로 제시하는 것 같다.

은행권 이야기면 그런가 싶긴한데, 애석하게도 내가 보는 문서는 장비에 관련된 규정 혹은 규약 같은 일종의 기술문서인데, 기술문서에서 금융 단어가 나오다니..


결국 이 직역에 가까운 단어 사용문구를 그대로 쓸 수 없다는 생각에 혹시나 해서 구글로 검색을 해봤다. 그런데, Wikipedia 쪽의 링크가 걸린 문서를 보게 되었고, 그 단어의 쓰임새를 가만히 바라보았다.

이 단어의 처음 부분으로는 대체 이해가 안되었다가, 맨 끝의 어원 부분에서 이런 뜻인가 싶었다.

….
The word derives from the Old French word escroue, meaning a scrap of paper or a scroll of parchment; this indicated the deed that a third party held until a transaction was completed.

대략적으로 보면, 이 단어는 예전 프랑스어인 escroue에서 나온 단어고 종이 조각 혹은 양피지 두루마리라는 단어라고 한다. 즉 이 단어가 가진 의미는 일종의 상호 확인을 위한 일종의 영수증, 계약서 같은 중요 문서를 나타내는 의미인 것이다.

지금 내가 확인하고 싶었던 사항은 Device with Escrow 였는데… 유가 증권을 처리할 정도의 권한을 갖는 장비 정도로 보면 될 것 같았다. 그냥 Bulk 성의 아무 정보나 처리하는 장비가 아니라, 매우 가치가 있고 권한 부여 문서등을 처리가능한 그런 장비로 해석이 가능했다.

역시 영어는 어렵다.;;;;;; 파도 파도 자주 쓰고 생활화 되지 않으면 역시 이해하기 쉽진 않다. 언어의 귀재들이 부러울 뿐;

2019. 10. 8. 오후 1:08

728x90

예전 블로그 내용들을 모두 이관시키고 지금까지 익혀왔던 각종 기술들이나, 내용들에 대해서 새롭게 등록하려 했다.

그런데, 이전 글 이관시키기가 생각보다 쉽지 않았다. 일단 양이.. 더욱이 이미지 등이 겹치니 생각보다 어려운 일이 될 수 밖에 없었다. 이게 정리되어야 새로운 글을 작성할 수 있을텐데 말이다.

예전처럼 표준에 입각한 백업만 되었어도 간단하게 끝날일이 이렇게 힘들게만 되었다. 나중에 시간이 될 때 마다 이관 작업을 지속적으로 해야 겠다. 그렇게 정리되면 새롭게 글을 하나씩 채우고, 도메인도 옮길 예정이다.

생각처럼 잘 안되니 답답할 뿐이다.

2019. 8. 18. 오후 2:09

728x90

지금까지 계속 Tistory를 이용하다가, Live Writer같은 Blog 도구 지원이 안되는 문제로 더 이상 포스팅을 하지 않고 있다.

그래서 Live Writer가 지원되는 블로그 서비스를 뒤적이다가, 결국 Google의 Bogger까지 왔고 이제 여기에 포스팅을 한다.

그런데, 문제가 Tistory는 이제 백업도 지원하지 않는다.
이 문제의 제일 큰 부분은 기존 글들을 자동으로 Blogger로 옮길 수 없다는 것이였다. 이건 정말이지….

결국 Tistory의 글과 그림을 다운로드 하는 Open Source를 구해 그걸로 받아 내릴 수 있었다. 자동으로 내려 받은게 아니다 보니 지금 손으로 하나하나 업로드 중이다. 단순하게 텍스트만 옮기는 거면, 프로그램으로 업로드 하면 되는데, 지금 문제되고 있는 부분은 이미지였다. 이 이미지를 포함시킬  방법이 없어서 난감한 상태다.

전체 글은 1100 여개 되는데, 지금 남은 글이 970개 정도가 남았다. 이 걸 다 등록하려면 어마어마한 시간이 요구될 거 같은데…

여튼 이거 완료되어야 내 도메인도 옮기고 정리할 수 있을텐데…

여러가지로 걸린다.

2019. 5. 15. 오전 1:57

728x90

지금 N45L을 가지고 있다.
여기 설치된 운영체제는 Windows Server 2008 R2 인데, 원격데스크 톱이나, Windows 기반 서버 프로그램들로 대충 설정하고 운영을 해왔다.

그런데, 간혹 Windows 자체의 부하인지는 모르겠지만, 다운되어 시스템이 멈추는 경우가 종종 있다. 게다가, 원하는 성능보다 낮은 경우도 발생한다.

그러다 보니, 자연스럽게 다시 Synology를 보게 되었고, 그렇다고, 4~50만원씩 하는 제품을 사기엔 부담이 되는것도 사실이다. 약간은 고민 중이지만, 봐서 이 N45L을 Synology 화하는 것도 나쁠 것 같지는 않다.

http://xpenology.me/compatible/

나중에 찬찬히 해당 내용을 검토해서 업데이트해봐야 겠다.

헤놀로지, 해놀로지 라는 이름으로 검색을 해도 꽤 많은 자료들이 나오니
이를 참조해봐야 겠다.

2019. 3. 15. 오후 1:58

728x90

매우 매력적인 프로젝트가 있었다.

https://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version-1-22

PDF File Writer C# Class Library (Version 1.22.0)

요약 내용은 아래와 같다.

The PDF File Writer C# class library PdfFileWriter allows you to create PDF files directly from your .net application. The library shields you from the details of the PDF file structure. To use the library, you need to add a reference to the attached PdfFileWriter.dll class library file, add a using PdfFileWriter statement in every source file that uses the library and include the PdfFileWriter.dll with your distribution. For more details go to 4. Installation. Alternatively, you can include the source code of the library with your application and avoid the need to distribute a separate data link library file. The minimum development requirement is .NET Framework 4.6.2 (Compiled with Visual Studio 2017).

Version 1.22.0: Sticky Notes or Text Annotations

The PDF reference document defines Sticky Notes or Text Annotation in Section 8.4 page 621.  "A text annotation represents a “sticky note” attached to a point in the PDF document. When closed, the annotation appears as an icon; when open, it displays a pop-up window containing the text of the note in a font and size chosen by the viewer application. Text annotations do not scale and rotate with the page; they behave as if the NoZoom and NoRotate annotation flags (see Table 8.16 on page 608) were always set. Table 8.23 shows the annotation dictionary entries specific to this type of annotation." See Section 2.24 Sticky Notes or Text Annotation.

The PDF File Writer C# class library supports the following PDF document's features:

Creating a PDF is a six steps process.

  • Step 1: Create one document object PdfDocument.
  • Step 2: Create resource objects such as fonts or images (i.e. PdfFont or PdfImage).
  • Step 3: Create page object PdfPage.
  • Step 4: Create contents object PdfContents.
  • Step 5: Add text and graphics to the contents object (using PdfContents methods).
  • Repeat steps 3, 4 and 5 for additional pages
  • Step 6: Create your PDF document file by calling CreateFile method of PdfDocument.

Step 5 is where most of your programming effort will be spent. Adding contents is achieved by calling the methods of PdfContents class to render graphics and text. The contents class has a rich set (about 100) of methods for adding text and graphics to your document.

PdfDocument implements the IDisposable interface to release unmanaged resources. The CreateFile method calls Document.Dispose() after the PDF file is created. However, to ensure the release of resources you should wrap the PdfDocument creation and the final CreateFile with either a using statement or a try/catch block./p>

The demo program attached to this article is the test program developed to debug the library. The TestPdfFileWriter has six buttons on the main screen. Five buttons to produce examples of PDF files and one button to display all fonts available on your computer. The first button “Article Example” creates the PDF file displayed at the top of this article. Section 3. Development Guide by Example.

As stated before, the PdfFileWriter C# class library shields you from the complexities of the PDF file structure. However, good understanding of PDF file is always an advantage. Adobe PDF file specification document available from Adobe website: “PDF Reference, Sixth Edition, Adobe Portable Document Format Version 1.7 November 2006”. It is an intimidating 1310 pages document. I would strongly recommend reading Chapter 4 Graphics and sections 5.2 and 5.3 of the Text chapter 5.

If you want to analyze the PDF files created by this project, or if you want to understand PDF file structure in general, you can use the demo program attached to my previous article "PDF File Analyzer With C# Parsing Classes". This article provides a concise overview of the PDF specifications.


일단 백업 차원에서 해당 파일도 여기에 등록해보도록 한다.
(링크가 사라져서 곤란한적이 여러번;;;)

PdfFileWriter_demo.zip

PdfFileWriter_dll.zip

PdfFileWriter_example.zip

PdfFileWriter_src.zip

2019. 2. 21. 오후 5:31

728x90

MySQL 서버 접속용 App이 없거나, 서버 설정 상 원격에서 접속이 되지 않으면, 보통 mysql 클라이언트 명령어 기반 프로그램으로 접속한다.

그런데 로컬 기반 연결이 되는 경우 보통 my.ini 혹은 my.cfg에 있는 설정에 있는 내용을 기반으로 네임파이프로 연결을 시도한다. 문제는 설치가 기본값이 아닌 특이한 형태로 설치된 경우 data 폴더를 제대로 매핑하지 못해 엉뚱한 위치에 있는 mysql.sock 이라는 네임스페이스 정보를 찾으려고 한다.

회사의 서버에서도 mysql과 mariaDB가 하나의 서버에 동시에 설치되어 있다보니, mysql.sock 파일이 기본위치에 있지 않는다. 그러다 보니, mysql을 실행하면, data폴더를 찾을 수 없고, 한술 더 떠 기본위치에 mysql.sock을 찾을 수 없는 상태가되었다.(리눅스에서는 기본위치가 /tmp/mysql.sock 이다.)

그래서 data 폴더를 어떻게 매핑할까… 고민하다가, 그냥 Socket으로 잘 연결되면 문제 없을 것이라는 생각에 시도해보니, 되었다.


/opt/mariadb/bin/mysql -u dbuser -p -P 3307 --protocol=tcp testdevdb



저기서 핵심은 --protocal=tcp 이다.

기본값은 아마 pipe 인것 같다. 그러다 보니, 계속 mysql.sock을 찾았고, 문제는 data 경로를 못찾아 그 안의 my.cfg에 정의된 값을 못찾고, 기본값에서 mysql.sock을 찾으니 못찾는 악순환의 반복이였던 것 같다.

MS-SQL만 쓰다보니, 매우 편하게 작업을 해와서 좀 난감했지만, 여튼 하나씩 파악해서 해결할 수 있게되서 다행이다.

2019. 2. 19. 오후 9:41

728x90

Yona 프로젝트 내에 있는 Wiki에 다양한 설명이 있다.

하지만, 중간 중간 업데이트를 하고,  실제 의견을 주고 받는 분들과 Wiki를 업데이트 하시는 분들은 Linux 기반으로 운영을 하는 것 같다 보니 내용이 많이 분산되어 있다.Wiki의 특징이 빠른 Hipher Link 구성이다 보니 여차하면 Link로 대체하는데 이게 내용 따라가는데 쉽지는 않다.

워낙 다양한 케이스와 설치 방법들이 있으니, 당연한 것인지도 모르겠다.
(더욱이 프로젝트를 계속 업그레이드 하는 중이라, 이 내용도 정확히 안맞을 수 있다.)

 

2019년 2월 19일 기준으로 설치시 고려해야 할 내용과 설치 과정들을 간단하게 설명하도록 한다.

 

준비물

  1. Yona 최신 버전.
    Yona 결과물은 압축 파일이 달랑 한개 있다. 물론 그 안에 많은 내용들이 담겨 있지만…Yona Github에서 Release를 통해서 다운로드 받으면 된다.
    (현재 v1.11.1 Hotfix까지 나왔으며, 설명 하단의 Link 를 통해 다운로드 받으면 된다. – yona-v1.11.1-bin.zip )
  2. MariaDB
    Yona에서 관리적인 모든 내용은 DB를 통해서 작성된다. 이 때 사용하는 DB가 MariaDB이다. 현재 Wiki 상의 MariaDB 다운로드 Link는 10.1 버전인데, 이게 오류가 있다. 최신 버전 Yona를 실행할 때, 버전에 맞지 않은 SQL을 실행한다는 오류가 발생하여 제대로 실행되지 않는다.
    반드시, 10.3 버전을 다운로드 받는다. -
  3. 설치 위치 구성.
    Yona가 설치될 위치, Yona 데이터가 쌓일 위치를 잡는다.
    예전에는 Yona가 설치되는 위치가 데이터 위치였는데, 유지보수의 편의를 위해 Data 영역을 나눴다. 이 Yona 데이터 영역에는 설정 파일, Git/SVN 파일들, 로그 등이 쌓이는 위치이다. 나중에 Yona를 업그레이드 하더라도 이 설정 파일 위치가 변화하지 않으면 계속 프로그램만 업그레이드를 할 수 있다.

    Yona 설치 위치는 크게 문제가 없다면 C 혹은 D의 Root에 원본 버전 폴더 이름 그래도 구성한다.
    C:\yona-v1.11.1
    데이터 역시 C혹은 D Root에 구성하는데, 가급적 프로그램과 다른이름으로 구성한다.
    다만, Git 혹은 SVN의 이용률에 따라 용량이 많이 필요할 수 있으므로, 디스크 속도 및 용량등을 고려해서 위치를 잘 잡도록 한다.
    C:\yona-data

 

데이터베이스 설치 및 설정

Maria DB를 설치한다.

Windows 버전의 Maria DB의 경우 MSI로 패키징을 제공한다. 설치용 Wizard를 제공하기 때문에, 메시지들을 잘 읽고 내용을 채우기만 하면 그리 어렵지 않게 구성할 수 있다.(물론 기존에 설치된 MySQL 과 안겹치게 설치하거나, 위치 변경 등의 다양한 변화가 있을 수 있는데 여기서는 범위가 벗어나므로, 그냥 단독 설치, Clean 설치로 판단한다.)

  1. MariaDB MSI 파일 실행
    최신버전 Maria DB MSI 파일을 실행해 설치한다. 이 때 설정하는 root 계정의 암호를 반드시 기억해야 한다. 그래야 이 후 작업 하는데 문제가 없다.

Maria DB를 설정한다.

  1. Maria DB 데이터 폴더 이동 및 my.ini 설정.
    DB 서버 전역 설정 작업은 my.ini 파일을 수정해야 한다.
    문제는 이 파일이 MariaDB의 데이터 폴더에 위치한다는 점이다.
    (설치 폴더 위치를 변경하지 않았다면, MariaDB 설치 위치 밑의 data 폴더 이다.c:\Program Files\MariaDB 10.3\data\)
    이 위치에 있는 my.ini 파일을 연다.
    보통 아래와 같은 내용으로 되어 있다.
    [mysqld]
    datadir=C:/Program Files/MariaDB 10.3/data
    port=3306
    innodb_buffer_pool_size=2034M
    character-set-server=utf8
    [client]
    port=3306
    plugin-dir=C:/Program Files/MariaDB 10.3/lib/plugin
    
    이 내용을 아래와 같이 만들면 된다. (잘 비교해보면, 같은 내용은 그래도 두고 다른 내용들을 추가하기만 하면 된다.)
    [mysqld]
    datadir=C:/Program Files/MariaDB 10.3/data
    port=3306
    sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    default_storage_engine=innodb
    innodb_buffer_pool_size=2034M
    innodb_log_file_size=50M
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init-connect='SET NAMES utf8mb4'
    lower_case_table_names=1
    
    [client]
    port=3306
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
  2. services.msc에서 MySQL 서비스 재시작.
    서비스 관리 창에서 MySQL 서비스를 찾아 재시작한다.
    services.msc 를 입력하면 서비스 관리를 위한 창이 뜨는데, 여기서 나열된 서비스 목록 중 MySQL을 찾아 재시작 하면 된다.

 

SQL 처리

  1. 설치 위치의 bin 폴더 이동.
    MySQL 접속용 클라이언트 프로그램이 있으면 그걸 그대로 사용해도 되지만, 만일 없다면, mysql 클라이언트 콘솔 프로그램을 실행한다.
    (별도 설치 경로를 바꾸지 않았다면, c:\Program Files\MariaDB 10.3\bin\ 위치가 될 것이다.중간에 MariDB 10.3 부준은 다른 버전으로 설치했다면 다른 위치 일듯…)
    Command 창을 연다. 그리고 난 뒤 아래의 명령을 넣는다.
    cd "c:\Program Files\MariaDB 10.3\bin\"
  2. mysql 클라이언트 실행.
    이동된 상태에서 다음 명령을 입력해 mysql을 띄운다. 아래의 내용 중 {root암호} 부분에 앞서 mariaDB 설치시 입력했던 root 암호를 넣어주면 된다.
    mysql -u root -p"{root암호}" 
  3. 다음 SQL을 실행한다. – 계정 생성
    연결 계정을 만든다. 단, 아래 쿼리에 있는 yonadan은 다른 암호로 변경하도록 한다.(예제일 뿐…)
    create user 'yona' IDENTIFIED BY 'yonadan';
    create user 'yona'@’localhost’ IDENTIFIED BY 'yonadan';
  4. 다음 SQL을 실행한다. –  DB 생성
    create database yona DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_bin;
    
  5. 다음 SQL을 실행한다 – 권한할당.
    GRANT ALL ON yona.* to 'yona';

 

YONA 설치

  1. 다운 받은 yona 압축파일을 해제.
    앞서 결정한 위치에 압축파일을 해제해서 설치한다.
    내부에는 bin, lib, share 등의 폴더가 보이면 된다.

  2. yona-data 폴더 작성.
    앞서 결정한 위치의 yona-data 폴더를 생성한다.

  3. 환경 변수 설정.
    YONA_HOME을 설정한다.
    다운받아 압축 해제한 yona 본체의 경로를 넣으면 된다.

YONA 실행

  1. 그냥 실행.
    YONA_HOME\bin 위치로 이동해서,다음 명령을 넣어 실행한다.
    "%YONA_HOME%\bin\yona.bat”
  2. conf 폴더를 yona-data 폴더에 옮기기.
    1번 대로 실행하면, conf 폴더가 새로 생기는데, 이 폴더의 내용을 yona-data 폴더에 옮긴다.

  3. conf 폴더 내 application.conf 파일 수정.
    이 파일이 yona 설정 파일인데, 각종 사이트 관련 중심 정보를 수정할 수 있다.
    자세한 내용은 wiki를 참조하고 여기서는 DB 접속 관련된 정보만 업데이트 한다.
    수정할 내용은 DB 접속 정보 중 암호 부분만 수정하면 된다.
    db.default.password="{yona db 계정 접속 암호}"
    
  4. 환경 변수 추가.
    이제 마지막으로 환경변수 YONA_DATA를 추가한다.
    yona-data 폴더 전체 경로를 담아서 제공하면 된다.

  5. yona.bat 실행.
    1번과는 다르게 Path를 YONA_HOME 으로 옮기고, 대신 실행을 할 때,
    아래와 같이 bin 폴더를 직접 이동하여 실행한다.

2019. 2. 19. 오후 6:31

728x90

+ Recent posts

728x90