서버 사이드 렌더링이란, 서버에서 페이지를 그려 클라이언트(브라우저)로 보낸 후 화면에 표시하는 기법을 의미합니다.
이번 미니프로젝트의 요구조건 중 하나인 SSR로 구현하기 위해서 많은 고민이 있었다. Flask를 통해서 서비스를 만들어본 적은 처음해보는 경험이였고, 프론트 백엔드로 역할을 만들었는데, 내가 만든 화면뷰를 백앤드가 그려서 프론트로 넘겨야하는 부분에서 협업을 어떻게 해야할지도 고민이 되었다.
그래서 와이어프레임에 따라 화면 뷰를 그려놓았지만, 프론트 역할이 끝난게 아닌 것이다. 그래서 SSR에 대해서 많은 공부를 했었던 것 같다.
그리고 기능에 따라 뷰를 어떻게 그려야 할지도 백엔드에서 결정되는 부분이기 때문에 그 부분에 대해서 많은 공부를 했었던 것 같다.
JWT가 어떻게 작동하는지 대충 알고 있었지만, 항상 프론트 시점에서만 체험을 해봤기 때문에 JWT를 구성하는 것도 많이 고민되었다. 그래서 Flask를 통해서 JWT를 구성하는 방법에 대해서 찾아보았다.
여러가지 처리하는 방법이 있었는데, 토큰을 Cookie 로 저장하고 있거나, Session으로 저장할 수 있었는데, 쿠키로 처리할 경우 Token 자체가 노출되어 있어, 탈취가 될 수 있는 위협이 있었다.
하지만 Session의 경우에는 Backend에서 Session을 만들어 프론트로 넘겨주기 때문에, Token 자체를 숨길 수 있기 떄문에 눈에 보이지 않아 보안적으로 더 안전할 것 같았다. 그래서 Session으로 처리하는 방법을 택했다.
ChatGPT는 미니프로젝트 하기 전에 API를 사용해보는 경험을 했었기 때문에 어려운 점은 크게 없었던 것 같다. API를 사용하면, 너무나 쉽게 원하는 답변을 얻을 수가 있었다. 다만, 답변을 받기 까지 너무 오랜시간이 걸리기 때문에 이 부분을 어떻게 처리해야할지가 기술적 챌린지가 있었다.
우선적으로 챌린지가 2가지가 있었다.
1. ChatGPT의 답변을 받기까지가 시간이 오래 걸리기 때문에 유저가 질문을 하면, 답변을 받을 때까지 기다리지 않고, 질문 등록과 ChatGPT의 답변 처리는 별도의 로직으로 처리해야한다.
2. ChatGPT의 답변을 받으면, 새로고침 없이 화면 뷰에 보여줘야한다.
위 2가지 정도로 고민했었다. 하지만 의외로 답은 쉽게 찾을 수 있었다. 파이썬에서 제공해주는 multiThread를 사용하게되면, 한 로직은 DB에 질문 데이터를 저장하고 유저에게 질문등록을 완료했다고 알려주게되며, 한 로직은 ChatGPT 답변을 기다리고, DB에 답변을 등록되게 처리할 수 있었다.
이 챌린지를 처리하기 위해서 우선 웹 소켓을 공부했었는데, flask에서 웹소켓을 처리하기가 쉽지 않았다. 그래서 setinterval을 사용하기로 정했고, 만약 해당 게시물이 ChatGPT의 답변이 준비중이라면, 1초마다 API를 통해서 ChatGPT 답변 여부와 답변 데이터를 받아오게 되고, 답변 여부가 True
가 되면, 해당 답변을 뷰에 덮어쓰기하여, 새로고침 없이 해당 답변이 적용되게 만들었다.
ChatGPT 답변이 오래걸려 1분정도 걸립니다.
ChatGPT를 활용해서 개인적인 연습 프로젝트는 만들어 봤었지만, 이렇게 서비스로 만들어본 건 처음이라 완성시킬 수 있을 지 확신은 없었지만 짧은 시간 동안 팀원들과 함께 하면서 개발에 몰입하면서 이렇게 기능을 완성할 수 있어서 너무 뿌듯했었다.
앞으로도 이러한 프로젝트를 계속하게 될 텐데 너무 기대되고 설레는 것 같다. 그리고 내일은 알고리즘을 풀게 될텐데 너무 기대 된다.