본문 바로가기

분류 전체보기

(48)
[Clean Architecture] 컴포넌트 사이의 관계와 원칙(2) : SDP SDP(안정된 의존성 원칙)란? 안정성의 방향으로(더 안정된 쪽에) 의존하라 즉, 변경하기 어려운 모듈이 변경하기 쉽게 만들어진 모듈에 의존하지 않도록 만들어야한다. 그렇다면 안전성이란? 사전적으로는 ‘쉽게 움직이지 않는’으로 정의. 안정성은 변경을 위해 필요한 작업량과 관련된다. 안정성이 높으면 상당한 작업량이 필요함. (탁자를 뒤집는 것과 옆으로 세워진 동전을 넘어뜨리는 것을 생각해보자) 소프트웨어 관점에서의 안정성 컴포넌트 변경이 어려운 요인에는 크기, 복잡도, 간결함 등이 있음. 컴포넌트 변경이 어려운 가장 확실한 방법은 “수많은 컴포넌트가 해당 컴포넌트에 의존하게 만드는 것이다.” 안정적인 컴포넌트 - X는 안정된 컴포넌트. - 세 컴포넌트가 x에 의존함에 따라 X컴포넌트는 변경하지 말아야할 이..
[Javascript] ES6 Array helper 배열과 관련된 작업을 보다 깔끔하게 처리할 수 있는 ES6의 Array helper에 대해서 알아보자. 1) forEach 배열의 요소를 하나씩 반환하여 함수를 실행. const example_array = ['apple','banana','peach','blue berry']; example_array.forEach((elem)=>{ //배열의 요소를 elem이라는 변수로 하나씩 파라미터로 전달한다. console.log(elem); }); 2) map 배열의 각 요소에 대해 주어진 함수로 처리되어 리턴된 새로운 배열을 만들어 준다. return이 없는 요소의 경우는 undefined처리가 됨. const example_array = ['apple','banana','peach','blue berry'..
[Javascript] 싱글스레드 기반 이벤트 루프와 비동기 동기/비동기란? 1) 동기 동기란 Request를 보내는 시기와 Response를 받는 시기가 일치. 요청을 하게 되면 응답이 올 때까지 프로그램은 정지하고 응답이 오면 다시 진행됨. const longTimeTask = () => { // 시간이 오래 걸리는 작업 console.log('시간이 오래 걸리는 작업'); for(let i = 0 ; i < 100000000 ; i++){ console.log("."); } }; console.log('시작'); longTimeTask(); console.log('종료'); 2) 비동기 Request와 Response가 동시에 일어나지 않음. 비동기로 수행을 할 경우, Request를 보낸 후, Response를 기다리지 않고 다음 작업을 바로 진행. con..
[Clean Architecture] 컴포넌트 사이의 관계와 원칙(1) : ADP ADP (의존성 비순환 원칙) 란? 컴포넌트 의존성 그래프에 순환이 있어서는 안 된다. ADP를 이야기하기 전에 숙취 증후군에 대해서 알아보자. 숙취 증후군은 당신이 하루종일 작업하여 무언가를 작동하게 만들어 놓았지만, 그 기능이 의존하는 무언가를 다른 팀이 수정하여, 다음 날 출근하면 그 기능이 전혀 돌아가지 않는 것을 이야기한다. 숙취 증후군 해결책으로 두 가지 방법이 발전되어 왔는데 하나씩 알아보도록 하자. 1. 주단위 빌드 모든 개발자는 일주일의 첫 4일 동안은 각자 개발을 진행한다. 금요일이 되면 변경된 코드를 모두 통합하여 시스템을 빌드하는 작업을 진행한다. 하지만 금요일 안에 모든 작업이 완료되지 못하는 경우가 발생하고, 결국 기존에 계획했던 4일 개발 하루 통합이 지켜지지 못하는 상황이 발..
[Javascript] Scope와 변수 선언 (var, let, const) 키워드 차이점 스코프(Scope) 식별자 접근 규칙에 따른 유효 범위를 말함. 식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재한다. 범위는 중괄호(블록) 또는 함수에 의해 나눠진다. 각각 Block Scope, Function Scope라고 불린다. function scopeExample(){ //Function Scope var local = 'Seoul'; console.log(local); { //Block Scope let name = 'Jook'; console.log(`${name} lives in ${local}`); } } 스코프 주요 규칙 1. 안쪽 스코프에서 바깥쪽 스코프로 접근할 수 있지만, 반대는 불가하다. 바깥쪽 스코프에서 선언한 식별자는 안쪽 스코프에서 사용가능. 안쪽 스코프에서 ..
[Javascript] Hoisting이란? 호이스팅이란? 코드 실행 전, 변수/함수선언이 파일의 맨 위로 끌어 올려진 "것 같은 현상"을 이야기한다. Hoisting이 발생하는 이유 자바스크립트 엔진 동작의 특징 때문! 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정을 거침 (실행 컨텍스트를 위한 과정) 코드를 실행하기 전 실행 컨텍스트를 위한 과정에서 모든 선언들(var, let, const, function, class)을 메모리에 저장. 코드 실행 전 이미 변수/함수 선언이 메모리에 저장되어 있기 때문에 선언문보다 참조/호출이 먼저 나와도 오류 없이 동작. (정확히는 var 키워드로 선언한 변수와 함수 선언문일 경우 오류 없이 동작.) 따라서 이는 선언이 파일의 맨 위로 끌어올려진 것 처럼 보이게 한다. *실행 컨텍스트는 실..
[Javascript] ES6 문법 정리 ECMAScript란? ECMAScript(ES)는 자바스크립트를 표준화 하기 위해 만들어진, ECMA-262 기술 규겨에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 말함. 1) const / let const - 객체와 함께 사용할 때를 제외하고는 변경이 불가능한 변수. 상수로 사용. ex) react에서 특정 이벤트를 실행하는 버튼이 있거나 특정 요소를 정의하는데에 const를 사용. let - 새로운 값을 받을 수도 있고 재할당할 수도 있음. *var을 쓰지않고 const/let을 사용하는 이유는 var의 hoisting현상을 피하기 위함이다. 2) 화살표 함수 function 키워드 없이 함수를 만들 수 있음. return 키워드 없이 식을 계산한 값이 자동으로 반환. ()안에 함수의..
[DevOps]DevOps란 무엇일까? 최근 사내에서 CICD 프레임워크 도입으로 꽤나 큰 규모로 배포시스템의 변화가 생기게 되었습니다. Jenkins, Jira 등등... 많이 들어본 이름이지만 상당히 생소한 용어였기에 새로운 배포시스템을 도입하면서 간간히 공부하였지만, 따로 정리는 하지 않았기에 이번에 DevOps의 개념부터 시작하여 정리해보려고 합니다. DevOps는 신규 배포시스템 도입의 전조같은 느낌으로 사내에서 주요되는 이슈로 등장했습니다. 이후 신규 배포시스템 도입 프로젝트 (ALM 프로젝트)가 시작되면서, 이것이 DevOps문화와 관련이 된다는 것을 알아차릴 수 있었습니다. 그 흐름에 따라서 DevOps에 대한 간단한 개념부터 알아보도록 합시다. DevOps란 애플리케이션 개발의 품질과 속도를 개선하고, 소프트웨어 기능 및 제품..