개발자

프로덕션에서의 typescript

2023년 09월 16일조회 68

이번에 처음으로 프로덕션 에서 ts 를 사용하게 되었습니다. 개인프로젝트에선 모두 ts 만 사용할만큼 ts에 빠지게 되었습니다. 걱정인 부분은 ts 를 사용할때 type 에 대한 정의를 어디에 어떻게 하시나요? 예를들어 /types 라는 dir 을 만들어 그 공간안에서만 관리한다 라던가.. 혹은 실제 프로덕션에서는 굉장히 많은 DTO 타입들이 필요할 거라 생각합니다. 모든 서버에서 내려오는 DTO 들을 전부 type 으로 정의하게되나요? 실제 프로덕션에서의 type 정의에 대한 요령이나 경험들을 듣고싶어요

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

이승로님의 프로필 사진

우선, dto같은 경우에는 클래스로 작성하여 관리합니다. 추후 validation이나, GraphQL, Nest.js 등과 연동하기 위한 데코레이터를 추가해야 하는 상황이 있을 수 있기 때문에 클래스로 작성하구요. 폴더링같은 경우에는 개인적으로는 dto, 엔티티와 같이 특수한 역할을 지닌, 일반적으로 클래스로 작성되는 타입들과 그 외의 타입들을 좀 구분하는 편입니다. 또한, 이는 단순히 타입에 대한 내용은 아니지만, 소스코드를 리소스별로 나누어 관리하면 특정 리소스에 대한 코드들이 한 곳에 모이게 되기 때문에 좀 더 파일 분리가 쉬어요! 쉽게 예를 들자면, 네이버와 같은 종합포털을 개발할 때 ‘메일’에 대한 소스코드는 mail 폴더 안에, ‘카페’에 대한 소스코드는 cafe 폴더 안에 나누어 관리하는 것입니다. 다시 본론으로 돌아와, 폴더 분리도 중요하지만 파일 분리도 중요하다고 생각합니다. 저는 파일을 ‘하나의 역할‘을 기준으로 분리합니다. 예를 들어 유틸리티 타입을 만들다 보면, A라는 타입을 생성하기 위해 내부적으로 활용해야 하는 SubA라는 타입이 있을 수 있습니다. 만약 그 SubA라는 타입이 완전히 A 타입을 구현하기 위해서만 활용된다면, 두 타입을 a.type.ts 라는 이름의 파일에 함께 작성하고, 만약 조금이라도 범용적으로 활용될 수 있는, 독립적으로 존재했을 때 의미가 있는 타입이라면 별도의 파일로 분리합니다. 최종적으로 저는 타입스크립트 소스코드를 다음과 같이 분류하여 사용하고 있습니다. - shared/types: 여러 리소스에서 공통적으로 사용하는 타입들을 작성합니다. - resources/<리소스명>/entities: 엔티티 객체에 해당하는 타입(class)를 작성합니다. (파일명: 엔티티명.entity.ts) - resources/<리소스명>/dtos: DTO 객체에 해당하는 타입(class)를 작성합니다. (파일명: DTO명.dto.ts) - resources/<리소스명>/types: 리소스 내에서 사용되는 타입들을 작성합니다. 물론, 폴더링과 같은 부분에는 정답이 있는 것 같지는 않습니다. 다만, 왜 그렇게 구성하였는지 질문자님의 의도가 명확한 것이 제일 중요한 것 같아요! 여러가지 방식으로 구성해보고 어떻게 했을 때 가장 코드를 쉽게 분리하고 쉽게 탐색할 수 있는 지 검증해보는 시간을 가지는 것도 좋을 것 같습니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 16일

TypeScript를 프로덕션에서 사용할 때, 타입 정의를 어디에 저장하는지는 주로 프로젝트 구조와 개발 팀의 선호도에 따라 다릅니다. 일반적으로 `/types`나 `/interfaces` 등의 폴더를 생성해서 모든 타입을 한 곳에서 관리하는 것이 좋습니다. 이렇게 하면 타입들을 찾기 쉽고, 중복을 피하며, 재사용성도 증가합니다. 다만, 공통적인 타입 이외에 특정 컴포넌트나 모듈에서만 사용되는 타입들은 해당 파일 혹은 모듈 내부에서 정의하기도 합니다. 이 경우 해당 타입이 컴포넌트나 모듈 외부에서 임의로 변경되거나 잘못 사용되는 것을 방지할 수 있어서 안전성이 높아집니다. 실제 프로덕션에서 필요한 많은 DTO 타입들에 대해선 서버에서 내려오는 각각의 DTO를 type으로 정의하는 것이 일반적입니다. 그러면 각 API 응답데이터에 대한 명확한 인터페이스를 가질 수 있으므로 오류 가능성을 줄일 수 있습니다. 하지만 실제 환경에서는 API 응답 데이터가 동일한 형태임에도 불구하고 너무 많은 수의 비슷한 DTO 타입을 만들어내는 경우, 추가적인 maintenance 부담이 생기기도 하므로 이런 경우에는 범용적으로 사용 가능한 generic 타입을 활용하는 방법도 고려해볼 수 있습니다. 마지막으로, TypeScript를 사용할 때 주의할 점은 가능한 한 any 타입은 피하고, 명시적인 타입을 선언하는 것이 좋습니다. 이렇게 하면 TypeScript의 최대 장점인 compile-time type checking을 제대로 활용할 수 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!