개발자 99% 커뮤니티에서 수다 떨어요!
clomia.ddns.net/intro (<-방구석 서버로 접속되는 도메인)
----------------------------------------------------------------
검은 콘솔로 채팅을 하는것은 영화에서나 나올법한 연출이라고 생각해요
실제로 콘솔은 여러모로 불편한게 많아서 모든 프로그렘이 GUI를 사용해요
그럼에도 불구하고 저는 콘솔로 멀리있는 누군가와 통신을 해보고 싶었어요
HTTP프로토콜도 모르는 상태에서 socket 라이브러리에 관심을 가지게 되면서 프로젝트를 시작하게 되었어요
오로지 소켓만 가지고 채팅 기능을 구현하기위해서 고민하다가 별도의 통신 프로토콜을 구상하게 되었어요.
구글링-생각-코딩 루프를 끊임없이 반복하면서 공부와 개발을 동시에 진행하다보니까 1주일 안에 빠르게 기본적인 기능이 완성되었어요.
하지만 그때부터가 시작이었어요.
외부에서 접속이 불가능하다는걸 깨닫고 리서치 끝에 인터넷과 IP시스템들을 이해하게 되었고 집구석에 있는 통신 단자함을 뜯어서 공유기 암호를 알아낸 뒤에 포트 포워딩을 했어요.
이제 외부에서 접속할수 있게 되었어요.
다운로드를 위한 전용 패이지가 하나 있었으면 좋겠다는 생각이 들었어요(들어버렸어요ㅠ)
이미 소켓프로그레밍으로 구축해 놓은 서버 기반 그대로 웹 서버의 역할도 했으면 좋겠어요.
그래서 다운로드 패이지 "하나만" 호스팅하는 웹 서버 기능을 만들기로 했어요.
음... 갑자기 게시판이 있으면 좋겠다는 생각이 들었어요!
게시판을 구현하기 위해서 소켓 하나만 가지고 바닥부터 CRUD를 구현하게 되었어요
그냥 HTML만 보내줄 생각이었는데 CRUD가 생기니까 동적 기능을 위해서 템플릿 엔진이 필요하다고 생각했어요
그래서 어거지로 템플릿 렌더링 엔진을 구현했어요!
아 그리고 DB도 필요하다는걸 깨달으면서 DB도 만들었어요.
음.. HTML,CSS,JS를 하루종일 만지작대다가 니코쌤이 올린 "아두이노,라즈베리파이 차이점" 영상이 떠올랐어요.
"라즈베리파이는 작은 컴퓨터이다" 음..이걸 서버로 쓰자!
이런 생각이 들었고 라즈베리파이와 부속품들을 구매했어요
방에 있는 렌선 포트가 연결이 안되어있었고 고쳐보려다가 통신사에서 기사를 부르게 되었어요. 다음날 기사님이 집에 오셔서 렌선 포트에 인터넷을 연결해주었죠.
라즈베리 파이를 기다리면서 프로젝트를 진행하고 테스트를 위해서 중간중간 퍼블릭으로 웹 서버를 열곤 했어요.
테스트를 하다보니까 컴퓨터가 지 혼자서 경고음을 계속 냈어요. 서버 로그에는 HTTP 요청 메세지 바디에 악성 코드가 들어있었고 무서워서 컴퓨터를 여러번 검사하고 재부팅했어요.
해킹 공격에 일시적인 번아웃이 왔지만 대응책을 생각했고 보안을 위한 함수를 만들어서 소켓을 받아들이는 가장 앞단에 배치했어요. 그 함수는 이후 차근차근 강화시켜요.
주문했던 라즈베리파이가 왔어요.
그 렌선 포트에 라즈베리파이를 연결했어요 (라즈베리파이와 리눅스를 익히는데에도 2~3일정도 걸렸네요)
라즈베리파이와 리눅스에 어느정도 익숙해지면서 종이상자와 굴러다니는 키보드랑 스티로폼 등을 사용해서 어찌저찌 서버를 설치(?)했어요
윈도우에서 개발한 서버를 리눅스에서 돌아가게 할수가 없었어요..
리눅스 최적화를 위해서 많은 코드를 추가하고 수정했어요.
이후 테스트를 해보면서 도저히 감당이 안되는 기이한 문제들을 몇가지 마주하게 되었고 능력이 미치는 범위 안에서 어떻게든 고쳐나갔어요.
손도 못댄 기이한 문제중 하나만 말하자면
"모바일 브라우저가 PC브라우저의 로딩을 인터럽트 시켜서 자기가 먼저 로딩을 완료하고 PC 유저들은 모바일 유저가 새로고침 해줄때까지 계속 로딩을 기다려야 하는 현상"
이거 정말 모르겠어요. 손도 못댔어요...
앞으로 웹 프로그레밍은 반드시 탄탄한 프레임워크를 배워서 사용해야겠다고 다짐하게 되었어요.
주도적으로 기획하고 길게 진행해본 프로젝트가 처음이라 그런지 마무리 지을 타이밍이 좀처럼 잡히지 않더라구요. 마음만 먹으면 끝이 없었어요.
19일차를 넘어서고 이미 기능은 더이상 손볼게 없고 만성적인 문제들만 남아있는 상황이었어요.
슬슬 질리기도 해서 이 시점에서 마무리 짓기로 했어요.
이 프로그렘에 대한 설명은 위에 첨부한 영상과 깃헙으로 충분할꺼라고 생각해요
손수 맞으면서 필요한대로 지식을 흡수하면서 적용해본 경험은 이번이 가장 강력했던거 같아요.
흥미가 있고 꼭 필요하다고 느끼니까 스펀지처럼 알게모르게 엄청 많은것들을 습득하게 되었고 이런 관점에서 이 프로젝트가 아주 의미가 있었다고 생각해요
결과물은 프로덕션으로 내놓기 부족한 부분이 참 많지만 저는 여기까지 오면서 배운 지식들로 만족해요.
(구글이 제 프로그렘을 악성코드 취급해서 배포도 물건너 갔거든요..ㅠㅜ)
액기스만 뽑아서 짧게 쓰려고 노력했는데 글이 너무 길어졌네요
긴글 읽으시느라 수고 많으셨어요 감사합니다!