Skip to content

#8-중복 데이터 방어로직 추가 #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 3, 2025

Conversation

Sunmon
Copy link
Collaborator

@Sunmon Sunmon commented Apr 27, 2025

[요약]
중복 데이터 방어로직 추가 및 테스트코드 작성

[목적]

  • 중복된 데이터 삽입으로 인한 오류 방지

[목표]

  • 중복 로그인 방지 기능 추가
  • 중복 회원가입 방지 기능 추가
  • 가입하지 않은 유저로 로그인 세션 생성 방지 기능 추가
  • 팔로우 중복 추가 방지 기능 추가
  • 각 목표에 대한 테스트코드 작성

[목표로 하지 않는 것]

  • 로그인 기능 보완 (id, pw로 로그인하기)
  • 오류 상세 정의 및 예외처리

[고려사항]

  1. 오류를 반환하는 위치
  • 오류를 반환하는 위치가 3곳이 존재함 (서비스, 레포지토리, DB)
    • DB단에서 오류를 반환함 -> OK
    • 서비스 OR 레포지토리에서 오류를 반환함 -> 둘 중 서비스 단에서 반환하도록 선택함
    • 레포지토리는 단순히 DB에 접근해서 데이터를 나르는 역할만 하는 것이기때문에 서비스가 오류 핸들링하는 위치로 적합하다고 판단했기 때문
  1. 서비스 방어 로직 필요 유무

예: 회원가입시 이미 존재하는 회원은 에러를 반환함

function join() {
  // 기존에 이미 DB에 존재하는지 체크 -> 존재한다면 에러 반환
  if (UserDB.get(id)) {
    throw new Error('이미 존재하는 유저')
  }
  // 새로운 회원을 DB에 추가. -> pk, unique 조건이 존재하므로 중복되어 들어간다면 에러 반환
  UserDB.create(id);
}

DB 에서 새 회원을 추가할때 에러를 반환할 것인데, 굳이 if문을 추가하여 기존 회원이 존재하는지 체크할 필요가 있는지 의문입니다.
DB에 한 번 더 접근하기때문에 오히려 효율성이 떨어지는 것이 아닌가요?


this resolves #8

Sunmon added 10 commits April 27, 2025 17:55
- 이미 로그인한 유저라면 (세션이 존재한다면) 기존 세션을 반환

Related #8
- 마지막에 export default로 묶어서 내보내기때문에 삭제함

Related #8
- 중복으로 follow 추가시 DB단에서 오류 반환
- 중복으로 follow 추가시 서비스단에서 오류 반환

Related #8
- 테스트간 연관성 삭제를 위해 데이터 초기화

Related #8
- 이미 가입한 회원이면 에러를 반환

Related #8
- 테스트 통과하도록 userService에 회원가입 해둠

Related #8
- user 에러와 형식 맞춤

Related #8
@Sunmon Sunmon requested a review from f-lab-jayce April 27, 2025 10:16
@Sunmon Sunmon self-assigned this Apr 27, 2025
@Sunmon Sunmon linked an issue Apr 27, 2025 that may be closed by this pull request
@Sunmon Sunmon added the review label Apr 27, 2025
Comment on lines +5 to +9
// Review - 이미 DB에서 중복으로 추가시 오류를 반환하는데, 서비스 코드에서 방어 로직이 필요할지 의문입니다. 오히려 DB에 중복으로 접근하니 효율이 떨어지지 않을까요?
const followings = await getFollowings(userId);
if (followings.find((follow) => follow.targetId === targetId)) {
throw new Error('FOLLOW_ALREADY_EXISTS');
}

Choose a reason for hiding this comment

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

제 개인적인 케이스로는 DB의 에러를 핸들링하는 방향으로 코드를 짜는 편입니다.

@Sunmon Sunmon merged commit 7d58320 into devlop Jun 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

중복 데이터 방어로직 추가
2 participants