프로그래밍 251

코드스피츠 77 - ES6+ 기초편 6회차 (Generator, Promise, Async/Await)

Generator const infinity = (function*() { let i = 0; while(true) yield i++; }) console.log(infinity.next()) yield를 이용하면 블록을 중간에 끊어주는 효과가 발생 => JS에서는 하나의 문들을 Record로 만들어 주고, 해당 레코드를 실행 할지 말지를 결정 하게 됨. suspension, generator, command pattern등 여러 가지 개념들이 설명 되어 나오는데, 각각을 잘 이해하는게 중요하다. gererator + async + executor generator => 흐름을 멈춰준다. const profile = function*(end, next, r) { const userid = yield $...

lambda 아키텍처 vs kappa 아키텍처

FullStack으로 일 하다가, 팀의 규모가 20여명 정도로 커지는 바람에 FE/BE를 나누게 되면서 작년부터 저는 BE영역에서 일 하고 있습니다. 그러다 보니 데이터 관련한 아키텍처들에 관심이 많아졌고, 어떻게 하면 이해가 쉬운 구조이면서 이슈 없는 데이터 플로우 구조를 만들 수 있을까 고민 하고 있습니다. 그러던 와중에 생소한 용어를 듣게 되어 간단하게 공유하고자 합니다. Ref. https://www.credera.com/insights/modern-data-architecture-an-overview-of-lambda-and-kappa-architectures https://www.qlik.com/blog/lambda-or-kappa-the-need-for-a-new-data-processing..

프로그래밍 2022.04.12

Maven: Blocked mirror for repositories 이슈

Maven 3.8.1버전부터 해당 오류가 발생하기 시작하고, http로 된 repository를 차단하기 때문에, 디펜던시를 못가져온다. 방법은 여러가지가 있는데, 제일 좋은 방법은 private repository를 https를 지원 하게 하는 것이다. 그 외는 간편한 방법은 maven 버전을 내리면 된다. ❯ brew install maven@3.3 # 3.3 버전으로 설치 ❯ which mvn /opt/homebrew/opt/maven@3.3/bin/mvn intelliJ IDEA에 maven 항목을 찾아서, 경로를 바꿔주면 된다. 레거시 환경에서 자주 있는 일이다..

Volta?! (JavaScript command line tool)

volta (JavaScript command line tool) 원래 node 버전 매니저로 nvm을 제일 많이 썼다. 실제 실무에서도 물리서버에서 쓰거나, jenkins(유물 같지만, 실무에서도 짱짱하게 잘 썼다. 현재는 github action을 쓰고 있다.)에서도 nvm을 설치해서 쓰곤 했는데, 이제 로컬에서는 volta를 쓴다. 쓴지는 좀 됐다. volta를 쓰는 이유는 nvm보다 훨씬 빠르다. 인터랙션이 훨씬 빨라서 쓰게 되었고, nvm 보다 더 가벼운 느낌의 Node 버전 매니저는 n이라는 것도 있는데, 잠시 쓰다가 바로 volta로 왔다. volta install # install Volta curl https://get.volta.sh | bash # install Node volta i..

코드스피츠 77 - ES6+ 5회차 (Block, Non-Block & Sync, Async)

코드스피츠 77 - ES6+ 5회차 (Block, Non-Block & Sync, Async) Block, Non-Block Flow를 막고 있는 것을 Block이라고 하고, 그런 상태를 blocking(상태)로 표현 한다. 업계 표준이 존재함. 그 표준 시간 동안 멈춰 있으면, Blocking/Non-Blocking으로도 볼 수 있다. Flow is blocking for(const i of (function*() { let i = 0; while(true) yield i++; })()) console.log(i); // script timeout // 플랫폼의 안정성을 위해 블록 되는 시간이 길면 강제 종료 시킴. Blocking function 점유하는 시간만큼 블록을 일으키는 함수 const f ..

코드스피츠 77 ES6+ 4회차 노트

Complex recursion 단순한 배열을 루프인 경우는 간단히 이터레이션을 작성할 수 있음. { [Symbol.iterator]() { return this; }, data: [1,2,3,4], next() { return { done: this.data.length == 0, value: this.data.shift() } } } 문제는 다층형 그래프는 어떻게 이터레이션을 할 것인가? { [Symbol.iterator]() { return this; }, data: [{ a: [1,2,3,4], b: '-'}, [5,6,7], 8, 9], next() { return /// 어떻게 작성 해야 할까????? } } { [Symbol.iterator]() { return this; }, data: [..

코드스피츠 77 ES6+ 3회차 노트

코드스피츠 77 - ES6+ 3회차 interface 인터페이스란 사양에 맞는 값과 연결된 속성키의 셋트 어떤 Object라도 인터페이스의 정의를 충족시킬 수 있다. 하나의 Object는 여러개의 인터페이스를 충족시킬 수 있다. interface test test라는 키를 갖고 값으로 문자열인자를 1개 받아 불린 결과를 반환하는 함수가 온다. { test(str) { return true; } } interator interface next라는 키를 갖는다. 값으로 인자를 받지 않고, IteratorResultObject를 반환하는 함수가 온다. IteratorResultObject는 value와 done이라는 키를 갖고 있다. 이 중 done은 계속 반복할 수 있을지 없을지에 따라 불린값을 반환한다. ..

코드스피츠 77 ES6+ 2회차 노트

코드스피츠 77 - ES6+ 1/2회차 인사이드 자바스크립트, 자바스크립트를 말하다. 좋은 책이나, 3.1버전의 자바스크립트 엔진 기반으로 설명 되어있다. 현대 ES5이후의 자바스크립트 엔진이 달라졌다. 해마다 엔진 스펙이 달라진다. 엔진 스펙을 공부한다고해서 그게 장점이 되지 않는다. 그러면 뭘 배우냐? 작동원리 보다는 자바스크립트 자체의 추상적인 의미나, 체계를 배우는 게 훨씬 이득이다. 자바스크립트 엔진은 statement를 record로 바꿔주고, Record를 처리 하고, 그 다음 Record를 처리 하는 방식으로 동작한다. statement와 record는 대응 된다. Flow control statement들은 Completion Record로 바뀐다. 그리고 Record를 뭘 선택할지 결정..

코드스피츠 77 ES6+ 1회차 노트

어떤 언어나 프레임워크와 같이 떠내려가지 않게 근본에 대해 공부해야 한다. 프로그램에도 합리주의, 상대주의 철학이 내포되어 있다. 켄트 벡이 말한 프로그램을 작성하는데 3가지를 내포하고 있어야 한다. 가치 의사소통 단순함 유연함 원칙 지역화 중복제거 대칭성 패턴 개발론 설계론 각종 적용 패턴 동기 돈 시간 위에 대해서 켄트벡의 구현 패턴에서 설명하고 있다. 프로그램을 짰을때, 왜 이렇게 했는지? 설명할 수 있어야 한다. 프로그램이 뭔데? 컴퓨터가 뭔데?를 물어보면 그 사람의 기본 지식을 알 수 있다. Program & Timing Language code - Lint Time Machine language - Compile Time File Load 파일이 컴퓨터 메모리에 적재 메모리에 적재 된 것만 프..

반응형