전체 글

전체 글

    [Node.js] Sequelize ondelete

    ondelete 속성은 데이터를 삭제하는데 있어서 관련된 데이터를 삭제하는데 용이합니다. 1:N의 관계의 테이블에서 1의 데이터를 지우면 관련된 N을 지우게 됩니다. 예를들어 한 유저가 여러 게시물을 썼는데 그 유저가 회원 탈퇴를 하게 되면 그 유저가 쓴 게시물이 모두 사라지는 방식입니다. ondelete에 대해 쓰는 이유는 수없이 찾아보고 stackoverflow를 찾아 봤지만 동작이 되지 않았는데 결국 해결 방법을 찾았습니다. 아래는 user : photo = 1 : N 관계로 설정한 내용 입니다. 1(hasMany) : N(belogsTo) Model model - user.js (1) static associate(models) { user.hasMany(models.photo, { foreign..

    [JS] CommonJS와 ES6

    JS 모듈화 역사 require는 NodeJS에서 사용되고 있는 CommonJS 키워드이고, import는 ES6(ES2015)에서 새롭게 도입된 키워드입니다. 일반적으로 import ES6(ES2015)는 사용자가 필요한 모듈 부분만 선택하고 로드 할 수 있기 때문에 더 선호됩니다. 최근 ES6(ES2015) 모듈 시스템인 import가 많이 사용되고 있지만, 그러나 아직까지는 import 키워드가 100% 대체되어 사용될 수 없습니다. 태그를 사용하는 브라우저 환경과, NodeJS에서도 CommonJS를 기본 모듈 시스템으로 채택하고 있기 때문에, Babel과 같은 ES6 코드를 변환(transpile)해주는 도구를 사용할 수 없는 경우에는 require 키워드를 사용해야 합니다. node.js프로젝..

    [클린코드] 1~2장

    1장 깨끗한 코드 분당 욕(이게뭐야)이 얼마나 나오냐에 따라 좋은코드인지 나쁜코드인지 나뉜다. 나쁜코드 중복된 코드 불필요한 연산이 들어간 성능이 나쁜 코드 네이밍과 내용이 다르거나 이해하기 어려운 의미가 모호한 코드 "우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 대충 짠 프로그램이 돌아가는 것에 안도감을 느끼고 안돌아가는 쓰레기보다 돌아가는 쓰레기가 좋다고 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그때 그시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다." 시간이 부족하다는 이유로, 영향범위가 넓어 버그가 생길까 두려워 나쁜코드가 생긴다. 나쁜 코드가 나쁜 이유는 개발속도와 생산성을 시간이 지날수록 크게 떨어 트린다. ..

    [리펙터링 2판] 12장 - 상속 다루기

    상속은 발등에 불이 떨어져야 비로소 잘못 사용했음을 알아차리는 경우가 많다. 상속은 막강한 도구지만, 잘못된 곳에서 사용되거나 나중에 환경이 변해 문제가 생기기도 한다. 12. 1 매서드 올리기 내용 중복된 메서드를 찾아 제거하여 메서드 올리기를 사용한다. 적용 메서드들의 본문 코드가 똑같을 때 매서드 올리기를 적용하면 된다. 가장 이상하고 복잡한 경우에는 메서드의 본문에서 참조하는 필드들이 서브클래스에만 있는 경우 슈퍼클래스로 올린 후에 메서드를 올려야 한다. 결과 중복 코드를 제거하는 것은 중요하기에 효과를 볼 수 있다. 예시 Before class Employee {...} class Salesman extends Employee { get name() {...} } class Engineer ex..

    [리펙터링 2판] 11장 - API 리팩터링

    모듈과 함수는 소프트웨어를 구성하는 빌등 블록, API는 이 블록들을 끼워 맞추는 연결부이다. 좋은 API 데이터를 갱신하는 함수와 그저 조회만 하는 함수를 명확히 구분해야 한다. 11. 1 질의 함수와 변경 함수 분리하기 내용 외부에서 관찰할 수 있는 겉보기 부수효과가 전혀 없이 값을 반환해주는 함수를 추구해야한다. 겉보기 부수효과는 입출력 변경이나, 데이터 값이 변형되는 경우 적용 데이터 갱신과 조회 기능이 있다면 명확히 구분해야 한다. 질의 함수(읽기 함수 : 값을 계산하여 리턴시키는 함수)는 부수효과가 포함된 경우에 제거한다. (명령-질의 분리) 결과 부수 효과를 신경쓸 필요가 없어 사용하기 편하고 테스트하기 쉽다. 예시 Before function getTotalOutstandingAndSend..

    [리펙터링 2판] 10장 - 조건부 로직 간소화

    조건부 로직은 프로그램의 힘을 강화하는 데 크게 기여하지만, 프로그램을 복잡하게 만드는 주요 원인이기도 하다. 복잡한 조건문에는 조건문 분해하기(10.1절) 논리적 조합을 명확하게 다듬는 데는 중복 조건식 통합하기(10.2절) 함수의 핵심 로직에 본격적으로 들어가기 앞서 무언가를 검사할때는 (10.3절) 똑같은 분기 로직 (switch문)이 여러곳에 등장하면 (10.4절) 널과 같은 특이 케이스를 처리하는데도 조건부 로직이 흔히 쓰이고 거의 똑같으면 (10.5절) 프로그램의 상태를 확인하고 그결과에 따라 다르게 동작해야하는 상황이면 (10.6 절) 10.1 조건문 분해하기 내용 다양한 조건, 그에따라 동작도 다양한 코드를 작성하면 순식간에 긴 함수가 된다. 긴 함수는 그자체로 읽기 어렵지만, 조건문은 그..

    [리펙터링 2판] 9장 - 데이터 조직화

    하나의 값이 여러 목적으로 사용된다면 혼란과 버그를 낳는다. 9.1절 변수 쪼개기를 적용해 용도별로 분리하고, 변수 이름 바꾸기(6.7절)을 친해지도록 하며, 파생 변수를 질의 함수로 바꾸기(9.3절)를 활용하여 변수 자체를 완전히 없애는게 해법일 때도 있다. 결국 이 장에서 말하고자 하는 바는 나눠서 잘 담아야 하는 이야기이다. 예를 들어, 요리를 할 때 재료들을 한 바구니에 담지 않고 여러가지 재료들을 여러가지 그릇에 담는게 일반적이다. 요리를 할 줄 아는 사람에게 재료를 주어야 할 경우가 있다고 가정하였다. 그러면 한 바구니 안에 모든걸 담았을 때, 한 바구니 안에있는 재료들로 어떤 요리를 할지 감이 잡히지 않을 것이다. 재료가 많고 복잡한 요리일 수록 더욱 그러할께 뻔하다. 하지만 반대 경우가 되..

    [JS] 반복문에 promise

    1. promise promise는 비동기적 실행을 동기적으로 실행하기 위해 사용한다고 생각합니다. 정확히는 비동기적 실행에 대한 결과 값에 대한 완료 또는 실패에 의한 결과 값입니다. (기본적인 내용은 유튜브 엘리님 설명이 좋습니다.) 양치를 하는 행위는 비동기와 비슷하다고 생각합니다. 그래서 양치를 하면서 책을 읽을 수 있고, 폰을 볼 수도 있습니다. 하지만 양치를 하면서 치아의 상태를 제대로 확인 할 수는 없습니다. 거품 때문에 양치를 마치고 난 뒤에야 치아 확인을 제대로 할 수 있죠. 양치라는 행위를 완료하고 치아를 확인하게 만들어 주는 것이 promise라고 생각합니다. 2. 반복문에서 비동기 처리를 동기적으로 처리 promise를 반복문에 사용하려 했는데, 블로그에 많은 글들이 있었지만 오히려..

    [AWS] CodePipeline - S3 Client 자동화

    자동화를 하는 이유는 수동적이고 반복적인 배포과정을 자동화함으로써 시간을 절약할 수가 있습니다. 또한 사람이 배포를 하다 설정을 잘못하여 실수 할 수 있는 부분도 방지할 수 있습니다. 앞으로 할 부분을 간략히 설명하면, 깃허브에 새로운 코드를 푸쉬하여 올려 놓을 때 마다 AWS에서 자동화 설정을 하면 자동으로 반영됩니다. AWS에서는 자동화 기능을 제공하고 있는데 CodePipeline 에서 설정이 가능합니다. 여기서 파이프라인 생성을 눌러 시작할 수 있습니다. 하지만 시작하기전에 S3버킷을 생성하고 정적 웹 호스팅용으로 설정을 미리 해놓아야 합니다. 0. 빌드 파일 생성 최상위 디렉토리에 buildspec.yml 파일을 생성하여 아래의 내용으로 저장합니다. 이 파일을 올리는 이유는 업로드를 하고나서 추..

    [리펙터링 2판] 8장 - 기능이동

    요소를 다른 컨텍스트(클래스나 모듈 등)으로 옮기는 일 역시 리팩터링의 중요한 축이다. 그리고 옮기기는 문장 단위에서도 이뤄진다. 반복문 관련하여 자주 사용되는 리팩터링도 있는데, 반복문이 단 하나의 일만 수행하거나 반목문을 완전히 없애버리는 방법이 있다. 마지막으로 대부분 프로그래머가 사용하는 죽은 코드 제거하는 리팩터링이 있다. 8.1 함수 옮기기 내용 함수를 기존에 위치한 곳에서 다른 곳으로 이동 적용 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면 B로 옮겨줘야 한다. 함수의 현재 컨텍스트와 후보 컨텍스트를 둘러보면서 호출하는 함수, 데이터를 파악하여 연관성을 살펴 해결한다. 여러 함수를 묶을 컨텍스트가 필요해지면 클래스묶기(6.9), 클래스 추출하기(7..