한성넷북 GX102 아답타를 추가 구매했습니다. (현재 GX102를 1년 3개월째 사용중) 아수스 넷북(Asus)용 12V 3A 아답타를 사용할 수 있더군요.
한성넷북 GX102를 사용하고 있는데 MS-SQL 2005와 같은 프로그램 설치할 때와 FS2004로 비행시뮬할 때만 빼면 무선랜 켠 상태로 4시간동안 배터리로 사용합니다.
경험상 배터리만 사용해서 하루 일과시간에 쓰려면 무선랜 켜고, 화면밝기 70~80%로 사용하는 상태에서 최소 10시간은 되어야 진정 모바일 넷북의 반열에 겨우 올라설 수 있겠습니다.
에이서 12V 3A 월타입(Wall Type) 아답타처럼 아답타 몸체에서 바로 전원 컨센트에 꽂을 수 있는 모델이 아니기 때문에 아답타를 휴대하고 다니는 것이 의외로 불편합니다. 역시 별도로 구하기는 어렵더군요. 잭 사이즈도 맞지 않고.
그래서 아답타를 집과 사무실에 하나씩 두고 쓰려고 아답타 검색을 했는데 한성넷북 GX102 잭에 맞는 12V 3A 아답타를 구하기가 쉽지 않았습니다. 아수스(Asus) 넷북용 12V 3A 아답타는 제법 검색이 되었는데 잭 사이즈가 제가 사용하고 있는 한성넷북 GX102와 같은 것인지 알 수 없더라구요.
거의 포기하고 있다가 얼마 전에 다시 생각이 나서 검색을 해봤는데 외경 4.7 내경 1.7 미리로 잭 사이즈가 기록되어 있길래 바로 구매를 하였답니다. 한성넷북 GX102 를 사용하시는 분들 중에서 12V 3A 아답타를 여분으로 구하려면 아수스 넷북용 12V 3A 아답타를 쓰면 되겠습니다. 구매전 잭 사이즈(내경, 외경) 꼭 확인하시구요 !
휴대폰이 너무나 스마트 해지려고 하다보니 사람들은 덜 스마트(less smart) 해지고 있습니다.
보행중 귀에 이어폰 꽂고 음악 들으면서 휴대폰 문자 사용하다가 분수대에 빠지거나 다른 사람과 부딪혀 넘어지고 돌출된 장애물에 걸려 넘어져 가벼운 찰과상을 입기도 합니다.
심지어는 버스 정류장에서 버스를 기다리는데 머리 한 쪽에서는 음악을 듣고 또 다른 한 쪽에서는 문자로 답장 보낸다고 정신 없습니다. 그러는 상황에서 분명히 자기가 타야 할 버스 번호를 보면서 머리 속 한 부분 즉, 세번 째 부분에서는 "타야지~" 하지만 행동으로 옮겨지지 않지요. 버스는 기다려 주지 않고 출발해버립니다. 이렇게 버스를 놓치는 경우도 다반사지요.
미국에서는 걸어다니면서 문자보내는 행동(texting while walking)을 자제하라는 홍보가 눈에 많이 띕니다. 이런 가운데 미국 필라델피아 주 에서는 앞을 보지않고 휴대폰 문자를 누르고 다니는 보행자에게 120달러(한화 약 12~13만원)의 벌금을 부과할 것이라는 발표도 있었습니다. 한편 헤드폰, 이어폰을 꽂고 보행중이거나 자전거를 타고 이동하는 사람들에 대한 통제력을 가하기 위해 입법(入法)이 필요하다는 변호사도 있었습니다.
한국에 이러한 법이 만들어진다면 제제를 가하는 경찰관에게 "왜 이러세요 ~ !" 하고 대들 수도 있습니다. 이들 보행자를 통제하는 법안이 만들어졌다면, 강력한 법치(法治)국가인 미국에서 "왜 이러세요~!"처럼 대들면 과중처벌까지 됩니다. 흥미로운 것은 "범죄"로 다룬다는 것이죠. 범죄라는 것은 과태료, 훈방 조치가 아니라 "형법(Criminal Law)"으로 다루는 것이니까요.
우리나라는 이 상황을 과연 법으로까지 입법추진하여 공권력으로 제제를 가할 수 있을지 의문입니다만 - (모든 것을 법으로 규제하려는 발상 매우 어리고 아쉽게 보입니다만....) - , 법이 있던 없던간에 "내 몸 하나 지키는 안전"만큼은 "나 스스로 최선을 다해 주의해야 할 것"입니다.
모바일이 우리 삶을 풍요롭게 하지만 늘~ "안전"과 "개인정보 보호"에 대해서는 깊은 관심을 가지고 살아야 하는 세상입니다.
※ 영어 자막까지 넣을 시간은 안 됩니다 ~ oTL;;; 영상이 매우 흥미롭기 때문에 꼭 한 번 보시기 바랍니다.
개발을 하는 사람의 입장에서 이번 네이트 해킹사건을 보면 여러 군데에서 미심쩍은 부분이 많다는 것을 느낍니다. 특히 N사와 D사가 알툴스(이스트 소프트) 제품을 모두 제거하라고 사내 직원들에게 공지했다고 합니다.
자세한 것은 밝혀지겠지만 저는 한 편으로 이런 것을 떠올려 봅니다.
알약이 나오지 않았던 시절 안철수 박사님께서 국내 최초로 백신 프로그램을 만들었습니다. 그 프로그램은 V3로 유명해졌고 우리 국민들 대부분 V3를 무료로 제공받아 사용을 해왔습니다. 그러던 어느날 미국의 한 거대 백신소프트웨어 업체가 천문학적인 돈과 개인 주택과 자가용 제트기까지 주겠다며 안 박사님을 꼬셨지만 안 박사님은 끝내 거절해서 V3를 지켜냈습니다.
우리나라는 유닉스, 리눅스, 맥 OS, 윈도우즈 같은 운영체제 프로그램이 아직 없을뿐입니다.
오히려 바이러스를 막는 백신은 미국보다 더 강하다고 생각합니다. 그 대표적인 것이 안철수 연구소의 V3, 이스트 소프트의 알약 그리고 지금은 사라졌지만 안드로이드폰에서 다시 떠오르고 있는 바이로봇 입니다.
V3, 알약, 바이로붓 !
뿐만 아니라 동영상 보는 프로그램, 음악 듣는 프로그램, 이미지 보는 프로그램 등등 제법 많은 양질의 프로그램들을 무료로 쓰고 있습니다. 다양한 유틸리티를 이렇게 무료로 제공해주는 개발자는 흔치 않습니다. 악성코드 실행 막아주는 울타리, 윈도우즈 환경 최적화할 수 있는 트윅, 알집에 견줄 수 있는 빵집 등등 우리는 불행중 다행이라고 할까 우리나라에 이런 좋은 사람들이 있습니다.
자주 떠오르는 해킹사건에 복잡한 고리 속에서 우리 토종 프로그램들이 역사 속에서 사라지지 않도록 해야 한다고 생각합니다. 만약 다시 외국의 어떤 거대 업체가 알약, V3를 집어 삼키게 된다면? 이런 상황은 해킹보다 더 끔찍하지요.
알약의 경우 메모리에 상주하는 프로그램 크기가 많고 떠 있는 프로세스가 간혹 CPU 사용률을 높이는 일이 있습니다. 허나 이름이 잘 알려지지 않은 파일공유 및 다운로드 같은, 프로그램 내려받기 사이트에서 제공하는 다운로드 전용 프로그램에 비하면 참고 봐줄 수 있는 문제지요. V3 역시 간혹 CPU사용률을 높이는 경우도 있습니다. 성능은 서로 비슷 비슷합니다. 다운로드 전용 프로그램이나 파일공유 프로그램들이 오히려 시스템 속도를 저하시키고 악성코드를 유포시키는 개구멍으로 사용되죠. 게다가 그리드(Grid) 시스템이라 때때로 시스템 성능을 저하시키는 경우가 많습니다.
이번 해킹 사건으로 이스트 소프트의 수사 대상 프로그램은 알툴즈 업데이트 라고 알고 있습니다.
업데이트 프로그램의 어떤 코드가 어떤 기능을 가지고 있어서 문제의 결과를 만들어내었다는 수사결과가 나와야 공신력과 수사기관의 권위가 설 것이라 생각합니다. 또한 이러한 수사결과가 있어야 외국 보안프로그램 업체의 공격으로부터 우리 토종 프로그램들을 보호할 수 있을 것이라 확신합니다.
따라서 저는 문제가 되는 업데이트 프로그램만 삭제하였습니다.
하나 더 말하면 오라클, MS-SQL, mySQL에 못지 않은 국산 데이터베이스 프로그램이 있습니다. 큐브리드(Cubrid)라고 하지요. 한컴 오피스도 아직 갈 길은 멀지만 MS 오피스에 필적할 정도로 수준이 높습니다. 국산 운영체제가 만들어져 국제 표준이 되는 날을 기대해봅니다. 왜냐하면 우리는 충분히 그렇게 해낼 수 있는 실력이 되니까요.
특정 기업을 사냥하는 수사가 아니라 우리의 저작권, 우리나라의 國富(국부)를 지켜내는 지혜가 모이는 사건이기를 기대해봅니다.
알툴즈입니다. 이번 건의 조사결과를 기다리는 입장에서 휴이님의 글을 보게 되었습니다. 알집 공개용에 사용되는 업데이트 모듈의 보안취약점이 발견되어 8월 4일 이후 제품을 실행하면 자동패치되도록 했습니다. 삭제하신 업데이트 프로그램이 혹시 알툴즈 업데이트 프로그램이라면 이번 건과 무관하오니 삭제하지 않으셔도 됩니다. 심려끼쳐 드려 죄송합니다. 그리고 응원해 주셔서 감사합니다.
최근 잇따라 발생하는 금융보안 사고로 인해 많은 은행의 고객들이 불안해 하고 있다. 뉴스에서는 그들이 어떻게 해킹을 당했는지, 그들의 보안 관리자가 얼마나 허술했는지 연일 보도하고 있다. 그러나 문제는 보안이 뚫렸다는 것이고 더욱 중요한 것은 해당 금융권의 고객들은 무엇을 해야 할지 손쓸 틈도 없었다는 것이다.
금융권에서 여러 가지 대책을 세우고 보안에 투자를 강화하겠다는 것은 다행한 일이나 무엇보다 내 재산은 내가 지킨다는 각오로 미리 보안 수칙을 인지하고 지키는 것이 중요하다.
인터넷 뱅킹 사용시 지켜야 할 개인 보안 수칙을 알아보자.
1. 은행 인터넷 뱅킹 계정이나 포탈 메일 계정 비밀번호를 주기적으로 변경 및 관리한다.
2. 공인인증서, 보안카드, 비밀번호 등을 스캔해서 사진파일이나 엑셀파일 형태로 개인 이메일 계정 또는 인터넷 하드에 저장하지 않는다.
3. 가급적 공인인증서는 PC보다는 USB나 외장하드 등 이동저장매체에 보관해서 인터넷 뱅킹 사용시에만 PC에 연결해서 사용한다.
4. 인터넷 금융거래 계정 ID와 비밀번호는 포탈 메일 계정 ID비밀번호와 다르게 사용하고 절대 타인에게 알려주지 않는다.
5. PC방 등 공공장소에서 인터넷 뱅킹 사용은 물론 각종 사이트에 로그인하지 않는다.
6. MS 윈도우 보안패치 및 백신을 설치하여 주기적인 백신 업데이트를 해 늘 최신으로 유지한다.
7. 업데이트 한 백신의 실시간 검사를 이용하고 주기적으로 수동 검사를 한다.
8. 계좌이체, 공인인증서 재발급 등 이용 내역을 알려주는 휴대전화 문자(SMS)서비스를 이용한다.
1. 레지스트리 편집기를 열고 아래와 같이 변경합니다. HKEY_LOCAL-MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber 에 PortNumber 값을 변경 (10진수로 선택하여 원하는 번호로 변경)
2. 방화벽 설정에서 기존의 원격데스크탑 포트를 선택해제 하고 새로운 이름으로 포트를 하나 추가해야 한다.
예) 포트번호를 위 1번에서 54321 로 변경하였다면 방화벽 설정에서 예외추가에 포트추가 메뉴에서 새로운 이름, "my원격" 등 과 같이 입력하고 포트번호 54321 을 입력한다. 그리고 각자 운영하는 서버환경에 따라 접속허용범위를 설정한 후 재부팅한다.
3. Remote PC에서 원격데스크탑을 열어서 123.456.789.012:54321 과 같이 접속하여 잘 되는지 확인한다.
order by shipcountry/* shipcountry에 null값이 맨 처음에 나온다. */
Select shipcountry, sum(freight) from orders
group by shipcountry, shipcity with rollup
order by grouping(shipcountry)/* shipcountry에 Argentina가 맨 처음 나오고 null이 맨 마지막 레코드에 나온다. */
select shipcountry, shipcity, sum(freight) [운송료 합계] from orders
group by shipcountry, shipcity with cube
order by grouping(shipcountry), shipcountry, grouping(shipcity), shipcity
/* order by grouping(shipcountry), shipcountry : 국가별소계즉, 부분합이각국가별목록이끝나는부분에서집계되고 grouping(shipcity), shipcity는각도시별운송료합계가국가별운송료합계가집계된다음행(Row)부터집계되어나오는것을알수있다. 잘활용하면쓸만한곳이많다. with cube를쓸때 grouping과 with rollup을쓸때 grouping 특성을잘알고활용해야한다. */
▲ Having과 Grouping
select * from ( select shipcountry, sum(freight) [운송료합계] from orders
group by shipcountry with rollup ) A
where A.[운송료합계] > 5500
select shipcountry, sum(freight) [운송료합계] from orders
group by shipcountry with rollup
having sum(freight) > 5500
같은결과가나오는데 Having을쓰는편이더직관적이다. 왜냐? 지금까지예문들을잘따라했다면 Where 보다 Having을쓰는데숙달된직관력이만들어졌기때문이다. 또한앞에서연습했듯이 Having은앞에서 Select된결과집합을가지고난후필터링을한다.
select shipcountry, shipcity, sum(freight) [운송료 합계] from orders
group by shipcountry, shipcity with rollup
having ( grouping(shipcountry) + grouping(shipcity) = 0 ) or ( grouping(shipcountry) + grouping(shipcity) = 2)/* 1은집계된것이므로 1 + 1 = 2 이다. 간단한개념을이렇게활용을하고있다. 대단하군…나는이까지생각이미치지못하였거든…. */
order bygrouping(shipcountry), shipcountry, grouping(shipcity), shipcity
이제목록을출력해봤으니 Freight 평균을내야할단계다. 운임평균은 AVG(Freight) 하면되는데이때무엇을기준으로 Group by 해야할까?
ShipName 별로평균을내야하기때문에 Group by ShipName 이다.
Select ShipName, AVG(Freight) 평균운임 From Northwind..Orders
Where ShipName Not Like 'C%'
Group by ShipName
Order by ShipName
같은내용을 Having을사용하면다음과같다.
Select ShipName, AVG(Freight) 평균운임 From Northwind..Orders
Group by ShipName
Having ShipName Not Like 'C%'
Order by ShipName/* Having 앞에 Order by를쓰면에러발생 !! */
Where 조건절의내용을 Having 절에그대로사용하였다. 즉 Having절에 Where 조건절의내용과똑같은내용을포함할수있다. Where 절은원하는결과집합을찾는경로를지시하는것이라면 Having은결과집합을먼저만들어둔후이결과집합을다시한번필터링한다.
좀더자세히말하면 Where 절을사용한구문을보면 Where ShipName Not Like 'C%' 를먼저처리한결과집합에서 AVG(Freight)를계산하여보여준다. 그러나 Having 구문에서는 ShipName으로그룹핑되어정렬(Sorting)된결과집합을먼저만든후 AVG(Freight) 계산을한다. 그리고나서 Having 절을처리한다. 따라서 Having 절은 Select 연산의맨마지막과정에서처리되는것이 Where 절사용하는구문과의차이점이다. 다음예문으로조금더고민해보면 Having 절의장점을알게될것이다.
▲ 먼저 연습용 테이블 하나를 만든다. create table test..test ( 학과 nvarchar(50), 과목 nvarchar(50), 점수 int ) ▲ 평균 AVG() select avg(점수) from test..test
▲ 합계 SUM() select sum(점수) from test..test
▲ 과목별 점수 합계와 평균
select 과목, sum(점수) [과목별 합계], avg(점수) [과목별 평균] from test..test group by 과목 /* groub by는 특정 열 값들을 unique한 값에 따라 그룹을 짓는다. */ order by 과목 desc
select 과목, 점수 from test..test order by 과목 compute sum(점수), avg(점수) by 과목 /* compute by 절 앞에 반드시 order by절 사용해야 한다. */
select 학과, 과목, count(과목) 과목수, count(과목) 응시자수, sum(점수) 과목총점, avg(점수) 과목평균 from test..test group by 학과, 과목 having 과목='IFR' /* IFR 과목의 통계만 산출하려면 where절을 사용하는 것 처럼 Having 절을 group by 다음에 추가한다. */
▲ count() 함수 학과별 과목 수를 산출하려면 임시 테이블을 만들어 사용한다. 또한 카운트 함수는 count(*)보다 count(점수)와 같이 사용하는 것을 권장한다. count(*)는 중복된 행을 포함한 행 개수를 계산, count(컬럼이름)는 검색된 행 에서 not null인 값만 카운팅 하기 때문이다.
select 학과, 과목 into tmpT from test..test
group by 학과, 과목
select 학과, count(과목) 과목수 from tmpT
group by 학과
drop table tmpT
▲ IFR과목의 응시자 수와 총점, 평균 산출 select count(과목) [응시자 수], sum(점수) 총점, avg(점수) 평균 from test..test where 과목='IFR'
▲ 최대, 최소 select max(점수) 최대, min(점수) 최소 from test..test where 과목='IFR'
▲ compute 와 compute by 사용 : 실무에서 많이 활용되므로 잘 익혀두도록 한다.
select 과목, sum(점수) [과목별 총점], avg(점수) [과목별 평균] from test..test group by 과목 select 과목, 점수 from test..test compute sum(점수) /* 과목별 총점이 아닌 전체 점수 합계를 보여준다. */
/* 과목별 총점을 산출하려면 compute by를 사용 */ select 과목, 점수 from test..test order by 과목 compute sum(점수) by 과목
declare @vInt int, @vNum Numeric(10, 5) set @vInt = 10.5678 set @vNum = 10.5678 select @vInt 정수, @vNum 실수 declare @var varchar(10) set @var = '1000' select cast(@var as int) 캐스트 select convert(int, @var) 컨버트
Convert()는 스타일 지정을 할 수 있는데 날짜 형식을 문자 형식으로 바꾸는 경우 유용하게 쓰인다. (스타일 변환 도표 - 아래 빨간색 숫자 참고 : http://msdn.microsoft.com/en-us/library/ms187928(v=SQL.90).aspx) select getdate() 현재시간 select convert(varchar(20), getdate(), 111) [컨버트한 현재시간] select convert(varchar(20), getdate(), 102) [102형] select convert(varchar(20), getdate(), 2) [102형의 두 자리 연도 yy형] select convert(nvarchar(20), getdate(), 127)
/* 문자열 연결은 + */ select country, city from customers select country + ' of ' + city [Country of City] from customers /* 아스키ASCII 코드를 문자로 변환 */ select ascii('m'), char(109) /* 자주 쓰는 제어문자 */ char(9) 탭, char(10) 줄바꿈, char(13) 캐리지리턴 /* LEFT, RIGHT; 참고: sql에는 mid() 함수가 없음 */ select left(country, 4) [왼쪽자르기], right(country, 4) [오른쪽] from customers /* Substring 참고: mid() 역할 */ select substring(country, 2, 3) from customers /* CharIndex : 특정 문자열의 위치 반환 */ select phone, charindex(')', phone), substring(phone, charindex(')', phone)+1, 10) from customers /* 영어 대소문자 변환 */ select upper(city), lower(city) from customers /* 공백제거 Ltrim Rtrim 참고: Trim은 사용하지 않음 */ select shipname, Ltrim(shipname), Rtrim(shipname) from orders /* 문자열 길이 */ select Len(shipname) from orders
날짜 함수 날짜 함수는 프로그래밍에서 많이 사용되므로 잘 익혀두어야 한다. 엑셀, 엑세스에서 사용했던 함수와 같은 함수도 있기 때문에 MS오피스 활용을 어느 정도 할 줄 안다면 이 부분도 어렵지 않을 것이다.
/* 현재 날짜, 시간 얻기 */ select getdate() /* 기간계산 DateAdd() : 오늘부터 한 달 후는 몇일? */ select DateAdd(day, 5, getdate()) select DateAdd(Hour, 15, getdate()) /* 기간계산 DateDiff() : A일부터 B일까지 일 수는? 또는 몇 시간? */ select DateDiff(day, getdate(), '2011.3.1') /* (-) 는 과거 표시 */ select DateDiff(day, getdate(), '2011.6.7') select DateDiff(hour, getdate(), '2011.5.1 15:00:00') /* 2011.4.27 18:43 기준으로 93시간 나왔음. 각자 연습해볼 것. */ /* Year, Month, Day */ select year(getdate()), month(getdate()), day(getdate()) /* 요일 구하기 */ select getdate() 현재, datePart(dw, getdate()) WeekDay /* 2011.4.27이 4로 출력됨. 4 : 수요일 이란 뜻; 여기서 dw는 1이 일요일이다. */ 이렇게 써도 동일한 결과를 낸다. select getdate() 현재, DatePart(weekday, getdate()) 요일
Null값 검색時 is Null / is not null / isNull() 함수를 사용해야 한다.
/* Null 값 포함 출력 */ select shipregion from orders /* 출력되는 결과는 없다. */ select shipregion from orders where shipregion = '' /* Null 값 모두 출력 */ select shipregion from orders where shipregion is null /* ShipRegion = null 이면 N/A로 출력 */ select ShipCity, isNull(ShipRegion, 'N/A') ShipRegion from Orders
범위 값 검색 Between
/* 결과는 동일하다. */ select * from orders Where EmployeeID >= 3 and EmployeeID <= 5 select * from orders where EmployeeID between 3 and 5
범위 값 검색 IN
select * from orders where employeeid=5 or employeeid = 6 select * from orders where employeeid in (5, 6)
검색 LIKE
select * from orders where CustomerID LIKE 'co%' /* CustomerID가 co로 시작하는 값만 가져온다. */ /* CustomerID가 co로 시작하는 값 출력 */ select CustomerID from orders where CustomerID LIKE 'co%' /* 회사이름이 S가 아닌 회사들을 검색하려면 NOT LIKE를 쓴다. */ select CustomerID from orders Where CustomerID LIKE 's%' /* CustomerID가 S로 시작하는 모든 값 */ select CustomerID from orders where CustomerID Not Like 's%' /* CustomerID가 S로 시작하는 값을 뺀 나머지 모두 출력 */
LIKE 와 함께 쓰는 와일드 카드
% : Like 's%' Like '%s' 와 같이 사용한다. /* %는 게시판 검색 구문에서 많이 사용되므로 잘 익혀두어야 한다. */ _ : Like '_aewoo' 하면 aewoo로 끝나는 단어이고 전체 길이가 6자리인 문자열을 뜻한다. [ ] : Like '[A-D]ome' 하면 A에서 D사이의 한 문자로 시작하고 ome로 끝나는 모든 단어를 찾는다. 현재 경우 Come, Dome 등의 단어가 출력될 것이다. [^] : Like 'C[^o]%' 하면 C로 시작되는 단어인데 두 번째 문자가 o가 아닌 모든 단어를 찾으라는 뜻이다
. Distinct는 중복되는 행을 제거하고 자동정렬되어 출력
select CustomerID from Orders /* 모든 CustomerID 출력 */ select Distinct CustomerID from orders /* CustomerID에서 중복되는 값을 하나 씩만 출력 -> 중복 값 제거 효과 */
임시 테이블 만들기 Select INTO (create 권한 있는 사용자)
select * into tmpT from orders /* 임시 테이블 tmpT로 값을 가져온다. 그러나 출력되지는 않는다. */ select customerid from tmpT /* 임시테이블 tmpT에서 값을 가져와서 출력한다. */ drop table tmpT /* 임시 테이블을 다 쓰고 나면 메모리에서 삭제시킨다. */
無데이터에 테이블 스키마만 복사하여 사용하고 싶을 때 Select Into 사용법
select * into tmpT from orders where 1=2 /* 1=2에 해당되는 값은 당연히 없다. 그러나 select * into tmpT 이기 때문에 스키마는 임시 테이블 tmpT에 그대로 복사된다. */ select * from tmpT /* 당연히 값은 존재하지 않는다. 그러나 컬럼은 볼 수 있다. */ drop table tmpT /* 확인했으면 임시 테이블 삭제 */
댓글을 달아 주세요