예전에 한 번 작성을 했었던 Plugin 인데,
최근에 이슈가 잠시 있어서 관련 작업을 했던 김에 포스팅 자체도 좀 업데이트 아니 재작성을 해보았다.

update #1 : 2013.04.14 (Sun)



Redmine이 자랑하는 것 중 하나가 바로 Wiki 지원이다.

높은 곳에 계시는 분들은 별로 신경을 쓰지 않는 부분이기에 지금까지 알아서 하는 부분으로 취급되었었지만,
최근에는 관리의 범주로 인식이 되어 중요한 개발 환경의 한 요소로 인정받는 것이 "커뮤니티" 기능이다.

애자일이 대두된 이후 개발자의 목소리가 더더욱 커지면서 "커뮤니티" 기능이 더더욱 필요하게 되었고
이러한 커뮤니티 기능을 언급하게 되면 가장 자주 나오는 아이템이 바로 "Wiki(위키)"이다.

마침 Redmine이 갖고 있는 대표 기능 중 하나가 바로 "Wiki"이고,
프로젝트 관리 도구로 Redmine을 선택하는 이유 중 하나가 바로 위키 기능인 것이다.


그런데, 문제는 Wiki에 익숙한 개발자가 생각보다 많지 않다는 점이다.
정말 의외인데 개발자들이 원한다고 해서 위키를 제공을 해주면 정작 위키를 사용하기 어렵다는 투정을 듣게 된다.

또 하나의 문제는 위키 문법이 사투리와 같이 좀 다른 유형들이 있다는 점이다.
기존에 다른 유형의 위키를 썼던 분들이 Redmine에서 제공하는 위키에 적응을 못하기도 하는 것이다.

마지막으로 하나 더 있는 문제점은 Redmine 위키가 갖고 있는 문제로써
Redmine 위키 문법이 생각보다 막강하지는 않다는 점이다.
즉, 기능적 제약이 좀 많은 편이다. 아쉬운 부분이다.



이런 문제를 해결하는 방법 중에 가장 편하면서도 간단한 것이 바로 Plugin을 이용하는 것이고,
그 중 가장 유명한 것이 바로 CKEditor 이다.

Redmine Plugin으로 만들어진 것이 CKEditor Plugin이 아니다.
올해로 10주년을 맞이한 유명한 Web Text Editor가 바로 CKEditor 이다.

   - http://ckeditor.com/


너무 서론이 길었다.

바로 설치해보자.

□ Name    : Redmine CKEditor
□ URL      : http://www.redmine.org/plugins/ckeditor



1. 테스트 환경

   - 현재 가장 최신 버전으로 테스트 했으며, 직접 Source code를 내려 받아서 설치했다.
   - 여기 블로그의 포스팅을 참고하면 된다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL



2. 경로 & 권한

   - 이 부분에 대해서 필자가 완벽히 이해를 하고 마스터를 한 것이 아니라서 모든 경우에 대해서 설명은 못하겠다.
   - 우선 필자가 구축한 Redmine은 WAS로 Apache2를 선택했고, Passenger 모듈을 활용했다.
   - 경로는 필자의 습관상 [ /srv/install/redmine/ ] 밑에 설치를 했다.
   - 마지막으로, 당연히 www-data 계정에게 필요한 소유권을 부여했다.
   - 보안상의 이슈는 논외로 하자.

   - 사실 필자는 조금 무식해서 Ruby에 대한 지식이 엄청나게 부족하다.
   - 그래서 Ruby를 사용하기에 많은 어려움을 겪고 있다.
   - 이런 사용성 측면은 정말 Ruby가 극복해야할 큰 문제로 생각된다.
   - 밑의 Ruby와 관련된 명령을 처리하기 위해서는 Redmine 설치할 때의 조건을 다시 한 번 확인을 하기 바란다.



3. 다운로드

   - 나중의 업데이트를 고려하면 Git을 이용해서 clone을 받아서 설치하는 것이 편리하다.
   - Git이 아직 설치되어 있지 않으면 이번 기회에 설치를 하는 것을 추천한다. (http://whatwant.tistory.com/289)

$ sudo su -
$ cd /srv/install/redmine
$ cd ./plugins
$ git clone http://github.com/a-ono/redmine_ckeditor.git

   - 필자의 경우 Redmine을 설치할 때 Ruby를 설치하면서 [ sudo su - ] 계정으로 설치를 하였었다.



4. 설치

   - 필요한 gem 들을 설치하기 위해 필요한 과정이 있다.

$ sudo su -
$ cd /srv/install/redmine
$ bundle install --without development test
$ chown -R www-data:www-data ./redmine_ckeditor
$ service apache2 restart

   - 설치를 하고 내용을 확인하면 아래와 같다.

Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:
  redmine_ckeditor                       0.4.0

   - 얼마전까지만 해도 CKEditor Plugin과 Redmine 2.3.0 버전에 충돌(?)이 조금 있었다.
   - 사용 중에 CKEditor가 사라지는 현상이 있었는데 CKEditor Plugin 0.4.0 버전부터는 해결이 되었다.


5. 사용

   - CKEditor를 사용하기 위해서는 [ 관리 ] 메뉴에서 [ 설정 ] 부분에 있는 [ 본문 형식 ]을 변경해야 한다.


   - 기존의 위키 방식을 [ textile ] 이라고 하고 우리가 지금 사용하고자 하는 것은 [ CKEditor ]이다.


   - 이렇게 설정을 하면, Redmine에서 위키가 사용되는 모든 곳에 CKEditor가 보이게 된다.


   - 무료로 제공되는 Editor이지만 상당히 쓸만하다.




6. 주의사항

   - 특정 프로젝트 단위로 적용을 결정할 수 없다.
   - 전체 일괄 CKEditor를 쓸건지 Textile, 즉 위키를 사용할 것인지 결정을 해야 한다.

   - 위키를 사용하던 중에 CKEditor를 적용하게 되면 기존에 입력한 것은 전부 새로 편집을 해야 한다.
   - CKEditor는 위키를 편하게 사용하도록 도와주는 것이 아니다.
   - HTML 적용을 도와주는 에디터이다. 위키와는 완전히 별도이다.
   - 기존 작성 내용을 분실하지는 않지만, 새로 편집을 해야한다는 것은 주의하기 바란다.


모두 즐거운 Redmine 생활 하시길~
반응형

만날 모니터링 하다가 꼭 잠시 한 눈 판 사이에 새로운 버전이 올라온다. 우씨...

가장 대표적인 것은 Multi-screen 지원 관련하여 많은 개선이 있었고...
리눅스 관련해서 최신 커널 컴파일 지원이 추가 되었다.

업데이트 해서 작업해본 결과 큰 이상은 보이지 않는다 ^^

   - https://www.virtualbox.org/wiki/Downloads


VirtualBox 4.2.12 (release 2013-04-12)

This is a maintenance release. The following items were fixed and/or added:

•VMM: fixed a Guru Meditation on putting Linux guest CPU online if nested paging is disabled
•VMM: invalidate TLB entries even for non-present pages
•GUI: Multi-screen support: fixed a crash on visual-mode change
•GUI: Multi-screen support: disabled guest-screens should now remain disabled on visual-mode change
•GUI: Multi-screen support: handle host/guest screen plugging/unplugging in different visual-modes
•GUI: Multi-screen support: seamless mode: fixed a bug when empty seamless screens were represented by fullscreen windows
•GUI: Multi-screen support: each machine window in multi-screen configuration should have correct menu-bar now (Mac OS X hosts)
•GUI: Multi-screen support: machine window View menu should have correct content in seamless/fullscreen mode now (Mac OS X hosts)
•GUI: VM manager: vertical scroll-bars should be now updated on content/window resize
•GUI: VM settings: fixed crash on machine state-change event
•GUI: don't show warnings about enabled or disabled mouse integration if the VM was restored from a saved state
•Virtio-net: properly announce that the guest has to handle partial TCP checksums (bug #9380)
•Storage: Fixed incorrect alignment of VDI images causing disk size changes when using snapshots (bug #11597)
•Audio: fixed broken ALSA & PulseAudio on some Linux hosts due to invalid symbol resolution (bug #11615)
•PS/2 keyboard: re-apply keyboard repeat delay and rate after a VM was restored from a saved state (bug #10933)
•BIOS: updated DMI processor information table (type 4): corrected L1 & L2 cache table handles
•Timekeeping: fix several issues which can lead to incorrect time, Solaris guests sporadically showed time going briefly back to Jan 1 1970
•Main/Metrics: disk metrics are collected properly when software RAID, symbolic links or rootfs are used on Linux hosts
•VBoxManage: don't stay paused after a snapshot was created and the VM was running before
•VBoxManage: introduced controlvm nicpromisc (bug #11423)
•VBoxManage: don't crash on controlvm guestmemoryballoon if the VM isn't running (bug #11639)
•VBoxHeadless: don't filter guest property events as this would affect all clients (bug #11644)
•Guest control: prevent double CR in the output generated by guest commands and do NLS conversion
•Linux hosts / guests: fixed build errors on Linux 3.5 and newer kernels if the CONFIG_UIDGID_STRICT_TYPE_CHECKS config option is enabled (bug #11664)
•Linux Additions: handle fall-back to VESA driver on RedHat-based guests if vboxvideo cannot be loaded
•Linux Additions: RHEL/OEL/CentOS 6.4 compile fix (bug #11586)
•Linux Additions: Debian Linux kernel 3.2.0-4 (3.2.39) compile fix (bug #11634)
•Linux Additions: added auto-logon support for Linux guests using LightDM as the display manager
•Windows Additions: Support for multimonitor. Dynamic enable/disable of secondary virtual monitors. Support for XPDM/WDDM based guests
•X11 Additions: support X.Org Server 1.14 (bug #11609)

반응형

최근 들어 우분투와 관련하여 많은 변화가 보이고 있다.
아니 그냥 변화라고 표현하기 보다는 지금까지 해왔던 관습적인 부분에 대한 변경 사항이 자꾸 언급되고 있다.


1. 지원 기간 단축
     - http://www.webupd8.org/2013/03/ubuntu-technical-board-meeting.html
     - LTS 버전은 5년, 그 외 버전은 18개월간 지원을 해왔지만,
     - LTS 판이 아닌 경우 9개월만 지원을 하겠다고 3월에 발표를 했다.
     - 즉, LTS 판이 아닌 경우 9개월 안에 업그레이드를 해야 한다는 말이다. 당연히 많은 반발이.... ^^
     - 이 때 발표를 할 때에 13.04 버전부터 적용이 되어 13.04 버전은 9개월짜리 지원 버전일거라고 했었다 !!

2. WUBI 제외
     - http://www.omgubuntu.co.uk/2013/04/wubi-unlikely-to-be-in-ubuntu-13-04-windows-users-lose-out
     - 윈도우즈용 우분투 설치 프로그램인 WUBI가 13.04 버전부터는 제외가 될거라고 했다.
     - 하지만, 지금 개발중인 내역을 보면 아직 WUBI가 보이기는 하던데... 제대로 설치가 안될 수도 있겠지만...
     - 뭐 여하튼, Windows8 출시와 함께 더 이상은 지원하기가 버겨웠나보다.

3. 13.04 Release
     - https://wiki.ubuntu.com/RaringRingtail/ReleaseSchedule
     - 기존 릴리스 때에는 메인 홈페이지에서 계속 홍보를 해왔었던 것과 비교하면 상당히 다른 분위기다.
     - 기억에 원래 릴리스는 4월 18일이었던 것 같은데, 지금 확인해보니 4월 25일로 되어있다.
     - 릴리스 예정일자 찾는 것 조차도 엄청 힘들다. 12.10 판도 불안정하던데, 13.04 판도 버림받은 것일까?!

4. Rolling Release
     - http://www.omgubuntu.co.uk/2013/02/ubuntu-to-discuss-rolling-release-move-at-next-weeks-uds
     - "수시배포"라고 번역을 하면 되려나 ?
     - 필자 기억에는 2010년도부터 이야기 되어 온 이슈 같은데.... 13.04 이후에는 Rolling Release 하지 않을까 한다.
     - 최종적으로 어떻게 결론이 났는지는 아직 모르겠다.
     - 즉, 이젠 그냥 하나로 주우욱 간다는...


요즘에 다시 확인해보지 않아서 위에서 언급한 것들 중에서 결론이 난 부분도 있을 것 같기는 하지만,
최소한 대중매체에선 아직 뭔가 이야기 된 것은 없는 것 같으니... 그냥 최신 소식으로~ ^^

 

반응형


소스코드의 변경 없이, 즉 아무런 내용 없이 그냥 commit을 하나 만들고 싶을 때에 사용할 수 있는 옵션이 있다. 사실 정말 아무런 쓸모없는 팁이라고 할 수도 있겠지만, 때로는 정말 유용할 수도 있는 팁이다.

$ git commit --allow-empty -m "[empty] this is a empty commit"
[master 4767699] [empty] this is a empty commit


이런 것이 왜 필요할까 싶기도 하겠지만, 무언가 기록을 남기고 싶을 때 사용하면 유용할 수도 있다. 하지만, 그런 용도로 사용하기 위한 tag 기능이 있는데, 왜 이러한 짓을 하나 싶기도 하다.


사실 필자의 경우에는 root commit을 만들 때 정말 유용하게 사용한다.

repository를 이제 막 생성했을 경우에 empty repository에서는 local에도 아무런 branch가 없고 remote에도 아무런 branch가 없는 정말 삭막한... 말 그대로 깡통 저장소 상태이다.

보통은 이때에 root commit을 만들기 위해서
뜬금없이 readme.txt 같은 텍스트 파일 하나 만들어서 "initial commit"이라고 생성을 하곤 한다.

나중에 괜히 지저분하게 다시 쓸데없는 파일을 삭제하는 commit도 생성이 되고.... 좀 마음에 들지 않는 부분이다.

이럴 때에 empty commit을 사용할 수 있으면... 정말 깔끔해질 수 있다 !!!


별 것도 아닌 내용이긴 하지만,
지금도 많은 개발자들을 위해 애쓰고 있는 개발 환경... 인프라 업무 담당자들을 위해서 짧은 팁 하나 남겨본다 ^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

3D Version Tree  (0) 2013.04.30
[005] Install GIt (in Ubuntu)  (5) 2013.04.25
git diff : 단어 단위로 변경 내역 확인하기  (0) 2013.03.16
commit을 누가 얼마나 했나요?  (0) 2013.03.16
git log 출력 형식 꾸미기  (0) 2013.03.10

가상데스크탑 유틸리티인 VirtualBox를 조금이라도 사용해본 사람이라면,
Guest OS 설치 후 제일 먼저 해야되는 작업인 Guest Addtion Install 을 알 것이다.

그래픽 드라이버나 입력 장치 등의 개선된 가상 드라이버를 설정해주는...
그냥 쉽게 말해서 상당히 더 쓸만하게 만들어주는 과정이다.

Guest OS로 Ubuntu를 설치하고 나서 Guest Addtion Install을 실행하게 되면
아래와 같은 화면이 나온다.


그런데, 위 화면을 보면 Install 과정이 잘 된 것 같지만,
중간 부분을 보면 아래와 같은 메시지가 있다.

The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.

뭔가가 없어서 compile을 실패했단다.
그 뭔가는 바로 현재 사용하고 있는 kernel의 headers이다.

그런데, 실제로 살펴보면
"linux-headers-generic" 패키지를 설치하고자 하면 이미 설치되어있다.

이 문제를 해결하기 위해서는 다른 것을 설치해야 한다.


$ sudo apt-get install virtualbox-ose-guest-dkms
$ sudo apt-get install virtualbox-ose-guest-utils
( $ sudo apt-get install virtualbox-ose-guest-x11 )

즉, 우리의 사랑스럽고 친절한 ubuntu에서 VirtualBox를 위한 패키지를 이미 가지고 있다!!!
위와 같이 그대로 설치하면 된다.


설치 중간에 위와 같이 기존에 이미 존재하는 스크립트에 대한 처리를 묻는다.
그냥 기본값으로 N을 적용하면 된다.

설치가 끝나면 재부팅을 하자.

그리고 나서 다시 한 번 VirtualBox Guest Addtion Install을 실행하자.


이번에는 중간에 뭔가 이상한 것 없이 잘 설치가 되었다.
위 메시지에 나온 것처럼, 재부팅만 한 번 해주면 된다!!!


모두들 즐거운 VirtualBox 생활하세요!!!!!!

반응형

Ubuntu 환경에서 소프트웨어를 설치하다보면 종종 JDK를 요구하곤 한다.

예전에는 리눅스 패키지에 JDK가 포함되어 배포되어서 업데이트도 쉽고 다루기도 쉬웠는데,
라이선스의 이슈때문인지 최근에는 기본으로 포함되어있지는 않다.

물론 많은 수요가 있으니 편한 공급 방법을 제공해주고 있다.


하지만 여기에서는
그냥 정공법으로 공식 배포사이트에서 다운로드를 받아서 설치를 하는 과정을 살펴볼 것이다.


1. Download

     - 오라클의 JDK 공식 배포 사이트를 통해 다운로드 주소를 확인하자.
     - http://www.oracle.com/technetwork/java/javase/downloads/index.html

 


     - 물론 대부분의 상황은 JRE 만으로도 충분하지만, 개발자 마인드를 버리지못한 죄로... 무조건 JDK !!!
     - DOWNLOAD 버튼을 누르자.


     - Accept 해주고 OS에 맞는 다운로드 링크를 통해 저장하자.
     - 소프트웨어에 따라 요구하는 특정 버전의 JDK가 있다. 이 부분은 주의하자.


2. Install

     - JDK 버전에 따라 설치 방법이 살짝 다르다.
     - 여기에서는 가장 최신 버전을 기준으로 설명하겠다.


$ sudo -s tar zxvf jdk-7u5-linux-i586.tar.gz

     - 예전에는 위의 다운로드 링크 주소로 wget 을 통해 다운로드 할 수 있었는데, 요즘엔 안된다.
     - 예전에는 *.tar.gz 가 아니라 *.bin 파일로 다운로드가 되었었다.


$ sudo mkdir -p /usr/local/java
$ sudo -s mv ./jdk1.7.0_05 /usr/local/java/

     - 이전의 *.bin 방식은 그냥 파일에 실행 속성만 주고 실행하면 끝났는데... 이번에는 영~ 귀찮다.



$ sudo nano /etc/environment


PATH=...........:/usr/local/java/jdk1.7.0_05/bin
JAVA_HOME=/usr/local/java/jdk1.7.0_05

 

$ source /etc/environment


     - 환경 설정 (경로) 잡아주고,
     - alternative 관련 설정도 잡아주자.


$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.7.0_05/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.7.0_05/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.7.0_05/bin/javaws" 1

$ sudo update-alternatives --set java /usr/local/java/jdk1.7.0_05/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.7.0_05/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.7.0_05/bin/javaws


     - 이렇게 하고 마지막으로 잘 되었는지 확인을 위해서 아래와 같이 버전을 확인해보자.

$ java -version



여기까지~

반응형

Ubuntu에서 부팅할 때에 자동으로 무엇인가를 실행하고 싶은 경우에는 어떻게 해야할까?
과거 DOS 시절에는 AUTOEXEC.BAT (일명: 오토익스큐트 배치파일?! ^^) 파일에 명령어를 입력했었는데...


Ubuntu(리눅스)에서 일반적으로 부팅 時에 무언가를 실행하기 위해서는,
실행을 위한 스크립트 파일들을 /etc/init.d/ 경로 밑에 넣어 놓고
runlevel에 따라 실행할 스크립트 파일을 등록을 해주는 방식을 취한다.

(제가 잘못알고 있다면, 친절하게 설명을 해주시길 바래요 ㅠㅠ)

Ubuntu에서 runlevel에 따라 등록된 내역을 확인 하기 위해서는 /etc/rc0.d/ , /etc/rc1.d/ , /etc/rc2.d/ ... 를 살펴보면 된다.


유저가 원하는 무엇인가를 자동 실행으로 등록하기 위해서는
/etc/init.d/ 경로 밑에 실행을 하기 위한 Script 파일을 만들어 놓고 [ chmod +x 스크립트 ] 명령으로 실행가능토록 해놓고
[ sudo update-rc.d 스크립트 defaults ] 명령을 실행하면 등록이 되어 이후 부팅 時 자동으로 실행을 시킬 수 있다.



이러한 과정이 번거로운 경우 일반적으로 많이 사용하는 것이 /etc/rc.local 파일을 이용하는 것이다.
runlevel과 무관하게 rc.d 실행을 모두 마친 후 수행이 된다는 점을 이용하는 것이다.

사용 방법은 간단하다.

/etc/rc.local 파일을 편집해서 실행하고픈 내용을 적어주면 된다.

이 때 주의할 점은,
/etc/rc.local 실행 권한이 root 라는 점이다.
혹시 특정 사용자 권한이 필요하다면 [ su -사용자 -c 실행파일 ]과 같이 명시해주면 된다.


그리고, 마지막으로 또 하나~!!
/etc/rc.local 파일에 실행파일을 적어줬는데 정상적으로 실행이 되지 않을 때가 있다.

이 때 체크 포인트 !!!
   - 일반적으로 환경 변수 셋팅이 되어 있지 않기 때문에 PATH는 절대 경로를 사용해야 한다.
   - /etc/rc.local 은 [ -e ] 옵션이 되어있다. 즉, 에러 발생하면 그냥 바로 종료다. 번거로우면 [ -e ] 옵션을 지우는... ^^



자동 실행과 관련하여 마지막 사항은... X-Window 프로그램들이다.
X-Window 프로그램을 위와 같이 명시하면 제대로 실행되지 않는 경우가 대부분이다.
문제는 실행 타이밍~ X-Window 관련된 것들이 전부 실행이 된 이후 실행이 되어야 하는데,
그 전에 실행을 하니... 에러....

X-Window 관련 프로그램의 자동 실행은 X-Window의 메뉴들을 보면 시작프로그램 등록하는 다이얼로그가 있다.
그것을 이용하자~!!


반응형

2013-03-19 일자로
2.2.x 버전의 최신판 2.2.4 버전과
새로운 기능과 함께 등장한 2.3.0 버전이 등장했다.

그런데,
2.2.4 버전의 경우 defect과 patch만 반영이 되어있지만,
2.3.0 버전은 새로운 기능들이 많이 추가가 되었다.

그 새롭게 추가된 기능 중에 관심을 확~끌었던 것이 하나 있어서 소개를 하고자 한다.


Redmine의 가장 멋진 메뉴 중 하나인 간트차트에 새로운 기능이 추가가 되었다.

Feature 명칭은 "Show relations in Gantt diagram"인데,
일감(issue)의 관계를 간트차트에서 너무나 예쁘게 출력을 해주는 것이다.

별도의 그림파일이 아님에도 정말 신기하고 정말 너무 예쁘다!!! (혼자서 감동~ @.@)


그런데, 사실 그동안 Redmine을 사용해오면서 일감의 관계를 사용하지 않았었다.
그래서 일감 관계 설정 방법을 몰라서 이번 기능을 테스트해보려 정말 고생을 했다 ^^


본래부터 일감 관계를 사용하시던 분들에게는 당연한 내용이겠지만,
저처럼 모르는 사람을 위한 간단한 기능 소개를 하겠다.


일감의 관계 설정은 [ 새 일감 만들기 ] 때에는 할 수 없다.
일단, 일감을 만든 후에 일감 정보를 보면 [ 연결된 일감 ] 부분에서 "추가"를 통해서 설정이 가능하다.


일감들의 관계는 정말 다양하게 존재한다.
사실 번역이 조금... 익숙한 설명은 좀 아니라서 좀... 하지만, 한 번씩 해보면 알만한 내용이긴 하다.


다들 알겠지만, 일감의 번호를 정확히 알지 못할 때엔 일감의 이름을 살짝 써주면 검색을 해서 선택할 수 있게 보여준다.

이렇게 일감 관계를 설정하면 간트차트에서 그 관계에 따라 예쁜 화살표를 출력해준다 !!!

다들 재미있고 유용하게 사용하면 좋겠다 !!!
반응형

+ Recent posts