seaking110 님의 블로그
뉴스 피드 팀 프로젝트를 마치며 본문
약 1주일간의 뉴스피드 프로젝트를 마치며...
뉴스피드 프로젝트
- 소개
- SNS를 모방한 뉴스 피드 프로젝트
https://github.com/PK7NewsFeed/NewsFeed
GitHub - PK7NewsFeed/NewsFeed: [내배캠] 뉴스피드 프로젝트
[내배캠] 뉴스피드 프로젝트. Contribute to PK7NewsFeed/NewsFeed development by creating an account on GitHub.
github.com
- 기능
- 사용자, 게시글(피드), 댓글, 친구, 좋아요 등 각 기능별 CRUD 기능과 JWT를 활용한 인증/인가
- 개발 일정
- 2025.02.14 ~ 2025.02.20
- 02.14 : SA 작성
- 02.15 ~ 02.17 : 기능 개발
- 02.18 : 중간 평가, 추가 기능 추가
- 02.19 : 최종 평가
- 02.20 : 최종 발표
- 수행한 역할
- Users API 개발 및 NewsFeed API 개발
- 전체적인 코드 리팩토링 및 코드 연결 담당
- API docs 생성
- 기술 스택
- MySQL
- Spring boot JPA 3.4.2
- Git
- GitHub
- ERD
Git Merge 및 Pull 관련 트러블 슈팅
문제 상황
프로젝트 진행 중 여러 명이 협업하는 과정에서 Git에서 예상치 못한 문제가 발생했었습니다.
- Merge 과정에서 충돌 해결 미흡
- 팀원이 변경된 코드를 Pull 받은 후 Merge를 수행하고 Push를 했으나, 충돌(Conflict) 해결이 제대로 되지 않아 기존 수정된 코드가 원래대로 돌아가는 문제가 발생함.
- Merge를 할 때 수정된 코드가 사라지거나, 원치 않는 코드가 다시 포함되는 상황이 발생함.
- Pull한 코드가 팀원마다 다름
- 동일한 브랜치에서 같은 시점에 Pull을 받았음에도 불구하고, 팀원마다 코드가 다르게 나타나는 문제가 있었음.
- Git 서버의 문제인지, 아니면 특정 환경에서 Pull 과정에서 문제가 생긴 것인지 확실하지 않았음.
원인 분석
- Merge 충돌 해결 미흡
- 충돌이 발생했을 때 자동으로 병합된 코드가 올바른지 충분히 확인하지 않고 그대로 Push하는 경우가 있었음.
- 일부 팀원이 수동으로 충돌을 해결할 때, 의도한 변경 사항을 놓치고 이전 코드로 덮어씌우는 실수를 함.
- Pull한 코드가 다름
- 원격 브랜치와 로컬 브랜치가 싱크가 맞지 않아서 Pull을 할 때 예상과 다른 코드가 내려옴.
- 특정 팀원이 변경 사항을 Push하기 전에 다른 팀원이 Pull을 하여 예상과 다른 코드가 내려왔을 가능성.
- Git 서버의 일시적인 동기화 문제 혹은 캐시 문제 가능성.
해결 방법 및 예방책
Merge 시 충돌 해결 철저히 하기
- 충돌이 발생하면 git status를 통해 어떤 파일에서 충돌이 발생했는지 먼저 확인.
- 충돌 해결 후 반드시 코드 리뷰 및 테스트를 거친 후 Push.
Pull한 코드가 다를 경우
- git fetch 후 git status를 확인하여 로컬 브랜치와 원격 브랜치 상태를 비교.
- 강제 Pull을 피하고, 필요 시 git reset --hard origin/<branch>를 사용하여 동기화.
결론적으로 Git을 활용한 협업에서는 Merge와 Pull 과정에서 발생하는 충돌 및 동기화 문제를
주의 깊게 관리하자
- 느낀점
- 요구사항 분석을 더욱 더 열심히 해야함
- 코드를 작성 후 끝난 줄 알았는데 추가적인 조건을 발견하여 코드를 수정
- 의견이 나온걸 반드시 정리를 해두자!
- User를 soft delete로 진행하자고 합의를 보고 까먹어서 뒤늦게 바꿈!
- 다음부터는 반드시 정리를 하여 두번 일하지 않도록 하기
- 코드 수정 시 한번 씩 더 확인하고 반드시 돌아가는 것을 확인하고 push 하자
- 오타를 수정했으나 한 곳에서만 수정하여 코드가 깨지는 상황 발생!
- 반드시 코드를 돌려보고 기능이 수행되는지 여부를 확인하자
- 또한 코드를 고치고 테스트를 자주 진행하자
- 생성자나 Dto에 Builder 패턴을 사용하자
- Builder 패턴을 사용하여 가독성을 향상 시키고 실수를 방지하자!
- Exception 핸들러를 사용하여 예외를 관리하자!
- 요구사항 분석을 더욱 더 열심히 해야함
@RestControllerAdvice
public class ExControllerAdvice {
// 이메일 중복 처리 핸들러
@ExceptionHandler(DuplicateEmailException.class)
public ResponseEntity<ErrorMessage> duplicateEmailExHandle(DuplicateEmailException e) {
return new ResponseEntity<>(new ErrorMessage(ErrorCode.DUPLICATION_EMAIL, e.getStatusCode()), e.getStatusCode());
// 해당 유저를 찾지 못했을 때 처리 핸들러
@ExceptionHandler(NotFoundUserException.class)
public ResponseEntity<ErrorMessage> notFoundUserExHandle(NotFoundUserException e) {
return new ResponseEntity<>(new ErrorMessage(ErrorCode.NOT_FOUND_USER, e.getStatusCode()), e.getStatusCode());
}
}
}
- 위에처럼 핸들러를 만들어서 예외를 처리하자!! 이번 프로젝트를 진행하며 얻은 최고의 이점!
- 하지만 예외 클래스를 많이 만들게 됐는데 하나로 만들 수 있는 방법을 찾아보자!
- 시간을 지정할 때는 LocalDateTime 날짜를 지정할 때는 LocalDate를 지정하자!
- TimeStamp로 진행 중이었는데 위에 2가지가 최신 Java에서 날짜와 시간을 지정하는 문법이라는 것을 배움
- 문자열 하드 코딩을 하지 말고 ENUM을 사용하여 관리하자
- 조에 진도가 조금 느린 조원이 있었는데 옆에서 도와가며 완성해낸 프로젝트에 매우 뿌듯함을 느꼈습니다!
- 또한 좋은 팀원들을 만나 재밌고 즐거운 팀프로젝트였던 것 같습니다!
'Today I Learned' 카테고리의 다른 글
N+1 문제 + 동시성 제어 (0) | 2025.02.24 |
---|---|
HttpMessageConverter란 무엇인가 (0) | 2025.02.21 |
[Git] Conventional Commits에 대해 (0) | 2025.02.18 |
테이블 설계와 정규화 (0) | 2025.02.17 |
JPA를 이용한 일정관리 프로그램 트러블 슈팅 (0) | 2025.02.13 |