728x90
📍 33일 차 12.9. 목. 실시간 강의
오늘은 graphQL, 인증에 대해서 배웠다. 실습시간 마지막에는 HTTP / HTTPS(SSL)의 차이, cookie-session, JWT 방식의 차이에 대해서 알려주셨는데 너무 유익했다. restAPI와 graphQL의 차이는 내겐 스승과도 같으신 튜터님 미디움을 참고하면 도움이 많이 된다.
❏ REST API vs gql API
gql은 하나의Endpoint만 존재REST API는End point마다 데이터베이스SQL쿼리가 달라짐gql API는gql스키마의 타입마다 데이터베이스SQL쿼리가 달라짐
❏ GraphQL
- FACEBOOK에서 2015년에 발표한 새로운 api 규격
type system을 기본적으로 갖추고 있어서REST보다 훨씬 안정적Apollo,Prisma등 방대하고 강력한 오픈 소스 툴들로 양질의 개발자 경험 개선을 기대한다.SDL(Schema Definition Language): 서버에 무엇을 질의하여 값을 돌려받기를 원할 때SDL로 기술(명확한 타입을 정의하여 기술)CLI로post요청 시 쌍 따옴표를 빼도 보내진다.
❏ OAuth
- 접근권한 위임을 위한 공개 표준
- 유저 진입장벽이 매우 낮아짐(원클릭으로 로그인 가능)
- 유저가 비밀번호를 기억할 필요가 없어짐
- 유저 허용 여부에 따라 이메일, 프로필 사진, 닉네임 등의 기본 정보를 얻을 수 있다.
728x90
❏ 기타 내용들
- 프로젝트를 할 때
F/E를 나누기보다는 기능별로 담당하자(ex,login + front + back/pay + front + back)과 같이 수평적으로 제작) - 프런트와 백을 나눠서 개발하면 속도에서 차이가 난다. (처음은 백엔드가 느리다. DB, 보안, 인프라 등등... 나중엔 반응형 때문에 프론트 개발 속도가 늦어진다. 서로 의견 충돌이 난다. 즉, 전체적인 프로젝트가 늦어지기 때문에 친한친구나 숙련된 분들과 하면 기능별로 쪼개서 개발하는 것을 권장한다.)
- 템플릿 엔진:
html코드인데, 그 안에서 반복, 조건절로view를 만들어줄 때 사용한다.(일일이 따로 만들면 중복되는 코드가 많기 때문에 로직을 붙여서 자동으로html코드를 만들어줄 때)EJS,JADE -> PUG,nunjunks사용빈도:nunjunks→EJS
1. nunjunks: EJS의 상위호환(html을 닮음), junja2의 영향을 받음(flask에서 나온?)
2. EJS: html을 닮음
3. pug: 문법이 특이해서 따로 공부해야함
passport: 로그인 구현 시 편리하게 도와주는 친구, 이게 없으면header,session관리를 직접 해줘야 한다. 써드파티 로그인도 지원한다.- 로그인 혹은 마이페이지를 보여주는 기능 등의 서버로부터 인증을 받아야 하는 상황일 때 선택지는 크게 3가지
cookie,cookie - session,JWT방식이 있다. 서버는 절대 한 개로 운영하지 않고, 2개 이상으로 운영되는데 요청은 한 곳에서 들어온다. 이때 요청을 여러 개의 서버 중 한 곳으로 분배해주는 장치가 필요한데, 이것이LB(load balancer다.AWS에서는ELB(elastic load balancer)라고 부른다.(elastic: 탄력적인, 고무의),cookie-session는DB가 필요하고,JWT는DB가 필요하지 않다. cookie방식은 클라이언트에 저장되는key - value로 이루어진 데이터다. 인증 유효시간을 설정할 수 있고, 유효시간이 정해진다면 클라이언트가 종료되어도 쿠키가 유지된다. 그러나, 중요정보를 쿠키에 담고 있으므로 해커에게 탈취당하면 사용자의 정보를 모두 빼앗길 수 있다. 그래서 쿠키 자체로는 보안과는 상관없는 개인 장바구니, 자동 로그인 설정 등에 사용한다.cookie-session방식은client에서 요청을 보내면server에서cookie의 값을 가지고 있다가cookie와 일치하는session을 해당 서버에서 찾고cookie를 사용자에게 보내준다. 그런데, 여러개의 서버가 연결되어있다고 가정해보자.server 1에 현재cookie를 가지고 있다가 연결이 끊겨 다시LB를 거쳐가서 2번째server로 연결이 되면,cookie가 없기 때문에 지금 요청한 사용자가 인가된 사용자인지 모른다. 이럴 때는 서버에session데이터를 저장하지않고,DB(redis) 를 이용해 해당session데이터를DB에 저장한다.DB에서 쿠키에 맞는 세션 데이터를 찾고 해당하는 데이터가 있으면 리퀘스트를 돌려준다.DB단이 붙었기 때문에 요청량이 많아지면 시간이 오래 걸릴 수 있다.JWT방식은cookie-session방식과 다르게DB단이 필요 없다.JWT는 일종의 신분증이라고 생각하면 편하다.JWT는JSON web Token를 뜻하는데, 토큰의 특성상 위조가 상당히 어렵다. 그러나 한번 탈취되면 보안에 굉장히 취약해진다. 이를 방지하고자 만료시간이 생겼다. 이때 만료시간은 보통 5-30분 길면 1주일 정도로 세팅한다. 요청이 오면JWT를 발급해준다.mypage로 요청이 날아오면 요청과 함께 온JWT가 위조되었는지 확인한다. 서버에 저장되어있는JWT와 일치하면mypage요청을 같이 보내준다.cookie-session방식처럼DB단에서 세션 데이터를 확인할 일이 사라진다.http(80),https(443): 보안 유무,get은URL에post는http.body에 요청이 넘어간다. 그래서http.body도postman같은 프로그램으로 열어볼 수 있다. 따라서http에서get,post의 보안은 안전하지 않다.(id,pw,cookie가 평문으로 날아간다.) 특히,cookie를 도청하게 되면 다른 사이트에서 재사용할 수 있따. (cookie는 로그인을 성공한 사람에게 넘겨주기 때문에 노출되면 위험하다.)https는 이런id,pw,cookie가 암호화가 되어 서버로 날아간다. 그래서 중간에 해커가 탈취하기 힘들다.curl명령어http -> https:DNS가 담당한다.http로 요청이 날라오면DNS에서 다시 클라이언트로 반송처리시키고 클라이언트에서DNS한테https로 요청하게 된다.server에서client로 갈 때https로 변환한다.(항상 그런 것은 아니고 대부분 캐싱이 되어있어서 중간에 다시 옴)SSL인증서: 이 사이트가 안전한지 확인하는 인증서(대표적으로AWScertificate manager에서 발급해준다. 인증기관에 비용을 지불하면DNS에 붙여준다. 만약,SSL인증서가 없으면 다시 브라우저로 리턴하거나 에러를 발생시킨다.)node template engine은 서버에서 파일을 보내줘서 브라우 저단에서 띄우기만 한다. 이런 방식은SSR, 반대로CSR은 리액트에서 파일을 만들고 데이터만 서버에 요청해서 둘 다 합치면CSR이 된다.SSR은 검색엔진이 데이터를 모두 읽을 수 있다.CSR은 파일을 한번 거쳐서 탐색해야 하기 때문에 바로 노출이 되진 않는다(feat. CORS)- 리액트는 노드 서버에 직접 요청해서 받아오는 것은 아니다. 그냥 브라우저로 데이터를 보내주고 데이터는 브라우저에서 서버로 요청하여 브라우저에서 취합한다.
- 로그인처럼
DB사용하는 건node.js사용하고, 보여주기만 할 거면CSR - 실 서비스할 때는 내부 웹서버보다
nginx를 직접 붙이는 편이 더 좋다.node.js는 내부 웹서버도 배포하기 충분하다. AWS - route 53에서DNS에SSL을 직접 붙인다.ELB에도SSL을 붙여야 한다. 이후 뒷단에 있는EC2서버로 넘어간다.ELB를쓰는 이유는autoScaling을 쓰기 위함이다.- 인스턴스를 늘릴 때는 사용률이 51%를 넘어섰을 때 이때 서버가 터져버리면 다음 서버는
@ + 51%가 되는데 다음 서버가 50이면 서버가 터져버린다.
반응형
'Frontend > 엘리스 SW 엔지니어 트랙' 카테고리의 다른 글
| [ 엘리스 SW 엔지니어 트랙 ] 35일차 (0) | 2021.12.12 |
|---|---|
| [ 엘리스 SW 엔지니어 트랙 ] 34일차 (0) | 2021.12.12 |
| [ 엘리스 SW 엔지니어 트랙 ] 32일차 (0) | 2021.12.08 |
| [ 엘리스 SW 엔지니어 트랙 ] 31일차(7주차: 데이터베이스 연동 - Node.js, Session, JWT, 회원가입 및 로그인) (0) | 2021.12.07 |
| [ 엘리스 SW 엔지니어 트랙 ] 30일차 (0) | 2021.12.04 |
댓글