develop
브랜치에서 git pull origin develop
을 하려는데 에러가 발생했다. 에러 메세지를 읽어보니 내 브랜치에서 아직 커밋되지 않은 변경 사항이 존재하기 때문에 발생한 것이었다. 하지만 현재 내 로컬 브랜치에서의 작업이 아직 끝나지 않아서 commit 하고 싶지 않았다.
따라서 변경 사항을 유지하면서 git pull
하는 방법으로 진행했다.
git stash push -m "임시 저장"
원격 저장소에서 최신 코드 가져오기
로컬 develop
브랜치에 원격 develop
코드를 가져올 것이기 때문에 develop
브랜치로 이동 후 진행했다.
git switch develop
git pull origin develop
git checkout {나의브랜치}
git stash pop # 임시 저장한 변경 사항 복원
✅ stash
를 사용해 커밋하지 않고 변경 사항을 저장했다가 다시 불러올 수 있다.
실행시키니 다음과 같은 NullPointerException
에러가 발생했다.
java.lang.NullPointerException: Cannot invoke
"com.example.newsfeed.relationship.repository.RelationshipRepository.save(Object)"
because "this.relationshipRepository" is null
원인은 아주 간단했다. final을 붙이지 않고 Repository를 주입하는 과정에서 런타임 오류가 발생한 것이다.
@Service
@RequiredArgsConstructor
public class RelationshipService {
private RelationshipRepository relationshipRepository; // final 없음
}
@Service
@RequiredArgsConstructor
public class RelationshipService {
private final RelationshipRepository relationshipRepository; // 오류 해결
}
✅ 위처럼 final
을 사용하면 반드시 생성자를 통해 relationshipRepository
를 초기화해야 한다.
✅ 스프링은 Bean
을 생성할 때 기본 생성자 또는 생성자 주입 방식을 사용하는데, 생성자 없이 relationshipRepository
를 사용하면 주입되기 전에 메서드가 호출되면서 NullPointerException
이 발생할 수 있다.
✅ final
을 사용하지 않으면 다른 메서드에서 해당 필드를 변경할 수 있는 위험이 있다.
오늘은 개발을 진행한 시간보다 git 관련 문제를 해결하기 위해 쓴 시간이 더 많은 것 같다. 기본적인 사용법은 알고있어도 협업하며 일어나는 다양한 상황에서 빠르게 대처하는 능력이 필요할 것 같다. 또