Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

뉴스 피드 팀 프로젝트를 마치며 본문

Today I Learned

뉴스 피드 팀 프로젝트를 마치며

seaking110 2025. 2. 20. 21:19

약 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에서 예상치 못한 문제가 발생했었습니다. 

  1. Merge 과정에서 충돌 해결 미흡
    • 팀원이 변경된 코드를 Pull 받은 후 Merge를 수행하고 Push를 했으나, 충돌(Conflict) 해결이 제대로 되지 않아 기존 수정된 코드가 원래대로 돌아가는 문제가 발생함.
    • Merge를 할 때 수정된 코드가 사라지거나, 원치 않는 코드가 다시 포함되는 상황이 발생함.
  2. Pull한 코드가 팀원마다 다름
    • 동일한 브랜치에서 같은 시점에 Pull을 받았음에도 불구하고, 팀원마다 코드가 다르게 나타나는 문제가 있었음.
    • Git 서버의 문제인지, 아니면 특정 환경에서 Pull 과정에서 문제가 생긴 것인지 확실하지 않았음.

 

원인 분석

  1. Merge 충돌 해결 미흡
    • 충돌이 발생했을 때 자동으로 병합된 코드가 올바른지 충분히 확인하지 않고 그대로 Push하는 경우가 있었음.
    • 일부 팀원이 수동으로 충돌을 해결할 때, 의도한 변경 사항을 놓치고 이전 코드로 덮어씌우는 실수를 함.
  2. Pull한 코드가 다름
    • 원격 브랜치와 로컬 브랜치가 싱크가 맞지 않아서 Pull을 할 때 예상과 다른 코드가 내려옴.
    • 특정 팀원이 변경 사항을 Push하기 전에 다른 팀원이 Pull을 하여 예상과 다른 코드가 내려왔을 가능성.
    • Git 서버의 일시적인 동기화 문제 혹은 캐시 문제 가능성.

 

해결 방법 및 예방책

Merge 시 충돌 해결 철저히 하기

  • 충돌이 발생하면 git status를 통해 어떤 파일에서 충돌이 발생했는지 먼저 확인.
  • 충돌 해결 후 반드시 코드 리뷰 및 테스트를 거친 후 Push.

Pull한 코드가 다를 경우

  • git fetchgit 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을 사용하여 관리하자
  • 조에 진도가 조금 느린 조원이 있었는데 옆에서 도와가며 완성해낸 프로젝트에 매우 뿌듯함을 느꼈습니다!
  • 또한 좋은 팀원들을 만나 재밌고 즐거운 팀프로젝트였던 것 같습니다!