블로그 이미지
Xeon의 세상 Xeoness

카테고리

Xeon World (23)
Diary (1)
Tuning (0)
Project (0)
Scrap (0)
Media (0)
L ♡ L (0)
일상생활 (4)
Web Programming (14)
IT 강국? 노가다 강국 (4)
Linux (0)
아리아리 동동~ (0)
Total
Today
Yesterday

불쌍한 동동이... 아빠한테 핸드폰 달라고 달려오다 넘어져서 책상 모서리에 꽁했다 ㅠㅜ)

 

이마가 살짝 5mm 정도 패였다 TT_TT)

 

흉터 안남게 약을 알아봤다.

 

 

시카케어 (Cica-Care)

Cica-Care* 에 대한 보다 자세한 안내는 www.cica-care.co.kr 에 있습니다.

Cica-Care(시카케어)는 FDA 승인을 받았으며 특허받은 기술로 만들어진 부착형 흉터치료용 젤 시트(Adhesive Gel Sheets for Scar Treatment) 입니다.

제품 특성

  • 혁신적인 자가 접착력과 신체적응력
  • 재사용 가능
  • 비 점착성의 outer silicone membrane

제품 장점

Visible scart trentment effect (시각적인 흉터개선 효과)
Cica-Care(시카케어)는 수많은 임상실험을 통해서 붉거나 검게 솟아오른 흉터를 부드럽고 평평하게 하며, 색을 완화시켜주는 흉터개선 효과가 있음이 입증되었습니다. 또한 새로생긴 흉터 뿐아니라 오래된 흉터에도 90% 이상 성공률이 있음이 입증되었습니다.

Easy to use (편리한 사용방법)
자체 부착력이 있는 Cica-Care(시카케어)는 부드럽고, 신체적응력이 뛰어나 부착하기 쉽습니다. 흉터 크기에 맞게 잘라서 붙이며, 내구성이 뛰어나고 재사용이 가능하므로 하루 24시간 내내 부착할 수 있습니다.

Self-adhesive (자가 부착력)
Cica-Care (시카케어)의 피부접촉면은 자체접착력이 있는 반면 실리콘의 바깥면은 비 점착성의 silicone membrane 처리로 옷이나 외부 물질에 달라 붙는 불편함이 없습니다. 따라서 흉터부위가 아주 작거나 얇은 줄처럼 되어 있는 경우를 제외하면 고정을 위한 별도의 밴디지나 테이프가 필요하지 않습니다.

Durability (뛰어난 내구성)
시카케어는 한면에 막을 입히는 membrane 처리와 실리콘의 조화로 다른 실리콘 젤에 비해 내구성이 강하여 쉽게 망가지지 않고 오래동안(약 2-3주간) 사용할 수 있습니다.

Conformable (혁신적인 신체적응력)
Cica-Care (시카케어)는 매우 유연한 실리콘 젤 시트로 자체 접착력이 있어 사용이 편리하며 손가락 관절부위등의 부착이 힘든 부위에도 쉽게 사용할 수 있습니다.

Reusable (재사용 가능)
한 조각의 Cica-Care (시카케어)는 쉽게 새척하고 재사용 할 수 있으며 사용 후 2-3주가 지나면 새로운 조각으로 교체 해주면 됩니다.

Cost effectiveness (경제적인 치료법)
Cica-Care (시카케어는) 내구성이 강하고 재사용이 가능하므로 잘라낸 한 조각을 2-3주간 사용할 수 있어 매우 경제적인 치료방법입니다.

적응증

Cica-Care(시카케어)는 다음과 같은 곳에 적용할 경우 효과가 있습니다.

  • 새로 생긴 하이퍼트로픽성 흉터(비후성 반흔)나 켈로이드성 흉터, 오래된 흉터의 치료
  • 수술/화상/외상 등으로 인한 하이퍼트로픽성 흉터 및 켈로이드성 흉터의 예방

반적응증/ 주의사항

Cica-Care (시카케어)는 연고등의 다른 의약품과 함께 사용할 경우 효과를 반감 시킬수 있으며 아토피 피부염등 피부트러블이 있을 경우에는 사용할 수 없습니다. 또한 상처가 아물지 않았거나 감염된 경우, 여드름이 진행중인 경우에는 사용을 금합니다.

시카케어를 사용할 경우에는 다음과 같은 점에 유의하셔야 합니다.
흉터크기에 거의 맞도록 사용하여 흉터가 아닌 피부에 지나치게 많이 부착되지 않도록 하며 정상적으로 아문 하얗고 평평한 흉터에는 사용하지 않습니다. 연고나 크림을 함께 사용할 경우 실리콘이 흉터에 밀착되는 것을 방해하므로 병행하여 사용하지 않습니다. 만일 시카케어 사용중 피부 발진이나 가려움 등 피부트러블이 발생할 경우 시카케어의 사용시간은 12시간 미만으로 줄여볼거나 잠시 쉬었다가 피부상태가 정상적으로 돌아온 후 다시 사용해야 합니다. 만약 사용을 중단해도 피부상태가 호전 되지 않을 경우에는 전문가를 통한 별도의 상담이 필요합니다. 만약 외과적 수술 후 시카케어를 사용할 경우에는 반드시 봉합사를 제거한 후 사용해야 합니다.

Product Availability

Code
Size
Q'ty /Carton
66250705
12cm x 6 cm
1 개
66250707
12cm x 15cm
1 개

사용법

Step 1:
사용전 후 손을 깨끗이 씻는다.
자극이 적은 비누와 미지근한 물로 흉터와 주변 피부를 부드럽고 깨끗하게 닦아 준 후 말린다.
플라스틱 제품 tray에서 시카케어를 꺼낸다.










Step 2:
흉터크기 보다 약간 크게 시카케어를 자릅니다.
시카케어 로고가 인쇄된 플라스틱 종이를 제거합니다.












Step 3:
종이를 떼어낸 접착면을자연스럽게 당기거나 늘리지 않고 붙입니다. 필요할 경우 고정을 위해 자극이 적은 종이 반창고를 사용합니다.
처음 2틀은 하루에 4시간 정도 사용하고
그 다음 2일은 하루에 8시간 정도 사용한 후
이후 매일 2시간씩 늘려가며 사용하고 피부에 잘 적응이 되면 하루 최소 12시간 씩 부착하도록 합니다.
만일 피부가 적응할 수 있다면 24시간 사용하는 것이 가장 바람직합니다.

Step 4:
시카케어와 흉터 및 주변피부는 자극이 적은 비누와 미지근한 물로 하루에 최소한 1회는 반드시 세척합니다.
세척 후 공기중에 1-2분 두어 말립니다.


Step 5:
시카케어의 접착력이 떨어지고 세척이 힘들어지면 교체해야 하는데 보통 2-3주 정도의 간격이 적당합니다. 2년 미만의 흉터의 치료나 새로생길 흉터의 예방을 위해서는 약 2-4개월 정도의 치료기간을 두는 것이 가장 적합합니다.

안녕하세요 흉터 때문에 고민이시죠. 제가 알고 있는 흉터 치료제들을 알려 드리겠습니다.

먼저 스카리드겔(메더마)의 성분은 양파추출물, 알란토인, 잔탄검, 기타(보습성분)으로 이루어져 있으며 특장점은 빠른 흡수력, 부드러운 점성, 향기, 우수한 효과등 이며 가격은 10g 20000원정도함. 거의 병원에서 판매함. 약리작용,수화작용으로 흉터 제거.


콘트라투벡스의 성분 양파추출물, 알란토인, 헤파린 이며 특장점은 높은 인지도, 우수한 효과 가격은 10g 22000원정도 이며 콘트라투벡스 특허권이 끝난 관계로 우리나라에서 생산되는 스카벡스, 벤트락스겔등은 콘트라 투벡스 카피라고합니다. 그러나 이 두제품의 장점은 낮은 가격이죠.특장점역시 콘트라투벡스랑 같다고 보면 될 것입니다. 전국에 있는 모든 약국에서만 구입가능(유일한 의약품: 헤파린 성분때문에)

약리작용,수화작용으로 흉터 제거


시카케어. 실리콘중합체가 주성분이며 유일한 부착형 겔 시트 방식 특장점은 높은 인지도, 우수한 효과등이고 단점은 사용하기가 불편하다, 얼굴에 적용하기 힘들다. 12*10(cm) 가 120000원정도 하는걸로 알고 있습니다. 수화작용으로 흉터 제거


켈로코트,스카이지겔등은 실리콘 중합체로 만들어진 겔 방식의 흉터 치료제 입니다.

10g38000원 정도 이며 마르는 시간이 12~15분정도로 잘 마르지 않는게 단점입니다.

수화작용으로 흉터 제거

'일상생활' 카테고리의 다른 글

옥스포드~♡  (0) 2008.08.13
믿을 수가 없다.  (0) 2008.08.13
T Story  (0) 2007.08.20
Posted by Xeoness
, |

Singleton과 Static의 차이점을 자세히 알아보고자 구글신의 도움을 얻어보려다 아래와 같은 좋은 자료 발견.

이제야 이해가 동동이 코딱지만큼 된다 -_-;;

 

싱글턴 패턴(Singleton Pattern) - for Beginner


 

사용자 삽입 이미지

이 문서는 GoF(Gang of Four) Design Patterns 에 정의된 패턴 목록 중 싱글턴 패턴(Singleton Pattern)을 다시 정리하면서 내용을 요약한 것이다. 개인적으로 자바와 닷넷 양진영에 모두 경험이 있다보니 동일 패턴에 대해서 상호 비교해보는 것이 어떨까 하는 생각이 들었다. 그래서 간략하지만 Java와 C# 양쪽에 걸쳐 내용을 작성하였으며, 소스코드 템플릿 또한 *.java, *.cs로 나누어 예를 제시하였다. 어쩌면 이 코드들 때문에 내용이 조금 더 복잡해 보일지도 모르겠다.


싱글턴 패턴의 개요

GoF의 23가지 디자인 패턴 중 개발자에게 가장 익숙한 패턴의 하나가 바로 '싱글턴 패턴(Singleton Pattern)'일 것이다. 싱글턴 패턴은 해당 클래스의 인스턴스(instance)가 하나만 만들어지고, 어디서든지 그 유일한 인스턴스에 접근할 수 있도록 하기 위한 패턴의로 정의된다.

GoF에 기술된 내용 중 싱글턴 패턴을 활용할 수 있는 상황은 다음과 같다.

  • 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근 방식에 의해 모든 클라이언트가 접근할 수 있도록 해야 할 때.
  • 유일하게 존재하는 인스턴스가 상속에 의해 확장되어야 할 때, 클라인트는 코드의 수정 없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때.

이를테면 쓰레드 풀, 캐시, 대화상자, 사용자 설정이라든가 레지스트리 설정을 처리하는 객체, 로그 기록용 객체, 프린터나 그래픽 카드 같은 디바이스를 위한 디바이스 드라이버 같은 것들이 좋은 예가 될 것이다.

싱글턴의 기본적인 구조(Structure)는 그림과 같다.

사용자 삽입 이미지

싱글턴 패턴의 구조

그리고 싱글턴 패턴을 구현하는 고전적인 자바 코드의 기본 템플릿은 아래와 같다.

[자바 코드 1]


// NOTE: This is not thread safe!
public class Singleton {
private static Singleton uniqueInstance;

// other useful instance variables here

private Singleton() {}

public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance
= new Singleton();
}
return uniqueInstance;
}

// other useful methods here
}



아래는 동일한 형태의 C# 버전으로 된 코드이다.

[C# 코드 1]


// NOTE: This is not thread safe!
public sealed class Singleton
{
static Singleton instance=null;
Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance==null)
{
instance
= new Singleton();
}
return instance;
}
}
}



이 코드에서 Singleton 클래스는 private 변수와 생성자를 갖고 있으며 클라이언트에서 인스턴스를 요청할 때까지 Singleton 객체의 생성을 지연(lazy instantiation)하고 있다.

그런데 위의 코드 형태는 주석에도 달려있듯이 멀티(다중)쓰레딩 환경에서의 잠재적 문제를 안고 있기 때문에 실전에 절대 사용하면 안된다. 두개 이상의 쓰레드가 인스턴스를 획득하기 위해 getInstance() 메서드(C#의 경우 Instance 속성(Property))에 진입하여 경합을 벌이는 과정에서 서로 다른 두개의 Singleton 인스턴스가 만들어지는 좋지 않은 상황이 발생할 여지가 있다.

멀티쓰레드 환경에서의 싱글턴(Multithreaded Singleton)

위에서 제기한 문제를 해결하기 위해서는 다음 세가지의 해법을 사용할 수 있다.

  1. 인스턴스를 필요할 때 생성하지 않고, 처음부터 인스턴스를 만들어 버린다. 다시 말해서 lazy instantiation을 포기하고 static 멤버필드를 사용항여 언과 동시에 초기화하는 것이다. 단, 인스턴스를 미리 만들어 버리게 되면, 특히 해당 인스턴스가 자원을 많이 차지하는 컴포넌트일 경우에는 시스템 리소스가 쓸데없이 낭비될 가능성이 있다.
  2. getInstance() 메서드(C#의 경우 Instance 속성)를 동기화시킨다. 단, 동기화시키고자할 때는 getInstance()의 속도가 그렇게 중요하지 않다고 판단될 경우이며 동기화로 인한 오버헤드를 감수해야 한다. - 메서드를 동기화 시키면 일반적으로 성능이 100배 정도는 저하된다고 한다.
  3. DCL(Double-checked Locking) 기법을 사용한다. 단, 자바의 경우 DCL은 자바 5 버전 이상의 JVM 환경에서 인스턴스 변수에 volatile 키워드를 사용해야만 한다. voatile 키워드는 멀티쓰레드 환경에서도 uniqueInstance 변수가 원자성을 유지하도록 하여 올바른 싱글턴 인스턴스의 초기화가 진행되도록 한다(The volatile keyword in Java를 참고하라). 하지만 자바 1.4 및 그 이전에 나온 JVM에서는 메모리 모델의 문제로 제대로 동작하지 않는다는 것에 주의해야 한다(자세한 내용은 The "Double-Checked Locking is Broken" Declaration 참고하라).

설명보다는 코드를 보고 이해하는 것이 빠를 것 같다. 각 해법을 적용하여 멀티쓰레드 환경에서 제대로 동작(thread-safe)하는 싱글턴 구현의 예제 코드들이 아래에 있다.

1. 처음부터 인스턴스를 생성하는 예제 코드

[자바 코드 2]


public class Singleton {
private static Singleton uniqueInstance = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
return uniqueInstance;
}
}



[C# 코드 2]


public sealed class Singleton
{
static readonly Singleton uniqueInstance = new Singleton();

// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}

Singleton()
{
}

public static Singleton Instance
{
get
{
return uniqueInstance;
}
}
}



2. 동기화 예제 코드

[자바 코드 3]


public class Singleton {
private static Singleton uniqueInstance;

// other useful instance variables here

private Singleton() {}

public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance
= new Singleton();
}
return uniqueInstance;
}

// other useful methods here
}



[C# 코드 3]


public sealed class Singleton
{
static Singleton uniqueInstance = null;
static readonly object padlock = new object();

Singleton()
{
}

public static Singleton Instance
{
get
{
lock (padlock)
{
if (uniqueInstance == null)
{
uniqueInstance
= new Singleton();
}
return uniqueInstance;
}
}
}
}



3. DCL(Double-checked Locking) 예제 코드

[자바 코드 4]


//
// Danger! This implementation of Singleton not
// guaranteed to work prior to Java 5
//
public class Singleton {
private volatile static Singleton uniqueInstance;

private Singleton() {}

public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance
= new Singleton();
}
}
}
return uniqueInstance;
}
}



[C# 코드 4]


public sealed class Singleton
{
static Singleton uniqueInstance = null;
static readonly object padlock = new object();

Singleton()
{
}

public static Singleton Instance
{
get
{
if (uniqueInstance == null)
{
lock (padlock)
{
if (uniqueInstance == null)
{
uniqueInstance
= new Singleton();
}
}
}
return uniqueInstance;
}
}
}



아래 C# 코드는 위 코드와 동일하게 DCL을 사용하지만 volatile을 사용하는 다른 버전의 예제이다.

[C# 코드 5]


public class Singleton
{
private static volatile Singleton uniqueInstance = null;

protected Singleton()
{
}

public static Singleton Instance()
{
if (uniqueInstance == null)
{
lock (typeof(Singleton))
{
if (uniqueInstance == null)
{
uniqueInstance
= new Singleton();
}
}
}
return uniqueInstance;
}
}


 

싱글턴 레지스트리(Singleton Registry)

서두에서 "유일하게 존재하는 인스턴스가 상속에 의해 확장되어야 할 때, 클라인트는 코드의 수정 없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때" 싱글턴을 활용한다고 하였다. 이때에는 서브클래스를 만드는 것이 중요한 게 아니라, 이 새로운 서브클래스의 유일한 인스턴스를 만들어 클라이언트가 이를 사용할 수 있도록 하는 것이 관건이다.

싱글턴의 서브클래스를 만들 때 가장 유연한 방법은 싱글턴에 대한 레지스트리를 사용하는 것이다. 아래 자바 예제 코드는 레지스트리를 갖고 있는 싱글턴으로 특정 클래스 객체의 인스턴스를 생성하기 위해서 리플렉션을 사용하고 있다. 'classname'은 Singleton의 서브클래스 이름이다. 이렇게 하면 서브클래스의 선택에 있어서 런타임에 싱글톤을 결정하는 유연성을 가질 수 있다(자세한 내용은 Simply Singleton을 참고하라).

[자바 코드 5]


import java.util.HashMap;
import org.apache.log4j.Logger;
public class Singleton {
private static HashMap map = new HashMap();
private static Logger logger = Logger.getRootLogger();
protected Singleton() {
// Exists only to thwart instantiation
}
public static synchronized Singleton getInstance(String classname) {
Singleton singleton = (Singleton) map.get(classname);
if (singleton != null) {
logger
.info("got singleton from map: " + singleton);
return singleton;
}
try {
singleton
= (Singleton) Class.forName(classname).newInstance();
}
catch(ClassNotFoundException cnf) {
logger
.fatal("Couldn't find class " + classname);
}
catch(InstantiationException ie) {
logger
.fatal("Couldn't instantiate an object of type " + classname);
}
catch(IllegalAccessException ia) {
logger
.fatal("Couldn't access class " + classname);
}
map
.put(classname, singleton);
logger
.info("created singleton: " + singleton);
return singleton;
}
}


 

결론

이상으로 멀티쓰레딩 환경에서의 싱글턴 패턴 구현 코드를 들여다 보았다. 그렇다면 이 세가지 중 어떤 코드 템플릿을 사용하는 것이 좋을까?

자바에서는 Double-checked locking과 Singleton 패턴 등 (조금 오래되긴 했지만) DCL과 관련한 문서들을 참고해보면 멀티쓰레드 환경에서 제대로 동작하는 싱글턴을 만들기 위한 최상의 솔루션은 동기화를 수락하거나 static 멤버필드를 사용하는 것을 권장하고 있다. 닷넷의 경우 The Correct Double Checked-Lock Pattern Implementation를 보면 [C# 코드 2]와 같은 형태의 코드를 사용할 것을 권장하고 있다.

싱글턴 구현에 있어서 반드시 DCL을 사용해야 하는 특별한 경우가 아니라면 대부분의 상황에서는 static 변수를 사용하거나 동기화 블럭을 사용하는 것으로도 충분할 것 같다. 성능의 저하는 다소 존재하겠지만 다양한 java 및 .net 버전과 메모리 모델에 종속적이지 않은 싱글턴을 구현하는 잇점도 있다고 생각한다. DCL을 적용해야한다면 특히 자바의 경우 volatile 키워드와 함께 반드시 자바 5 버전 이상을 사용해야 한다는 것을 잊지 말아야 한다.

마지막으로 참고가 될만한 두가지 사항을 덧붙이며 싱글턴 패턴에 대한 요약을 마무리한다.

싱글턴 패턴 사용 시 주의할 점(Java 기준)

  • 중복되는 얘기지만 DCL을 사용하려면 자바 5(1.5) 이후 버전을 사용해야 한다.
  • 클래스 로더가 여러개 있으면 싱글턴이 제대로 작동하지 않고, 여러 개의 인스턴스가 생길 수 있다. 이 경우 클래스 로더를 직접 지정해서 사용해야한다.
  • 개인적으로 최근 프로젝트 환경을 보면 슬슬 자바 5 버전으로 많이 갈아타고 있는 듯 하다. 정말 오래된 시스템을 유지 보수하는 경우가 아니라면 자바 1.2 이전 버전을 사용할 일은 없겠지만, 혹시라도 자바 1.2 이전 버전의 환경에서 작업한다면 JVM의 가비지 컬렉터 관련 버그 때문에 싱글턴 레지스트리를 사용해야할 수도 있다.

아래 코드는 클래스 로더를 직접 지정하는 예제이다. 이 코드는 Class.forName() 메서드를 대체할 수 있다(자세한 내용은 Simply Singleton을 참고하라).

[자바 코드 6]


private static Class getClass(String classname) throws ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader
= Singleton.class.getClassLoader();
}
return (classLoader.loadClass(classname));
}

정적 클래스 변수(메서드) vs. 싱글턴 패턴

굳이 싱글턴 패턴을 사용할 필요없이 전역 클래스 변수(static 멤버필드)를 사용하면 되지 않을까 하는 의문이 들 수도 있다. lazy instantiation을 구현하는 싱글턴 패턴에 비해서 전역 변수를 사용하는 경우 다음과 같은 단점들이 있을 수 있다.

  • 싱글턴 패턴은 static 인스턴스를 미리 생성해놓는 경우를 제외하고는 객체가 필요한 상황이 되었을 때에 비로소 인스턴스를 생성한다. 반면 전역 변수를 사용하면 대부분의 경우는 어플리케이션을 시작할 때 미리 객체가 생성한다. 그런데 그 객체가 자원을 많이 차지하고, 실제로 어플리케이션을 종료할 때까지 한번도 쓰지 않게된다면 괜한 자원만 낭비하는 꼴이 되고만다(이러한 상황은 시스템 플랫폼에 따라 달라질 수도 있다. 어떤 JVM은 객체를 나중에 필요할 때 생성하기도 한다고 한다).
  • 전역 변수를 사용하다 보면 간단한 객체에 대한 전역 레퍼런스를 자꾸 만들게 되면서 네임스페이스를 지저분하게 만드는 경향이 생긴다. 물론 싱글턴도 남용될 수 있지만, 네임스페이스가 지저분해지게 되는 것을 부추길 정도는 아니다.


 

참고 자료

아래는 이 포스트를 작성하기 위해 참고한 도서와 관련 사이트의 목록이다. 영어가 짧고 스크롤의 압박이 심하다보니 사이트의 글들을 죄다 꼼꼼하게 읽어보지는 못했다. ^^; 하지만 정독해보면 분명 도움이 될 내용들이라고 장담한다. ^^

Books

  • GOF의 디자인 패턴, 피어슨에듀케이션 코리아
  • Head First Design Patterns, 한빛미디어
  • 예제로 배우는 C# 디자인 패턴, 정보문화사 (비추. 자바와 닷넷 관련한 더 좋은 패턴 책들이 많이 있다.)
  • J2EE 패턴 (GoF & J2EE), SUN SL-500
  • The Design Patterns Java Companion

Terms

Articles


P.S. 내용 중 잘못된 부분이 있다면 지적 바랍니다. ^^

'Web Programming > Java EE' 카테고리의 다른 글

64bit 버전 이클립스 설치(with eGovFramework)  (0) 2013.02.07
Posted by Xeoness
, |

그리드를 그리던 중 실수가 있었는지 상기와 같은 에러가 발생했다.

아무리봐도 잘못한거 없어 보였는데 ㅋㅋ

단순한 실수 ;;

The problem is that you're using the autoExpandColumn config option but haven't given the column an id - autoExpandColumn is based on 'id' not 'dataIndex'/'header'. Change the colModel to:

autoExpandColumn을 설정할 때 id 지정을 하면서 오타가 있었다. =_=)

id만 맞춰주면 OK
Posted by Xeoness
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함