코드 냄새 301: 데이터베이스 파라미터 전달 문제 해결 방법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

코드 냄새 301 - 데이터베이스를 파라미터로 전달하는 문제

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • 소프트웨어 개발자 및 아키텍트
  • 난이도: 중급 이상 (코드 품질 개선 및 설계 원칙 이해 필요)

핵심 요약

  • 데이터베이스를 파라미터로 전달하는 것은 코드 냄새로, 단일 책임 원칙을 위반하며 테스트 및 유지보수에 어려움을 유발
  • 의존성 주입(Dependency Injection) 또는 환경 변수를 사용해 데이터베이스 연결을 분리하는 것이 권장됨
  • 테스트 코드와 실제 구현의 분리를 위해 팩토리 패턴 또는 컨피그 파일을 활용해야 함

섹션별 세부 요약

1. 코드 냄새 정의

  • 데이터베이스를 파라미터로 전달하는 행위는 코드의 유연성과 확장성을 저해
  • 예시: function getUser(db) { ... }에서 db가 실제 데이터베이스 연결 대상이 될 경우
  • 문제점: 단위 테스트 시 모의 데이터베이스를 생성해야 하며, 실무에서 데이터베이스 연결이 복잡해짐

2. 설계 원칙 위반

  • 단일 책임 원칙(SRP) 위반: 함수가 데이터베이스 연결을 처리하는 역할과 비즈니스 로직을 동시에 수행
  • 의존성 역전 원칙(DIP) 위반: 구체적인 데이터베이스 구현에 의존하게 되어 추상화 불가
  • 결과: 코드 재사용성 감소 및 결합도 증가

3. 해결 방안

  • 의존성 주입(DI): 데이터베이스 연결 객체를 외부에서 주입해 함수의 내부 구현과 분리

```javascript

function getUser(repository) { repository.findUser(...) }

```

  • 환경 변수 활용: .env 파일 또는 설정 파일에서 데이터베이스 연결 정보 관리
  • 팩토리 패턴: 데이터베이스 연결을 생성하는 책임을 별도의 팩토리 클래스로 분리

4. 테스트 및 유지보수 고려사항

  • 모의 객체(Mock Object) 사용: 테스트 시 실제 데이터베이스 대신 가상 객체로 대체
  • 구성 파일 분리: 프로덕션/테스트 환경별 설정을 config/production.js, config/test.js 등으로 구분
  • DI 컨테이너 사용: Spring, Dagger 등 의존성 주입 프레임워크 활용하여 관리 용이

결론

  • 데이터베이스 연결은 파라미터로 전달하지 말고, 의존성 주입 또는 환경 설정 파일을 통해 분리해야 한다.
  • 팩토리 패턴DI 컨테이너를 활용해 코드의 유연성과 테스트 가능성을 극대화하고, 단일 책임 원칙을 준수하는 것이 실무에서 권장됨.