'분류 전체보기'에 해당되는 글 65건

  1. 2018.10.16 백엔드 세미나 ( 10/ 13 ) 1
  2. 2018.10.16 예외 처리
  3. 2018.10.12 [번역]ES6 축약코딩 기법 19가지
  4. 2018.10.12 JSON Web Token
  5. 2018.10.10 sequelize 추가 사항
  6. 2018.10.09 sequelize option
  7. 2018.10.09 패키지 버전 이해하기
  8. 2018.10.09 cluster
  9. 2018.10.08 global 객체
  10. 2018.10.08 uri 인디코딩
백엔드 세미나 ( 10/ 13 )

Git

client 저장 되어 있어서 리모트가 날아가도 괜찮음 ( .git으로 인해)

git init -> .git 파일 생김
git push -u origin master ( 옵션은 굳이 사용하지 않아도 되지만 개발자들은 명시적인 걸
좋아하는거 같다 )

git add -> staging area에 동기화가 되면서 git status에 적용

git commit -> breanch에 적용

git reset의 옵션
--soft brench만 날림
--mixed index(staging area)까지 날림
--hard work space까지 모두 날려 버림


자주 사용
add
commit
push

reset
checkout

git log를 하면 hash값들을 볼 수 있다

rebase - 부모를 최신으로 할당

commit --amend ( 스쿼시 커밋 ) 전 커밋에 커밋? 그래서 해쉬값이 바뀜

git remote add NAME 주소
git config --list에서 확인 할 수 있다

git push --force (강제로 내껄로 맞춤)

브랜치 만들기 git checkout -b 브린치 이름 ( -t )

rebase로 head를 변경 -> 그럼 해쉬값이 새로 만들어짐

SPOF
문제점 하나 죽으면 다 죽음 배포도 오래걸림

MSA
서버리스
AWS 람다



redis
rabbitMQ
카프카

mysql
posgerSQL
MongoDB


Posted by Yuni-Q

2018. 10. 16. 10:23 Back-End/Rails

예외 처리

begin
  # exception일수도 있고 아닐수도 있는 코드
rescue SomeExceptionClass => some_variable
  # 어떤 excpetion을 처리하는 코드
rescue SomeOtherException => some_other_variable
  # 또 다른 excpetion을 처리하는 코드
else
  # exception이 raise되지 않은 경우 실행할 코드
ensure
  # exception이 있던 없던 무조건 실행될 코드
end


'Back-End > Rails' 카테고리의 다른 글

Ruby 스트링을 datetime로 만들기  (0) 2018.10.02
Random한 변수 생성  (0) 2018.10.02
루비 변수  (0) 2018.10.01
함수 생성자  (0) 2018.10.01
Node 프로그래밍 시 유의사항 ver.3 배열  (0) 2018.09.20
Posted by Yuni-Q

출처 : https://chanspark.github.io/2017/11/28/ES6-%EA%BF%80%ED%8C%81.html


1. 삼항조건 연산자 (The Ternary Operator)

const answer = x > 10 ? " greater than 10" : x 


2. 간략계산법 (Short-circuit Evaluation)
variable1 = 'foo';
variable2 = variable1  || '';
console.log(variable2); // prints foo


3. 변수 선언

 let x, y, z=3;

4. If Presence
if (likeJavaScript)

5. For 루프
for (let index of allImgs)
[2, 5, 9].forEach(logArrayElements);

7. 십진수 지수 (Decimal base exponents)

for (let i = 0; i < 1e7; i++) {}

// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

8. 객체 프로퍼티
const obj = { x, y };

9. 애로우(화살표) 함수
list.forEach(item => console.log(item));

10. 묵시적 반환(Implicit Return)

11. 파라미터 기본 값 지정하기(Default Parameter Values)

12. 템플릿 리터럴 (Template Literals)
const db = `http://${host}:${port}/${database}`;

13. 비구조화 할당 (Destructuring Assignment)
const { store, form, loading, errors, entity:contact } = this.props;

14. 여러줄로 문자열 쓰기 (Multi-line String)

15. 전개 연산자 (Spread Operator)
const nums = [2, ...odd, 4 , 6];


16. 필수(기본) 파라미터 (Mandatory Parameter)

기본적으로 자바스크립트는 함수의 파라미터값을 받지 않았을경우, undefined로 지정합니다. 다른 언어들은 경고나 에러 메시지를 나타내기도 하죠. 이런 기본 파라미터 값을 강제로 지정하는 방법은 if 문을 사용해서 undefined일 경우 에러가 나도록 하거나, ‘Mandatory parameter shorthand’을 사용하는 방법이 있습니다.

기존:

function foo(bar) {
  if(bar === undefined) {
    throw new Error('Missing parameter!');
  }
  return bar;
}

축약기법:

mandatory = () => {
  throw new Error('Missing parameter!');
}

foo = (bar = mandatory()) => {
  return bar;
}


17. Array.find

pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

18. Object [key]

Foo.bar 를 Foo[‘bar’] 로 적을 수 있는걸 알고 있나요? 왜 후자와 같이 코딩을 해야하는지 의문이 들 수도 있겠지만, 재사용이 용이한 코드 블락을 작성하기 위해서는 매우 효율적인 방법입니다.

아래의 간단한 validation 함수 예시를 확인해보세요:

function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}

console.log(validate({first:'Bruce',last:'Wayne'})); // true

위 함수로 validation기능을 완벽하게 사용할 수 있습니다. 하지만 form 요소들과 validation 옵션으로 사용해야하는 영역과 규칙(fields and rules) 이 많을 경우 위의 함수는 점점 복잡해지고 길어지게 됩니다. 이를 방지하기 위해서 실행시 옵션을 부과할 수 있는 포괄적인 validation 함수를 작성하는 방법을 알아보겠습니다.

축약기법:


// object validation rules (객체로 만든 validation 규칙)
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}

// universal validation function (공통적으로 사용할 수 있는 validation 함수)
const validate = (schema, values) => {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}

console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true

위 예시처럼 사용한다면 모든 form에 공통으로 적용시킬 수 있는 validation 함수를 작성할 수 있습니다.


19. 단항 비트 논리부정 연산자 (Double Bitwise NOT)


비트 연산자는 자바스크립트 공부를 시작하면서 한번 배운뒤 한번도 적용해본적 없는 연산자일 겁니다. 애당초 이진법으로 코딩하지 않는다면 1 과 0 을 사용 할 일이 없죠.

하지만 이번 팁은 단항 비트 논리부정 연산자를 효율적으로 사용할 수 있는 방법을 알려드립니다. 바로 Math.floor() 함수의 대체용으로 사용할 수 있다는 것이죠. 또 Math.floor() 함수보다 훨씬 빠르게 작동한다는 장점도 있습니다. 단항 비트 논리부정 연산자에 대해서는 여기에서 더 알아보실 수 있습니다.

기존:

Math.floor(4.9) === 4  //true

축약기법:

~~4.9 === 4  //true


'Back-End > Node' 카테고리의 다른 글

JSON Web Token  (0) 2018.10.12
sequelize 추가 사항  (0) 2018.10.10
sequelize option  (0) 2018.10.09
패키지 버전 이해하기  (0) 2018.10.09
cluster  (0) 2018.10.09
Posted by Yuni-Q

2018. 10. 12. 17:19 Back-End/Node

JSON Web Token

JSON Web Token


■ JSON Web Token (JWT) 은 웹표준 (RFC 7519) 으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해 주는 것 (2015년 5월)

■ C, Java, Python, C++, R, C#, PHP, JavaScript, Ruby, Go, Swift 등 대부분의 주류 프로그래밍 언어에서 지원 (수많은 회사의 인프라스트럭쳐에서 사용 되고 있습니다 (Facebook, LinkedIn, Instagram, GitHub, Google 등)

■  필요한 모든 정보를 자체적으로 지니고 있습니다. JWT 시스템에서 발급된 토큰은, 토큰에 대한 기본정보, 전달 할 정보 그리고 토큰이 검증됐다는것을 증명해주는 signature 를 포함

■ JWT 는 자가수용적이므로, 두 개체 사이에서 손쉽게 전달 될 수 있습니다. 웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있음



■ 수많은 프로그래밍 언어에서 지원

■ 자가 수용적 (self-contained)

■ 쉽게 전달 가능


토큰만 다룬다. 도메인 사용자를 그대로 사용하고, 도메인 사용자와 토큰간의 맵핑 테이블을 이용한다(주로 속도가 빠른 키-값 저장소 이용).

 네트워크 구간에서 변조가 불가능하다. 변조되면 토큰은 무효화된다. 

 네트워크 구간에서 탈취 당해도 유효 기간(ttl) 또는 리프레시 가능 기간(refresh_ttl)이 지나면 무효화된다.

 토큰 안에 사용자를 식별하기 위한 정보를 담고 있다. 즉, 토큰만 해독하면 사용자를 식별할 수 있다.

 캡티브 API, 소형 API 서비스에 어울린다

 생성했다는 사실을 증명할 수 있다.(서명)

 JSON타입으로 변수 정보를 저장할 수 있다.

 서버에서 쿼리하지 않아도 사용자를 로컬에서 검증할 수 있기 때문에 API 호출의 횟수를 줄일 수 있다.


■ 회원 인증 : 서버측에서는 유저의 세션을 유지 할 필요가 없습니다. 즉 유저가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 유저가 요청을 했을때 토큰만 확인하면 되니, 세션 관리가 필요 없어서 서버 자원을 많이 아낄 수 있습니다.


■ 정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법입니다. 그 이유는, 정보가 sign 이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있습니다.

Header 는 두가지의 정보를 지니고 있습니다.

typ: 토큰의 타입을 지정합니다. 바로 JWT 이죠.

alg: 해싱 알고리즘을 지정합니다.  해싱 알고리즘으로는 보통 HMAC SHA256 혹은 RSA 가 사용되며, 이 알고리즘은, 토큰을 검증 할 때 사용되는 signature 부분에서 사용됩니다.


Payload 부분에는 토큰에 담을 정보가 들어있습니다. 여기에 담는 정보의 한 ‘조각’ 을 클레임(claim) 이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.

클레임 의 종류는 다음과 같이 크게 세 분류로 나뉘어져있습니다:

등록된 (registered) 클레임,

공개 (public) 클레임,

비공개 (private) 클레임


모든 값이 필수 값은 아니지만 기본값이 정해져있다. 선택적으로 이용하면 된다.


 iss: 토큰 발급자 (issuer)

 sub: 토큰 제목 (subject)

 aud: 토큰 대상자 (audience)

 exp: 토큰의 만료시간 (expiraton), 시간은 NumericDate 형식으로 되어있어야 하며 (예: 1480849147370) 언제나 현재 시간보다 이후로 설정되어있어야합니다.

 nbf: Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념입니다. 여기에도 NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지는 토큰이 처리되지 않습니다.

 iat: 토큰이 발급된 시간 (issued at), 이 값을 사용하여 토큰의 age 가 얼마나 되었는지 판단 할 수 있습니다.

 jti: JWT의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용됩니다. 일회용 토큰에 사용하면 유용합니다.


공개 클레임들은 소유권을 주장을 정의하기 위해 사용하는 name space 부분의 제어 이름 입니다.

충돌이 방지된 (collision-resistant) 이름을 가지고 있어야 합니다. 충돌을 방지하기 위해서는, 클레임 이름을 URI 형식으로 짓습니다.

{

    "https://velopert.com/jwt_claims/is_admin": true

}

등록된 클레임도아니고, 공개된 클레임들도 아닙니다. 양 측간에 (보통 클라이언트 <->서버) 협의하에 사용되는 클레임 이름들입니다. 공개 클레임과는 달리 이름이 중복되어 충돌이 될 수 있으니 사용할때에 유의해야합니다.

보통 라이브러리를 사용하면 비공개 클레임만 작성하면 된다.

{

    "username": "velopert"

}


{
    "iss": "velopert.com",
    "exp": "1485270000000",
    "https://velopert.com/jwt_claims/is_admin": true,
    "userId": "11028373727102",
    "username": "velopert"
}
위 예제 payload 는 2개의 등록된 클레임, 1개의 공개 클레임, 2개의 비공개 클레임으로 이뤄져있습니다.



JSON Web Token 의 마지막 부분은 바로 서명(signature) 입니다. 이 서명은 헤더의 인코딩값과, 정보의 인코딩값을 합친후 주어진 비밀키로 해쉬를 하여 생성합니다.
서명 부분을 만드는 슈도코드(pseudocode)의 구조는 다음과 같습니다.
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Bearer token이라고 하는 보안 token 관련 HTTP 인증 체계
Bearer token이란?
대개 로그인 요청에 대한 응답으로 서버에서 생성되는 암호문
Bearer 인증 방식은 원래 RFC 6750 에서 OAuth 2.0의 일부로 작성 되었지만 때로는 자체적으로도 사용 
Basic 인증 과 마찬가지로 Bearer 인증은 HTTPS (SSL)를 통해서만 사용해야합니다.

베어러 토큰은 일반적으로 서버에 의해 생성 bearerFormat되므로 클라이언트에 대한 힌트로 문서 목적으로 주로 사용됩니다
bearerAuth : []의 대괄호 []는 API 호출에 필요한 보안 범위 목록을 포함합니다. 범위는 OAuth 2 및 OpenID Connect 에서만 사용되므로 목록은 비어 있습니다. 
위의 예에서 Bearer 인증은 전체 API에 전역 적으로 적용됩니다. 
베어러 인증은 여러 인증 유형 사용 에서 설명한대로 다른 인증 방법과 결합 할 수도 있습니다 .
적절한 베어러 토큰을 포함하지 않는 요청에 대해 반환 된 401 "Unauthorized"응답을 정의 할 수 있습니다.

---

출처: http://bcho.tistory.com/999 [조대협의 블로그]


결과적으로 차이점은 토큰을 생성하는 단계에서는 생성된 토큰을 별도로 서버에서 유지할 필요가 없으며


토큰을 사용하는 API 서버 입장에서는 API 요청을 검증하기 위해서 토큰을 가지고 사용자 정보를 별도로 계정 시스템 등에서 조회할 필요가 없다는 것이다. 

---


'Back-End > Node' 카테고리의 다른 글

[번역]ES6 축약코딩 기법 19가지  (0) 2018.10.12
sequelize 추가 사항  (0) 2018.10.10
sequelize option  (0) 2018.10.09
패키지 버전 이해하기  (0) 2018.10.09
cluster  (0) 2018.10.09
Posted by Yuni-Q

자주 쓰이는 연산자 

Op.gt    :    초과

Op.gte    :    이상

Op.lt    :    미만

Op.lte    :    이하

Op.ne    :    같지 않음

Op.or    :    또는

Op.in    :    배열 중 하나 요소

Op.notin    :    해열 요소와 모두 다름


User.findAll({
attributes: ['id', 'name'],
where: {
[Op.or]: [{ married: 0 }, { age: { [Op.gt]: 30 } }],
},
// order은 배열 안에 배열
order: [['age', 'DESC']],
limit: 1,
offset: 0,
});


'Back-End > Node' 카테고리의 다른 글

[번역]ES6 축약코딩 기법 19가지  (0) 2018.10.12
JSON Web Token  (0) 2018.10.12
sequelize option  (0) 2018.10.09
패키지 버전 이해하기  (0) 2018.10.09
cluster  (0) 2018.10.09
Posted by Yuni-Q

2018. 10. 9. 18:22 Back-End/Node

sequelize option

VARCHAR = STRING

INT = INTEGER

TINYINT = BOOLEAN

DATETIME = DATE

INT에 UNSIGNED ( 양수만 사용 ) = INTEGER.UNSIGNED

ZEROFILL = INTEGER.UNSIGNED.ZEROFILL

NOT NULL = allowNull

UNIQUE = unique

DEFAULT = defaultValue

now() = sequelize.literal('now()')


timestamps 가 true면 createdAt과 updatedAt 칼럼 추가

timestamps가 true일 때 paranoid true면 deletedAt 칼럼 추가

underscored는 카멜케이스를 스네이크 케이스로 변경

tableName는 테이블 이름을 다른것으로 설정

'Back-End > Node' 카테고리의 다른 글

JSON Web Token  (0) 2018.10.12
sequelize 추가 사항  (0) 2018.10.10
패키지 버전 이해하기  (0) 2018.10.09
cluster  (0) 2018.10.09
global 객체  (0) 2018.10.08
Posted by Yuni-Q

Major ( 하위 호환이 되지 않는 변경 사항 )

Minor ( 하위 호환이 되는 변경 사항 )

Patch ( 간단한 버그 수정 )


^ : minor 버전까지

~ : patch 버전까지

>, <, >=, <=, = 도 사용 !!


@latest : 항상 최신 버전

'Back-End > Node' 카테고리의 다른 글

sequelize 추가 사항  (0) 2018.10.10
sequelize option  (0) 2018.10.09
cluster  (0) 2018.10.09
global 객체  (0) 2018.10.08
uri 인디코딩  (0) 2018.10.08
Posted by Yuni-Q

2018. 10. 9. 14:43 Back-End/Node

cluster

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus.length;

if (cluster.isMaster) {
console.log(`마스터 프로세스 아이디 : ${process.pid}`)
// CPU 개수만큼 워커를 생산
for (let i = 0; i < numCPUs; i += 1) {
cluster.fork();
}
// 워커가 종료 되었을 때
cluster.on('exit', (worker, code, signal) => {
console.log(`${worker.process.pid}번 워커가 종료되었습니다.`);
// 다시 워커 생성
cluster.fork();
});
} else {
// 워커가 포트에서 대기
http.createServer((req, res) => {
res.write(`<h1>Hello Node</h1>`);
res.end(`<p>Hello Cluster!</p>`);
}).listen(8085);

console.log(`${process.pid}번 워커 실행`)
}


'Back-End > Node' 카테고리의 다른 글

sequelize option  (0) 2018.10.09
패키지 버전 이해하기  (0) 2018.10.09
global 객체  (0) 2018.10.08
uri 인디코딩  (0) 2018.10.08
Promis.all  (0) 2018.10.08
Posted by Yuni-Q

2018. 10. 8. 16:57 Back-End/Node

global 객체

console.time(레이블) : console.timeEnd(레이블) 대응되어
같은 레이블을 가진 time과 timeEnd 사이의 시간을 측정합니다.
console.log(내용) : 평범한 로그를 콘솔에 표시합니다.
console.error(에러 내용) : 에러를 콘솔에 표시 합니다.
console.dir(객체, 옵션) : 객체를 콘솔에 표시할 사용합니다.
console.trace(레이블) : 에러가 어디서 발생했는지 추적할 있게 해줍니다.

setTimeout(콜백함수, 밀리초) : 주어진 밀리초 이후에 콜백 함수를 실행합니다.
setInterval(콜백함수, 밀리초) : 주어진 밀리초마다 콜백 함수를 반복합니다.
setImmediate(콜백함수) : 콜백 함수를 즉시 실행합니다.
타이머들은 모두 아이디를 반환 합니다.
clearTimeout(아이디)

__filename : 현재 파일명
__dirname : 파일 경로

module.exports === exports // true
exports에는 반드시 객체처럼 속성명과 속성값을 대입해야합니다
exports와 module.exports는 동시에 사용하지 않는 것이 좋습니다.

process.env : 시스템 환경 변수
process.nextTick : 이벤트 루프가 다른 콜백 함수들보다 우선으로 처리하도록 만듭니다.
Promise도 nextTick처럼 우선시 되기 때문에 마이크로테스크라고 따로 구분지어 부릅니다.
process.exit(코드) : 서버 종료


'Back-End > Node' 카테고리의 다른 글

패키지 버전 이해하기  (0) 2018.10.09
cluster  (0) 2018.10.09
uri 인디코딩  (0) 2018.10.08
Promis.all  (0) 2018.10.08
funtion과 화살표 함수  (0) 2018.10.08
Posted by Yuni-Q

2018. 10. 8. 16:18 Back-End/Node

uri 인디코딩

encodeURIComponent : uri 인코딩


decodeURIComponent : uri 디코딩

'Back-End > Node' 카테고리의 다른 글

cluster  (0) 2018.10.09
global 객체  (0) 2018.10.08
Promis.all  (0) 2018.10.08
funtion과 화살표 함수  (0) 2018.10.08
노드의 장단점  (0) 2018.10.08
Posted by Yuni-Q

블로그 이미지
https://github.com/Yuni-Q/TIL에 정리하기 전 잊지 않기 위해 간단하게 메모해 두는 곳입니다.
Yuni-Q

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.8
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

최근에 올라온 글

최근에 달린 댓글

글 보관함