티스토리 뷰
회사에서 사용하고 있는 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가 통과하는지를 검사합니다
여기 빨간줄의 릴리즈노트가 바로 제가 작업한 내역이랍니다
머지되기까지 거의 반년이 걸렸습니다
이러다가 늙어죽겠네요
여기까지 썰을 풀어봅니다
'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
- 소프트웨어
- 자바스크립트
- Apple
- JavaScript
- 트위터
- iPhone
- 아이디어
- 게임
- php
- 모바일
- 앱스토어
- 대학생
- 앱
- 웹표준
- AWS
- 어플리케이션
- 창업
- 구글
- 아이폰
- 벤처
- 경진대회
- CSS
- 스마트폰
- 네이버
- android
- 공모전
- 안드로이드
- 애플
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |