본문 바로가기
반응형

전체글622

데이터 변환 계층 (Data Transform Layer) Express와 JS/TS만을 가지고 프로젝트를 진행하다보면 데이터 변환 계층의 기준이 정해져있지 않은 경우를 많이 본다. 사람마다 다르기도 하고, 혹은 같은 사람이 작성한 코드에도 천차만별이다. 이에 대해서는 팀에서 확실하게 컨벤션을 잡지 않으면 서로 데이터 변환 계층을 다르게 두어 프로젝트 전체가 일관성이 떨어지고 코드 가독성과 리팩토링 내성도 떨어지게 된다. 그렇다면 데이터 변환 계층의 기준을 어떻게 세우면 좋을까? 문제 예를 들어 다음과 같은 상황이 있다고 해보자. 프로젝트에서는 js-joda (혹은 Dayjs 등) 날짜 타입을 쓰고 있는 상황에서 Database SQL에서 사용하기 위해서는 Date 로 치환해야하는 경우 API 로 외부에 데이터를 전송 (혹은 요청) 하기 위해 String 으로 .. 2022. 11. 28.
링 위로 올라가기 최근에 외부 취업준비생 분들을 대상으로 한 멘토링을 몇번 진행한 적이 있다. 사전에 질문을 받아서 그 질문에 대해 답변을 하는 형태로 진행을 하는데, 대부분의 질문이 "어떻게 면접을 준비해야하냐" 였다. 기술 면접을 처음 준비하는데 어떻게 시작해야할까요? 기술 면접에 도움이 되는 책이나 강의들이 있을까요? 기술 면접을 합격하려면 CS 지식은 어디까지 알아야 할까요? CS 지식이 부족한데 6개월정도 CS만 집중 공부하려고 하는데 어떨까요? 이 같은 질문들이 너무 많아서, 멘토링 중간에 신청하신 분들과 "왜 이런 질문을 했는지"에 대해 이런 저런 이야기를 먼저 나눴다. 그리고 면접에 대한 두려움을 알 수 있었다. 면접에서 제대로 답변을 못할것 같은 두려움 어렵게 면접까지 간 자리에서 아무것도 못하고 나올까 .. 2022. 11. 22.
5. 테스트하기 좋은 코드 - SQL 지난 시간까지 애플리케이션 코드를 어떻게 개선하면 좋을지에 대해 이야기를 나눴다. 1. 테스트하기 어려운 코드 2. 제어할 수 없는 코드 개선 3. 외부에 의존하는 코드 개선 4. 검증이 필요한 비공개 함수 개선 이번 편에서는 애플리케이션 코드가 아닌 Query (비단 RDBMS뿐만 아니라 NoSQL도 해당) 에 대해서 이야기를 해본다. 최근엔 ORM (혹은 ODM) 사용이 대중화되었지만, 여전히 많은 프로젝트에서는 SQL Builder를 통해서 Native Query를 작성한다. SQL Builder를 통해서 Native Query를 작성하는 것은 복잡한 조회 조건이 필요한 환경에서는 굉장히 효율적인 방법이다. 예를 들어, 통계/정산/물류 등 복잡한 조회 Query가 필요하거나, Bulk Insert등.. 2022. 10. 18.
기술 부채와 이율 인프랩에 합류하고 난뒤부터 일기를 조금씩 쓰고 있다. 시리즈 A 확정 일주일전 (실제 통장에 돈 들어오기 한달전) 에 합류한 시니어 개발자가 겪는 경험들을 남겨두면 좋겠다는 생각이 들었기 때문이다. 다음에 또 비슷한 일이 있으면 같은 실수를 하지 않도록 하기 위해 합류한 이후부터 여러 회사의 개발자분들과 이야기를 나누다보면 "이정도는 그래도 처음부터 해뒀으면 나중에 부채가 쌓여도 해결하기 편할텐데" 라는 지점들을 보게 된다. 흔히들 스타트업의 기술 부채에 대해 많이들 이야기한다. 전직장도, 현직장도 기술 부채를 많이 보고 갚았다. 전직장에서 PHP 프로젝트를 Java / Spring으로 개편하는 프로젝트에 참여했었다. 당시에 4000 라인 동적 쿼리 문자열을 팀장님이 퇴사전까지 문자열 SQL을 해체하다가.. 2022. 10. 9.
4. 테스트하기 좋은 코드 - 검증이 필요한 비공개 함수 지난 시간까지 테스트하기 어려운 코드를 어떻게 개선하면 좋을지에 대해 이야기를 나눴다. 1. 테스트하기 어려운 코드 2. 제어할 수 없는 코드 개선 3. 외부에 의존하는 코드 개선 지금까지 글들의 결론은 간단하다. 테스트 하기 어려운 코드와 테스트 하기 쉬운 코드를 분리하되, 테스트 하기 어려운 코드는 최대한 바깥으로 몰아넣는다. 전체적인 방향성은 위와 같이 유지하되, 이번에는 조금 더 세밀한 내용을 보자. 비즈니스 로직을 작성하다보면 무수히 많은 private 메소드/함수들을 생성하게 된다. 이전 글에서도 언급했지만, private 메소드/함수의 테스트 코드는 작성하지 않는 것이 좋을때가 많다. 테스트 코드에서 내부 구현 검증 피하기 그럼에도 불구하고 private 메소드/함수를 검증해야할 경우가 있다.. 2022. 10. 2.
3. 테스트하기 좋은 코드 - 외부에 의존하는 코드 개선 지난 시간에 테스트하기 좋은 코드에 대해 이야기를 나눴다. 1. 테스트하기 어려운 코드 2. 제어할 수 없는 코드 개선 이번 편에서는 테스트하기 어려운 코드를 개선하는 2번째 방법인 외부에 의존하는 코드를 개선하는 방법에 대해 이야기를 해보자. 3-1. 문제 상황 1부 에서 소개했던 cancel() 코드를 다시 보자. export default class Order { ... async cancel(cancelTime): void { if(this._orderDateTime >= cancelTime) { throw new Error('주문 시간이 주문 취소 시간보다 늦을 수 없습니다.'); } const cancelOrder = new Order(); cancelOrder._amount = this._a.. 2022. 9. 27.

728x90
반응형