글쓰기 메뉴

비눗방울

2c5aa6c5e93f7dc752ed58694702e74c.jpg


어린 시절, 비눗방울 놀이를 좋아했다. 여러가지 재료를 가지고 물의 비율을 조절하면서 최상의 조건을 만들어내는 것에 몰두했었다. 주방용 세제, 샴푸, 세안용 비누, 빨래 비누 등 여러가지를 단일 재료를 이용하여 물의 비율을 조절해봤고, 여러가지 재료를 혼합하여보기도 하였다. 그러다 어느날 대단한 조성비를 찾아내고, 동네 아이들을 모아서 자랑했다.


아마도 그런 기질이 지금의 나를 만들었나보다. 새로운 도전, 실험, 실행. 생각만 하면 그건 허공에 흩어지는 하나의 망상에 불과하지만, 실제로 실행하면, 그 결과가 병신같더라도 나의 경험치는 1 올라간다.

다른 글들
0 0

비눗방울

비눗방울을 하나 불면 내 동심 하나.

그 안에 반짝이는 건 내 티 없던 아름다움.
비눗방울 안에 비춰지는 건 내 기억 하나.
비눗방울 불며 함께했던 그 사람과의 기억.
저기 있는 아이는 비눗방울 부는 아이.
그 비눗방울 안에 있는 건 순수하고 맑은 동심.
저 비눗방울 안에 있는 건 더럽혀지지 않고서 행복했던 기억들.
오늘, 잠시나마 환상으로 만들어진 마음과 기억 속에서 뛰놀아 보고자 한다.
환상이 끝나면 아플지라도 상관없다.
그 환상이 덧없을지라도 상관없다.
지금 나는 그 환상이, 조금이나마 있는 마음과 기억이 절실하다.
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/
1 2

다른 삶살아보기

 나는 흑역사도 실수로 인한 트라우마도 많다. 또 분명 좋은 추억이긴했으나 이랬으면 더 좋지 않았을까 생각 한 적도 많다.
 그럴 때 정말 한가하면 나는 '다른 삶살아보기'를 실행시킨다. 내 상상 즐겨찾기 어플에 있는 이 앱은
나를 끝없는 상상속에 빠지게 한다. 내가 아닌 다른 삶이 아닌 나지만 다른 삶 즉, 내가 했던 선택들을 바꾸어 다른 생활을 하는 장면을 보는 것이다. 꼭 다른 선택 뿐만아니라 내가 선택할 수 없는 성별 등도 바꾸어가며 다른 삶을 살 수도 있어 좋다.
(부모님 바꾸는 거 놉!, 재산도 놉!)
 다른 상상 어플과는 달라서내가 애용하는 앱이지만 한가지 치명적인 부작용이 있다. 내 삶과 너무나도 달라서 아니면 그렇게 할 걸 하고 죄책감을 느껴서 사용하고 나선 평소랑은 차원이 다르게 우울해진다. 그렇기에 우울해지는걸 예상하며 앱을 조심히 사용해야 한다.
 옛날엔 그냥 푹빠져서 했는데 지금은 하고있을때 엄마가 앱을 중지시키는 경우가 있다 좀 짜증나긴 하지만 좋은걸수도?
0 0

여행

고민을 시작한다 재미를 위해 맛을 위해 멋을 위해 그렇게 고민을 거듭하고 실행으로 옴긴다.
시작은 설램 과정은 지루하기도 즐겁기도 가끔음 티격대기도
그래도 돌아오는길에 잘 다녀왔노라면 모든것은 큰 보상을 받은 느낌
1 0

레일즈4 마이그레이션, Change, Up, Down 섞어쓰기

내용은 간단한데 제목과 태그가 너무 길엌ㅋ
Rails 4 Active Record Migrations 에서 reversible 이란 메쏘드를 사용해서 아래와 같이 up, down 컨디션에 따라 SQL 을 실행할 수 있네.
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 패킷만 허용할 경우
서브넷을 특정 포트에 허용할 경우
이 정도면 내가 써봤던 명령어는 다 정리한 것 같다.
0 1

잡소설-프롤로그

사람에게는,각자 자신에게 맞는 취향이 있다.
거기엔 '성 취향'도 포함된다. 그렇다.나는 도M.즉,마조히스트다.매일매일 매도당하고,맞고사는것이 좋다.이럴때는 찐따인게 좋다. 좀더 때려줬으면 좋겠다. 얼굴을 발로 찬다든가,앞에서 당당하게 날 욕하고 단점이란 단점은 모두 끄집에내서 말하는것.그런게 좋다. 더 매도당하고,맞고싶어서 더욱더 찐따같은짓을 하고, 애들은 내 반응을 보고 질린듯한 표정을 하고선,이제는 관심조차 주지 않는다.하지만 난 그런것도 좋아.신체적으로 고통받는것도,정신적으로 고통받는것도 나에게는 땡큐다. 좀더 아픈것을 경험해보고싶다.
...라고 생각했었다.
오늘도 보람찬 하루일을 끝마치고서 집에가는도중 나는,차에 치었다... 그리고 생각했다.
천국과 지옥같은거,착하게 살면 천국을 간다는거,나쁘게 살면 지옥에 가고 천국은 아무것도 하지않는 좋은곳,지옥은 매일매일 고문당하며 전생의 죄를 돌려받는곳이라는거 등등...기왕이면 천국은 사양한다. 천국에 관련된 그림등을 보면 하늘 위라서 추운지 죄다 옷이 길다.반면 지옥의 그림을 보면 땅 밑이라서 모두 옷이 없거나 천쪼가리만 걸치고있다.그리고 천국은 아무것도 하지 않는다니,그런게 어딨어? 기왕이면 난 매일 고문당한다는 지옥으로 가고싶다.
..............
"여기까지가 제 사연입니다. 옥황상제님.전 지옥에 가고싶어요."
진짜로 천국과 지옥이라는것이 있었다. 지금 내 앞에있는건 옥황상제.즉,천국쪽 사람이라는 거겠지."
"넌 생전에 받은 고통도 클텐데 어째서 천국을 마다하는 것이냐"라는 옥황상제의 질문에 저렇게 대답했더니 신까지도 날 질린듯한 표정으로 처다본다.그렇게 봐봤자 나는 더 기뻐한다고.그래,조금 더 봐줘.. 그 눈빛으로 말이지...인간말종에 아메바 보다 쓸모없는폐기되는 음식물쓰레기를 보는듯한 눈빛으로 날 더 매도해보란 말이야...
"정말인것 같구나. 지옥으로 보내주마."
신은 마음도 읽는것같다.진짜로 내 말을 들어주다니, 역시 착한쪽 신이구만. 드디어 지옥에 가는구나 하니 몸이 떨려오는것 같네...
"하지만,지옥에 가려면 일단 3가지 관문을 거쳐야 하네. 범죄자들은 그런거없이 바로 지옥이지만 너는 지은죄보다는 받은 고통이 더 커서 천국에 온것이기 때문에 지옥으로 내려가려면 이 관문들을 거쳐야 하네. 첫번째는 천국.여기는 내가 열어주마. 두번째는 너가 살아잇던 이계.여기서 나쁜짓을 하고 다시 죽으면 지옥으로 가는거지.지옥에서 지옥의 문지기에게 너가 살아있던때의 나쁜짓을 검사받게되고,지옥으로 가는것이지."
"여기서 나쁜짓 하면 안되나요?"
"할 수 있다면 해 보거라. 이곳 천국에 온다면 나쁜짓이라는 것에 대해선 알아도 실행할수는 없으니."
진짜인것같다. 저 신에게 온갖 욕을 해보려 했지만 입이 열리지 않는다.
"자,일단 천국의 문은 열어놓았다. 가거라."
천국문이라는거...포X이라는 게임에 나오는 포X이랑 똑같이 생겼는데? 그 게임 제작자도 한번 죽었던건가....라고 생각하며 천국문(포탈)을 타고 들어오니.
여기가 어딘지 모르겠다.
0 0
Square

모두에게 같지만 다른 아침이 또 온다.

회사에 자율출퇴근제가 실행된지 일주일차
나는 고양이가 깨우는 새벽을 선물이라 생각하기로 했다.
새벽에 일어나 자전거를 타고 명상을 하고
괜찮아 라며 나의 하루를 응원한다.
숨막히던 출근길에 여유가 생겼고
늘 가던 커피숍에선 사람에 가려 보이지 않던 책장이 놓여진 작은 공간도 찾을수있었다.
퇴근이 이르니 저녁을 먹고도 여유가 있었다
내 삶에 찾아온 다른 아침이.
모두에게 같지만 다른 아침이 또 온다.
1 0

끝을 보고 나니 한계가 없었다.

'권외편집자' 라는 책의 소제목이다.
개인적으로 굉장히 좋아하는 책이다.
이 소제목을 보면서 많은 생각을 했었다.
지금은 접었지만 원래 하던 직업에서 자만이라 생각할 수 있지만 끝을 보았다고 느껴진적이 있었다.
런칭을 성공적으로 마쳤을 때 '이게 끝이구나.' 라는 생각이 머리속을 스쳤다.
그리고 더 이상 그 일을 할 수 가 없었다.
개인적인 끝을 경험한 나는 어디로 가야하나 한참을 고민했다.
한참이라고 표현 했지만 사실 1주일밖에 안된다.

일단 사표를 썼다.
그리고 내가 살아온 길을 되짚어 보기 시작했다.
그러다 보니 하나의 공통점이 보였다.
그때까지는 인식하지 못했는데 나는 모르는 사람과의 대화가 능숙하다.
그래서 그 능숙함을 직업으로 하기로 했다.
이왕 직업으로 하는 김에 사업을 시작했다.
이 사업이 잘될지 안될지는 아직 잘 모르갰다.
삶을 굉장히 단순하고 직선적이게 살아가는 타입의 인간이다 보니 매사 결정에 고민이 남들에 비해서 없는 편이다.
요즘 들어 생각하는 것인대 고민할때는 고민하는게 좋다.
하지만 고민하고 문제가 발견되었다 해서 멈추는 것은 좋지 않다.
고민하고 실행하고 고민하고 실행하고 또 고민한다.
이게 요즘 나의 삶이다.
나도 내가 무슨 소리 하는지 잘 모르갰다. 하하
0 1

나는 가끔

그냥 다 놔버릴까
생각을 한다
살아도 전혀 의욕이 생기지 않는
그런 공허한 날들을 겪는다
속으로 스스로를 조이는 생각을
버리는 생각을 하곤 한다
우습지만 실행에 옮기지는 않는다
그럴까 말까 조금만 더 미쳐보면 안되나
그러다 만다
즉흥적으로 굴지도 않는다
아주 착실하게 살고 살뿐이다
모든걸 버리고 벗어나고 싶어도 용기가 없는건지
세상이 그저 두려운건지
그저 관심도 흥미도 없는건지..
꿈을 꾸면서도 이루어지겠지 생각도 않고
그냥 이러다 시간이 지나면 끝도 오겠지 한다
나를 방치하는건지
너무 사랑하는건지
상처가 많아서 그런건지
그냥 생각이 없는건지는 모르겠는데
오늘의 나를 죽이면
내일은 새로운 내가 지금을 잊고
다시 올바른 생각으로 살아가게 될까
아니면 똑같은 일을 반복하는걸까
이곳에 조금 털어내듯 담아보면
조금은 괜찮아지나
모르겠다
괜찮아지겠지 언젠가는 털어낼 수 있겠지 뭐
세상의 무게에 비하면 나는 아주 작은 먼지일 뿐이니까
아주 가벼운 존재라서
내가 겪는건 별게 아닐테니까
그냥 흔적을 남기듯 쏟아내듯 왔다 갈뿐
이렇게 살기도 하는거겠지 뭐
죽을만큼도 아닌데 곧 끝나겠지 뭐
웃고있겠지 뭐
이건 그냥
형편없는 멍텅구리같은 녀석이
조용히 살고있는것 뿐이야
아-
정말, 진짜 바보 아닌가 몰라
1 0

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

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