Today's Codekata
# Movie Rating
SELECT name AS results
FROM Users
WHERE user_id = (
SELECT user_id
FROM (
SELECT user_id, COUNT(*) AS cnt
FROM MovieRating
GROUP BY user_id
) AS rating_counts
JOIN Users USING(user_id)
ORDER BY cnt DESC, name ASC
LIMIT 1
)
UNION ALL
SELECT title AS results
FROM Movies
WHERE movie_id = (
SELECT movie_id
FROM (
SELECT movie_id, AVG(rating) AS avg_rating
FROM MovieRating
WHERE created_at BETWEEN '2020-02-01' AND '2020-02-29'
GROUP BY movie_id
) AS feb_avg
JOIN Movies USING(movie_id)
ORDER BY avg_rating DESC, title ASC
LIMIT 1
);
# Restaurant Growth
SELECT cur.visited_on,
SUM(prev.amount) AS amount,
ROUND(SUM(prev.amount) / 7, 2) AS average_amount
FROM (
SELECT visited_on, SUM(amount) AS amount
FROM Customer
GROUP BY visited_on
) AS cur
JOIN (
SELECT visited_on, SUM(amount) AS amount
FROM Customer
GROUP BY visited_on
) AS prev
ON prev.visited_on BETWEEN DATE_SUB(cur.visited_on, INTERVAL 6 DAY) AND cur.visited_on
GROUP BY cur.visited_on
HAVING COUNT(prev.visited_on) = 7
ORDER BY cur.visited_on;
# Friend Requests II: Who Has the Most Friends
SELECT id, COUNT(*) AS num
FROM (
SELECT requester_id AS id FROM RequestAccepted
UNION ALL
SELECT accepter_id AS id FROM RequestAccepted
) AS all_friends
GROUP BY id
ORDER BY num DESC
LIMIT 1;
Today I Learned
#협업을 위한 Git 전략 정리
왜 Git 전략이 중요한가
팀 프로젝트에서 가장 흔한 갈등 중 하나는 코드 충돌이다.
기술보다 중요한 건 소통의 구조이고, Git은 그 구조를 만드는 핵심 도구이다.
코드 품질 유지, 히스토리 추적 용이, 불필요한 충돌 최소화, 팀원 간 역할 명확화, 브랜치 전략 등이 그 이유이다.
브랜치 구조 예시
`main` : 배포용 안정 브랜치
`dev` : 통합 개발 브랜치
`feature/*` : 기능 개발 브랜치
`fix/*` : 버그 수정 브랜치
`hotfix/*` : 긴급 수정 브랜치
브랜치 이름은 `feature/login-api`, `fix/modal-close-bug`처럼 기능 + 설명 형식으로 작성한다.
`dev` 브랜치에만 PR을 보내고, `main`은 직접 건드리지 않는다.
긴급 수정은 `hotfix` 브랜치에서 바로 `main`으로 머지 후 `dev`에 병합한다.
Pull Request 템플릿
PR은 단순한 코드 제출이 아닌, 소통의 시작점이기에 템플릿을 활용해 작성했다.
## 변경 사항
- 무엇을 수정했는지 간단히 설명
## 테스트 방법
- 어떤 방식으로 테스트했는지
## 관련 이슈
- 연결된 이슈 번호 (#12)
## 기타 참고 사항
- 리뷰어가 알아야 할 추가 정보
PR 제목은 `[Feat] 로그인 API 구현`처럼 태그 + 설명 형식으로 작성한다.
리뷰어 지정은 필수이며, 최소 1명 이상 지정한다.
CI 통과 후 머지 가능하도록 설정한다.
커밋 컨벤션
`[Feat]`: 기능 추가
`[Fix]`: 버그 수정
`[Refactor]`: 리팩토링
`[Docs]`: 문서 수정
`[Test]`: 테스트 코드 추가
`[Chore]`: 기타 작업
커밋 메시지는 한 줄 요약 + 필요 시 본문 추가로 작성한다.
[Fix] 로그인 실패 시 에러 메시지 출력
- 서버 응답 코드에 따라 에러 메시지 분기 처리
마치며
Git은 단순한 버전 관리 도구가 아니라 소통의 언어라는 생각이 든다. 프로젝트 시작 전, 브랜치 전략과 커밋 컨벤션, PR 템플릿 등 협업의 기반이 되는 Git 전략을 먼저 정리하게 된다. 이런 준비 덕분에 앞으로 프로젝트를 진행하면서 코드 리뷰가 수월해지고, 브랜치 충돌을 줄이며, 역할 분담이 명확해져 일정 관리가 쉬워지고, 작업 흐름이 예측 가능해져 팀원 간 신뢰도 높아질 것이라 생각된다. 물론 전략은 프로젝트가 진행되며 바뀔 수도 있지만, 그 변화조차도 기록되고 공유되는 구조 안에서 일어난다는 점에서 이런 과정은 협업의 질을 높이는 중요한 시작점이라 느꼈다.