글쓰기 메뉴

라즈베리파이에서 5v 릴레이 사용하기

라즈베리파이랑 다른 전압 회로 연결을 위해 릴레이를 달았는데 GPIO에서 나오는 3.3V로 릴레이가 동작이 안돼. 원래 5V 릴레이기도 하지만 전류가 충분하면 3.3V에서 동작되는데 RPi GPIO 에서 나오는 전류가 50mA 근처라 Fail. 파나소닉꺼 3V 릴레이도 어렵게 구해봤는데 전류가 부족해서 Fail Again.


그래서 GPIO 에 5V 핀을 써서 릴레이를 동작시키는 회로.

http://www.susa.net/wordpress/2012/06/raspberry-pi...


트랜지스터랑 다이오드 하나씩에 릴레이만 있으면 되는데 나같은 전기.전자맹은 반도체 모델명이 딱 적혀있지 않으면 엄청 난감하거든. 세운상가가서 물어보고 구입한 부품은 트랜지스터: 2N3904, 다이오드: 1N4004 이렇게 샀어. 해봤더니 잘 됨 ㅇㅇ;


rpi_5v_relay.jpg


어디서 왔지?
[["www.google.co.kr", 1194], ["synd.kr", 28], ["2cpu.co.kr", 19], ["search.daum.net", 3], ["m.search.naver.com", 2], ["www.google.co.jp", 25], ["duckduckgo.com", 6], ["yandex.ru", 3], ["www.google.com", 37], ["www.2cpu.co.kr", 32], ["www.google.com.ph", 1], ["search.zum.com", 3], ["m.2cpu.co.kr", 2], ["www.bing.com", 11], ["www.google.com.au", 2], ["unknown", 3118], ["r.search.yahoo.com", 1], ["www.google.co.uk", 1], ["www.google.com.sg", 1], ["www.google.de", 2], ["b.2cpu.co.kr", 1], ["com.google.android.googlequicksearchbox", 4], ["com.Slack", 4], ["www.google.com.hk", 1], ["www.google.es", 1], ["www.google.com.tw", 1], ["www.google.ca", 1]]
다른 글들
2 2
Square

About을 만들어주세요

어바웃  페이지가 있으면 좋겠어요.  
어떤  아이디어로  시작하셨는지..  어떤 방향으로  움직이고  있는지. 궁금해지네요.
Trix인가요? 잘 동작하네요.

사진 첨부도 잘되구요~.
1 1
Square

[3분 복붙] 기사면 랜딩 PV 2배로 올리기.
브라우저 뒤로가기 제어.
이딴거 만들지 말자.

대부분의 서비스가 보다 많은 활동 사용자를 목표로 함은 분명하다.
하지만 얼마나 많은 활동 사용자가 있는지를 가늠할 수 있는 지표에 대한 목표설정은 좀 다른 얘기라고 생각한다.
심지어 그 목표의 달성을 위한 실현 과정이 사용자들을 열받게 만든다면 이 얼마나 근시안적 추태인지...
PV (Page View, 페이지 조회수) 에 대해 강한 집착을 보이는 국내 언론사들이 근래 "뒤로가기"가 실행되는 경우 이전 페이지로 보내지 않고 메인페이지로 이동되도록 하는 기능을 속속 도입하고 있더라. (좀 됐지.. 내가 잠수였던거지..)
사용자 입장에선 개빡치는 UX. 
그렇지만 남들이 한다니까 자기들도 해달라는 클라이언트의 등장은 당연지사.
해당 기능을 도입한 사이트들을 둘러보니 대부분 광고대행사 등이 제공한 스크립트를 사용하는 것 같더라.
메인페이지를 거치는 것도 짜증나는데 그 중간에 광고까지 껴있으니 개짜증..
이딴거 누가 안만들면 좋겠는데 일개 개발자가 뭘 할 수 있겠냐 고민하다가...
클라이언트에게 만들어준 간단한 스크립트를 모두에게 제공하고 너도나도 다들 도입해서 더 많은 사용자들이 더 빠르게 빡돌게 만들면 슬슬 이딴 쓰레기 같은 기능을 버리지 않을까라는 골때리는 결론에 도달했다.
0.
jQuery 를 사용하고 있다고 가정한다.
1.
아래의 코드를 기사 페이지 등 기능이 동작될 페이지에서 로드되는 js 파일에 추가한다.
3번 라인 정규식 패턴안의 synd\.kr 부분은 자신의 도메인으로 변경한다.
2.
기능이 동작될 페이지 HTML 코드 사이에 아래의 코드를 삽입한다.
완성!
코드는 단순해서 쉽게 이해할 수 있겠지만 몇몇 부분을 설명해보자면...
1. pushState 이후에 replaceState 를 다시 콜하는 이유.
pushState 만으로 history 를 조작할 경우 firefox 에서 백버튼이 골때리게 반복된다.
external > page > main > page > main > external
replaceState 를 다시 콜하면 아래와 같이 의도한대로 동작된다.
external > page > main > external
2. popState 이벤트를 사용하지 않고 hashChange 를 사용하는 이유
페이스북 앱 등 in app browser 를 사용할 때 해쉬가 없는 경우 뒤로가기 실행시 popState 이벤트가 발생되지 않음
해쉬를 추가해야 뒤로가기 실행 시 기존 URL (해쉬없는) 로 페이지 변화없는 이동이 발생하고 이 타이밍에 hashChange 가 콜 됨.
또한, Safari 9버전 이하에서 popState 가 지멋대로 fire 됨.
3. 이건 좀 쓸데없는 설명이지만 location.href 는 history 에 기록되고 location.replace 는 history 에 남지 않기 때문에 replace 를 사용해야함.
지원브라우저
웹이고 모바일이고 html5 history api 를 지원하는 브라우저 (http://caniuse.com/#search=history) 에선 기본적으로 모두 동작된다고 기대할 수 있으나 아이폰 크롬에서 동작안됨.
그 외 페이스북 앱 등 인앱에서 웹뷰를 사용하는 경우도 정상 동작.
Tested.
Microsoft Edge.
Microsoft IE 11.
Firefox 52.x (Windows)
Firefox 47.x (Linux)
Firefox 52.x (Mac)

Firefox 52.x (Android)
Firefox 6.x (iOS)
Chrome 57.x (Windows)

Chrome 48.x (Linux)
Chrome 56.x (Mac)

Chrome 57.x (Android)
Chrome 57.x (iOS) *동작안됨
Safari 10.x (Mac)
Safari 10.x (iOS)
Android 6 browser 4.x
Facebook App
자 이제 자리에서 일어나서 팀장이든 부장이든 상사에게 "저희 PV 를 2배로 올리겠습니다!" 라고 보고하고 보다 많은 사용자들의 빡을 돌려(?) 주삼. 
1 0
Square

업데이트

프레임워크 버전이 너무 올라가서 나중에 따라가려면 대형 공사가 될까 걱정되어 프레임워크 버전업. 하지만 이미 큰 공사였음. 아 힘들어.
텍스트 에디터도 자잘한 오류들이 많이 보여서 코드 정리 및 라이브러리들 일부 업데이트. 완전 힘듬.
별로 테스트 해볼 시간은 없어서 대충 동작되는 것 같아서 서버에 적용.
오류나면? 알려주삼.
0 0

맥 시에라 vi / vim 클립보드 사용하기

1~4 단계의 과정이 필요할 수 있다.
1. ~/.vimrc
아래 내용을 사용자 홈디렉토리 아래 .vimrc 파일에 추가한다 (없으면 만든다)
2. +clipboard 로 컴파일 됐는지 확인한다
clipboard 옵션 없이 컴파일 된 경우

clipboard 옵션이 포함된 경우
2-1. clipboard 옵션이 없는 경우 brew 로 vim 을 설치한다
맥에는 기본으로 vim 이 설치되어 있다.
아래와 같이 brew 로 vim 을 설치하여 시스템 디폴트 vim 교체할 수 있다 (실제로 교체되지는 않고 path 설정 바꿔주는 듯)
3. 어떤 vim 이 호출되는지 확인한다
3-1. /usr/bin/vim 이 잡힌다면 /etc/paths 파일을 수정하여 /usr/local/bin 이 /usr/bin 보다 위에 나오도록 한다
4. 여기까지해도 동작되지 않는다면 
client-server 옵션으로 설치하면 동작하는 경우가 있다고 한다.
4-1. .vimrc 설정
1번의 설정으로 충분하나 아래와 같이 설정할 수 있다 (참조)
1 0

리디렉션 페이지에 구글 아날리틱스 코드 집어넣기

리디렉션 되는 페이지에 구글 웹로그 분석기 추적 코드를 넣고 meta 태그나 스크립트로 페이지를 이동시키면 데이터 수집이 완료되지 않은 상태로 페이지가 종료되고 로그가 남지 않는 문제가 있지.
리디렉션을 5초 정도로 잡아도 무관하다면 그냥 5초로 잡고 돌려도 OK.
리디렉션 타깃 페이지가 같은 도메인 아래에 있다면 타깃 페이지에 추적 코드가 있는 것 만으로 레퍼러로 처리되어 데이터가 수집되니까 이것도 OK.
하지만 리디렉션을 외부 사이트로 보내야하고 1~5초 정도 사용자를 묶어두는게 부담스럽다면 추적 코드의 동작이 완료된 후 리디렉션을 실행하면 되겠지.
2013년부터 사용된 Google Universal Analytics 추적 코드라면 hitCallback 콜백을 사용하면 되고 혹시 2013년 이전 코드라면 글로벌 오브젝트인 _gaq 큐에 함수를 밀어넣으면 된다네.
추적 코드 어딘가에 _gaq 가 있으면 그냥 오래된 코드, _gaq 가 없고 다음과 같이 추적코드가 시작된다면 Universal.
오래된 버전에서는 아래처럼 리디렉션이 가능
Universal 버전에서는 아래처럼 hitCallback을 사용할 수 있음
이상 끝!
1 3

페이스북 임베드 URL,
소셜 플러그인 (XFBML) 파싱

임베드 대상 페이스북 콘텐츠는 "포스트", "비디오", "사진" 이렇게 종류별로, 웹과 모바일에서 각각 URL 형식이 조금씩 달라 프로그램으로 이를 처리하기 위해 동일한 형태의 주소가 필요하다.
SDK를 사용해 페북 컨텐츠를 임베드하는 경우 기준이 되는 URL 은 웹용 URL 이다.
뭐, URL은 딱보면 알겠지만 fbid 라는 고유ID만 빼오면 된다. 
모바일에서 포스트에 대한 주소만 URL 파라미터로 처리되어 있고 나머지는 전부 URL Path에 포함되어 있으니 아래와 같은 정규식으로 fbid부터 발라내자
정규식은 Ruby 2.x 버전에서만 동작을 확인했지만 look-behind 와 look-ahead 외에 정규식 엔진을 타는 내용이 없기 때문에 동작이 안된다면 그 부분만 수정하자.
사실 효율을 생각한다면 저딴 정규식으로 한방에 fbid 를 뽑는 것 보다 fbid 가 파라미터로 존재하는 케이스를 분리시키고 나머지 정규식도 2회로 나눠 돌리는게 더 좋지만... 귀찮으니 한 줄로 하자.
상식적으로 fbid 만 뽑아내면 될 것 같으나 페북 임베드에 사용되는 URL은 사용자 아이디가 버킷 이름처럼 포함되어 있다. 문제는 모바일 URL에 사용자 아이디-문자-가 없다는 점.
이 문제는 페이스북의 짧은 주소 fb.com 을 사용해 해결할 수 있다. http://fb.com/<fbid>의 형식으로 리퀘스트를 보내면 해당하는 완성된 주소로 리디렉션 시켜준다. - 임베드 코드 생성 시 fb.com 을 그냥 쓸 수 있으면 좋을텐데 안되더라.
curl 로 리디렉션된 최종 URL을 뽑는 코드는 아래와 같다.
내가 쓰는 Typhoeus 에선 아래처럼 최종 URL을 받으면 된다. 
이렇게 얻은 URL 로 
위와 같은 XFBML을 사용해 임베드가 가능하다. 다양한 옵션은 페북 문서 확인.
Javascript SDK 를 사용하는 경우 SDK 가 로드된 후 FB 객체를 initialize 하면서 페이지에 있는 모든 XFBML 을 파싱할 수 있고, 이와 다른 타이밍에 추가적으로 XFBML 을 파싱해야하는 경우는 아래의 코드로 가능하다.
특정 엘레먼트만 파싱하려면
jQuery 로 돔을 잡아 파싱하려면
이렇게 파싱하면 컨텐츠가 임베드된다.
3 2
Square

항우울제 먹음

유니작, 아빌리파이, 벤즈트로핀
이렇게 3가지 처방받음.
유니작은 세로토닌 재흡수를 차단해 뇌에 상대적으로 많은 세로토닌이 남아있도록 한다고 하고,
아빌리파이는 도파민 균형을 유지시켜주는 약으로 업되면 다운시켜주고 다운되면 업시켜준다고..
벤즈트로핀은 아빌리파이 복용 부작용을 막기 위해 먹는다고.
그니까... 우울한 기분을 날려버리기 위해 세로토닌을 뇌에 모았는데 세로토닌은 도파민과 노르아드레날린의 유지와 관계가 있다보니 도파민을 적정수준으로 유지하기 위해 아빌리파이를 같이 먹는거고, 아빌리파이는 손떨림과 같은 파킨승 유사 증상의 부작용이 있다고 하니 그 때문에 벤즈트로핀을 같이 처방해줬나봐.
여기까지 매우 이해가 돼.
근데 막상 좀 먹어봤더니 1) 일상생활이 불가능할 정도로 졸립고 2) 움직임이 없는 상태에서도 갑자기 어지러움이 생기고 3) 오금이나 아랫배 등의 근육이 갑작스레  뭉치거나 통증이 생기고 4) 입이 바짝 마르고 5) 머리가 멍하고 6) 동작이 둔해지고... 뭐랄까 부작용의 종합판 같은 느낌?
그래서 병원에 얘기했더니 아빌리파이와 벤즈트로핀은 빼고 유니작만 먹어보자고 하네.
그래서 오늘은 유니작만 먹었어.
근데 말이야...
나 약빨이 무지무지 잘 듣는 체질인가봐. ㅋㅋㅋ
병원에 다시 물어봐야지!
1 1

스팸블럭과 손님글 링크 제거, 아이폰 복붙 여전히 FAIL....

어흠흠. 로그인 필요없고 폼이 덜렁 나와있으니 당연하게도 스팸이 들어오기 시작했네.
온라인 스팸 특성상 도메인을 반드시 입력해야하니 스팸도메인을 등록시켜놓고 글이 등록되지 않게 막아놓긴했지만, 링크 클릭했다가 막 PC 감염되고 이러면 큰일나니까 게스트로 등록된 글에는 링크가 동작되지 않게 막아놨음.
아이폰에서 사파리고 크롬이고 복붙이 여전히 안디어 ㅠ.ㅠ
이거이 정말 에디터 문제인지 iOS 와 연관된 문제인지부터 다시 짚어봐야할 듯.
아이폰 사용자분들께 매우 죄송! 난 안드로이드지렁~ 
4 3

고백

 죄를 고백하는 것은 쉬웠다. 당연한 일이다. 그동안 내 입을 막고 있었던 것은 가볍고 얄팍한 윤리 의식뿐이었으니까. 도덕책에서 배워 누구나 알고는 있는, 그래서 누군가에겐 경계고 벽이었으나, 나에게는 축축하게 젖어 언제든 찢어버릴 수 있는 종이에 불과했던. 그런 물기 고인 의식들.
 “…가출하고 소식이 끊겼던 Y, 이 년 전 실종된 A, 작년 봄 강에 뛰어들어 자살한 H.”
 아득할 만큼 멀었던 과거에서부터 시작했던 고백은 어느새 현재에 가까워져 있었다. 새파란 얼굴을 하고 부들부들 떨던 P는 더 이상 견디지 못하고 벌떡 일어났다. 나는 겁에 질린 개처럼 비틀거리며 뒷걸음질 치는 그녀의 팔을 잡아채 앞으로 확 끌어당겼다.
 “아직이야. 아직 남았어.”
 “이… 이거 놔.”
 “작년 뉴스 일 면에 실렸던 연쇄 토막 살인 사건.”
 “놓으라고…!”
 P는 나에게서 벗어나기 위해 필사적으로 팔을 비틀었지만 역부족이었다. 아까부터 점차 퍼지던 미소는 어느새 완전한 웃음이 되어 있었다. 커다란 웃음소리가 목젖 아래서부터 끓어 넘쳤다.
 언제나 열망했다. 내 죄를 고백하는 나를 상상했다. 뉴스에 보도되는 사건을 얘기하는 이들을 볼 때마다 팔을 붙들고 알려주고 싶었다. 내가 죽였다고. 내가 한 짓이라고.
 “쓰레기…, 쓰레기 같은 새끼! 네가 사람이야?”
 커다란 눈에서 눈물이 뚝뚝 떨어졌다. 나는 그게 의아했다. 왜 울지. 아직 제일 중요한 건 꺼내지도 않았는데.
 “내가 작년에 준 화분 기억나?”
 “…뭐?”
 앞뒤 없이 튀어나온 이야기에 P가 좁혔던 미간을 올렸다. 나는 목소리를 낮게 깔고 속삭였다. 
 “J는.”
 단지 이름 하나. 그 한 명의 이름으로 그녀의 모든 것이 멎었다. 몸부림치던 동작, 눈물, 목소리, 울음에 차 가늘게 떨리던 호흡마저. 마치 혼자 정지된 시간 속에 있는 것처럼 보였다.
 “내가 꼭 찾아주겠다고 약속한 것도… 기억해?”
 크게 벌린 입가가 이내 일그러진다. 얼굴 위로 떠오른 것은 절망이었다. 그녀는 내가 바라던 대로 어떤 사실을 깨달은 것이다. 
 “나는 약속한 건 반드시 지키거든.”
 손을 놓자마자 P는 당장 거실로 내달렸다. 참기 어려울 만큼 뜨거운 감정이 가슴 한가운데를 터뜨렸다. 붕 떠오르는 것들을 애써 가라앉히며 방을 빠져나오자 마침 제 무릎까지 오는 화분을 들고 선 여자가 보였다. 그녀는 가느다란 팔을 부들부들 떨면서도 쉽게 던지지 못한다. 두려우니까. 그러나 팔은 어쩔 수 없이 아래로 떨어지고, 도기로 된 하얀 화분은 산산이 깨어졌다. 폭발하듯 흩어지는 산세비리아 사이로 흙투성이가 된 무언가가 밖으로 굴러 나왔다. 꼭 사람 머리처럼 생긴.
 P는 쓰러지듯 주저앉았다. 가슴을 움켜쥔 채 곧 죽어버릴 짐승처럼 숨을 헐떡이다, 이내 비명에 가까운 울음을 터뜨렸다. 나는 잠시 눈을 감는다. 터져 나오는 쾌감에 가슴이 벅차올랐다.
 그리고 다시 눈을 떴을 때— 여자는 여전히 오열하고 있었고, 나는 주방으로 가 식칼을 집어 들었다.
1 0

우분투 몽고DB 설치 및 부팅 시 자동 실행 - Install MongoDB on Ubuntu & Start MongoDB on system start

설치는 매우 간단하고 MongoDB 공홈에 최신 버전으로 갱신된 문서가 있어 해당 페이지를 참고하면 된다.
공홈 설치 문서 링크:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
GPG Key
리스트파일 생성 (16.04. 기타 버전은 공홈 참조)

패키지 디비 갱신
MongoDB 설치

근래의 대부분의 배포본은 Upstart  대신 Systemd를 사용하기 때문에 위와 같이 설치된 MongoDB 역시 init 스크립트를 제공하지 않는다.
service 커맨드로 시작, 중지, 재시작 등의 관리가 가능하나 systemctl 커맨드를 익히는게 바람직하다고 본다.
systemd 를 사용해 MongoDB 를 초기 실행 시키기 위해 다음의 파일을 작성한다.
/etc/systemd/system/mongodb.service

Unit 섹션의 Description 은 서비스에 대한 간단한 설명을 포함한다.
같은 섹션의 After 는 네트워크 연결 후 구동하겠다는 의미
Service 섹션의 User 는 서비스 실행 사용자를 지정하고 ExecStart 는 실제 구동 커맨드를 입력한다.
Install 섹션의 WantedBy 는 실행 타깃을 구분하는데 multi-user.target 은 기존 런레벨 2,3,4 로 일반적인 부팅 시에 동작된다.
구동
상태 확인
정지
부팅 시 실행
systemd 의 target 에 대해 보다 자세히 알고 싶다면 아래의 링크를 참조.
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Targets.html
systemd 에 대해 보다 자세히 알고 싶다면 아래의 링크를 참조
http://lunatine.net/about-systemd/
3 0
Square

발렌타인

무슨 악마의 장난인지 도통 모르겠다고 다니엘라는 무심코 생각했다. 그러고는 가벼이 악마를 입에 올린 자신을 탓하며 성호를 그엇다. 하늘의 계신 아버지. 저의 죄를 사해주소서. 속으로 중얼거리면서도 그녀는 두손을 부지런히 놀려 잠두와 완두콩을 손질했다.
잠두와 완두콩의 깍지를 제거하고, 껍질콩의 꼬투리를 다듬고, 줄기콩대를 바구니에서 꺼내자 그때서야 아궁이에 올려둔 물이 끓어올랐다. 다니엘라는 뜨거운 냄비속으로 잠두를 와르르 쏟아부었다. 콩 알갱이들이 휘청거리며 물속을 유영했다. 그 모습을 보며 다니엘라는 한숨을 내쉬었다.
일주일전 마을로 들어온 여행객 하나가 다니엘라의 평화로운 일상을 망치고 있었다. 적갈색 머리칼을 하나로 묶고, 한 여름날 두툼한 망토를 입고 나타났던 그 남자는 놀라울정도로 마을사람들과 금방 친해졌다. 그렇게 사교적이고 친화력 좋은 남자와 다니엘라는 이상하게도 이 좁은 마을에서 일주일 내내 마주치지 못했다. 그것이 오늘, 남자가 다니엘라의 무거운 물통을 집까지 옮겨주면서 끝났다. 남자는 동행하는 내내 친절하고 사근사근하게 다니엘라를 대했다. 거기까진 좋았다.
보답을 해주겠다는 다니엘라의 의사에 남자는 흔쾌히 청혼의 말을 내뱉었다.
다니엘라는 이 가벼운 청혼을 거절했고 남자는 시무룩한 얼굴로 그럼 식사라도 대접해달라며 그녀의 현관겸 응접실에 앉아서 다니엘라가 내어준 백탕을 마시고 있었다.
다니엘라는 물이 넘치는 소리에 퍼뜩 정신을 차리곤 나머지 콩들을 냄비에 쏟아부었다. 그녀는 빠릿하게 움직이며 우묵한 나무 그릇에 파와 박하를 잘게 썰어 담고 익은 콩들을 구멍이 뚫린 주걱으로 건져올렸다. 그릇에 삶은 콩을 넣은뒤 올리브유와 소금, 후추를 솔솔 뿌리곤 주걱으로 샐러드를 버무리자 박하의 싸한 향기와 콩의 달큰하고 포근한 향이 한데 뒤섞였다. 미각을 자극하는 냄새에 다니엘라는 미소 지었다. 레몬이 있었다면 더 좋았을테지만 남아있는 것이 없었다. 다니엘라는 그릇을 들고 부엌에서 나왔다. 의자에 앉아 두손안에 쥔 찻잔을 굴리고 있던 남자가 다니엘라를 보곤 자리에서 벌떡 일어났다.
[어서와요. 여기 앉아요.]
다니엘라는 자신의 집에서 어서오라는 인사를 받는게 퍽 낯선 상황이라 생각하며 고개를 끄덕거렸다. 그리고 작은탁자에 그릇을 올려두곤 고개를 저었다. 남자가 의아한 눈으로 물었다.
[왜 그래요?]
다니엘라는 남자가 비워둔 의자를 가르키곤 고개를 저었다. 남자의 소매자락을 끌어당기자 그가 쉽게 끌려왔다. [여기 앉으라고요?] 남자는 자리에 앉았다. 다니엘라는 고개를 끄덕거렸다. 남자는 살풋 미소지었다.
[다정하네...역시 결혼할래요?]
다니엘라는 고개를 저었다. 남자의 입술이 삐죽 튀어나왔다.
[왜요?]
다니엘라는 대답 대신 그릇의 한쪽면을 탁탁 치곤 스푼의 손잡이가 남자의 쪽으로 향하게 내려놓았다.
[역시 시간이 좀더 필요하다는거겠죠? 괜찮아요. 기다릴 수 있어요. 그런데 계속 그렇게 서있을거에요? 그냥 내가 선채로 먹는게 더 나을것같은데, 아니면 내 무릎에 앉는건.] 다니엘라는 바느질감을 넣어두는 상자를 가져와서 그위에 앉았다. [싫다 이거죠? 알았어요. 하지만 정말 첫눈에 반했다고요. 포기하지 않을거에요.]
남자는 다니엘라가 곤란해할 말만 골라하며 콩 박하 샐러드를 한입 먹었다. 그리고는 또 한입.
[우와!! 여기 뭐가 들어간거에요? 아주, 냠. 아주 맛있는데요?] 남자의 뒤엣말은 입안에 들어찬 음식물탓에 웅얼거리며 끝났다. 다니엘라가 쑥스러운 미소를 지으며 눈을 내려깔자. 남자는 더 열정적으로 샐러드를 우물거렸다.
[응식점울 해도 대갰응요]
다니엘라는 풋 웃고는 남자에게 다시 물을 따라줬다. 샐러드 그릇은 어느새 바닥을 보이고 있었다. 이 엄청나게 빠른 식사 속도에 다니엘라는 오늘따라 놀랄일이 많은것 같다고 생각했다.
[아, 정말 너무 맛있었어요. 고마워요.]
다니엘라는 겸양하는 동작을 하곤 자신도 고맙다며 물통과 남자를 번갈아가며 손짓하곤 고개를 살짝 숙였다가 일으켰다. 남자는 베시시 웃었다.
[그런 의미로 다음엔 제가 대접하도록 할까요? 혹시 파스티 좋아해요? 제가 아주 기가막히게 만들거든요.]
다니엘라는 파스티가 무엇인지 몰랐고 그게 얼굴에 그대로 드러났다. 남자는 그것을 알아차리곤 더 자세한 설명을 하기 위해서인지, 단순히 자신의 사심을 채우기 위해서인지 앉아있는 의자를 끌고 다니엘라의 곁에 바싹 붙어앉았다.
[페이스트리 반죽에 만두처럼 버섯이랑 감자속을 넣어 만드는건데 아주 맛있어요. 당장 내일이라도 만나는게 어때요? 전 이 마을이 아주 마음에 들고 한동안 여기서 살 집도 구해놨거든요. 내일 집들이 기념으로 파스티를 대접할게요.] 참고로 당신 집에서처럼 아무짓도 안할게요. 남자는 덧붙이며 자신의 레이디에게 기사들이 맹세하듯 경례했다. 다니엘라가 깜짝 놀랄정도로 절도있는 동작이였다.
[대도시에서 제가 파스티 장사를 했었거든요. 그러니, 기대해도 좋아요?]
다니엘라는 어느새 '다음' 약속이 생긴것을 기뻐해야할지 곤란해야할지 혼란스러워 했다. 남자는 속없는 웃음을 흘리다가 불현듯 몸을 경직시켰다. 다니엘라는 갑자기 긴장하는 남자의 얼굴에 고개를 갸웃했다.
[그러고 보니....]
다니엘라가 남자의 초조한 얼굴을 바라보자 남자는 눈살을 찌푸리고 마저 말했다. [다니엘라.] 다니엘라는 고개를 끄덕였다. [역시, 결혼할래요?] 그녀는 한숨을 폭 내쉬곤 그릇을 설겆이 하기 위해 챙겼다. 그러는 그녀의 손목을 남자가 황급히 잡고는 사과했다.
[미안해요. 이번건 취소! 이번건 카운터에 더하지 말아줘요!!] 무슨 카운터? 다니엘라는 눈을 꿈벅거렸다.
[물론 다니엘라와 결혼하고 싶은 마음은 굴뚝같지만요. 우선 묻고싶은게 있어요.] 다니엘라는 남자의 눈을 다시 바라봤다. 초콜릿처럼 짙은 고동색 눈이였다.
[내 이름이 뭔지 알아요?]
다니엘라는 당황하며 고개를 가로로 저었다. 그러고보니 여태 남자의 이름을 알지 못했다. 남자가 미소 지었다.
[그럼 우리 거기서부터 시작하면 되겠네요.]
남자는 다니엘라의 손을 가져가서 손바닥 위에 천천히 스펠링을 적었다. 다니엘라는 소리내어 그것을 읽지 못했지만 마음속에서 부드러운 글자체로 그의 이름을 만들었다. 먹빛의 바탕위로 하얀 붓이 아래로 내려갔다가 완만하게 올라오고 우아하게 끝났다.
발렌타인.
[네, 다니엘라.]
남자의 대답에 다니엘라는 깜짝 놀라며 어깨를 움찔떨었다. 들었을리 없었지만 남자는, 발렌타인은 그녀에게 대답했다. 발렌타인이 다니엘라의 눈을 마주 바라봤다. 다니엘라는 단순히 그가 그녀의 눈빛을 읽은것이고, 타이밍을 잘 맞춘것뿐이라는걸 알았지만 왠지 그 눈빛을 피할수가 없었다.
[다시 불러줘요.]
다니엘라는 주저했다. 발렌타인은 알수없는 미소를 지은채 그녀를 기다렸다.
또 다시 마음속에서 떨리듯 글자가 움직였다.
발렌타인.
이번 대답은 좀 늦었다. 발렌타인이 좋아 죽겠다는듯 웃고있었기 때문이다.
[네, 다니엘라.]
다니엘라는 손을 빼내려했다. 발렌타인이 그녀의 손을 꼭 쥐었다. 다니엘라는 얼굴이 달아오르는 것을 느꼈다.
발렌타인.
[네, 당신이 원하면 언제든 대답할게요.]
놓아달라는 말이였는데. 다니엘라가 발렌타인을 빤히 응시하자 그는 그 시선을 뻔뻔하게 무시했다. 다니엘라는 발렌타인이 대접하는 파스티 식사를 꼭 받겠다고 확답을 하고 나서야 풀려날 수 있었다.
0 0

UFW 방화벽 사용하기 - 우분투 14.04

UFW 는 iptables 의 설정 도구로 Uncomplicated Firewall 이란 뜻이며 문자 그대로 복잡하지 않은 방화벽 설정을 위해 사용된다.
서버는 어떤 목적이든, 공인 IP가 있든 없든 외부에서 접근이 가능하다면 보안 위험에 노출될 수 밖에 없다. IDC 레벨이나 네트워크 구성에서 하드웨어/소프트웨어 방화벽이 이미 사용되고 있을 수 있지만 그런 경우에도 각 서버의 방화벽 설정은 매우 유용하다(고 생각한다)
이런 목적으로 사용하기에 iptables 가 매우 적합하나 설정과 관리가 꽤나 복잡하여 나 같은 사람은 필요할 때 검색으로 룰을 설정했다가 어느 순간 뭔가 동작이 이상하면 iptables 전체를 내려버리는 괴상한 방식으로 운영하게되니 계륵이 아닐수가...
그런 의미로 UFW는 신세계! 방화벽이 미적용된 서버가 있다면 당장 UFW를 올려보자!
설치
기본 정책 설정 (들어오는 패킷은 차단, 나가는 패킷은 허용)
ssh, http, https 허용 (ssh 포트를 변경해서 사용한다면 반드시 직접 포트를 입력하자)
포트를 변경해 사용하거나 특정 포트를 허용
방화벽 ON!
위의 명령을 실행하면 "현재 ssh 연결에 문제가 생길 수 있습니다. 적용하시겠습니까?" 뭐 이런 질문이 나온다. ssh 포트는 허용으로 변경했으니 "y" 를 입력해 진행할 수 있다.
확인
ufw 가 실행되고 있지 않다면 아래와 같은 결과가 리턴된다.
방화벽을 끌 때는 아래와 같은 명령어를 입력한다
등록된 규칙을 삭제할 때는 2가지 방법이 있다.
첫번째는 등록 시 사용한 규칙을 그대로 입력하는 방법
두번째는 각 규칙의 번호를 확인하고 번호로 지우는 방법
등록된 규칙의 번호는 줄 맨앞에 있는 [숫자]
2번 규칙 80/tcp 를 지우려면
새로운 규칙의 추가는 동일한 방식으로 가능하다
포트 뒤에 tcp 나 udp 를 지정할 수 있고 지정하지 않는다면 모두 적용된다
새로운 설정을 적용하려면 disable > enable 해도 좋고 아래와 같이 reload 가 가능하다
특정 IP만 허용할 경우 
특정 IP에게 특정 포트만 허용할 경우
포트의 범위를 규칙으로 사용할 경우
특정 아이피에만 일정 범위의 포트를 tcp 패킷만 허용할 경우
서브넷을 특정 포트에 허용할 경우
이 정도면 내가 써봤던 명령어는 다 정리한 것 같다.