본문 바로가기
반응형

전체글458

Mustache.js 로 이메일 템플릿 구성하기 (TypeScript) 이메일 기능 구현을 위해서 많은 고민을 하는 부분이 이메일 본문을 위한 템플릿 구성입니다. AWS SES 등 이메일 발송 자체는 이제 예전처럼 SMTP 서버 구축 등을 할 필요가 없어서 훨씬 난이도가 줄었습니다. 일반적으로 이메일의 본문은 HTML + Inner CSS로된 마크업코드를 작성합니다. 이메일 안에서는 CSS나 JS 파일 로드가 안되기 때문에 HTML 코드만으로 해결이 되어야 하는데요. 위에서 언급한 HTML 코드를 단순 문자열로만 진행할 경우 다음의 문제점들이 있습니다. html 코드에서 오타가 발생하는걸 찾을수가 없다. html 코드가 결국 문자열이기 때문에 태그가 1개 부족해도, 혹은 attribute 가 오타가 나도 IDE에선 전혀 감지할수가 없다. 렌더링 해야할 코드가 늘어나면 늘어날.. 2021. 11. 29.
TypeScript 환경에서 class-transformer 적극적으로 사용하기 요즘 같이 분산 환경이 적극적으로 도입 되고 있는 시기에는 꼭 프론트엔드가 아니더라도 백엔드 환경에서도 외부의 HTTP API를 호출하는 일은 당연한 일입니다. 그래서 HTTP API (저는 Rest API라는 단어는 선호하진 않습니다. 어차피 규약 지키고 있는 경우가 거의 없거든요) 를 통해 원격 서버에서 JSON 객체를 읽어오는 작업을 자주 하게 되는데요. 응답으로 넘어온 JSON 객체는 리터럴 객체이지 클래스의 인스턴스가 아닙니다. Axios를 비롯해서 Got 등 NodeJS & TypeScript 환경에서 자주 사용하는 HTTP API 중 어느 것도 클래스의 인스턴스를 응답으로 넘겨주진 않습니다. Spring이나 닷넷등의 다른 백엔드 프레임워크를 사용해본 분들이라면 여기서 이상한 괴리감을 느낄 수.. 2021. 11. 24.
협업도구와 올인원 워크스페이스 최근에 리뷰 하고 있는 오세용님의 협업도구 관련 도서에 나온 내용인데, 내 생각과 거의 흡사해서 내 생각과 함께 정리하게 됐다. (아래는 세용님의 출간 예정 도서의 내용 중 일부이다) 노션은 올인원 워크스페이스를 추구한다. 모든 업무를 이곳 노션에서 하라는 거다. 이를 위해 여러 기능을 제공하고 앞서 소개한 것처럼 훌륭한 도구임은 사실이다. 그런데 정말 이 기능만으로 모든 업무를 진행할 수 있을까? …. 올인원 워크스페이스는 모두를 만족시킨다는 의미와 같다. 이는 모든 사용자에 관한 대부분의 욕구를 해결해 주겠다는 것이다. 다시 말해 나와 같은 예민한 사용자도 만족시켜야만 한다. 그게 노션이 추구하는 올인원 워크스페이스가 갖는 한계점이다. 노션은 홈페이지에서 자신의 기능을 대치하는 서비스로 굵직한 서비스.. 2021. 11. 21.
검증부 (assert / expect)는 하드코딩한다 최근 코드리뷰를 하다가 자주 지적하던 내용이 있어, 정리하게 되었다. 요즘 팀 분들이 가장 많이 하는 실수가 바로 검증부에 도메인 로직이 추가되는 것이다. 이를테면 다음과 같은 구현 클래스가 있다고 해보자. export class FilePath { private readonly _path1: string; private readonly _path2: string; private readonly _path3: string; private readonly _path4: string; constructor(path1: string, path2: string, path3: string, path4: string) { this._path1 = path1; this._path2 = path2; this._path.. 2021. 11. 15.
테스트 코드에서 내부 구현 검증 피하기 테스트 코드를 작성하고 운영하다보면 기존 코드가 조금만 변경되어도 테스트를 다 고쳐야하는 경우가 종종 있다. (모든 경우가 그렇진 않겠지만) 기능의 최종 결과를 검증하는게 아니라 내부 구현을 검증하는 경우에 자주 이런일이 있었다. 내부 구현을 검증하는 테스트들은 구현을 조금만 변경해도 테스트가 깨질 가능성이 커진다. 내부 구현은 언제든지 바뀔 수 있기 때문에 테스트 코드는 내부 구현 보다 최종 결과를 검증해야한다. 그럼, 내부 구현을 검증하는 경우란 어떤 것인지 알아보자. 1. 상세 구현부를 다 검증하는 경우 이를 테면 다음과 같이 합계 금액을 구하는 클래스가 있다고 하자. export class OrderAmountSum { minusSum: number = 0; plusSum: number = 0; .. 2021. 11. 11.
Git에서 원하는 커밋만 제거하기 (feat. SourceTree) Git을 사용하다보면 특정 커밋들만 날리고 싶을때가 있습니다. 근데 하필 그게 한참 전 커밋들이거나, 중간 커밋들이면 reset으로 골라내기가 쉽지 않은데요. 이럴때 rebase interactively 를 사용하기가 좋습니다. 해결방법 예를 들어 아래와 같이 REC-296 커밋 2개를 모두 빼고 싶은 상황이라고 가정해봅니다. 그럼 그 직전 커밋을 선택합니다. 해당 커밋을 우클릭을 하신뒤, Rebase children of ... interactively 을 선택합니다. 그럼 아래와 같이 리베이스 화면이 나오는데, 여기서 삭제를 원하는 커밋을 선택한뒤, 하단의 Delete를 클릭합니다. 그럼 해당 커밋을 삭제 표기가 됩니다. 지우고싶었던 2개의 커밋을 모두 delete를 하고, OK를 누르시면 그때부터 .. 2021. 11. 5.

728x90