본문 바로가기
반응형

전체 글202

[ES 6] 블록 스코프 let과 상수 const 1. 블록 스코프 변수 선언 - let let 키워드로 선언한 변수를 블록 스코프 변수라고 한다. 함수 밖에서 선언하면 함수 스코프 변수처럼 쓸 수 있다. 블록 안에서 선언하면 자신을 정의한 블록 또는 하위 블록에서만 접근 가능하며 블록 밖에서는 볼 수 없다. let a = 1; function myFunction() { console.log(a); // 1 let b = 2; if(true) { let c = 3; console.log(b); // 3 } console.log(c); // Reference Error Exception } myFunction(); 기존의 함수 스코프 변수 var과는 다르게 마지막 변수 c를 찍을 때에 에러가 발생한다. 기존 var를 사용하면서 스코프를 착각할 일이 있었던.. 2017. 9. 11.
[Java] 가비지 컬렉션(Garbage Collection, GC)과 알고리즘 1. 가비지 컬렉션 (Garbage Collection, GC)란? 예전의 전통적인 언어인 C 등은 malloc(), free() 등을 이용해서 메모리를 할당하고, 일일이 그 메모리를 거둬야 했다. 하지만 자바 언어에서는 GC 기술을 사용하여 개발자를 메모리 관리로부터 좀 더 자유롭게 해주었다. GC 즉 가비지 컬렉션은 자바 애플리케이션에서 사용하지 않는 메모리를 자동으로 거둬들이는 기능을 말한다. 2. 메모리 영역과 JVM의 GC 관리 * 각 영역 별 설명은 이전 글을 참조하기 바란다. 이전 글 : 2017/09/08 - [Java] - [Java] JVM의 구조와 이해 - Minor GC New/Young 영역의 GC를 Minor GC라고 부른다. Eden 영역은 자바 객체가 생성되자마자 저장되는 곳.. 2017. 9. 8.
[Java] JVM의 구조와 이해 1. JVM (Java Virtual Machine)이란? 자바 가상 머신(Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다. * JV.. 2017. 9. 8.
SSO (Single Sign On)란? 1. SSO (Single Sign On)란? SSO는 하나의 통합된 계정으로 한 번의 로그인으로 다른 독립된 시스템들을 같이 사용할 수 있게 해주는 기능이다. 예를 들어서 구글 이메일 사이트에 로그인하면 구글 드라이브나 구글 검색 엔진에 별도로 로그인하지 않고도 같은 계정으로 자동 로그인된 상태로 사이트를 이용할 수 있게 해주는 기능이다. 여러 가지 구현 방식이 있지만 근래에는 SAML (Security Assertion Markup Language)나 OAuth 2.0과 같은 표준 기술들을 많이 사용하고 있다. 보통은 아키텍처의 Access 계층의 Reverse Proxy 계층에서 SSO 기술을 적용한다. 2017. 9. 7.
[Java] 람다 표현식, 람다란? 1. 람다 표현식(Lambda Expressions)이란? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. * 람다의 특징 A. 익명 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. B. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. C. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. D. 간결성 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다식의.. 2017. 9. 6.
[Javascript] Javascript 바인딩 1. 기본 바인딩 첫 번째 규칙. 가장 평범한 함수 호출인 '단독 함수 실행'에 관한 규칙으로 다른 나머지 규칙에 해당하지 않 을 경우 적용되는 this의 기본 규칙이다. function foo() { console.log(this.a); } var a = 2; foo(); // 2 위 예제 var a = 2처럼 전역 스코프에 변수를 선언하면 변수명과 동일한 이름의 전역 객체 프로퍼티가 생성된다. foo() 함수 호출 시 this.a는 전역 객체 a다. 기본 바인딩이 적용되어 this는 전역 객체를 참조한다. 하지만 엄격 모드에서는 전역 객체가 기본 바인딩 대상에서 제외된다. 2. 암시적 바인딩 두 번째 규칙. 호출부에 콘텍스트 객체가 있는지, 즉 객체의 소유/포함 여부를 확인하는 것이다. functio.. 2017. 8. 31.
[Javascript] Javascript 프로토타입 (Prototype) 1. Javascript 프로토타입 (prototype)? 명세에 따르면 자바스크립트 객체는 [[prototype]]이라는 내부 프로퍼티가 있고 다른 객체를 참조하는 단순 레퍼런스로 사용한다. 2017/08/31 - [Javascript] - [Javascript] Javascript 프로퍼티 서술자 (Getter/Setter) 위 링크 글 exObject.a처럼 객체 프로퍼티 참조 시 [[Get]]이 호출된다고 했었다. 또한 exObject에 a라는 프로퍼티가 없으면 [[prototype]] 링크를 따라가면서 찾는다고 했었다. 아래의 예제에서 Object.create(..) 함수는 특정 객체의 [[Prototype]]링크를 가진 객체를 생성한다. var anotherObject = { a: 2 }; /.. 2017. 8. 31.
[Javascript] Javascript의 확장 금지, 봉인, 동결 1. 확장 금지 확장 금지란, 객체에 더는 프로퍼티를 추가할 수 없게 차단하고 현재 프로퍼티는 있는 그대로 놔두고 싶을 때 Object.preventExtensions(..)를 호출한다. 여기서 비엄격 모드에서는 프로퍼티를 추가해도 조용히 실패하지만 엄격 모드에서는 TypeError가 난다. var exObject = { a : 2 }; Object.preventExtensions(exObject); exObject.b = 3; exObject.b; // undefined 2. 봉인 Object.seal(..) 함수는 봉인된 객체를 생성한다. 즉, 어떤 객체에 대해 Object.preventExtensions(..)를 실행하고 프로퍼티를 전부 configurable : false 처리한다. 결과적으로 더.. 2017. 8. 31.
[Javascript] Javascript 프로퍼티 서술자 (Getter/Setter) 1. Javascript의 프로퍼티 서술자 단순하게 말하면 데이터를 담아두는 Property (속성)이다. ES5부터 모든 프로퍼티는 프로퍼티 서술자 (Property Descriptor)로 표현된다. var exObject = { a : 2 }; Object.getOwnPropertyDescriptor(exObject, "a"); /* * { * value : 2, * writable : true, * enumerable : true, * configurable : true * } */ 위 예제를 보면 값 (value) 말고도 writable, enumerable, configurable의 세 가지 특성이 더 있다. 이렇게 프로퍼티 생성 시 프로퍼티 서술자에 담긴 기본 특성값을 확인 할 수 있는데, O.. 2017. 8. 31.
[Javascript] Javascript의 실행 컨텍스트와 스코프 1. 자바스크립트의 실행 컨텍스트 (Execution context) 기존 언어를 경험한 사람이라면, 콜 스택을 들어보았을 것이다. 이는 함수를 호출할 때 해당 함수의 호출 정보가 차곡차곡 쌓여있는 스택을 의미한다. 실행 컨텍스트는 콜 스택에 들어가는 실행 정보 하나와 비슷하다. ECMAScript에서는 실행 컨텍스트를 "실행 가능한 코드를 형상화하고 구분하는 추상적인 개념"으로 기술한다. 이를 콜 스택과 연관지어 정의하면, "실행 가능한 자바스크립트 코드 블록이 실행되는 환경"이라고 할 수 있다. ECMAScript에서는 실행 컨텍스트가 형성되는 경우를 세 가지로 규정하고 있는데 전역 코드, eval() 함수로 실행되는 코드, 함수 안의 코드를 실행할 경우이다. ECMAScript에서는 실행 컨텍스트의.. 2017. 8. 30.
JWT의 이해 1. JWT의 이해 근래에 들어서 Claim 기반의 토큰 방식인 JWT (JSON Web Token)가 많이 사용되고 있다. 여기서 Claim은 사용자에 대한 프로퍼티나 속성을 말한다. 토큰 자체가 정보를 가지는 방식인데, JWT는 이 Claim을 JSON을 이용해서 정의한다. 다음은 Claim을 JSON으로 서술한 예이다. { "id" : "john", "role" : ["admin"], "company" : "McDonald's" } JSON은 '\n' 등 줄바꿈 문자가 있기 때문에 REST API 호출 시 HTTP 헤더 등에 넣기가 매우 불편하다. 그래서 JWT에서는 이 Claim JSON 문자열을 Base64 인코딩을 통해 하나의 문자열로 반환한다. 만약에 누군가 토큰을 변조해서 사용한다면 어떻게.. 2017. 8. 30.
REST의 이해 1. REST (Representational Safe Transfer) 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처. HTTP와 JSON을 함께 사용하여 OPEN API를 구현하는 방법으로 주류를 이루고 있으며, 대부분의 OPEN API는 REST 아키텍처를 기반으로 설계 및 구현되고 있다. 2. REST의 기본 REST는 크게 리소스, 메서드, 메시지 3가지 요소로 구성된다. 예를 들어서 'ID가 3인 사용자를 삭제한다'라는 호출이 있을 때 '사용자'는 생성되는 리소스, '삭제한다'라는 행위는 메서드, 'ID가 3인 사용자'는 메시지가 된다. A. HTTP 메서드 HTTP에는 여러가지 메서드가 있지만, REST에서는 CRUD(Create Read Update Delete)에 해당하는 .. 2017. 8. 29.
[Javascript] 함수 호이스팅 (Function Hoisting) 함수 호이스팅 - 함수 선언문 방식과 함수 호이스팅 // 함수 선언문과 함수 호이스팅 add(2, 3); // 5 function add(x , y) { return x + y; } add(3, 4); // 7 위 add함수 호출 부분에서는 add()함수가 정의 되지 않았음에도 호출 하는 것이 가능하다. 이것은 함수 선언문 형태로 정의한 함수의 유효 범위는 코드의 맨 처음부터 시작한다는 것을 알 수 있다. 이것을 함수 호이스팅이라고 부른다. - 함수 표현식 방식과 함수 호이스팅 // 함수 표현식과 함수 호이스팅 add(2, 3); // Uncaught type error var add = function (x , y) { return x + y; }; add(3, 4); // 7 add()함수는 함수 표.. 2017. 8. 29.
[Javascript] 함수의 생성 Javascript 함수 생성 방법 - 함수 선언문 방식 - 함수 표현식 방식 - Function() 생성자 함수 1. 함수 선언문 방식 // add 함수 선언문 function add(x, y) { return x + y; } console.log(add(3,4)); // 7 2. 함수 표현식 방식 익명 함수 표현식 // add 함수 표현식 var add = function (x, y) { return x + y; }; var plus = add; console.log(add(3, 4)); // 7 console.log(plus(3, 4)); // 7 기명 함수 표현식 // add 함수 표현식 var add = function sum(x, y) { return x + y; }; console.log(a.. 2017. 8. 29.
DevOps란? 1. DevOps란? 개발과 운영이 분리되면서 오는 문제점을 해결하기 위해서 개발과 운영 나아가 테스트까지 하나의 조직으로 합쳐 팀을 운영하는 문화이자 방법론. 2. DevOps를 적용하려면? Cross Functional Team 하나의 팀에 각각 다른 역할을 할 수 있는 팀원들로 세트업 해서 전체 End 2 End 서비스를 운용할 수 있도록 한다. 한 팀 내에서 서비스의 기획부터 운영 그리고 영업까지 해당 서비스에 관련된 모든 것을 할 수 있는 구조로 팀을 구성한다. Widely Shared Metric 팀 전체가 기준으로 삼을 수 있는 서비스에 대한 공통적인 지표를 둔다. 예를 들어, 하루 방문자 수, 평균 체류 시간, 가입자 수와 같은 비즈니스 지표부터 CPU 사용률, 메모리 사용률, 응답 시간 .. 2017. 8. 29.
반응형