Weekly I Learned
기획 (1주) + 개발 (2주)를 합쳐서 벌써 프로젝트를 시작한 지 3주 차가 되었다.
이번주는 지금까지 개발한 프로젝트의 중간 발표가 진행되었다. 이를 바탕으로 이번 WIL은 지금까지 프로젝트를 진행하면서 내가 겪은 트러블 슈팅 및 기술적 의사 결정을 정리하고, 앞으로 해야할 일에 대하여 정리해 보도록 하자!
- 중간 발표 자료
[ 🚨 트러블 슈팅 및 기술적 의사 결정 ]
- 인프라 설계도 변경
- MINIO 사용 이유
- WebP 사용 이유
1. 인프라 설계도 변경
- 문제 발생
그림을 통하여 서로 다른 3개의 Application이 하나의 DB에 직접적으로 접근하는 모습을 볼 수 있습니다. 이는 MSA핵심 원칙인 Loose coupling(느슨한 결합)이 아닌 High Coupling을 지향하고 있다고 볼 수 있으며, 이처럼 모든 서비스가 동일한 DB에 직접적으로 접근하게 되면, 각 서비스가 스키마 변경 시 다른 서비스에 큰 영향을 미칠 수 있게 됩니다. 즉, DB에 장애 발생 시 모든 서비스가 동시에 장애를 겪을 수 있게 됩니다.
- 해결
DB 전용 애플리케이션을 따로 만들어, 다른 애플리케이션들이 DB에 접근하기 위해서는 dataServer 애플리케이션을 통해서만 접근하게 하여 MSA의 기본 원칙인 서비스 간 Loose coupling과 독립성을 유지하면서도 중앙 집중화된 데이터 접근을 통하여 DB의 데이터를 제어할 수 있게 됩니다.
- 인프라 설계도 V1, V2
2. MINIO 사용 이유
- 문제 발생 및 해결
대용량 이미지 테스트 시 AWS S3의 경우 비용 문제가 발생합니다.
이를 해결하기 위해 AWS S3와 API 호환성이 높은 오픈소스 소프트웨어인 MINIO Storage를 사용하기로 하였습니다.
3. WebP 사용 이유
- WebP란?
구글에서 개발한 이미지 포맷으로 손실 압축과 무손실 압축을 모두 지원하며, 압축을 통해 웹사이트의 로딩 속도를 개선하고, 저장비용 절감에 도움을 줍니다.
- 문제 발생
WebP를 사용하지 않고 이미지를 저장할 경우, 스토리지 서버의 저장 공간을 많이 사용하게 되며, 파일 크기가 클 경우 네트워크 전송 시간이 증가하며 이는 결국 사용자의 경험을 저하시킬 수 있습니다.
- 개선 사항
- 손실 압축 사용하여 png파일을 webp파일로 변환하고 크기를 비교해 보자.
- png로 저장 시 : 162.7 KIB / webP로 저장 시 : 11.7 KIB
[ 앞으로의 개발 목표 ]
- 이미지 내부의 메타 데이터 수정하기
이미지 내부의 사용자의 민감한 정보인 GPS, 작성자, 작성날짜 등.. 민감한 메타 데이터들을 삭제하도록 하자.
- 사용자로부터 이미지 크기를 받아 리사이즈하기
현재 개발 단계는 이미지의 가로와 세로의 크기를 임의로 300x300으로 처리하고 있다. 이를 사용자로부터 크기를 전달받아 리사이즈 해주도록 하자.
- 여러 장의 사진이 Kafka를 통해 넘어올 경우 이미지 처리
한 장의 이미지가 Kafka를 통하여 넘어오는 경우가 아닌, 여러 장이 한 번에 넘어올 경우 이미지를 리사이즈하고 업로드하는 코드를 구현하자.
앞으로 프로젝트 기간이 2주 정도 남았는데, 추가할 기능을 조금 더 생각해 보고 기능의 우선순위를 정하여 중요한 기능부터 하나씩 개발하도록 하자. 이에 따라서 개발 목표가 조금은 수정될 수 있을 거 같다.
읽어주셔서 감사합니다 🙂↕️
'해피 코딩 > Today I Learned' 카테고리의 다른 글
[TIL] 20241113 (9) | 2024.11.14 |
---|---|
Chapter 5. 팀 프로젝트 4주차 WIL (4) | 2024.10.21 |
Chapter 5. 팀 프로젝트 2주차 WIL (2) | 2024.10.06 |
Chapter 5. 팀 프로젝트 1주차 WIL (6) | 2024.09.28 |
[TIL 23] DDD 이해하기 (0) | 2024.09.09 |