간략한 설명
Clomia-Network 서버는 웹 서버의 기능도 함께 내장되어있습니다.
웹 서버 기능을 위해 사용한 프레임워크나 라이브러리는 존재하지 않습니다.
웹 서버 또한 Python에 내장된 소켓API를 사용해서 만들었습니다.
브라우저가 아닌 클라이언트 소프트웨어를 위해 작동하는 서버를 "서비스 서버"라고 부르겠습니다.
정말 단순한 웹이지만 CRUD가 필요한 포럼을 만들면서 몇가지 기술을 직접 만들어야했습니다.
요약
- ( Request → DB → HTML/CSS/JS ) 흐름를 가지는 코드와 DB, 그리고 템플릿 렌더링
- 데이터베이스는 Python의 dict자료형 직렬화를 통해서 구현하였습니다.
- 템플릿 렌더링 시스템은 모두 문자열 연산으로 구현됩니다.
각 페이지당 HTML/CSS/JS 하나씩 존재합니다. 최종적으로 모든 파일이 합쳐진 뒤 Bytes로 변환되서 HTTP 응답 메세지 바디에 추가됩니다
- 포럼의 경우 Python이 DB데이터를 모두 가져와서 HTML을 작성합니다.
이때 JS이벤트가 필요하면 문자열 연산 과정에서 JS코드를 추가합니다
- 악성 스크립트 침입을 예방하는 보안성
- 코드 구조상 요청 메세지는 받은 직후 신뢰성 검사 함수로 들어갑니다.
- 자세한 내용은 GitHub에 올라간 코드를 참고해주세요. (악용하지 말아주세요..ㅠ)
- 개인적으로 모르는게 너무 많기 때문에
누군가가 GitHub에 공개된 소스코드를 참고해서 "웹 서버 부분"에 해킹을 시도하면 뚫릴 수 있습니다.
- "서비스용 서버"들은 암호가 유출되지 않으면 안전하다고 생각합니다.
- 암호가 맞지 않으면 소켓을 제거한다. (통신이 이루어질때마다 매번 새롭게 검사한다)
- 서비스에 사용되는 포트로 수천~수만의 포트중 일부를 사용합니다.
- 포트를 연결지을때 사용하는 인스팩트 코드는 완전 무작위로 생성됩니다.
- 포럼에 글을 작성할때는 비밀번호를 쓰지 않기를 권장합니다
- 글 쓸때마다 비번을 입력하고 기억하는일은 귀찮습니다
- 비밀번호를 쓰지 않으면 서버에서 자동으로 비밀번호를 생성,할당합니다.
- {비밀번호:글}형식으로 매핑됩니다. 이때 동일한 동일한 비밀번호가 다시 사용되면 글이 덮어쓰기됩니다.
웹 서버와 서비스용 서버
80번 포트로 하나의 웹 서버가 작동합니다.
많게는 수천개까지 실행될 수 있는 서비스용 서버도 웹 서버의 기능을 할 수 있습니다.
하지만 서비스용 서버는 다운로드 버튼이 있는 인트로 페이지만 제공합니다.
감상이 포함된 설명
웹 서버를 소켓통신만 가지고 바닥부터 구현해보면서 정말 많은것을 배웠습니다.
수많은 문제들을 마주치면서 스스로 결여된 지식이 엄청 많다는것을 느꼈습니다.