데이터 부족으로 잠시 배제되었으나, 데이터를 구할 수 있게 됨에 따라 시간이 날 때 마다 다음 기능들을 추가해볼 예정
전통음식 상세 조회
현재 전통식품 조회는 대표식품 명칭만을 조회하여 해당 대표식품별로 존재하는 다양한 전통식품 정보를 조회할 수 없는 상태.
공공데이터로 제공되는 API 를 사용하여 전통식품 상세 조회 기능을 구현하려고 했으나, OPEN API 의 라우팅 에러가 반환되고, 해당 기관 측에서도 이에 대한 조치를 할 생각이 없어 보임. 다행히 2022년도 경에 XLS 파일 형태로 올려준 자료가 있음을 확인하였고, 아래와 같은 XLS 데이터를 정제하여 데이터베이스 저장 후 활용할 예정
대표식품별 건강 기능 정보 조회
현재 전통음식 페이지에 조회되는 각 음식들은 전통음식의 최상위 카테고리라고 할 수 있는 대표식품 명칭을 나열한 것. 그리고 각 대표식품은 동의보감, 식의심감 등의 고전의학서 라고 할 수 있는 저서에서 소개되어 있고, 각각 건강기능과 관련해서 어떤 효능을 보이는지도 나와 있음. 따라서 대표식품별 전통음식 조회 이전에 대표식품에 대한 간략한 정보를 사용자에게 제공해줄 수 있도록 하여 정보 사용성과 유용성을 높일 수 있도록 해볼 생각.
기존 루트 페이지는 각 주요 페이지에 대한 간략한 소개와 네비게이션 역할을 하고 있었음. setInterval 을 이용한 3초 단위로 슬라이드가 자동으로 변경되는 방식으로 구현 하였는데, 키보드, 마우스, 자동 슬라이드 방식으로 사용자가 더 효율적으로 확인할 수 있는 기능을 추가하고, 전체적인 다지안과 레이아웃을 변경할 것임.
localmarket 페이지에서 페이지 하단으로 스크롤 후 다음 페이지에 대한 커서에 http:// 스키마가 반환됨에 따른 CORS 문제로 리소스 요청에 대한 응답이 차단됨. 하지만 localfood 페이지 경우는 localmarket과 동일한 설정에 의한 동일한 Get 요청을 수행함에도 CORS 문제 없이 정상적인 https://~ 경로로 Get 요청을 함.
비고
서버 측에서 추가 데이터 로드를 요청 받으면, 해당 데이터를 json 객체에 담아서 응답하는데, 이 때 next 프로퍼티에 다음 요청에 사용한 URL 을 담아서 반환함
localfood 의 경우도 마찬가지로 동일한 서버 측 로직에 의해 next 를 반환받음
그리고 이 두 컨트롤러 모두 동일한 환경변수 설정에 의해 사용됨
LocalFood
LocalMarket
특이사항
localfood 페이지와 localmarket 페이지는 서버에서 서로 동일한 로직에 의해 .env 환경변수에 저장된 API_PROTOCOL 을 기반으로 동일한 스키마를 공유하고 있었음. 이는 클라우드 플랫폼 배포 시에도 동일하게 적용되는 부분으로 서로 같은 환경변수를 참조하기 때문에 http 와 https 중 하나는 통일되어 설정되어야 함에도 서로 다른 스키마가 적용됨
현재 까지 생각해본 방향은 cloudtype 을 사용하여 백엔드를 배포할 예정. 클라우드타입은 국내 클라우드 플랫폼으로 최근에 가파르게 성장하고 있는 곳임. 내부적으로 도커를 사용하여 특정 환경에 제한되지 않고 사용할 코드만 배포하면 나머지는 알아서 빌드 후 배포까지 처리해주는 것이 장점.
클라우드 타입을 이용하고자 하는 이유는 최대한 비용 부담을 줄이기 위해서임. AWS EC2 를 이용한 배포는 이미 해봤고, 현재 재개발 중인 현 프로젝트의 배포측면에서의 목표는 프론트엔드는 AWS S3 와 Cloud Front, Github Actoins 를 이용한 CI/CD 를 배포해보는 것이 주이므로 백엔드의 경우에는 최대한 간편하고 비용 효율적인 방향으로 배포 하고자 함. 다만 Github Actions 을 적극 사용하여 배포 자동화를 시도해보는 것이 백엔드에서의 최종목표임
비고
배포 현황
2024.06.12 배포 완료
프라이빗 저장소
해당 SQLite3 의 db 파일에는 개인 정보가 저장되어 있지는 않지만, 데이터 자체가 돈 이므로 이를 외부에 노출하는 것은 꺼려지는 상황. 따라서 코드 자체는 공개하고, DB 자체는 숨기기 위해 레포지토리를 공개용, 숨김용 두 개로 만들고, 숨김처리한 저장소를 통해 배포 진행 할 것
데이터베이스
데이터베이스의 경우 SQLite3 를 사용하고 있음. 프로덕션에서 사용하는 경우에 가볍고 경량화 되어 있다는 점에서 큰 장점이지만, 수백 MB 의 데이터를 저장하고, 이를 삽입, 삭제, 수정하는 쓰기 작업이 다수 유저에 의해 동시에 일어나면 성능 저하 문제가 발생함. 즉, 직렬화된 쓰기 작업 처리로 인해 동시성 제어 문제가 나타날 수 있음.
그러나, 현 프로젝트는 읽기 작업만 허용하고 있으며, 읽기 작업의 경우에는 SQLite는 다수 사용자에 의한 동시 읽기를 지원함. 따라서 동시성 제어 문제가 발생하지 않음
단, 쓰기 작업을 처리 중이라면 읽기 작업도 대기상태에 놓임. 이는 쓰기작업과 읽기 작업을 같이 처리하는 데이터베이스로서 사용한다면 성능 저하 문제가 큰 이슈가 될 수 있으나, 현재 프로젝트는 데이터베이스에 대한 읽기 작업만 허용하므로 이러한 이슈와 크게 연관되지 않음. 따라서 해당 SQLite3 를 프로덕션에서 사용해도 괜찮겠다라는 결론을 얻음