[JSP] Hello, JSP!!! 출력 소스

프로그래밍/PHP|2015. 1. 27. 11:39
반응형

<html>
<body>
<% 
String str = request.getParameter("name");
if(str == null)
{ str = "JSP"; }
%> 
Hello, <%= str %>!!! 
</body>
</html>
 

 

[출처] Think | 재뇽 (http://timetothink.tistory.com/78)

반응형

댓글()

한글 문자열 자르기

프로그래밍/PHP|2015. 1. 27. 11:39
반응형

'최근 게시글' 등의 제목에서 한글깨짐없이 몇 byte 만 추출 해올 수 있습니다.

 

$head = mb_strimwidth($head, 0, 26, "..", "EUC-KR");


반응형

댓글()

[php] 문자열 자르기

프로그래밍/PHP|2015. 1. 27. 11:38
반응형

 substr()

Returns the extracted part of string, or FALSE on failure or an empty string.

문자열의 압축을 푼 일부를 반환하거나, FALSE를 장애 또는 빈 문자열에.(구글번역ㅠㅠ)

■ 원형

string substr ( string $string , int $start [, int $length ] )

■ 인수

$string = 오려낼 문자열

$start =  오려낼 시작지점

$Length = 오려낼 범위

■ 예제

<?php
$str = "PHP should I study";
$cstr = substr($str, 4, 6);

echo $cstr;
?>

■ 결과

should


■ php.net 예제

<?php
$rest 
substr("abcdef"0, -1);  // 반환값 "abcde"

$rest substr("abcdef"2, -1);  // 반환값 "cde"
$rest substr("abcdef"4, -4);  // 반환값 false
$rest substr("abcdef", -3, -1); // 반환값 "de"
?>

= 설명(제 생각이므로 틀릴수도있습니다 0_0;;)

$rest substr("abcdef"0, -1);  // 반환값 "abcde"

0(문자열 처음부터), -1(마지막문자 1자리(f) 를 제외) 반환

$rest substr("abcdef"2, -1);  // 반환값 "cde"

2(문자열 2번째 자리부터), 끝자리 왼쪽으로 한자리를 제외한 문자열 반환

$rest substr("abcdef"4, -4);  // 반환값 false

문자열 4번째자리부터(abcdef), 끝자리에서 왼쪽으로 4번째자리까지(abcdef)

하지만 범위가 시작점부터 뒤에 있으므로 False(안됌)

$rest substr("abcdef", -3, -1); // 반환값 "de"

문자열 끝에서 왼쪽으로 3칸앞(abcdef),문자열 끝에서 왼쪽으로 1칸앞(abcdef)

 

[출처] 코딩덕후 (http://c_study_s.blog.me/30132617539)

반응형

댓글()

echo "" 구문 안의 스타일시트가 적용이 되지 않을때

프로그래밍/PHP|2015. 1. 27. 11:38
반응형

큰따옴표를 ' 작은따옴표로 바꾸시고요

 

만약 그 안에 작은따옴표가 들어간다면

 

큰따옴표 앞에 를 붙여주세요

 

echo ("onmouseover="this.bgColor='#efefef';"");

 

이런식으로 해주시면 됩니다..^^

 

[출처] 지식인 (http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040203&docId=68776888&qb=ZWNobyDslYjsl5AgJw==&enc=utf8&section=kin&rank=2&search_sort=0&spq=1&pid=g/gyuc5Y7tNssu35dKdssc--065608&sid=T-TyCAnL9E8AAC3JGDc)

반응형

댓글()

세션을 이용한 로그인 로그아웃(php)

프로그래밍/PHP|2015. 1. 27. 11:36
반응형

CREATE TABLE sess_test ( no int(4) unsigned NOT NULL auto_increment, sess_id char(10) NOT NULL default '', sess_passwd char(25) NOT NULL default '', level int(1) NOT NULL default '0', PRIMARY KEY (no) ) TYPE=MyISAM; 

먼저 위의 스키마처럼 테이블을 생성합니다. 
sess_id 는 유저 아이디가 저장될 필드 이름입니다. 
sess_passwd 는 유저 패스워드가 저장될 필드 이름입니다. 
level 은 회원들의 레벨,즉 관리자와 일반회원을 구분하기 위한 필드 입니다. 
편의상(제 임의대로) level 9가 관리자, level 1 이 일반회원으로 구분 하기 위합입니다. 
지금 강좌에선 단순히 로그인 로그아웃 처리만... 하겠습니다. 
관리자 비회원 구분도... 디비에서 불러온 level 의 판단으로 이루어지므로 그리 어렵지 않습니다.




connect.php 의 구성 

아래처럼 connect.php 를 구성합니다. 디비와 연결 하는 부분이므로... 디비와 연동되는 페이지는 incldue 하여 사용합니다. 

<? $localhost="localhost"; $user_id="root"; //디비 접근 아이디 
$user_passwd=""; //디비 접근 패스워드 
$db_name=""; //접근할 디비 이름 //mysql 에 접속하기 위한 구문... 이 파일을 테이블에 접근할 페이지에 include 하여 사용한다. 
$connect=mysql_connect("$localhost","$user_id","$user_passwd") or die("SQL server에 연결할수 없습니다."); mysql_select_db("$db_name",$connect); ?>




sess_func.php 의 구성 페이지 이동함수 메세지 출력 함수를 정의 한 파일입니다. 

<? //페이지 이동 함수 

function GoGo($url) { 
global $connect; echo"<meta http-equiv="refresh" content="0; url=$url">"; 
if($connect) @mysql_close($connect); exit; 
} //메세지 보여주는 함수 메세지창 //메세지를 보여주고 뒤로 백한다 

function message($msg) {
echo(" <html><head> <script name=javascript> window.alert('$msg'); history.go(-1); </script> </head></html> "); 
exit; 
} //메세지를 보여주고 가고자할 페이지로 이동한다... 

function GoTo($msg="",$url) { 
global $connect; 
echo(" <html><head> <script name=javascript> window.alert('$msg'); </script> </head></html> "); 
echo"<meta http-equiv="refresh" content="0; url=$url">"; if($connect) @mysql_close($connect); exit; 
} ?>





회원가입폼

session_member.php 
<? 
session_cache_limiter(''); 
session_start(); 
include "connect.php"; //디비에 접근하기위해 정의한 페이지를 include 시킨다.... 
include"sess_func.php"; // 함수를 정의한 페이지를 include 시킨다... 
//테이블을 생성한다음 
//session_cache_limiter('') 와 session_start(); 를 위와 같이 선언해 줍니다. 
//session_start 는 세션을 사용하겠다고 선언해주는 것입니다. 
//session_cache_limiter('') 를 해주는건 만료된 페이지입니다... 를 보여주지 않게 해주기 위함입니다. 
//저는 mode 라는 변수를 써서 한페이지에 값(아이디와 패스워드)를 입력받는 처리와 
//값이 테이블에 저장되는 코드를 구분하였습니다. 
//만약 mode 라는 변수에 값이 없다면... 즉, 처음 이 페이지를 호출하게 되면 mode 라는 변수에 값이 
//들어 있지 않게 되므로 .... 입력받는 폼만 보여주게 됩니다. 
//$PHP_SELF 는 자기자신(현재페이지를)을 나타내는 php 변수 입니다. 
//$PHP_SELF 를 쓰면 Submit 을 클릭했을시 자기자신 즉 session_member.php 를 호출 하게 되겠죠... 
//그리고 input type=hidden 으로 변수 이름은 mode 값은 ok 를 주었으므로 
//submit 을 클릭하면 $mode 변수에 ok라는 값이 들어가서 session_member.php 를 호출하게 됩니다. 

if(!$mode) { 
echo(" <form name=sign method=post action=$PHP_SELF> <input type=hidden name=mode value=ok> <table border=1 cellpadding=0 cellspacing=0> <tr> <td>ID</td> <td><input type=text name=id size=12 maxlength=10></td> </tr> <tr> <td>Passwd</td> <td><input type=password name=passwd size=12 maxlength=10></td> </tr> <tr> <td colspan=2 align=center><input type=submit value=Submit></td> </tr> </table> </form> "); 
} //위에서 정의한 폼의 값이 넘어오게 됩니다. 
//위의 폼에서 input type=hidden 으로 mode 란 변수를 선언하고 값은 ok 를 주었으므로 
//이리로 값이 넘어 오게 되겠죠^^ 
if($mode==ok) { //공백.. 값을 입력시키지 않으면 메세지를 뿌린다. 
if(!ereg("([^[:space:]])",$id)) message("id를 입력하세요"); 
if(!ereg("([^[:space:]])",$passwd)) message("password 를 입력하세요"); //sql 에 접근해서 입력한 아이디와 같은 아이디가 있는지 찾는다. 
$sql=mysql_query("select * from sess_test where sess_id='$id'") or die(mysql_error()); 
$check=mysql_num_rows($sql); //만약 check 변수에 값이 있으면 똑같은 아이디가 있는것이 되겠죠? 
//그럼 메세지창을 뿌립니다. 
if($check) message("같은 아이디가 있습니다. 다른아이디로 해주세요!!"); //그렇지 않다면... 즉 같은 아이디가 없다면 값을 입력합니다. 
//입력시 관리자가 아니므로 레벨은 1 로 입력 합니다.... 
else { 
$sql=mysql_query("insert into sess_test values('','$id','$passwd',1)") or die(mysql_error()); 
GoTo("가입하셨습니다","session_start.php"); } 
}




회원체크

session_start.php 
<? 
session_cache_limiter(''); 
session_start(); //테이블을 생성한다음 
//session_cache_limiter('') 와 session_start(); 를 위와 같이 선언해 줍니다. 
//session_cache_limiter('') 를 해주는건 만료된 페이지입니다... 를 보여주지 않게 해주기 위함입니다. 
//현재 세션레지스터 안에 값이 없어서 로그인 하지 않은 상태라면 
//폼네임은 login 이고 
//text Box 에서 입력 받은 값은 id,passwd 변수로 sess_login.php 페이지 로넘아가게 됩니다. 
if(!$HTTP_SESSION_VARS) { 
echo(" <form name=login method=post action=sess_login.php> <table border=1 cellpadding=0 cellspacing=0> <tr> <td>ID</td> <td><input type=text size=10 name=id maxlength=10></td> </tr> <tr> <td>Passwd</td> <td><input type=text size=10 name=passwd maxlength=10></td> </tr> <tr> <td colspan=2 align=center><input type=submit value=Submit><input type=reset value=Reset></td> </tr> </table> </form> "); 

//세션 레지스터 level 이란 세션 변수 안에 값이 있다면... 값이 무엇이든지 간에 로그인 한 상태라면 
//아래의 상태를 보여줍니다. 
else {
echo(" <table border=1 cellpadding=0 cellspacing=0> <tr> <td>$HTTP_SESSION_VARS[sess_id] 님 로그인...</td> </tr> <tr> <td><a href="sess_logout.php>로그아웃</a></td> </tr> </table> </form> ); 

?>




로그인

sess_login.php 넘어온 값을 세션레지스터에 넣어서 로그인 시킵니다. 
<? 
session_cache_limiter(''); 
session_start(); 
include "connect.php"; //디비 정의 페이지 
include include "sess_func.php"; //함수 정의 페이지 include 
//넘어온 아이디와 패스워드 값으로 sess_test 테이블에 접근하여 해당하는 
//필드를 배열형태로 가져옵니다. 
$sql=mysql_query("select * from sess_test where sess_id='$id' && sess_passwd='$passwd'") or die(mysql_error()); 
$row=mysql_fetch_array($sql); //아이디와 패스워드가 일치하는 사용자가 없으면...(입력된 사용자가 없으면) 메세지를 뿌린다. 
if(!$row) message("그런 사용자는 없습니다."); 
else { //여기 부터 중요 //배열형태로 가져온 필드에 에서 sess_id 필드 즉 id 를 sess_id 란 변수에 넣어주고 
//level 을 $sess_level 변수에다 넣어줍니다. 
//그리고 난후에 세션 에다 그 값을 넣어주는 거죠^^ 
$sess_id=$row[sess_id]; 
$sess_level=$row[level]; 
session_register(sess_id); 
session_register(sess_level); 
GoGo("session_start.php"); } 
?>




로그아웃

세션을 이용한 로그인 로그아웃 마지막 입니다. 
로그아웃 하는 부분입니다. 
제가 로그인 로그아웃 을 구현할때 사용하는 방식을 거의 다 기술 하였습니다... 
처음 세션을 다룰때 정말 삽질 많이 했었읍니다. 
세션의 개념만 잘 이해하고 있으면...쉽게 구현할수 있습니다. 
허접하지만... 잘 봐주시고 엽기적으로 응용 해주세요 회원 수정, 삭제 부분은 넣지 않았습니다. 
태그부분도 잡 태그는 넣지않아 보기 편하도록 노력 하였습니다. 
그럼... 즐 프 하시길^^ 
sess_logout.php 
<? 
session_cache_limiter(''); 
session_start(); 
include"sess_func.php"; //로그아웃 
//아래와 같이 session_unregister 로 세션 레지스터를 날리고 
//session_destroy 로 생성된 세션 을 지워줍니다 
session_unregister(sess_id); 
session_unregister(sess_level); 
session_destroy(); 
GoTo("Logout 하셨습니다.","session_start.php"); 
?> 

출처 : 미니위니

[출처] 플래시 카페 | 색시유져 (http://cafe.naver.com/q69/8058)

반응형

댓글()

[php 또는 javascript] 달력 소스

프로그래밍/PHP|2015. 1. 27. 11:36
반응형

아래 소개하고 있는 소스 코드는 스크립트 언어 PHP 또는 자바스크립트를 이용해 달력을 출력하는 비교적 간단한 웹프로그램입니다. 두가지 소스중 하나를 실행 시키면 아래와 같은 이미지 처럼 출력이 됩니다. 달력을 만들기 위해서는 그 달의 첫 날짜와 마지막 날짜를 계산해야 하며 요일에 따라 글자의 색을 변화 시켜 줘야 합니다. 이해를 돕기 위해 되도록 소스 코드를 단순화 시켰으므로 코드를 차근 차근 살펴보면 이해가 되리라 생각됩니다. 달력이 투박해 보인다면 좀더 세련되게 업그레이드 해보세요.^^

사용자 삽입 이미지


 

 

[PHP로 달력 만들기 소스 코드]

<?php
function calendar(){
    $year date("Y");
    $month date("n");
    $day date("d");
    $day_max date("t",mktime(0,0,0,$month,1,$year));
    $week_start date("w",mktime(0,0,0,$month,1,$year));
    $0;
    $0;
    $html "<div class='calendar_box'><div class='calendar_title B'>".sprintf("%d-%02d-%02d",$year,$month,$day)."</div>";
    while ($j<$day_max){
        if ($i<$week_start) {
            $html .= "<div class='calendar_text'>·</div>";
        else {
            if ($i%7==0$font_color " RED";
            else if ($i%7==6$font_color " BLUE";
            else $font_color "";
            if ($day == ($j+1)) $font_weight " B"else $font_weight "";
            $html .= "<div class='calendar_text$font_color$font_weight'>" . ($j+1) . "</div>";
            $++;
        }
        $++;
    }
    while ($i%7!==0){
        $html .= "<div class='calendar_text'>·</div>";
        $++;
    }
    $html .= "<div class='calendar_tail'></div></div>";
    return $html;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
body {font-family: Verdana, Dotum; line-height:20px;}
.B {font-weight:bold}
.box {width:185px; text-align:centerborder:1px solid #dddddd}
.calendar_box {width:175px; padding:5px}
.calendar_text {width:25px; float:left; text-align:centerfont-size:12px}
.RED {color:red}
.BLUE {color:blue}
.calendar_title {margin:0px; text-align:centerfont-size:12px; background-color:#999999; color:#ffffff}
.calendar_tail {clear:both;}
</style>
<title>PHP로 달력 만들기</title>
</head>
<body>
<div class="box">
<?=calendar();?>
</div>
</body>
</html>


[자바스크립트로 달력 만들기 소스 코드]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>자바스크립트로 달력 만들기</title>
<style>
body {font-family: Verdana, Dotum; line-height:20px;}
.B {font-weight:bold}
.box {width:185px; text-align:centerborder:1px solid #dddddd}
.calendar_box {width:175px; padding:5px}
.calendar_text {width:25px; float:left; text-align:centerfont-size:12px}
.RED {color:red}
.BLUE {color:blue}
.calendar_title {margin:0px; text-align:centerfont-size:12px; background-color:#999999; color:#ffffff}
.calendar_tail {clear:both;}
</style>
<script>
function calendar(){
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth() + 1;
    var day = today.getDate();
    var week_start = new Date(year,month-1,1).getDay();
    var day_max = get_day_max(year,month-1);
    var i = 0;
    var j = 0;
    var html = "<div class='calendar_box'><div class='calendar_title B'>" + year + "-" + get_number_str(month) + "-" + get_number_str(day) + "</div>";
    while (j < day_max){
        if (i < week_start) {
            html += "<div class='calendar_text'>·</div>";
        else {
            if (i%7==0) font_color = " RED";
            else if (i%7==6) font_color = " BLUE";
            else font_color = "";
            if (day == (j+1)) font_weight = " B"else font_weight = "";
            html += "<div class='calendar_text" + font_color + font_weight + "'>" + (j+1) + "</div>";
            j ++;
        }
        i ++;
    }
    while (i%7!==0){
        html += "<div class='calendar_text'>·</div>";
        i ++;
    }
    html += "<div class='calendar_tail'></div></div>";
    return html;
}
function get_day_max(year,month){
    var i = 29, cday;
    while(i<32){
        cday = new Date(year,month,i);
        if (cday.getFullYear()!=year || cday.getMonth()!=month) break;
        i++;
    }
    return i-1;
}
function get_number_str(num){
    if (num<10) num = '0' + num;
    return num;
}
</script>
</head>
<body>
<div class="box">
<script>
document.write(calendar());
</script>
</div>
</body>
</html>


[출처] http://hompy.info/565

반응형

댓글()

php 페이지 내용중 일부만 캐릭터셋 변경하기

프로그래밍/PHP|2015. 1. 27. 11:36
반응형

<? echo iconv ("euc-kr", "utf-8", "$text"); ?>

 

설명 : euc-kr 로 되어있는 $text 를 utf-8로 출력


반응형

댓글()

[php] 숫자 세자리 수마다 콤마(,) 찍어주기

프로그래밍/PHP|2015. 1. 27. 11:35
반응형

$count = "250000";

$number = number_format("$count");

echo "$number";

 

결과값 : 250,000

 

반응형

댓글()

for 문을 이용해 변수(문자+숫자 형태)를 출력 (변수 두개)

프로그래밍/PHP|2015. 1. 27. 11:35
반응형

[소스]

for ($a="1";$a<10;$a++) {

echo ${'name'.$a};

echo "<br>";

}

 

[결과]

$name1 변수의 내용이 출력되고 다음행에 $name2 변수의 내용이 출력되고... (생략)

끝으로 $name9 변수의 내용이 출력됩니다.


이것이 활용되는 때는..

$name1, name2.. 등의 변수가 많아서 for문을 이용할때 사용합니다.

아래와 같이 사용했을때는 되지 않습니다.

echo "$name$a";    // 잘못된 예

$name 값이 없으므로 결과는 아래와 같습니다.

1

2

3

...


반응형

댓글()

php 숫자 끝의 두자리만 출력

프로그래밍/PHP|2015. 1. 27. 11:35
반응형

$date = "20111229";

substr("$date", -2);
 

결과 : 29

 

반응형

댓글()

php로 꺾인선 그래프를 만들어보자

프로그래밍/PHP|2015. 1. 27. 11:34
반응형

우선은 php의 이미지 함수를 이용해야 한당!!

그리고 리눅스에는 GD Library가 최신걸로 셋팅이 되어있어야 하구요!!

없으면 깔어셔야 합니다.

 

우선 test.html 에 이 소스를 붙이죠

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<img src="graph.php?0,0,0,0,0.5,2.2,7.1,20.9,42.3,26.9"  width="274" height="188" border="0">
</BODY>
</HTML>
이렇게 말입니다.

graph.php?0,0,0,0,0.5,2.2,7.1,20.9,42.3,26.9 --> 요거는 머냐구요?? 그래프를 그릴 좌표값입니다.

보시면 아시것지만 graph.php 이파일에  좌표값을 전달하는 것이지요

그리고 본격적으로 그래프를 그릴 소스파일을 만듭니다.

 

graph.php 파일에

 

<? 
  Header("Content-type : image/png"); 
  
  $query_string = urldecode(getenv("QUERY_STRING")); 
  $query_string = explode("," , $query_string); 
 
  for ($i=0; $i<10; $i++){
   if ($y_max < intval($query_string[$i])){
    $y_max = intval($query_string[$i]);
    }
  }
  
  $image = ImageCreate(274,188); 
  $white = ImageColorAllocate($image , 255,255,255); 
  $skin = ImageColorAllocate($image , 250,219,172); 
  $black = ImageColorAllocate($image , 0,0,0); 
  $dark_gray = ImageColorAllocate($image , 241,241,241); 
  
  ImageLine($image , 33,15,233,15, $black); 
  ImageLine($image , 33,15,33,165, $black); 
  ImageLine($image , 33,165,233,165, $black); 
  ImageLine($image , 233,15,233,165, $black);
  ImageLine($image , 25,20,25,170, $black); 
  ImageLine($image , 25,170,225,170, $black);
  
  ImageString($image , 2, 3, 4,"Man(%)",$black);
  ImageString($image , 2, 250, 174,"Avg",$black);

  //x축 안선
  for ($i=25; $i < 160; $i=$i+10){
  ImageLine($image , 33,$i,233,$i, $dark_gray); 
  }

  //x축 대칭
  for ($i=20; $i<171; $i=$i+10){
  ImageLine ($image,25,$i,33,$i-5,$black); 
  }
  
  // y축 안선
  for ($i=53; $i < 230; $i=$i+20){
  ImageLine($image , $i,15,$i,165, $dark_gray); 
  }
  
  // y축 대칭
  for ($i=25; $i<226; $i=$i+20){
   ImageLine ($image,$i,170,$i+10,165,$black); 
   }
  
  //x축 값
  $x_position =22;
  $x_value =0;
  for ($i=0; $i<=10; $i++){
 ImageString($image,2,$x_position,175,$x_value,$black);
 $x_position= $x_position + 20;
 $x_value = $x_value + 10;
  }
  
  //y축 값
  $y_position = 23;
  if ( $y_max <=  35){
   $y_value = 28;
  } else {
   $y_value = $y_max;
  } 
  
   $temp = intval($y_value/7);
   $y_value = $temp * 7 +7;
   $y_max = $y_value;
   $skip = $temp +1;
  
  for ($i=0; $i<=7; $i++) {
    ImageString($image,2,7,$y_position,$y_value,$black);
 $y_position=$y_position+20;
 $y_value = $y_value - $skip;
  }
  
 // 막대그래프 꺽은선 그래프
  $rectPosition =35;
  $linePosition =40;
  for ($i=0; $i<10; $i++) {
    $y_rectPosition = 145 * intval($query_string[$i])/$y_max;
 $y_rectPosition = 170-$y_rectPosition;
    imageFilledRectangle($image, $rectPosition ,$y_rectPosition,$rectPosition+10,167, $skin);
 imageFilledRectangle($image, $linePosition-2, $y_rectPosition-2, $linePosition+2, $y_rectPosition+2 ,$black);
 $rectPosition = $rectPosition +20;
 if ($i != 0){
 ImageLine($image ,$temp1,$temp2,$linePosition,$y_rectPosition, $black); 
 }
 $temp1 = $linePosition;
 $temp2 = $y_rectPosition;
 $linePosition = $linePosition +20;
  }
    
  ImagePNG($image); 
  ImageDestroy($image); 
 
?>
요렇게 말입니다. ㅎㅎㅎㅎ

 

[출처] 홀로서기 | 한아름 (http://blog.naver.com/sire81/60014014950)

반응형

댓글()