TIL, WIL

TIL 24.06.11 - 노드 숙련(완), 개인과제, 해설 정리, (의존성 주입의 이점)

momomoo 2024. 6. 12. 09:38

노드 심화의 유닛테스트  > 의존성 주입으로 바꾼 코드는 테스트 상황에서만 쓰이는지 궁금해서 찾아보았다. //

 

 

 

의존성 주입(Dependency Injection, DI)을 사용하여 코드를 작성한 후에는 배포할 때도 그대로 유지하는 것이 좋습니다. 의존성 주입을 통한 코드는 테스트와 유지보수에 있어서 많은 장점을 제공하며, 배포 환경에서도 이러한 장점을 그대로 누릴 수 있습니다. 배포할 때 다시 의존성 주입을 제거하거나 다른 방식으로 코드를 변경하는 것은 권장되지 않습니다. 이유는 다음과 같습니다:

### 장점 및 이유

1. **일관성 유지**:
   - 개발, 테스트, 배포 환경에서 동일한 코드 베이스를 사용함으로써 일관성을 유지할 수 있습니다.
   - 개발 환경과 배포 환경에서 코드가 다르면, 예상치 못한 버그나 문제가 발생할 가능성이 높아집니다.

2. **유지보수성**:
   - 의존성 주입을 사용하면 코드가 더 모듈화되고 유지보수하기 쉬워집니다.
   - 특정 컴포넌트나 모듈을 쉽게 교체하거나 업데이트할 수 있습니다.

3. **테스트 용이성**:
   - 의존성 주입을 사용하면 모의 객체(mock object)를 사용하여 테스트를 수행하기 쉬워집니다.
   - 배포 환경에서도 동일한 테스트 코드를 사용할 수 있어 신뢰성이 높아집니다.

4. **확장성**:
   - 의존성 주입을 사용하면 애플리케이션이 확장 가능하게 설계됩니다.
   - 새로운 의존성을 추가하거나 기존 의존성을 교체하는 작업이 더 쉬워집니다.

### 예시

배포 시에도 의존성 주입을 그대로 유지하는 예시 코드입니다:

```typescript
// src/repositories/userRepository.ts
import { PrismaClient } from '@prisma/client';

class UserRepository {
  private prisma: PrismaClient;

  constructor(prismaClient: PrismaClient) {
    this.prisma = prismaClient;
  }

  async findById(id: number) {
    return await this.prisma.user.findUnique({ where: { id } });
  }
}

export default UserRepository;
```

```typescript
// src/services/userService.ts
import UserRepository from '../repositories/userRepository';
import { PrismaClient } from '@prisma/client';

class UserService {
  private userRepository: UserRepository;

  constructor(userRepository: UserRepository) {
    this.userRepository = userRepository;
  }

  async getUserById(id: number) {
    return await this.userRepository.findById(id);
  }
}

const prisma = new PrismaClient();
const userRepository = new UserRepository(prisma);
export default new UserService(userRepository);
```



이 코드는 개발, 테스트, 배포 환경에서 동일하게 사용될 수 있으며, 각각의 환경에 맞춰 의존성을 주입받아 동작하게 됩니다.

### 결론

의존성 주입은 코드의 일관성, 유지보수성, 테스트 용이성, 확장성을 높이는 중요한 패턴입니다. 배포 시에도 의존성 주입을 유지하는 것이 좋으며, 이는 코드의 품질과 안정성을 보장합니다. 배포 환경에서 의존성 주입을 제거하거나 다른 방식으로 변경하는 것은 권장되지 않으며, 동일한 코드 베이스를 유지하는 것이 바람직합니다.

 

 

 

 

 ( 오늘 한 일 )

1. 노드 심화 완강

2. 프로그래머스 0레벨 새 문제 풀기 풀었던거 이해했나 재확인 + 코드 바꿔서 풀어보기 + 다른 사람 풀이 보기

3. 노드 심화 개인 과제