초보개발자의 typescript로 api서버 구축기
- 목차
문제의식
목표
참고자료
과정
결론
1. 문제의식
- Typescript를 배웠으나 Javascript처럼 사용하고 있었음
- 테스트 코드작성에 대한 필요성(리팩터링, 생산성 향상)
- 객체지향 활용(Typescript)
- 절차지향적 코드 작성으로 인한 유지보수 고통 경험
2. 목표
- 객체지향 학습
- DI 활용
- DDD(Domain-Driven Design) 학습
- unit test 학습
- 최대한 라이브러리를 쓰지않은 프로젝트
- frameWork 사용 지양
- 온라인 강의 비즈니스 API 개발 (깃허브)

강의 API 요구사항

아키텍쳐
3. 참고자료
4. 과정
- 공부! (2월 중순)
- 무작정 강의만 들으면 공부가 안되기 때문에 대략 프로젝트를 같이 병행하며 진행
- 강의를 보고 공부할때에는 알 것 같았지만, 키보드만 잡으면 멍해지는 상태
- frameWork를 사용한 개발과 express만 사용해 아키텍쳐를 구현 사이에 괴리가 큰 것을 알게됨(아키텍쳐에 대한 지식이 부족하다는 것을 깨달음)
- API설계를 위한 자료조사와 계획작성(path는 2뎁스를 넘지 않는 설계, 명사 사용)
- 구조를 갖춰나감 (2월 말)
- TypeORM 사용(Data Mapper 패턴 지원)
- 계층간 데이터 이동은 entity를 이용(계층간 느슨한 관계를 지향, 다른계층이 바뀌더라도 영향을 미치지 않게 하기 위해 격리)
- Data Mapper 패턴을 통해 개발 (향후 orm 교체를 고려, service계층과 orm의 분리)
- 레이어간의 격리성을 위하여 Entity와 Data Access를 분리 (repository에서만 db접근, db교체 상황 고려)
- Jest학습과 UnitTest 작성
- 개발완료 (3월 초)
5. 결론 (느낀점)
- 객체지향, 아키텍쳐, Unit테스트 모든것이 시너지 효과를 낸다는점.
예) 좋은 Unit테스트를 위해 레이어간에 느슨한 결합이 중요
- 레이어 간의 느슨한 결합과 응집성으로 인해 라이브러리나 ORM등이 바뀐다면 해당 레이어만 변경하면 된다는 점. ( 이전의 개발에서는 Orm을 변경하게 된다면 controller까지 수정해야 했었음. )
예) TypeOrm을 sequelize로 변경하더라도 repository만 변경하면 됨
- 코드의 복잡성 감소
- 문서화 역활을 하는 테스트 코드