ELI5: 종속성 주입
이게 뭐야?
종속성부터 시작하겠습니다. 종속성은 코드 조각이 제대로 작동하기 위해 의존하는 것입니다. 종속성 주입은 단순히 내부에 기능을 구축하는 것이 아니라 외부에서 해당 기능을 전달(주입)하는 것입니다. 책임의 분리입니다.
예시
사용자 테이블이 있는 데이터베이스가 있고 서버에서 ID로 해당 사용자 중 한 명을 GET하려고 한다고 가정합니다. 종속성 주입 전에 해당 코드는 다음과 같을 수 있습니다.
// imports database functionality
import dbConnection from 'dbConnection'
// router code
router.get('/:id', (request) => {
// connects to our database
const mockDatabaseConnection = new dbConnection({
user: 'mockUsername',
host: 'mockHost',
database: 'mockDatabase',
password: 'mockPassword',
port: 'mockPort'
})
// grabs the id from our request
const { id } = request.params
// builds a query object
const query = `SELECT * FROM users WHERE id = ${id}`
// queries our database
mockDatabaseConnection.query(query)
.then((response) => {
// handles response
})
})
여기에서 꽤 많은 일이 벌어지는 것을 볼 수 있습니다. 그리고 이 아키텍처를 사용하여 다른 테이블에 대한 또 다른 경로를 만들려면 이 코드를 많이 복제해야 합니다. 그렇다면 이 코드를 분할하여 더 모듈화할 수 있는 방법이 있을까요? 코드를 보면 우리가 만들 수 있는 몇 가지 다른 그룹이 있습니다.
모든 요청에서 공유할 수 있도록 데이터베이스 코드를 다른 파일로 추출해 보겠습니다.
DATABASE FILE
// imports database functionality
import dbConnection from 'dbConnection'
// connects to our database
const mockDatabaseConnection = new dbConnection({
user: 'mockUsername',
host: 'mockHost',
database: 'mockDatabase',
password: 'mockPassword',
port: 'mockPort'
})
// a simple query function that we can export
const queryFunction = (query) => {
return mockDatabaseConnection.query()
}
export default queryFunction
이제 해당 코드를 내부에 구축하는 대신 라우팅 함수에 삽입할 수 있습니다.
// imports database functionality
import queryFunction from 'DatabaseFile'
// GET user by id
router.get('/:id', (request) => {
// grabs the id from our request
const { id } = request.params
// builds a query object
const query = `SELECT * FROM users WHERE id = ${id}`
// queries our database
queryFunction(query)
.then((response) => {
//handles response
})
})
훨씬 깔끔해 보이는군요... 의존성 주입의 예입니다! 경로 코드가 의존하는 경로 코드에 데이터베이스 코드를 주입하고 있습니다. 시각적으로 더 깔끔해지는 것 외에도 이것의 이점은 무엇입니까?
TL; DR
종속성 주입은 코드를 더 작은 재사용 가능한 클래스/객체로 분리한 다음 매번 다시 빌드하지 않고 해당 기능을 다른 객체에 주입할 때 발생합니다. 이것은 코드를 재사용, 테스트 및 유지 관리하기 쉽게 만듭니다.
Reference
이 문제에 관하여(ELI5: 종속성 주입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/seantansey/eli5-dependency-injection-javascript-i1d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)