Typescript
로 서버/클라이언트 모두를 개발하다보면 필연적으로 비슷한 interface
파일을 공유하게 된다.
// server/dto/user.ts
interface GetUserResponse {
id: string
name: string
phone: string
...
}
// client/dto/user.ts
interface GetUserResponse {
id: string
name: string
phone: string
...
}
만약 프로젝트가 monorepo
를 사용하고 있어 클라이언트와 서버가 같은 레포지토리 아래에서 다른 패키지로 분리되어 있다면 lerna
와 같은 툴을 사용할 수도 있다.
하지만 lerna
와 같은 툴은 어느 정도 러닝커브가 있으며 그게 어려워 그냥 복사 붙여넣기를 하고 있는 내 상황에는 다른 해법이 필요했다.
git hook
을 이용하면 특정 경로에 해당되는 파일이 변화될 때마다 목표 경로에 복사한 뒤에 add
를 할 수 있지 않을까 하는 생각이 들었고, 레포지토리에 해당 코드를 올렸다.
아직 import
경로가 서로 다르다든가 하는 상황에 대해서는 고려해보지 못했다. (클라이언트/서버 디렉토리 구조가 달라 import
경로가 다를 경우 파일 내용을 추가적으로 변환할 필요가 있을 것 같다.)
하지만 아직 실험에 가까운 내용이고 얼마든지 프로젝트 내용에 따라 스크립트를 바꿀 수 있기 때문에 큰 문제는 되지 않을 것 같다.
내가 좋아하는 책 실용주의 프로그래머의 한 구절을 가져와봤다.
보통은 약간의 창의력만 있으면 중복의 필요를 제거할 수 있다. 흔히 간단한 필터나 코드 생성기를 작성하는 것이 해답이다.
... 이 책의 발췌된 코드들은 우리가 텍스트를 포맷할 때마다 전처리기에 의해 자동으로 삽입된다. 요령은 그 과정을 능동적으로 하는 것이다. 이런 것이 한 번하고 마는 변환이 되면 안 된다.
<실용주의 프로그래머 68p>