4주 프로젝트-dev log #15

rlcjf0014·2020년 2월 27일
0

im_16 프로젝트

목록 보기
19/21

Introduction

이제 거의 마무리가 다가오고 있다. 서버측에서는 배포를 담당하지만 클라이언트 코드도 보면서 어느정도 이해를 해 도움이 필요하거나 속도가 뒤쳐지는 듯 하면 바로 도와줄 수 있게 같이 지켜보고 있다. 서버 기능을 어느정도 다 구현했으니 이제 그 외적인, 배포와 또 프록시 설정? 이런 부분들을 설정해줘야 해서 그 부분들을 진행하고 있다.

현재 고민거리?

이제 서버측의 코드를 어느정도 정리해서 배포를 해야 하는데 여러 가지 문제가 있어 팀과 상의를 했다. 먼저, Http로 서버를 구축할지, 아니면 보안을 위해 SSL 키를 사용해 https 로 구축을 할지 의논을 했는데 일단 우리 어플에 사용하는 정보 중 중요한 정보가 없고 이메일 외의 개인정보? 라고 하기도 애매한 정보가 없기 때문에 사실 돈을 주고 도메인을 사서 SSL 키를 발급받을 만한 의미가 없다고 생각했고 어플 자체가 그렇게 크게 수익성을 생각하고 개발한 어플이 아니기 때문에 그냥 http로도 충분할 것 같다고 팀원들에게 생각을 전달했고, 팀원들도 동의를 했다. 나~중에 결제시스템? 고양이 관련 상품 판매를 직접 해 결제 시스템을 도입하면 몰라도 현재 상태로는 그냥 http로 하기로 했다.

서버코드는 EC2에 올리고, 마리아 DB 데이터베이스는 RDS로 올리기로 했다. 한번 올려본적이 있기 때문에, 별로 어려울 거라고 생각하지 않았다.

수월했던 부분

EC2를 올리고, ssh 키를 이용해 연결 한 후 필요한 서버 코드를 받고, 또 node를 설치하고, npm 을 설치한 후 돌려봤는데 잘 돌아간다. 그래서 이후에 pm2를 설치해 서버 코드를 실행시켜 계속 서버를 띄워주기로 했다. 그리고 서버에 일단 클라이언트가 도달할 수 있어야 되서 적절하게 inbound를 잘 설정해주고 실행해보니 잘 돌아갔다. 문제는 우리가 로컬에서 서버코드를 실행시킬때 타입스크립트를 빌드해준 후 js로 node를 실행시켜 돌렸는데 ec2로 띄운 우분투가 프리티어여서 빌드할 때 필요한 데이터가 없다고 에러가 계속 났다. 그래서 생각해낸 해결점은 로컬에서 빌드 한 자바스크립트 파일만을 EC2에 올려 그 파일을 노드로 실행시켜 주는 것이었다. 이렇게 하니 잘 실행이 되었고 문제없이 해결되었다.

문제는 다른 곳에 있었다...

어려웠던 부분

이제 rds를 설정해 줘야 해서 설정을 위해 수월하게 MariaDB 항목을 찾아 설정해 주었고 또 연결도 잘했다. 그리고 서버 파일에 있는 .env 파일에 새로 수정한 포트, 호스트이름, 패스워드 등등을 수정해주고 연결해보았더니 잘 해결되었다. 이모티콘 부분은 원래

CREATE DATABASE cats CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

로 데이터 베이스를 만들면 해결되는 줄 알았는데 이모티콘 삽입이 되지 않아 링크 에 나온데로 데이터베이스의 기본 character set 을 utf8mb4로 수정해 주어 (my.conf 파일 수정) 로컬 데이터베이스에서는 이모티콘을 잘 인코딩 해왔다. 이렇게 설정을 해주어서 AWS에서도 이 부분을 적용해주어야겠다 싶어
parameter group을 하나 만들어 character set 과 collation 값들을 서버든, 커넥션이든 일단 모두 utf8mb4로 수정해주어 데이터베이스에 적용시켜 주었다. 이렇게 하면 되는줄 알았으나...이모티콘 삽입 부분에서 에러가 났다.

먼저 파라미터 그룹을 수정해주었기에 글로벌 배리어블 부분은 잘 수정이 되었다. 근데 클라이언트에서 이모티콘을 보내면 안들어가고 wrong field value라고 떴던 이유는...

이렇게 클라이언트와 연결시 세션 character set은 모두 수정된게 아니여서 그런것이었다. 클라이언트에서 연결 할 때 utf8mb4로 연결하도록 ormconfig.js를 수정해보았는데 잘 작동이 되지않았고 기술시연이 몇일 안남은 상태의 나는 조바심이 나기 시작했다. 그래서 일단 일시적으로 내가 set names utf8mb4로 어플을 작동할때는 세션의 character set을 수정해서 영상 촬영을 했는데 일시적인 해결 보다는 장기적인 해결책이 필요한 상황 이었다.

검색을 해보니 그 문제가 일어나는 것은 클라이언트가 서버와 연결하면서 자동적으로 클라이어언트와 커넥션 character set을 바꾸는 것이었는데 클라이언트의 기본 character set 이 utf8로 설정되있어서 그랬나보다...하지만 나의 로컬 디비의 character set 은 모두 utf8mb4였기 때문에 아무리 검색해도 왜 이런지는..알수없었다. latin1이 아닌 utf8 로 기본값이 지정된걸보니 수정되긴 한건데...아무튼 이 문제를 해결하기 위해 많이 검색을 해봤고 검색결과 AWS RDS 파라미터 그룹의 character-set-client-handshake라는 값을 찾아서 0으로 바꿔주는 것이 해결책으로 보였다. character set client handshake는 악수 의미 그대로 서버와 연결될 때 클라이언트의 설정을 받아온다는 그런 내용이었고 1이던 값을 0으로 바꾸면 서버가 자신 고유의 character set 을 유지할 수 있다고 많은 리소스가 말해주었다. 그래서 됐다! 라는 심정으로 들어가서 찾았더니...

없었다.... 왜 없는것일까...또 사방팔방 검색을 해봤더니 나말고 다른 유저들도 마리아디비 RDS에서는 이 옵션을 찾을 수 없다고 나왔다. 버그인것 같다고 의심하는 사람도 많았다. 그래서 클라이언트 코드를 수정하지 않고서는...(디비에서는 숫자로 저장하고 클라이언트에서 숫자를 보고 이모티콘을 넣어주는 방법도 생각해보았다) 이모티콘을 넣어줄 character set 으로 수정하는게 어려워 보였다.

하지만 나에게는 init_connect라는 기술이 있었다. 검색결과 init_connect는 처음 연결시 실행하는 것이었는데 안에 넣는 string을 실행시키는 것이었다. 다행이도 paramater group에 이것은 있었고 설레는 맘으로 그 빈칸안에 set names utf8mb4를 넣어서 저장했다.

이렇게 init_connect 값을 바꿔서 실행하니...잘되었다! 클라이언트에서 이제 이모티콘을 집어 넣어 서버에서 db에 연결할때마다 init_connect안의 값을 실행시켜 데이터베이스의 기본 charset을 utf8mb4로 변환을 시켜주었고 이모티콘이 잘 들어왔다 ㅠㅠ

글로 쓰니 축약되어 간단해 보이는 경향이 있지만...고생 많이 했다 ㅠㅠ 그래도 해결했다는 점이 행복했고 나와 같은 문제를 겪고 있는 사람들을 위해 커뮤니티에 답변도 해주었다. 새로운 접근을 고안해 문제를 해결했다는 점이 매우 고무적이었다.

마무으리

일단 배포 부분을 어느정도 완수하고 클라이언트와 연결되는 것을 확인해서 한시름 놓을 수 있었다. 이모티콘 charset부분도 다행히 해결을 해 일단 현재는 더 수정할 것이 없어 보인다. 중간중간 클라이언트에 가서 UI 부분을 도와주고 있는데 이 부분에 관한 블로깅은 일단 프로젝트 서버 부분 블로깅을 다 완료하면 정리하고 싶다. MobX와 리액트 네이티브를 사용하는 클라이언트 코드도 상당히 매력적이다. 그래도 서버가 약간 구조를 짜고 설계하는 것이여서 더 흥미롭긴 하다. 앞으로 얼마 남지 않았다! 힘내자. 그리고 프록시..설정하는게 지금 생각났다 ㅋㅋㅋㅋㅋ 보안을 위해(http 보안?!)...프록시 설정해주자...Peace

profile
Grow Joshua, Grow!

0개의 댓글