분류 전체보기
육각형 아키텍처로 변화 준비 - Netflix Tech Blog (번역)
육각형 아키텍처로 변화 준비 - Netflix Tech Blog (번역)
2021.11.06본 포스트는 Netflix 기술 블로그에서 발췌한 Ready for changes with Hexagonal Architecture 을 번역한 것입니다. Netflix Originals의 제작이 매년 증가함에 따라 컨텐츠 제작 과정에서 효율성을 증가시키는 앱을 구축해야 할 필요성도 커지고 있습니다. 우리의 Winder Studio Engineering 팀은 컨텐츠 스크립트 획득, 거래 협상 및 공급업체 관리, 제작 절차 간소화 등 컨텐츠의 각본부터 제생에 이르기까지 제작을 돕는 수많은 앱을 구축했습니다. 처음부터 엄청난 통합 약 1년 전, Studio Workflow 팀은 비즈니스의 여러 도메인을 넘나드는 새로운 앱을 개발하기 시작했습니다. 우리는 흥미있는 과제를 가지고 있었습니다. 처음부터 어플리케이션..
[Typescript] 타입 단언, 타입 가드 ,타입 호환
[Typescript] 타입 단언, 타입 가드 ,타입 호환
2021.10.17이 글은 인프런의 TypeScript 입문 - 기초부터 실전까지 강의를 듣고 정리한 글입니다. 타입 단언(Type Assertion) let z: any; z = 20; z = 'z'; let b = z; // b: any let b = z as string; // b: string 네번째 줄 까지만 봤을 때, 결국 z는 마지막에 문자열 타입으로 인식이 되었을 것이라고 추론할 수 있지만, 실제로 프리뷰를 보면 any 타입으로 되어있다. 그래서 b도 any타입을 반환한다. 이렇게, 명확한 typing이 되지 않는 문제를 해결하기 위해서 맨 마지막 줄로 z를 string type으로 단언해준 뒤 그것을 b에 부여하였다. 이 결과 b는 문자열 타입을 갖게 된다. 예시를 보자. 자바스크립트에서 사용하는 대표적인..
[회고] 생에 첫 퇴사 회고
[회고] 생에 첫 퇴사 회고
2021.10.121. 기이한 우연 함께 공부하는 동기가 이력서를 올려놓았는데 어디 회사 대표님께서 직접 연락을 주셨다고 했다. 내용은 같이 일해보지 않겠냐는 일종의 오퍼였다. 하지만 당시 동기는 다른 일을 하고 있었고 node.js 라는 말을 듣고 바로 내가 떠올랐다고 했다. 그래서 소개를 시켜드리겠다고 시작된 것이 대표님과 나의 인연이 시작되었다. 지금 생각해보면 참 기이한 우연이다. 그 후 간단한 면접을 통해 내 생에 첫 IT 회사에 발을 들이게 되었다. 2. 삐그덕 거리는 시작 회사는 문체부, 창업진흥원에서 선정돼 약 1억 정도 받은 회사였고 구성원은 총 4명이라고 하셨다. 그리고 나랑 함께 일할 팀원은 없다고(?) 하셨다. 회사에 개발자는 나랑 같이 들어오신 신입 프론트엔드 개발자, 저녁에만 일하시는 유니티 개발..
[javascript] ES6 순회와 이터러블/이터레이터 프로토콜
[javascript] ES6 순회와 이터러블/이터레이터 프로토콜
2021.09.281. 이터러블과 함수형 프로그래밍 최근 javascript 함수형 프로그래밍 을 공부하면서 알게 된 ES6 순회와 이터러블/이터레이터 프로토콜의 관계에 대해 공부하게 되었습니다. 제 생각으로는 함수형 프로그래밍에서 이터러블/이터레이터 프로토콜은 핵심적인 개념이라고 생각합니다. 생각보다 간단한 원리에서 시작한 개념이 함수형 프로그래밍에서 아주 요긴하게 쓰입니다. 본 게시글은 타 블로그 및 MDN에서 참조한 내용으로 작성되었습니다. Iteration protocols - JavaScript | MDN ECMAScript 2015 (ES6)에는 새로운 문법이나 built-in 뿐만이 아니라, protocols(표현법들)도 추가되었습니다. 이 protocol 은 일정 규칙만 충족한다면 어떠한 객체에 의해서도 구..
[javascript] ES6 구조분해 할당 총 정리
[javascript] ES6 구조분해 할당 총 정리
2021.09.27구조분해 (Destructuring assignment) 최근 자바스크립트 함수형 프로그래밍을 공부를 하다 구조분해 및 iterator 개념이 조금 부족하여 따로 정리하여 작성합니다. 이번 게시글에서는 구조분해 만 다루고 다음 게시글에서 iterator 를 다뤄보도록 하겠습니다. 1. 문법 구조분해의 기본 문법은 아래와 같습니다. const [a, b] = [1, 2]; console.log(a); // 1 console.log(b); // 2 const [c, d, ...rest] = [1, 2, 3, 4, 5, 6, 7]; console.log(c); // 1 console.log(d); // 2 console.log(rest); // [3, 4, 5, 6, 7] const { e, f } = { e..
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
2021.09.18예제 모델 // 기존의 sequelize Profile 모델 class Profile extends Sequelize.Model { static init(sequelize, DataTypes) { super.init({ id: { type: DataTypes.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true, }, name: { type: DataTypes.STRING(200), allowNull: false }, email: { type: DataTypes.STRING(200), allowNull: false, }, profile_url: { type: DataTypes.TEXT, allowNull: true, } }); return a..
[javascript] 일반 함수와 화살표 함수의 차이 (feat. ES6)
[javascript] 일반 함수와 화살표 함수의 차이 (feat. ES6)
2021.09.05항상 일반 함수와 화살표 함수의 정확한 차이점을 지나쳐 왔습니다. 단순하게 화살표 함수(Arrow function)는 ES6에 새로 나온 문법인 것으로만 인식한 상태로 개발했지만 정확히 알고 적절하게 활용한다면 더욱 깔끔하고 디버깅이 편한 코드를 작성할 수 있을 것 같아서 따로 정리하게 되었습니다. Q . function 과 () => {} (화살표 함수)의 차이점이 무엇일까요? A : "바인딩되는 this가 다릅니다." 틀린 답변은 아니지만, 정확히 어떻게 this가 다를까요? 말 뜻대로 생각했을 때, 아래 코드처럼 생각할지도 모르겠습니다. // 서로 다른 값이 출력될 것? function normalFunc() { console.log(this); } const arrowFunc = () => { c..
[javascript] Primitive Type(원시 타입) vs Reference Type(참조 타입)
[javascript] Primitive Type(원시 타입) vs Reference Type(참조 타입)
2021.08.28자바스크립트의 자료형은 크게 원시 타입과 참조 타입으로 나뉩니다. 원시 타입 (Primitive Type) 원시 타입은 모두 하나의 값을 담고 있습니다. - 문자(string) - 숫자(number) - bigint - 불리언(boolean) - null - undefined - 심볼(symbol) => ES6부터 추가된 타입 총 일곱 가지 입니다. 원시 자료형은 값 자체에 대한 변경이 불가능(immutable) 하지만, 변수에 데이터를 재할당할 수 있습니다. 하나의 메모리에 하나의 데이터를 보관합니다. 변수를 재할당 해도 변수의 항당 값에 영향을 주지 않습니다. let myString = 'goodNews'; myString = 'badNews'; // 재할당 가능 myString[0] = 'B'; /..
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
2021.08.27콜 스택, 메모리 힙이란? 자바스크립트 엔진은 Memory Heap 과 Call Stack 으로 구성되어 있습니다. 가장 유명한 것이 구글의 V8 Engine입니다. 자바스크립트는 단일 스레드 (sigle thread) 프로그래밍 언어인데, 이 의미는 Call Stack이 하나 라는 이야기입니다. 즉 멀티가 되지 않고, 하나씩 하나씩 처리한다는 의미입니다. 콜 스택(Call Stack) 원시 타입(숫자 등) 데이터가 저장된다. 실행 콘텍스트(Execution Context)를 통해 1) 변수 식별자(이름) 저장, 2) 스코프 체인 및 this 관리, 3) 코드 실행 순서 관리 등을 수행. *실행 컨텍스트의 상세 구조 및 원리는 이 글의 범위를 넘어가므로 다루지 않습니다. 메모리 힙(Memory Heap)..
SQL Injection 이란? (SQL 삽입 공격)
SQL Injection 이란? (SQL 삽입 공격)
2021.08.25SQL Injection SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위를 말한다. 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격이다. 위의 만화에 대해 설명하자면, 저 학교에서 입력한 명령은 다음과 같을 것이다. INSERT INTO students (이름) VALUES ('학생 이름'); 여기서 Robert'); DROP TABLE students;-- 을 '학생 이름' 자리에 넣을 경우 다음과 같은 명령문이 된다. INSERT INTO students (이름) VALUES ('Rob..
[node.js] DI(의존성 주입) 구현하기
[node.js] DI(의존성 주입) 구현하기
2021.08.20DI (Dependency Injection) 의존성 주입(DI)는 잘 알려진 기술이다. IoC 컨테이너를 이용한 DI는 여러 모듈의 확장성과 독립성에 큰 도움을 준다. 특히 Spring에서 Java Bean을 이용하여 DI를 구현하는 것이 국내에서 가장 유명하다고 생각한다. 하지만 Node.js에서 DI는 그렇게 활발하게 쓰이고 있지 않는 것 같다. 왜냐하면 require로 모듈을 바로 불러오면 되기 때문에 굳이 필요성을 못 느끼기 때문이다. 하지만 이번에 공부를 하면서 node에서도 DI를 해야 하는 이유를 알게 되어서 예제 코드와 함께 설명하고자 한다. DI와 테스트 코드 의존성 주입은 하나의 패턴이다. 만약 의존되는 클래스를 매개변수로 전달해준다면, 모듈 안에서 클래스를 불러오거나 새로 만드는 것..
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
2021.08.09본 포스트는 Sam Quinn의 “Bulletproof node.js project architecture” 글을 번역한 것입니다. 혼자 보기 너무 아까운 글이기에 번역하여 공유합니다. Introduction Express.js는 node.js REST API를 만드는데 좋은 프레임워크지만, 어떻게 node.js 프로젝트 구조를 잡아야 할지 알려주지 않습니다. 우습게 들릴 수도 있지만, 이건 매우 큰 문제입니다. 올바른 node.js 프로젝트 구조는 코드의 중복을 피해 주고 안정성을 높여주며, 당신의 서비스를 확장하는데 도움이 될 것입니다. 이 포스트는 다년간의 부족했던 설계와 나쁜 패턴, 그리고 수없이 많은 코드 리팩터링 경험을 통해 쓰인 하나의 리서치입니다. 목차 폴더 구조 3 계층 설계 (3 Lay..