Skip to content

Feat: Git 관련 기능 구현#6

Merged
ggamnunq merged 4 commits into
developfrom
feat/git
Apr 12, 2026
Merged

Feat: Git 관련 기능 구현#6
ggamnunq merged 4 commits into
developfrom
feat/git

Conversation

@Yujin1219
Copy link
Copy Markdown
Member

@Yujin1219 Yujin1219 commented Apr 6, 2026

🎯 작업 내용

주요 변경사항

  • GitHub API 연동을 위한 org.kohsuke:github-api 의존성 추가
  • GitHub Access Token 등록
  • 팀 단위 레포 등록/조회
  • 레포 동기화 (커밋 불러오기)
  • 커밋 목록/상세 조회 API

상세 내용

GithubUtil : GitHub API 연동 유틸리티

  • GitHub API 인스턴스 생성
  • 레포 URL 추출 및 유효성 검증
  • 레포 존재 여부 확인

GitHub 토큰 관리

  • POST /api/github/token
  • Member 엔티티에 githubAccessToken 필드 추가

레포지토리 목록 조회

  • GET /api/teams/{teamId}/repositories
  • 팀에 연동된 모든 GitHub 레포지토리 목록 조회
  • 정렬 기준: 최근 동기화 시간 기준 (최신순)
    • 동기화된 레포 > 미동기화 레포
  • 레포 정보: ID, 이름, 마지막 동기화 시간

레포지토리 추가

  • POST /api/teams/{teamId}/repositories
  • 등록 시 GitHub URL 형식 검증 및 실제 존재 여부 확인
  • 등록 시에는 레포의 이름, URL만 저장
  • 커밋은 별도의 동기화 API 호출 시 수집

레포지토리 동기화

  • POST /api/repositories/{repositoryId}/sync
  • 등록된 레포의 최신 커밋을 DB에 저장
  • 마지막 동기화 시점 이후 커밋만 수집 (중복 방지)
  • Merge pull request 커밋 자동 제외
  • 저장 정보: hash, message, author(이름/이메일/프로필이미지), datetime, 추가/삭제 라인 수

커밋 목록 (커서 기반 무한스크롤)

  • GET /api/repositories/{repositoryId}/commits
  • 커서 기반 무한스크롤 방식
  • 페이지 크기: 10개로 고정
  • 첫 요청: cursor 파라미터 생략
  • 이후 요청: 응답의 nextCursorId 사용

커밋 상세 조회

  • GET /api/repositories/{repositoryId}/commits/{commitHash}
  • 커밋 전체 정보 및 변경 파일 목록 조회
  • DB 조회: 기본 메타정보 (hash, message, author, datetime 등)
    • authorName, authorEmail, authorProfileImage은 Github에서 가져오는 값
  • GitHub API 실시간 조회: 변경 파일 목록 및 파일별 diff

GitHub access token 암호화 및 API 401 에러 처리

  • AES 256비트 양방향 암호화 (DB 저장 시 자동 암호화/복호화)
  • GitHub API 호출 시 401 Unauthorized 감지 → token 자동 무효화
  • 토큰 등록 전 유효성 검증 추가

다음엔 기능별로 커밋 나눠서 작성하겠습니다아... 😞

✅ 체크리스트

  • 코드 빌드가 정상적으로 완료되었나요?
  • 코드 리뷰 요청 전 self-review를 진행했나요?

📋 API 명세서

image

💬 리뷰 요청사항 (선택)

  • github access token을 db에 암호화해서 저장하지 않고 있는데 필요할까요...??
  • 커밋 상세 조회 시 변경 파일별 diff 정보를 db에 저장하지 않고, API 호출 시에 Github에서 실시간으로 조회하도록 구현했습니다. 해당 방식이 적절한지, 혹은 DB에 저장하는 방식이 더 나을지 의견 주시면 감사하겠습니당

📚 참고 자료 (선택)

- Github access token 등록 기능 구현
- 레포지토리 추가 기능 구현
- 레포지토리 목록 조회 기능 구현
- 레포지토리 동기화 기능 구현(Github api 연동)
- 커밋 목록 조회 기능 구현(커서 기반 무한스크롤)
- 커밋 상세 조회 기능 구현
@Yujin1219 Yujin1219 requested a review from ggamnunq April 6, 2026 16:06
@Yujin1219 Yujin1219 self-assigned this Apr 6, 2026
@Yujin1219 Yujin1219 added the enhancement New feature or request label Apr 6, 2026
@ggamnunq
Copy link
Copy Markdown
Contributor

ggamnunq commented Apr 7, 2026

  1. github accesstoken이면 레포지토리에 접근하기 위한 토큰 말씀하시는건가요?? 그거라면 암호화하는게 맞을거같아요. 그리고 토큰별로 유효기간도 있으니까 그 부분 관리하는 것도 있으면 좋을 듯 합니다. Github RestAPI 호출 결과로 토큰 만료를 뱉으면 그거를 처리해도 괜찮을거같아요
  2. 지금처럼 DB에 저장하지 않고 계속 호출하는게 나을거같아요

// @OneToMany(mappedBy = "commit", cascade = CascadeType.ALL, orphanRemoval = true)
// private final List<CommitConnection> commitConnections = new ArrayList<>();

public static Commit create(String hash, String message, String authorName, String authorEmail,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

create 할 때 모든 필드 정보를 파라미터로 넣는거보다
dto같은거 하나로 써서
commit.hash = dto.hash();
commit.message = dto.message();
이런식으로 하는거 어떨까요?? 이렇게 하면

@Yujin1219
Copy link
Copy Markdown
Member Author

넵! 리뷰 해당 내용 수정하고 다시 올리겠습니다 !

@ggamnunq
Copy link
Copy Markdown
Contributor

고생하셨어요!!

@ggamnunq ggamnunq merged commit 353ec88 into develop Apr 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants