웹서버 구축 하면서
프론트엔드 플러터 그리고 서버리스 백엔드 firebase nosql db 로 토이 프로젝트를 하다가
아무래도 nosql의 한계가 있는것이 느껴졌다
nosql은 모바일 앱에 어울리고 어쩌면 websocket 방식의 메시징 시스템과 sql 중간쯤에 있는것 같다
내가 만드는것들이 웹앱인데 형식은 앱이지만 내용은 웹을 추구하다보니 sql이 필요할때도 있다
그래서 웹서버를 구축하고 python으로 API를 구성해 RDBMS SQL을 사용해야겠다는 생각을 하고 구형 맥북프로 노트북으로 홈서버를 연습했다.
처음에는 무선 wifi로 연결해서 네트워크 설정이 DDNS다 포트포워딩이다 DMZ다 뭐다 너무 꼬여서 어려웠는데 그때 많이 배웠고 며칠뒤 노트북 usb 랜케이블 젠더가 와서 유선으로 모뎀에 랜케이블을 사용하니 쉬워졌다. 그렇게 홈서버로 연습하고 오라클 클라우드 사용해서 고정IP 받아서 하니까 더 쉬웠다
ngnix 리버스 프록시 서버 설정하는데 고생 좀 많이 했다. 몇몇 예시 찾아서 따라해보기 하다가 결국 공식문서 스텝바이스텝으로 다 읽으니 좀 이해가 갔다. 그렇다고 처음부터 공부부터 다 하고 시작하는 스타일은 못 된다. 일단 부딪히고 깨진 다음 거기서부터 다시 시작하다보니 시행착오가 너무 많고 괴롭기도 하지만 이리 가나 저리 가나 결국 가면 되는거 아닌가
ngnix 설정하고 네트워크 방화벽 설정하고 ssh 설정해서 telnet, ftp 가능하게 하고 ssl 설정해서 도메인 https 연결하고
노트북에는 mariadb설치했고 phpmyadmin으로 관리하도록 했고
클라우드서버는 오라클 ATP 사용하고 오라클 sql developer로 관리하고
python 웹프레임워크인 fastapi 사용해서 api 앱 구성하고 aswi 웹서버인 uvicorn으로 api앱 서빙하고 uvicorn웹서버를 안정적으로 관리하기 위해 gunicorn으로 uvicorn worker 4개 만들어 구동하는걸 linux systemd에 socket으로 연결해서 다양한 상황에서 uvicorn worker들을 유지하도록 했다
https로 웹사이트에 접근해서 db를 crud 해서 데이터를 다룰수 있는 API 웹엔진을 만들었다
앞으로 할일은 로드밸런스 활용해 보는것. 트래픽이 늘어나면 여러대의 nginx 서버로 분산하는건데 그 여러대의 서버에 동일한 앱을 설치 운용하려면 결국 쿠버네이트 같은걸 배워야 하는건지? docker 정도는 경우에 따라 편하기도 하고 불편하기도 하던데
백엔드 앱 작성하는데 python fastapi는 적당한 성능에 빅데이터,AI 등 라이브러리와 커뮤니티가 크고 빵빵하다는 점이 좋지만 단순한 앱만 구동할것 같으면 웹 마이크로시스템 아키텍트에 최적화돠 go 같은 고성능 언어 생태계도 고려해 봐야겠다
프론트엔드는 여전히 플러터를 사용할 것이다. java 쓰다가 kotlin 쓰니까 너무 편하고 신세계였는데 kotlin 쓰다가 dart 쓰니까 coroutine도 없고 성능도 떨어지고 너무 단순한 느낌도 있어서 실망하기도 했지만. 뭐 원래 dart가 형태는 kotlin하고 비슷하지만 내용은 js를 따라가는 언어니까
플러터 웹앱은 CSR방식이라 웹서버 부담이 상당히 줄어드는 장점이 있다. 대신 빌드파일이 크고 웹로딩시간이 길고 seo가 불리하다는 단점이 있다
원래 플러터가 안드로이드 앱 프레임워크를 기반으로 크로스플랫폼 개발을 가능하게 한것이기 때문에 그 프레임워크에 과거 리눅스OS 시스템부터 현재의 스마트폰 IOT 클라우드 등의 체계가 녹아들어 있기 때문에 단순한 화면을 꾸미고 입출력을 담당하는 UI툴이 아니라 현대인들의 웹에 대한 경험 즉 UX의 방식의 가이드라인을 제공해 주기 때문에 좋다