Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
인스타그램 클론에 typegraphql을 이용해보기
#insta_clone
3년 전
4,691
6

안녕하십니까. 다들 평안하신지요.

저는 인스타그램 클론을 예전에 들으려다가 prisma가 마침 prisma2로 업데이트 되는 과정에 있어서 왠지 다음에 prisma 2나올 때 들으면 더 개이득일 것 같아서 존버하다가 이제 듣기 시작했습니다.

듣는 것 기다리는 와중에 우버이츠 클로닝 코스가 나와서 *그것*을 듣다보니, typescript 빠지지 않을 수가 없더라구요. 그런 와중에 인스타그램 클론 새로나온 강의로 백엔드를 듣다보니.. nestjs 에서 배운 typescript와 graphql 방식이 너무 그리워서 강의가 손에 잘 잡히지 않았습니다.

그런데... typegraphql이라는 것이 있다는 것을 보고 사이트에 가서 어떤 건가 보니.. 헛.. nestjs와 비슷한 형태로 graphql resolver typedefs를 다루는 것을 확인하고, 구글링을 해보다보니, 꽤나 nestjs의 graphql 시스템과 비슷하게 설정을 할 수가 있었습니다. 예를 들어서, auth guard같은 것이나, custom decoration을 만들어서 context에서 로그인 유저 정보를 가져오는 등 @ResolverField와 같은 computed field 만들기 등등.. 말입니다.

물론 nestjs는 graphql이 일부를 담당하는 프레임워크이니 typegraphql과 같을 수는 없겠지만, typescript 없이 도저히 코딩을 못하겠던 저에게 일말의 갈증을 해소해주는 듯한 느낌이었습니다.

이럴바에는 nestjs를 사용하여 인스타그램 백엔드를 클로닝하는 게 안 나을까.. 생각도 하였지만, prisma2가 정말.. 너무 대박적이어서, prisma2 역시 포기할 수가 없었습니다.

typeorm도 정말 좋았지만, prisma2가 orm에서 더 강력한 느낌이 들었습니다. 특히 pagination 부분을 구현할 때에 더 좋았던 것 같았습니다. typeorm에서 pagination을 구현하려다 보니.. 제가 원하는 방식으로 하려면 필히 queryBuilder를 이용하여야해서.. (크게 불편한 것은 아니었지만), prisma2가 더 강력한 느낌이 들게 된 계기였습니다. cursor base pagination이 가능한 걸 본 것도 상당히 좋은 경험이었습니다. offset과 cursor base pagination이 있다는 것을 처음 알았었고, 어떤 경우에 어떤 pagination을 사용하면 좋은지도 배울 수 있어서 좋았습니다. 그리고 relation 설정 부분에서는... 크... connect! disconnect! 이렇게 하면 관계를 설정하고 변경할 수 있는 아주... 크.. 넘나 대박적이어서 말을 끝까지 할 수가 없네요.. connectiOrCreate! 크... prisma2는 정말 좋은 orm인 것 같습니다.

서론이 너무 길었네요. 혹시나 저와 같이 nestjs 형태의 graphql이 익숙해져버렸는데, 아직 typegraphql을 접하지 못한 분들에게 typegraphql을 소개해드리고 싶습니다.

저는 나중에라도 이런 설정을 다시 하지 않을까하여. 템플릿으로 만들어봤습니다.

깃헙링크 https://github.com/pleed0215/typegraphql-prisma-template

혹여나 이 링크를 사용해보시려면, .env파일에 DATABASE_URL을 설정을 해주셔야 합니다. postgres인 경우에는 "postgresql://[account]:[passowd]@[host url]:[port]/[db name]?schema=public" 식으로 설정하면 될 것 같습니다. 뒤에 schema=public이 왜 붙는지는 잘 모르겠는데, prisma init로 설정하면 저렇게 기본으로 나오길래 빼지 않고 저렇게 넣었습니다.

제가 설명을 잘하거나 문서를 잘 만드는 편은 아니고 게다가 코딩도 뉴비수준이라, 제가 쓴 글은 소개정도로.. 저랑 비슷한 고민 하신분들이 참고만 해주시면 감사하겠습니다~

6 comments