성장, 그리고 노력

부족하더라도 어제보다 더 잘해지자. 노력은 절대 배신하지 않는다.

도구, 기술, 이론 11

인터렉티브한 작업을 위한 기본 수학1 - (sin, cos, radian)

최근 three.js나 canvas, d3.js 등에 관심이 생겨 공부하다 보니, 기본적인 수학 개념들을 알아야 했다. 문과지만 수학을 싫어하지 않았기 때문에 "근방(?) 할 수 있겠지?" 하는 마음으로 한번 도전해 본다. 아래 글은 Javascript의 Math API를 기준으로 작성하였다. Math.sin(radians: number): number 이 함수는 숫자의 sin 값인 -1과 1 사이의 수를 반환한다. 여기서 말하는 숫자는 우리가 일반적으로 사용하는 각도가 아닌 라디안(radian or rad) 값인 것을 유의하자(각도를 구하고 싶다면 (radian * PI / 180) ). 라디안이란, 반지름과 호의 길이가 같을 때의 중심각의 크기를 말한다. cf) 라디안(radian) 수학에서 각도에 ..

모놀리식 아키텍처와 마이크로 서비스 아키텍처의 장점과 단점

마이크로 서비스 패턴의 필요성을 언급하라고 하면, 제일 먼저 나오는 패턴이 큰 진흙 공(Big ball of Mud) 패턴이다. 딱 봐도 좋은 느낌은 아니다. 하지만 하나의 WAR 파일 하나로 애플리케이션을 패키징 하는 모놀리식 패턴 대부분 겪고 있는 문제이기도 하다. 비단 작은 회사들의 문제만은 아니다. A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is sh..

[클린 아키텍처] 업무 규칙

업무 규칙 업무 규칙에는 여러 가지가 존재한다. 업무 규칙이란 쉽게 말하면 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차이다. 컴퓨터상으로 구현했는지 여부는 중요하지 않다. 예를 들어 대출에 N%의 이자를 부과한다는 사실은 은행이 돈을 버는 업무 규칙이다. 이것을 컴퓨터가 계산하건 직원이 계산하건 중요하지 않다. 그리고 이러한 규칙을 클린 아키텍처에서는 핵심 업무 규칙(Critical Business Rule)이라고 부른다. 사업 자체에 핵심적이며, 규칙을 자동화하는 시스템이 없더라도 업무 규칙은 그래도 존재하기 때문이다. 이러한 핵심 규칙은 보통 데이터를 요구한다. 예를 들어 대출에는 대출 잔액, 이자율, 지급 일정이 필요하다. 클린 아키텍처에서는 이를 핵심 업무 데이터(Critical..

[클린 아키텍처] 컴포넌트 응집도와 세 가지 원칙

클린 아키텍처를 읽으며 정리 중이다. 봐도 봐도 좋은 책인 거 같다(까먹는 내가 문제지만...). 꼭 이 책에 의존적인 내용을 다루진 않겠지만 기초는 클린 아키텍처에 두고 있다고 알고 보면 좋을 거 같다. REP: 재사용/릴리스 등가 원칙(Reuse/Release Equivalence Principle) CCP: 공통 폐쇄 원칙(Common Closure Principle) CRP: 공통 재사용 원칙(Common Reuse Principle) REP: 재사용/릴리스 등가 원칙 재사용 단위는 릴리스 단위이다. 효과적인 재사용을 위해서는 변경 제어 시스템에서 릴리스를 추적해야 한다. 패키지는 효과적인 재사용 및 해제 단위이다. 소프트웨어 컴포넌트가 릴리스 절차를 통해 추적 관리되지 않거나 릴리스 번호가 부여..

트렁크 기반 개발(Trunk-Based Development)

아래 그림은 내가 평소에 사용하던 github branching stategy이다. 이슈마다 feature 브랜치를 생성 후 마스터 브랜치에 merge 하는 방식이다. 경우에 따라서 여기에 develop 브런치나 release 브런치를 추가로 만들어 관리하는 경우가 있다. 이 방식은 git branching stategy보다 적용하기 쉬워 평소에도 협업할 일이 있다면 이 방식으로 많이 사용하는 편이다. 다른 것들을 검토하기 전에 먼저 내가 자주 사용하던 GitHub Flow를 먼저 살펴보자. 이슈 관리툴(Jira 등)에서 백로그(BackLog)를 확인하고 작업할 내용을 선택한다. 개발자는 master에서 새 브랜치(feature)를 만들고 작업을 한다. 원하는 지점에서 commit하고 push 하며 이를..

소프트웨어 설계 원칙 - SOLID

대부분의 내용은 Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)에 의존한다. 이미 이 책을 읽고 이해하였다면, 아래 글은 읽지 않아도 무방하다. 좋은 소프트웨어 시스템은 Clean Code로부터 시작한다. 코드(Code)란 건물을 짓는다고 했을때 벽돌과 같다. 여기에 대해서 Robert C.Martin이 쓴 Clean Architecture에 적절한 비유가 있어 가져와 봤다. If the bricks aren't well made, the architecture of the building doesn't matter much. On the other hand, you can m..

이미지 최적화(Image Optimization)

왜 이미지 최적화를 해야 할까? 일반적인 페이지에서 대부분의 자바스크립트 파일을 제외하고 바이트는 이미지가 차지한다고 해도 과언이 아니다. 사실 이미지 최적화를 하지 않았다면, 자바스크립트를 전부 합쳐도 이미지가 합도적으로 큰 용량을 차지할 것이다. 우리가 개발자 도구를 이용해서 보이는 이미지 크기는 이미 최적화된 크기임을 감안하자. 그래서 이미지를 최적화해야 한다. 그래야 바이트를 최대한 절약할 수 있고, 사이트의 성능 또한 향상할 수 있다. 또한 브라우저가 다운로드해야 하는 바이트가 줄어들고, 클라이언트의 대역폭에도 여유가 생기며, 콘텐츠를 더 빨리 다운로드하여 화면에 렌더링 할 수 있다. 서버의 저장 공간이 적게 필요하게 된다. 이는 비용 절감으로도 연결될 수 있는 부분이다. 반대로 이미지가 크다면..

[npm] 버전 관리 기초 지식(caret, tilde)

모듈 관리자는 아래와 같은 규칙을 따라야 합니다. - 이전 버전과 호환되지 않는 변경은 메이저 번호를 증가 시킵니다. - 이전 버전과 호환되는 새로운 기능은 마이너 번호를 증가 시킵니다. - 기존 기능에 대한 간단한 버그 수정은 패치 번호를 증가 시킵니다. 위 규칙들은 기본적으로 셈버 규칙을 따릅니다. 이런 규칙을 따르기 때문에 신뢰를 할 수 있고 npm에서 기본 설치시 모든 버전은 캐럿(^, caret)을 붙인 상태가 기본입니다. 캐럿 버전은 `npm update` 를 했을때 최신 마이너 버전까지 업데이트가 됩니다. 하지만 무조건적인 최신 버전도 좋은게 아니고, 패치 버전업이라고 또 다른 사이드 이펙트를 발생시키지 않을거라는 보장은 할 수 없지만, 간단한 버그 수정에 대한 혜택까지도 포기하면서 버전을 ..

[JIRA] 헷갈리는 관계 정리

cause vs block `A causes B`: A가 B의 원인이다. - 예시) 파티를 준비해야해서, 요리를 한다. `A blocks B`: A를 끝내야 B를 할 수 있다. - 예시) 손을 씻고, 요리를 한다. https://developers.google.com/issue-tracker/guides/block-issue clone vs duplicate https://community.atlassian.com/t5/Jira-questions/what-is-the-difference-between-a-clone-and-a-duplicate/qaq-p/45628 `clone`: 복사, 기존 이슈를 복사하고 싶을 때 clone 사용 `duplicate`: 중복, 실수로 같은 이슈를 2개 이상 올렸을 때 ..

[npm] 패키지 추천 husky

허스키는 강아지가 아니라 npm 라이브러리 중에 하나입니다. git hook을 사용하는데에 여러가지 용도로 사용할 수 있지만, 이 글에서는 간단한 사용법만 짚고 넘어가겠습니다. (참고: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) 제 Mac이 이상한건지 설정을 잘못한건지, eslint 설정은 잘 되어있으나, 저장을 두번, 세번하면 eslint가 깨지는 현상이 있었습니다. 아래 방법은 eslint가 깨졌다면, commit 자체를 막는 방법입니다. > npm i huksy 그 다음 `package.json` 에 아래와 같이 추가해 줍니다. ... }, "husky": { "hooks": { "pre-commit": "eslint 'src/app/**..

반응형