본문 바로가기
Toy Project

20.01.18

by YEON-DU 2020. 1. 19.
반응형

 

쇼핑몰 만들기 웹 스터디.

Node.js (backend) + Vue.js (frontend) 조합으로 진행중.

 

쇼핑몰 결제 시 (EX. PG사)

1 step 개인정보입력 2 step 결제방법 결정 3 step 결제정보 입력 4 step 결제 

와 같은 단계들을 진행하던 도중에 결제가 중단되어도, 모든 과정을 롤백하기 위해 (유저가 결제를 했음에도 결제 정보가 서버에 전달되지 않는 사태가 발생하지 않도록 만들기 위해) 트랜젝션을 사용한다.

 

SQL injection 방지.

서버에 전달되는 텍스트 필드에 sql 명령어를 입력하여 서버를 공격할 수 있다.

또한 <html> 과 같이 html 태그를 입력하는 것을 방지해야 한다.

서버에서도 막을 수 있고, 프론트에서도 막을 수 있다.

(서버에 보내기 이전에 내용을 필터링하거나, 태그 내에 있는 <, >를 사용 불가능하게 하는 방법도 있을 듯 하다. )

 

https

http를 보안한 https 사용.

크롬에서 http인 상태로 로그인 시 비밀번호가 노출되었다며 삐용삐용 얼럿을 보낸다.

ssl 인증서를 발급받고, 그것을 프로젝트에 적용해서 사용해야 한다.

발급받기 위해서는 도메인이 필요한 듯.

서버에서 처리해주어야 하는 부분이라고 한다.

 

비밀번호 단방향 전송 sha256

비밀번호를 받는 쪽도, 보내는 쪽도 사실상 실제 비밀번호를 저장하지 않아야 한다.

유저가 입력한 비밀번호를 해시로 변경하여 전송하는 방식으로 보인다.

 

SQL의 LONGTEXT 길이

TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

서버의 로컬에 이미지를 저장하게 되면 저장소가 부족할 것으로 보여서 클라우드(해당 클라우드를 Storage 취급하여)에 이미지를 업로드하고, 링크만 사용할 예정이다. 링크를 저장할 LONGTEXT의 길이가 부족할 수도 있으므로 찾아보았으나 대략 4기가까지의 문자열이 저장가능하다는 것으로 봐서 부족할 일은 절대 없을 듯하다.

 

이미지

위와 연관해서 해결책으로 클라우드를 찾았지만 구글 클라우드가 개인 저장소이다보니 외부에서 접근 시 종종 엑박으로 이미지 표시가 되지 않는 경우가 있다는 글을 보았다. 다른 클라우드를 찾아보는 중인데 일단 그 부분은 보류.

클라우드를 사용하더라도 용량 제한이 있으므로 이미지를 리사이징해야 한다. 이미지를 리사이징 할 때에는 이미지의 가로와, 세로 비율에 맞추어 리사이징 해야한다. (가로나 세로 중 하나를 고정시켜놓는 것이 실제 이미지 사용 때에는 용이할 것 같다) 리사이징을 서버에서 해주는 방식과, 이미지 크롭 툴을 삽입하여 프론트에서 서버에 넘겨주기 이전에 이미지 크기를 제한하는 방식이 있다.

 

페이지 로딩

페이지 로딩 시 이미지보다 텍스트가 먼저 로드될 수 있도록 해야한다. (유저 편의)

기본 값이 이미지보단 텍스트가 먼저 로드될 것으로 추측되는데 (당연하게도) 검색해보아야 할 부분.

 

유효성 검사

일반 유효성 검사로는 회원가입 폼 유효성 검사 (필수 항목을 입력했는지, 비밀번호 형태는 정규식과 동일한지) 와 같은 것이 있고 해당 영역은 프론트에서 진행해야 한다. 주의받은 사항은 그 외에도 서버에서 받은 정보가 NULL인지, 아닌지를 처리해주는 부분(NULL인지 체크 후 DB에 저장하는 함수)을 따로 만들어야 한다는 부분.

 

첨부파일 확장자.

첨부 파일의 확장자를 확인해야한다. 바이러스를 .zip파일과 같은 압축 파일로 첨부해놓고 Unzip하는 명령어를 보내게 되면 그대로 서버 죽는다...

 

+ 그 외

현재 Cafe24 호스팅을 사용하고 있는데 nodejs 호스팅에서 프론트와 백의 분리가 불가능해보인다. ..... .. (분리는 보안을 위해 너무 당연한 이야기라는 것 같았다...)

용량도 너무 적고 트래픽도 눈물난다.... 

 

서버 인스턴스를 만들어서 서버를 돌려주는 역할이고 클라이언트의 리퀘스트가 없이 일정시간이 지나면 sleep이 된다. 즉, 클라이언트가 서버에 접속을 n시간동안 하지않게 되면 sleep되는 식이다.

그래서 이 경우를 방지하기 위해서 서버를 여러 종류를 사용하여 a시간마다 슬립되는 A 서버와 b시간마다 슬립되는 B서버가 번갈아가면서 사용하거나, 일정 시간마다 리퀘스트를 날려 서버가 sleep되지 않도록 해야한다.. 또한 예기치 못한 사고, 정전 등과 같은 사고에 대비하여 서버는 최소 2대여야 한다.

 

웹 호스팅은 서버의 일부 공간을 대여하는 것이고, 서버 호스팅은 여러 서버중 서버 하나를 통째로 대여하는 것이다.

웹 호스팅은 따라서 트래픽이나 용량적인 부분에서 제한이 크다. (타 사용자들과 함께 사용하기 때문)

반응형

'Toy Project' 카테고리의 다른 글

20.07.26  (0) 2020.07.26
Cafe24 Node js 프로젝트 세팅  (0) 2020.06.23
20.06.12  (0) 2020.06.12
20.01.24 ~ 20.02.02  (0) 2020.01.27
MySQL 다운로드  (0) 2019.12.13

댓글