오늘 진행한 학습 요약
1. Tripf 프로젝트
- 주제 및 서비스 구현 관련 회의
- API 명세서 작성
2. PostgreSQL
- PostgreSQL이란?
- PostgreSQL의 장점과 단점
- PostgreSQL과 GIS
1. Tripf 프로젝트
주제 및 서비스 구현 관련 회의
- 드디어 달리고 달려 마지막 최종 프로젝트에 도달하였다!!
- 팀원과 어떤 주제로 마지막 프로젝트를 구현할지 긴 회의 끝에 모두의 관심사인 여행에 지금까지 배운 백엔드 로직을 녹여보기로 했다.
- 팀원 중 한분은 결제관련 서비스를 꼭 해보고 싶다고 하여 여행상품을 판매해보면 어떨까라는 아이디어가 나왔고 수용되었다!
- 기반은 웹이지만 인스타그램을 벤치마킹하여 유저의 여행경험을 기반으로 다른 사용자에게 여행지를 추천하는 사이트를 만들고자 하였다.
- Tag 시스템을 활용해 Tag에 따라 검색이 가능했으면 좋겠다는 의견도 나왔다.
- 팀원 모두가 해본 것은 아니지만 Spring Security로 보안을 관리했으면 좋겠다는 의견이 나와 어려워도 같이 도전해보자고 했다..!
- 기타 등등의 의견이 나왔으며 이런 의견을 토대로 관련 서비스를 정리 한 뒤 팀원 모두가 Figma를 통해 와이어프레임을 작성하였다.
- 팀원들과 소통이 잘되어서 좋았고 팀원 모두가 서로의 의견을 존중하고 적극적으로 수용하고자 하는 태도가 좋았다.
- 물론 다른 의견이 있으면 A에 대한 의견에 A도 좋지만 B도 좋을 것 같다고 이야기를 하며 건설적인 토론도 오갔다.
API 명세서 작성
-
- 이미지에서 잘 보이지는 않지만 크게 여행지 추천 서비스와 구매관련 서비스로 나뉘어져있고 주요 서비스는 사용자 기반 여행지를 추천하는 내용이다.
- 위 내용을 토대로 튜터님에게 1차 피드백을 받아보았다.
- 저녁 시간 이후 아래 내용을 구체화 하고 내일 튜터님께 2차 피드백을 받아보기로 했다.
- 주 기능을 확정하고 그 기능을 기준으로 확장하기
- 무난해보이는 서비스를 어떻게 하면 차별점을 둘 수 있는지 -> 예를 들어 개인화 등의 로직을 구현
- 추후 키워드, 태크, 카테고리 검색기능 추가
- 플랫폼으로 보이지만 SNS성격이 강해보이며
SNS느낌으로 진행하고자 할 경우 채팅등의 기능을 추가하는 것도 좋아보임- 추후 채팅기능, 댓글기능 추가
- 프론트를 구현할 것인지
- 조금 더 고민해볼 필요성이 있음
- 인프라 구성에 대해서 자세히 고민해보기
- EC2 → 이중화
- Load Balancing
- RDS → (다중 DB 클러스터 사용)
- S3
- Lambda
- Docker
- Github Actions
- Route53 (tripf 도메인 구매)
- EC2 → 이중화
- 일정 관리 등 팀원과 프로젝트 관리를 어떻게 진행할건지 자세히 이야기 나눠보기
- Github Organization
- Github project
- wiki
- Github Organization
2. PostgreSQL
PostgreSQL이란?
- PostgreSQL은 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 구조화하고 관리하는 데 사용
- 1986년 캘리포니아 버클리 대학에서 시작된 Postgres 프로젝트에서 파생된 데이터베이스로, 현재는 업계에서 널리 사용되는 데이터베이스 중 하나
- 단순히 데이터를 저장하는 것뿐 아니라, 복잡한 데이터를 효율적으로 관리하고 쿼리할 수 있도록 다양한 기능을 제공
- PostgreSQL의 특징
- ACID 트랜잭션 지원
- 확장성과 유연성
- PostGIS로 지리 정보 처리
- JSON/JSONB 지원
- 복잡한 쿼리와 고급 분석
- 강력한 커뮤니티와 지원
PostgreSQL의 장점과 단점
- 장점
- 안정성: 고가용성과 데이터 손실 방지 기능이 뛰어나 비즈니스 크리티컬 애플리케이션에 적합
- 성능: 대규모 데이터 처리에서도 높은 성능을 발휘하며, 병렬 쿼리를 지원
- 무료 사용 가능: 상용 RDBMS와 비교해도 손색없는 기능을 제공하면서도 비용이 들지 않음
- 지리 정보 처리에 특화: PostGIS를 통해 여행이나 지도 관련 애플리케이션 개발이 용이
- 단점
- 초기 설정 난이도: MySQL 등 다른 데이터베이스에 비해 설치와 설정이 조금 더 복잡하게 느껴질 수 있음
- 호환성 이슈: 일부 상용 데이터베이스에서 제공하는 고유 기능들과 완전히 호환되지 않을 수 있 음
- 학습 곡선: 고급 기능이나 커스터마이징을 활용하려면 추가적인 학습이 필요할 수 있음
PostgreSQL과 GIS
- Google Maps API는 위치 데이터를 제공하고, PostgreSQL(PostGIS)은 이를 저장하고 처리하는 데 강력한 도구임. 두 기술을 조합하면 효율적이고 확장성 있는 위치 기반 서비스를 구축할 수 있음.
- 1. 좌표 데이터를 효율적으로 관리할 수 있음
- PostgreSQL의 PostGIS를 사용하면 이 좌표 데이터를 효율적으로 저장하고, 다양한 분석을 수행할 수 있음.
- 예를 들어, Google Maps API로 가져온 (위도, 경도)를 PostgreSQL에 저장한 뒤, 거리 계산이나 반경 내 검색에 활용할 수 있음.
- Google Maps API는 사용자의 위치나 장소의 좌표 데이터를 제공함.
- 2. 반경 내 장소 검색을 최적화할 수 있음
- PostGIS의 ST_DWithin 함수는 오프라인에서 반경 내 검색을 처리할 수 있어 API 호출을 최소화할 수 있음.
- 이를 통해 비용을 줄이고 성능을 향상시킬 수 있음.
- Google Maps API로 사용자의 현재 위치 좌표를 가져옴.
- PostgreSQL에서 반경 5km 내의 추천 장소를 검색함.
- Google Maps API는 특정 반경 내 장소를 검색하는 기능을 제공하지만, 호출 제한 및 비용 문제가 발생할 수 있음.
- 3. 경로 데이터를 저장하고 분석할 수 있음
- PostGIS는 경로 데이터를 저장하기 위한 LineString 데이터 타입을 지원함.
- 경로의 길이 계산, 여러 경로 간 비교, 최적 경로 분석 등을 수행할 수 있음.
- Google Maps API에서 추천 여행 경로를 가져옴.
- PostgreSQL에 저장한 뒤, 해당 경로의 거리와 다른 경로를 비교하거나 사용자 리뷰와 연결함.
- Google Maps API로 얻은 경로 데이터를 PostgreSQL에 저장하면, 이를 기반으로 다양한 분석 작업을 수행할 수 있음.
- 4. 복잡한 지리 데이터 분석이 가능함
- 클러스터링: 특정 지역에서 요청이 몰리는 패턴을 분석하여 최적의 경로 또는 장소를 추천함.
- 거리 필터링: 두 좌표 간의 거리 조건으로 데이터를 필터링할 수 있음.
- PostgreSQL에서 특정 도시에 요청이 몰린 사용자 그룹을 분석하여 여행 경로를 추천함.
- 공간 인덱스를 사용해 빠르게 결과를 반환함.
- PostGIS는 Google Maps API로는 처리하기 어려운 고급 공간 분석 기능을 제공함.
- 5. 비용 효율성이 높음
- PostgreSQL(PostGIS)을 사용해 좌표 데이터를 데이터베이스에 저장하고, 필요할 때 로컬에서 처리하면 API 호출을 줄일 수 있음.
- 이를 통해 서비스 운영 비용을 절감할 수 있음.
- Google Maps API 호출은 사용량이 많아질수록 비용이 증가함.
- 1. 좌표 데이터를 효율적으로 관리할 수 있음