To your route, 투룻

image.png

개발부터 운영까지 폭넓은 기술 스택을 경험했습니다. Github Actions를 활용한 CI/CD 파이프라인 구축, 서버와 DB 다중화 구현, 모니터링 대시보드 개발, JMeter를 통한 성능 테스트 수행, 쿼리 최적화 등 다양한 기술적 도전과 트러블 슈팅을 수행했습니다.

협업 측면에서는 애자일을 실천했습니다. 데일리 스크럼으로 팀 진행 상황을 공유하고, 명확한 팀 컨벤션과 그라운드 룰을 수립하여 효율적인 협업 환경을 조성했습니다. 페어 프로그래밍과 코드 리뷰를 통해 코드 품질을 높이고, 테크 로그 작성으로 팀 내 지식 공유를 활성화했습니다. 스프린트 단위의 개발-피드백 사이클을 통해 지속적인 제품 개선을 이뤄냈습니다.

서비스 링크

https://www.touroot.kr/

깃허브 레포지토리

https://github.com/woowacourse-teams/2024-touroot

팀 구성

프로젝트 진행 내용

1. Query Optimization

문제 상황

해결

  1. GROUP BY와 JOIN의 순서를 바꿈

    SELECT t.*
    FROM travelogue t JOIN (
    		SELECT tt.travelogue_id
        FROM travelogue_tag tt
        WHERE tt.tag_id IN (?, ?)
        GROUP BY tt.travelogue_id
        HAVING COUNT(tt.id) = ?
    ) st ON t.id = st.travelogue_id
    ORDER BY t.like_count DESC
    LIMIT ? OFFSET ?;
    
  2. 서브 쿼리에서 커버링 인덱스 적용

    SELECT tt.travelogue_id
    FROM travelogue_tag tt
    WHERE tt.tag_id IN (?, ?)
    GROUP BY tt.travelogue_id
    HAVING COUNT(tt.id) = ?)
    
  3. GROUP BY를 JOIN으로 변환

    SELECT tt1.travelogue_id
    FROM travelogue_tag tt1 JOIN travelogue_tag tt2
    				ON tt1.travelogue_id = tt2.travelogue_id
    WHERE tt1.tag_id = ? AND tt2.tag_id = ?;
    
SELECT t.* 
FROM travelogue t 
JOIN travelogue_tag tt1 
		ON t.id = tt1.travelogue_id AND tt1.tag_id = ?
JOIN travelogue_tag tt2 
		ON t.id = tt2.travelogue_id AND tt2.tag_id = ?
ORDER BY t.like_count DESC
LIMIT ? OFFSET ?;

관련 링크

2. 동시성 문제 - 여행기 장소 중복 저장 문제 해결

문제 상황