Cookie
클라이언트에 저장되는 Key=Value 형태로 들어가있는 작은 데이터파일
이름, 값, 만료일, 경로정보로 구성되어 있음
클라이언트에서 요청 보냄 → 서버에서 쿠키 생성 → 헤더에 쿠키 포함시켜 응답 → 만료기간까지 클라이언트에서 쿠키 보관 → 같은 요청 시 헤더에 쿠키와 함께 보냄 → 서버에서 쿠키를 읽어 정보변경 필요 시 쿠키 업데이트 후 다시 헤더에 쿠키 포함시켜 응답
Node에서의 Cookie 사용
npm install cookie-parser
- cookie parser 설치
import cookieParser from 'cookie-parser';
app.use(cookieParser('abcdef')); //매개변수는 secretKey(signedCookie)
const cookieConfig = {
//httpOnly : 웹 서버 통해서만 접근 가능(js 에서 접근 불가)
//maxAge : 쿠키 수명 (밀리초)
//expires : 쿠키 만료날짜 (GMT)
//path : 해당 directory와 하위 directory에서만 경로 활성화,
// 웹 브라우저는 해당하는 쿠키만 웹 서버에 전송
// 쿠키가 전송될 URL 특정 가능(기본값 : '/')
//domain : 쿠키가 전송될 domain을 특정 가능(기본값 : 현재 도메인)
//secure : 웹 브라우저와 웹 서버가 https로 통신하는 경우만 쿠키를 서버에 전송
//signed : 쿠키 암호화결정 (req,signedCookies 객체에 들어있음)
httpOnly: true,
maxAge: 60 * 1000 * 60 * 24, //1분
signed : true,
};
//API
//쿠키 생성
res.cookie('KeyName', 'Value', cookieConfig);
//쿠키 가져오기
console.log(req.signedCookie.keyName);
//쿠키 삭제
res.clearCookie('KeyName', 'Value', cookieConfig);
기본적으로 cookies 객체 사용하나, 암호화 필요할 경우 옵션객체에 signed
속성 사용, cookieParser의 매개변수로 secretKey 사용, 접근은 signedCookie
객체 이용
Session
웹 서버에 저장되는 쿠키, 사용자가 브라우저에 접속한 시점부터 연결을 끝내는 시점까지 시간동안 요구들을 하나의 상태로 보고 유지시킴
클라이언트가 서버 접속시 Session ID 발급 → 클라이언트는 세션 ID의 쿠키를 사용해서 저장후 보관 → 서버 요청시 쿠키의 Session ID를 서버에 전달 → 서버는 Session에 있는 클라이언트 정보 가져옴 → 서버 요청 처리후 응답
Session | Cookie |
---|---|
Object 형식 저장 | text 형식 저장 |
삭제 or 기간 지정가능 | 만료시점 저장 |
속도가 느림 | 속도가 빠름 |
보안 우수 | 보안 취약 |
Node에서의 Session 사용
npm install express-session
import session from 'express-session';
//옵션 객체
//httpOnly : true - 사용자가 js 통해서 세션 사용할 수 없도록 강제
//secure : true - https에서만 세션을 주고받을 수 있음
//secret : 안전하게 쿠키를 전송하기 위해 쿠키 서명 값
// (세션을 발급할 때 사용되는 키)
// resave : 세션에 수정사항이 생기지 않더라도 매 요청마다 세션 다시 저장할 것인지
// saveUninitialized : 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할 지 설정
app.use(session({
secret : 'mySessionKey',
resave : false,
saveUninitialized : true,
}));
//API
//Session 생성
req.session.name = '홍길동';
//Session 접근
console.log(req.session.name); //result : 홍길동
//Session 삭제
req.session.destroy(()=> {
...
});
destroy()로 세션삭제 시, 서버에서 Session은 삭제되어도 클라이언트에서 저장하는 Cookie는 남아있음.
AWS EC2를 이용해 배포, RDS를 이용해 DB 연결하기
AWS에 로그인 후, 인스턴스 시작 클릭
원하는 인스턴스 이름을 지정하고, Ubuntu를 이용할 것이기 때문에 Ubuntu 클릭
인스턴스 유형은 프리티어 사용가능한 t2.micro 선택
인스턴스 생성 후 해당 서버에 접속할 때 쓰일 키페어 생성 (하나의 키페어로 여러 인스턴스들을 연결할 수 있다)
사용할 키 페어 이름 지정 후 프라이빗 키 파일 형식은
.ppk
선택 (.pem
은 Mac용, .ppk
는 Window용)
인스턴스 생성 후 받은 키페어 파일은 발급이 최초 한번밖에 발급이 가능하기 때문에, 잘 보관하고 있어야 한다.
추가적으로 인스턴스 스토리지는 기본값으로 8GB로 되어있는데, 프리티어는 30GB까지 사용가능하기 때문에 30GB로 변경하였다. 이후 인스턴스 시작을 클릭하면 생성은 완료
생성된 인스턴스의 인스턴스 ID 클릭
아래쪽 보안 클릭 후, 보안그룹 클릭
왼쪽 아래 인바운드 규칙 편집 클릭
규칙 추가 클릭 후, 유형에서 HTTP 선택 후, 소스 에서 Anywhere-IPv4 선택 후 규칙 저장 클릭
EC2 인스턴스를 중지시켰다 다시 실행시키면 할당받았던 IP주소가 바뀌는 현상을 방지하기위해 EIP(탄력젹 IP) 를 할당받아 지정해줘야 한다. EC2 메인에서 탄력적 IP 클릭
오른쪽 위 탄력적 IP 주소 할당 클릭
바꿀 것 없이 바로 할당 클릭 !
다시 EIP 메인에서 생성된 IP 체크되어있는지 확인 후, 작업의 탄력적 IP 주소 연결 클릭
인스턴스 선택에서 전에 만들었던 EC2 인스턴스를 선택 후 연결을 클릭하면 해당 인스턴스에 EIP가 연결이 된다.
생성한 서버에 PuTTY를 사용해 접속하기
PuTTY 실행 후
Host Name
에는 본인의 EC2 인스턴스의 IP주소를 적고, Saved Sessions
에 알아볼 수 있도록 적절히 이름을 지정해 준다. 이후 Connection
-> SSH
-> Auth
-> Credential
순서대로 클릭
Private key file for authentication
에 전에 인스턴스 생성 시 받았던 키 페어 파일을 업로드, 이후 Session
화면으로 돌아와 Save
버튼을 클릭하면 저장이 완료된다. 저장된 서버는 Load
로 바로 업로드시킨 후 편하게 접속할 수 있다. 다 되었다면 Open
클릭
오픈을 했다면 이렇게 터미널 창이 뜨는데,
login as
에 ubuntu 입력 후 엔터(AWS EC2의 서버를 사용하지 않고, 네이버 클라우드 플랫폼의 Ubuntu 서버를 사용한다면 root
로 접속해야 한다.)
인스턴스에 접속이 잘 되었다면, 이런 결과를 가진 창을 만나볼 수 있다.