nginx 와 socket.io 연동

nodejs를 이용해 socket.io를 사용하는 경우 보통 포트번호가 다음과 같이 들어가기 마련이다.

somewhere.com:9000

하지만 포트 번호가 노출되는것이 영~ 깨림찍한 경우엔 앞딴에 nginx 나 apache 를 두고 뒷딴의 9000포트로 프록시를 하는 것이 보통이다. 개인적으로는 아파치도 좋치만 nginx를 더 자주쓰고 있다. nginx 를 쓴다면 아래와 같이 설정을 추가한다.

server {
    listen 80;

    root /app/node-server/dist/public;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name somewhere.com;

    location / {

      // A: Proxy 패스를 설정하고 싶은 경우, 
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://somewhere.com:9000/;
      proxy_redirect off;

      // B: socket.io 사용시 아래설정 필수!!
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_http_version 1.1;

    }
    ... 이후 생략 ...
}

특히 socket.io를 이용하는 경우 B 설정은 필수다. B설정이 뭘해주는지는 솔직히 귀찮아서 찾아보진 않았다. 하지만 저 설정을 하지 않으면 ws:// 프로토콜로 웹소켓과 통신할때 핸드쉐이킹이 제대로 안되서 에러가 난다.

AWS EC2에 nginx 기반의 WordPress 설정하기

무료로 제공되는 아마존 EC2 서버에 워드프레스를 설치하려면 MySQL과 PHP가 있어야한다. 일단 기본 EC2 서버에는 아무것도 없기 때문에 일일이 다 설치해야하는데 여간 귀찮은게 아니다. 그래서 나는 nginx, mysql, php-fpm 설치는 여기 codingsteps.com에 있는 것 그대로 실행했다. 그런데 앞에 링크 그대로 실행하면 nginx 설정 때문에 문제가 발생한다. 원인은 바로

sudo nano /etc/nginx/conf.d/default.conf

위 명령어를 통해 새로 생성한 default.conf 설정 때문인데 location을 사실 server 설정 안으로 들어가야한다. 따라서 default.conf에 있는 location 설정에 server를 감싸거나 아니면 default.conf 파일을 만들지말고 그냥 nginx.conf 파일을 열어서 server 설정에 다음과 같이 location 설정을 직접 추가하면 된다.

location ~ ^(.+\.php)(.*)$ {
    fastcgi_split_path_info     ^(.+\.php)(.*)$;
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    include        fastcgi_params;
}

심볼릭 링크 만들기

ln -s [기존 원본 파일 또는 디렉토리] [새로만들 링크 이름]

EC2계정(ec2-user)의 홈 디렉토리에 웹서버와 연결된 심볼릭 링크를 만들어두면 관리가 편한다.

$> ln -s /var/www/html/ www

이젠 www 폴더에 워드프레스를 설치하자. 나는 기존에 백업해둔 wp/ 폴더를 통째로 옮겼다. 따라서 www/ 하위에 이제 wp/ 폴더가 생긴상태다.

www(/var/www/html/)
  ├⎯⎯⎯ wp/

폴더 권한 정리

nginx 서버는 nginx 라는 계정으로 실행되게끔 설정되어 있기 때문에 www 폴더에 nginx가 접근가능하도록 파일권한을 열어줘야한다. 본래 /var 하위에 있는 모든 폴더는 root:root 소유의 755 권한으로 되어 있기 때문에 ec2-user 계정으로 접근할수는 있지만 파일을 생성하거나 수정하려면 항상 sudo를 붙여야했다. 나는 이게 영 귀찮아서 root 소유의 폴더를 과감히 nginx 유저와 ec-user 그룹에게 소유권을 넘기고 권한을 아래와 같이 바꿨다.

$> sudo chown -R nginx /var/www/html
$> ls -al /var/www/html
drwxrwxr-x 3 nginx ec2-user 4096  6월  4 05:17 .
drwxr-xr-x 6 root  root     4096  6월  4 02:22 ..
-rw-rw-r-- 1 nginx ec2-user    5  6월  4 05:00 index.html
drwxr-xr-x 6 nginx ec2-user 4096  5월  7 02:32 wp

위와 같이 설정을 바꿔주고 서버도 실행했겠다. 접근해보려고 IP를 입력해서 브라우저로 열어보면 이상하게 안열린다. 이유는 EC2 서버의 기본 방화벽에는 80 포트가 열려있지 않기 때문이다.

EC2 서버의 80포트 접근권한 열어주기

이건 뭐 서버 AWS 콘솔로 들어가서 시큐리티 권한에 inbound를 추가해주면 된다. 설명은 생략한다.

데이터베이스 연결하기

나는 기존에 운영하던 워드프레스 서버를 AWS로 옮겨왔기 때문에 워드프레스 설정은 생략한다. 일단 백업해둔 DB를 복원하고 기존 DB에 동일하게 유저를 생성하면 일단 접속은 잘 된다.

도메인 연결

나처럼 기존에 도메인을 사용했던 사람들은 새 서버에 도메인 연결까지 연결해야 제대로 사이트가 보일것이다. 기본적으로 워드프레스는 도메인 이름을 DB에 저장해놓고 URL에 붙여서 링크를 만들기 때문에 IP로 연결하더라도 사실상 소스보기 해보면 죄다 도메인으로 링크가 생성됨을 알수있다. 즉, 도메인 연결까지 해야 워드프레스 사이트가 열릴것이다.

상견례 로맨틱 성공적

나에게 이번달 가장 큰 행사를 꼽아보라면 나는 당연히 상견례를 꼽을 것이다. 그동안 기억에 남는 상견례를 만들어보겠다며 동분서주했었는데 결론은 만족한다. 아마 이런 상견례를 내가 다시하진 않겠지만 혹여나 아직 준비중이라면 참고하시라!

상품화된 상견례

요즘에는 상견례도 결혼 상품에 낑겨서 팔고 있다는 느낌을 지울수가없다. 대표적인 것들이 상견례 음식으로 검색하면 나오는 레스토랑들이다. 주로 한식이나 코스요리가 대부분인데, 왜 이런 것들이 나왔을까 생각해보면 분명 이해는 간다. 그래서 그렇게 검색된 곳 중에 한곳을 찍어서 데이트겸 미리 가봤다. 결론은 실패! 결정적인것은 그날 여자친구와 다툰이유도 있지만 솔직히 음식 퀄러티가 비용에 비해 너무 처진다는 생각이 들었다. 역시 시스템에 맡기면 안되겠군!

시작은 항상 그래.

‘그래 나는 이런 상품화된 시스템에 굴복하지 않으리!’라고 다짐하면서 어떻게 할까 고민하기 시작했다. 그냥 세미나실 잡아서 우리 결혼 발표하고 그냥 삽겹살 좀 꿔먹으면 안돼? 라고 던졌는데, 여자친구가 훅 받았다. 그래 좋아 그렇게 하자! 했다가 왠걸.. 막상 그런 세미나실을 잡으려고하니 만만치가 않다. 비용도 비용이지만 동선이 꼬여버렸다. 갑자기 모든게 하기 싫어진다. 그냥 시스템에 맡겨버릴까? 하는 생각도 잠시 스쳤다. 괜히 특별하게 만들어보겠다고 했다가 괜한 기대감만 부풀린건 아닌가하는 생각도 들었다. 고민 끝에 세미나실은 포기하고 조용한 카페로 눈을 돌렸다. 예전에 삼청동의 조용한 찻집이 생각나 삼청동에 있는 몇몇 찻집을 물색했다. 그리고 여자친구가 엄청난 곳을 물색해왔다. “가예헌” 우리는 그곳을 가게됐다. 오~! 첫인상이 너무 좋았다. 라일락 꽃향기가 흩날리고 저절로 이문세의 “라일락 꽃향기 맡으며~~”를 반복했다. 그러다가 결국 이곳으로 결정했다!

틀을 깨다.

그런데 장소를 결정하면서 모든 것이 꼬였다. 장소 대관료도 사실 만만치 않은데다가 밥까지 먹으려니 비용이 어마어마해졌다. 그리고 동선도 사실 최적은 아니었다. 많이 걸어야하고 택시타도 과연 그 교통체증을 이겨낼수있을까? 확신이 안섰다. 하지만 이미 주사위는 던져졌다. 그 다음 스텝을 고민해야했다. 비용 문제와 동선 문제로 고민하다가 결국 중대한 결정을 하기 이르렀다! “밥은 각자 먹고 오자!” 잉? 처음엔 좀 망설였는데.. “그래 밥은 맘 편하게 식성에 따라 맛있는거 먹고 오는게 낫지”라며 위안을 삼고 결국엔 “상견례=코스요리”라는 틀을 깼다며 체면을 걸기 시작했다.

내 맘대로 결혼식

나에게 결혼은 막연함도 있지만 남들과 똑같이 하는게 그냥 싫은 삐닥이도 마음 한켠에 있었다. 하지만 시스템에 맡기는게 편하긴 하겠다는 생각에 이젠 동의한다. ㅋㅋㅋ 그래도 놓고 싶지 않은 자존심이라고 할까? 굳은 심지라고 표현해야 할까? 부모님 도움없이 온전히 우리 힘으로 시작하고 싶다. 이 마음은 지금도 변함없다. 따라서 모든 비용은 부족하지만 우리가 낼 것이고 때문에 결혼식도 우리 맘대로 할꺼다. 이 엄청난 논리아닌가? ㅋㅋ 드디어 내맘대로 할수있는 일이 하나 생긴거다. 사실 대학 다닐때도 없는 집안에서 학비 얻어쓰는게 영불편해서 장학금을 받기 위해 피터지게 공부했다. 하지만 나보다 뛰어난 녀석들이 많터라… -_-;; 그래서 부모님 몰래 학자금 대출을 받고 나서 통보했다. 그랬더니 얼마나 홀가분한지. 이젠 저 따분한 수업따위 듣지 않겠어! 라는 마인드로 바뀌고 점점 내맘대로 듣고 싶은 수업만 들어야지가 됐다. 결혼도 마찬가지다. 그냥 내 인생인데 내 맘대로 하고 싶다.

상견례 왜 하나요?

다시 돌아와서 상견례, 상견례의 틀은 이미 깨졌다. 때로는 정말 이렇게 해도 되는 건가? 불안해서 자꾸 여자친구에게 “이거 왜 해야되는 거지?” 라고 되물었다? 어느 누구도 이렇게 한사람이 없으므로 레퍼런스도 없고 불안하니까 자꾸 초심을 잃어간다 그럴때마다 이거 왜 이렇게 해야되는지를 스스로에게 되물었다. 나에게 상견례의 목적은 간단했다.

  1. 양가부모님을 서로 소개하고
  2. 불안해 하는 부모님들을 위해 우리의 멋진 계획을 설명하는 거다.

이렇게 두가지를 적어놓고 보니 이게 정말 왜에 해당하는 답인가 의문이 들었다. 소개란? 안녕하세요. 나는 누구입니다. 라고 두마디하면 끝 아닌가? 그리고 우리의 계획도 이렇습니다. 라고 떠들면 끝! 아닌가? 이것이 왜라는 질문의 답변이 되면 안될꺼 같았다. 그래서 또다른 이유를 찾기 시작했다. 양가 부모님 소개는 왜 할까? 소개라는 행위는 왜 하는 것인가? 이런 질문을 혼자하다가 이른 결론은 이랬다. 서로 다른 환경에서 자란 우리 둘도 이렇게 다른데 하물며 한번도 만나보지 못한 양가 부모님들은 어떨까? 살아온 발자취에 따라 삶을 바라보는 태도와 이해도가 다른데 이런 간극을 제대로 이해하지 못한다면 오해가 발생할수있고 문제가 생기면 결국 우리가 불행해진다. 그렇다면 나는 어떻게 해야하는가? 나의 행복을 위해서라도 “나는 두 가족의 간극을 메꿔주는 자리를 만들어줘야한다.” 라는 결론에 이르렀다.

"당신은 나의 반, 같습니다 " 장인어른이 내게 처음 해주신 말씀을 슬라이드 첫장으로 만들었다.
“당신은 나의 반, 같습니다 ” 장인어른이 내게 처음 해주신 말씀을 슬라이드 첫장으로 만들었다.

가족 비교 연표

그래서 생각해낸 첫번째 아이디어가 가족 연표를 만들어보는 것이었다. 그래서 일단 우리 가족의 대소사를 적기 시작했다. 아버지는 어디서 태어났고, 언제 어디로 이사했으며 어머니는 어디서 태어났고 둘은 언제 결혼했으며 나는 언제 태어났고 등등등.. 적고 보니 우리 아버지가 충청도 태생이었다는 사실을 알았다. 헐… 난 내가 경상도에서 태어났기 때문에 당연히 경상도 분인줄 알았는데, 충청도 분이었다니 그것도 태어나기만 충청도에서 태어난게 아니라 어린시절을 통으로 충청도에서 보내셨다. 그리고 부모님 결혼 기념일도 알게 됐다. 아빠는 기억 못하시는데 엄마는 바로 아시더라. ㅎㅎㅎ 다행히 우리 결혼은 11월 1일이니까 나는 아빠처럼 잊어버리진 않겠지. 후훗. (깨알 결혼 홍보ㅋ) 우리가족 연표를 표로 정리하고 여자친구의 가족사도 같은 표의 오른쪽 칸에 정렬했다. 그리고 두 가족 연표를 비교해보니 흐뭇해졌다. 놀라운 사실은 양가 부모님이 1년 차이로 같은 날에 결혼하셨다!. 아버지가 장인어른과 동년배인 사실은 알고 있었지만 결혼기념일이 같다니… 후일담이지만 이 사실은 나중에 상견례 자리에서도 자연스레 알게되서 결혼기념일날 같이 놀러가면 어떻겠냐라는 얘기가 나왔다. 이렇게 가족 비교 연표를 만들어 당일에 한부씩 나눠드렸더니 이만저만 편한게 아니다. 장인 장모님 생신을 여쭤볼 필요도 없고 부모님들도 물어보지 않아도 알게 되니까 좋았다는 피드백을 받았다.

MBTI 간이 테스트

두번째로 준비한 것은 MBTI 간이 테스트였다. 아무래도 개인 성향을 좀 알아야 대화가 수월할 것 같아 인터넷으로 테스트할 수 있는 링크를 보내드렸다. 본래 세미나 실에서 한다면 당일날 시험치듯 할려고 했었는데 귀찮을것 같아서, 미리 테스트하고 결과를 해설해주는 방향으로 각을 잡았다. 가족별로 결과를 놓고 PPT를 만들기 시작했다. 이것도 연표처럼 비교해보니 신기하게 너무나 잘 맞았다. 특히나 나도 몰랐던 우리 가족에 대해 이해하는 계기가 됐다. 아.. 이래서 울엄마가 아빠랑 사는구나. 아빠는 엄마 없으면 못 살겠꾸나 싶었다. ㅋㅋㅋ MBTI와 관련된 해설도 인터넷에 참 많기 때문에 단시간동안 엄청난 학습을 하기 시작했다. 역시나 단기간의 학습은 오래 남지 않는다. 글을 쓰고 있는 지금 시점에서 내가 무슨 성향인지 벌써 다 잊었다. ㅋㅋ MBTI 성향으로 내가 깨달은 몇가지가 있었다. 장모님을 처음 뵜을때 느낌을 엄마가 물어보길래,.. 음.. 그냥 엄마랑 비슷한 느낌이야. 라고 말했던 적이 있었는데 정말 신기하게도 엄마랑 장모님이 같은 성향으로 나왔다. 물론 지표를 나타내는 그래프의 크기는 조금 달랐지만 사람의 감정을 중시하는 F 성향과 그밖에 성향들이 모두 일치했다. 장인어른과 여자친구는 붕어빵처럼 그래프가 거의 비슷하게 나왔다. 오~~ 부전자전이라더니… 어쩜 이렇게 똑같을수가~ +++.

mbtislide 애석하게도 자유분방한 P 성향을 가지고 있는 사람은 나와 처남밖에 없었다. ㅜㅜ.. 아무래도 양가 부모님들에게 이해를 받기 힘든 부분이다. 아.. 갑자기 외로워지는데, 처남이라도 내가 이해해줘야지. 동변상련의 느낌….여튼 이런 저런 나의 해석을 더해 MBTI에 대한 가족 설명회를 모두 마쳤다.

우리의 여행 계획!

마지막으로 결혼후 1년간 세계 여행을 떠날꺼라고 이미 오래전부터 공표했지만 얘네들이 도대체 어떻게 살려고 그러는지 특히나 우리 부모님의 걱정이 엄청났다. 그런 걱정을 조금이라도 덜어들이기 위해 우리는 여행후 돌아와서 이렇게 살 것입니다.라고 말은 사실 제대로 못했다. 왜냐면 나도 모르니까. ㅎㅎ 어떻게든 되겠지가 나의 P성향 아닌가? -_-; 하지만 철저한 계획이 있어야 안심하는 J성향의 나머지 분들을 위해 여행후 돌아와서 전세든 월세든 구해서 살 자금정도는 남겨두고 떠난다는 말과 함께 코앞에 닥친 결혼식과 1년의 장기 여행 준비를 설명했다. 이 여행을 위해 사실 지금 나는 엄청 바쁘다. 수업도 듣고 모임도 나가고 가서 굶지 않으려고 지금 뭔가를 열심히 만들고 있기도 하다. 여자친구도 마찬가지다 우리는 지금도 좀더 나은 삶을 살기 위해 부단히 노력하고 있으니 일단 믿고 지켜봐달라!!

엔딩.

이렇게 모든 프로그램이 끝나고 화기애애한 분위기속에 여러대화들이 오갔고, 상견례가 끝난 뒤에는 우리가 예약한 예식장 견학을 다녀왔다. 여기서 분명한 사실은 우리는 기억에 남는 상견례를 만들었다는 것이다. 그리고 앞으로 우리는 이렇게 기억에 남는 일들로 채워갈 것이다.

덧,

추가로 사진과 쓸 내용이 있지만 일단 글쓰다 지쳐서 오늘은 여기까지!!