티스토리 뷰

BACKEND

typeorm PR 머지된 썰푼다

나를찾는아이 2024. 1. 9. 10:10
728x90
반응형

회사에서 사용하고 있는 ORM이 typeorm입니다

 

nodejs 진영에서 사용할수 있는 유명한 ORM은 또 그렇게 많지는 않습니다

 

typeorm, sequelize, prisma, mongoose 떠오르는대로 적어보면 이렇게 있네요

 

모두다 typescript를 지원합니다

 

mongoose는 mongodb용이니깐 일단 제쳐두고 mysql에서 사용가능한 typeorm, sequlize, prisma를 비교해보겠습니다

 

 

2년전만해도 sequelize, typeorm, prisma 순서로 인기가 있었는데

 

이제 prisma한테 모두 역전되었습니다

 

그도 그럴수밖에 없는것이 prisma가 신생 ORM이기도 하고 활동도 가장 활발한것 같더라구요

 

이중에서 typeorm은 일찍부터 typescript를 지원하는 ORM으로서 많은 인기를 얻었지만

 

최근 업데이트가 많지 않습니다. 게다가 거의 유지보수 성격의 업데이트만 진행되고 있습니다

 

최근 버전인 0.3.17버전과 그 이전버전의 0.3.16 버전의 갭이 6개월이 넘으니 딱히 typeorm을 쓰면서 신기능이라고 바랄만한게 없습니다

 

뭐 이미 필요한 기능이 다 있으니깐 더 바랄게없지만서도 바라는게 은근히 있답니다

 

 

typeorm을 사용하던중에 typeorm의 로그 기능에서 오류가 있는 것을 발견하였습니다

 

그리고 너무 간단한 수정이었기에 바로 수정하는 PR을 만들었죠

 

 

migration 관련 로그를 출력하는 부분에서 if조건문이 반대로 되어있었더라구요

 

정말로 수정사항은 느낌표 단한개뿐이지만 아무리 간단한 수정사항이라도 당연하게도 테스트코드를 만들어야 합니다

 

정말로 배보다 배꼽이 더 크네요

 

하지만 저는 이미 이전에도 typeorm에 신규기능을 제안 하기 위해 PR을 만들어봤기 때문에 테스트코드 작성은 조금은 익숙합니다

 

typeorm은 여러 종류의 데이터베이스를 지원하는 ORM이기때문에 테스트코드를 동작하는 방식도 다른 것과는 조금 다릅니다

 

 

describe("github issues > #<issue number> <issue title>", () => {

    let dataSources: DataSource[];
    before(async () => dataSources = await createTestingConnections({
        entities: [__dirname + "/entity/*{.js,.ts}"],
        schemaCreate: true,
        dropSchema: true,
    }));
    beforeEach(() => reloadTestingDatabases(dataSources));
    after(() => closeTestingConnections(dataSources));

    it("should <put a detailed description of what it should do here>", () => Promise.all(dataSources.map(async dataSource => {

       // tests go here

    })));

    // you can add additional tests if needed

});

 

typeorm의 테스트코드 작성을 위한 가이드가 되는 기본 로직입니다

 

createTestingConnections라는 함수를 통해서 dataSource의 배열을 받게되는데요

 

이러한 로직을 통해서 로컬에서 테스트를 실행할때 여러 종류의 데이터베이스를 동일한 테스트코드로 한번에 검사하게 됩니다

 

가급적이면 로컬에서 여러종류의 데이터베이스를 실행하여 테스트코드를 작성한뒤 여러 종류의 데이터베이스에서 모두 정상동작하는지를 검사하시면 됩니다

 

typeorm의 소스코드에 도커컴포즈를 통하여 여러 데이터베이스를 빌드할수 있도록 제공되고 있답니다

 

 

 

실제로 typeorm에 설정된 github action의 실행내역을 보시면

 

이렇게 각종 DB에 연결하여 CI가 통과하는지를 검사합니다

 

 

 

여기 빨간줄의 릴리즈노트가 바로 제가 작업한 내역이랍니다

 

머지되기까지 거의 반년이 걸렸습니다

 

이러다가 늙어죽겠네요

 

여기까지 썰을 풀어봅니다

728x90
반응형

'BACKEND' 카테고리의 다른 글

POST 메서드 apache bench(ab) 사용하기  (0) 2024.02.07
카카오 모먼트 API 사용하기  (2) 2024.01.11
0.1 + 0.2 = ?  (0) 2023.08.22
당신의 REST API는 멱등한가요?  (0) 2023.07.06
phpMyAdmin말고 adminer도 있네  (0) 2023.06.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함