전체 글 132

Git Flow

Git Flow 브랜치 기능을 활용한 변경(버전) 이력 관리 전략이다. 크게 4가지 main / develop / feature / hotfix 브랜치를 생성 후 관리하는데 필요에 따라 improvement/* bugfix/* 등을 추가할 수 있다. 사실 이론적인 부분만 알고 있을 경우 잘 와닿지 않았는데 최근 진행했던 프로젝트에 Git Flow를 사용해 버전을 관리 하였고 이 과정에서 왜 협업에 브랜치 전략이 중요한지 확실히 알게 되었다. Git Repository 구성 Upstream Remote Repository: 팀원들이 공유하고 있는 최신 코드가 저장되어 있는 원격 저장소 Origin Remote Repository: Upstream 저장소를 Fork 한 원격 개인 저장소 Local Repos..

Nginx Reverse Proxy

프록시: https://thelapssql.tistory.com/113 nginx: https://thelapssql.tistory.com/117 Nginx 기본 설정 설치 sudo apt install nginx systemctl start nginx 시작 systemctl restart nginx 재시작 systemctl stop nginx 중지 service nginx status 상태 확인 ps aux --forest | grep nginx 프로세스 확인 nginx -t 설정 파일 문법 검사 마스터와 워커 프로세스 확인 ps aux --forest | grep nginx root 544 0.0 0.1 55200 1672 ? Ss 05:49 0:00 nginx: master process /usr/..

기타 2022.09.30

JWT

Jwt JWT(Json Web Token)이란 정보 수/발신자 간 정보를 JSON 객체로 안전하게 전송하기 위한 방법을 정의하는 개방형 표준(FC 7519)이다. 이 토큰은 서명되어 있으며 확인과 신뢰가 가능하다. 거의 모든 프로그래밍 언어에서 지원되며 자가 수용적이며 쉽게 전달될 수 있다. 자가 수용적(Self-contained) 특징 JWT는 필요한 정보를 자체적으로 지니고 있다. 발급된 토큰은 토큰에 대한 기본 정보와 전달할 정보(사용자 정보) 그리고 신뢰할 수 있는 토큰이라는 걸 의미하는 시그니처를 포함하고 있다. 웹 서버의 경우 토큰 전달 방법은 HTTP 헤더에 넣을 수도 있고 URL 파라미터(쿼리 스트링)로도 넣을 수 있다. 보통 헤더에 넣는 방법만 사용해왔었는데 최근 진행했던 프로젝트를 통해..

네트워크 2022.09.25

Dto Repository Architecture

Dto 계층 간 데이터 교환을 위한 객체(Data Transfer Object)를 의미한다. 일반적인 Dto는 로직을 갖고 있지 않으며 순수한 데이터 객체 형태로 존재한다. 프로젝트 진행 전 올바른 Dto의 설계는 필수조건이다. Dto 설계란 도메인에서 필요한 데이터값 들을 객체화시키고 어떤 타입의 데이터로 정의하는지에 대한 의미로 해석하면 될 거 같다. 다음은 효과적인 Dto 사용을 위해 준수해야할 사항이다. 상용구 코드 최소화를 최소화해야 함(코드를 일일이 새로 작성하므로) 작성이 용이해야 함 작성이 어려울 정도로 복잡해서는 안 됨 누구든지 코드 구문을 분석할 수 있어야 함 간단한 회원가입 앤드 포인트 router.post("/create", new UserController().createUser)..

네트워크 2022.08.31

Nginx

Nginx 경량 웹 서버이다. 경량 의미 그대로 매우 가벼우며 적은 자원의 사용으로 최상의 퍼포먼스를 목표로 만들어졌다. 클라이언트의 요청으로부터 정적 리소스를 응답해 주는 웹 서버로 활용될 수 있으며 Reverse Proxy Server로 설정하여 WAS 서버의 부하를 분산하는 로드밸런서로 활용할 수 있다. Web server HTTP 프로토콜을 기반으로 작동하는 서버이다. WAS 서버의 부하가 몰릴 경우 WAS 서버 앞단에 웹 서버를 두어 정적 리소스는 웹 서버가 처리하고 서비스 로직과 같은 동적 작업은 WAS가 담당하여 WAS 서버의 부하를 줄일 수 있다. 정적 리소스 제공 Reverse Proxy Server(로드밸런싱) 메일 서버 WAS 서버 장애 발생 시 웹 서버에서 별도의 화면 처리 가능 대..

네트워크 2022.08.11

ExpressJS Jest ES6 import export

ExpressJS Jest ES6 import export 현재 토이 프로젝트는 ES6 모듈을 사용하여 진행 중인데 문제가 발생했다. 테스트 코드를 작성하려고 했는데 모듈과 바벨 관련 에러 메세지가 출력된다. 예전에 CommonJS 환경에서 테스트 코드를 작성한 적이 있어서 문제없을 줄 알았는데 찾아보니 ES6 모듈 환경에서 Jest를 사용하려면 별도의 추가 설정이 필요하다. mkdir jest-using-import && cd jest-using-import npm init -y npm install -D jest @types/jest @babel/core @babel/preset-env package.json 설정 { "name": "jest-using-import", "version": "1.0.0..

서버/Express 2022.08.10

쿠키와 세션

등장 배경 쿠키와 세션은 HTTP 프로토콜 특성의 한계점을 보완하기 위해 등장했다. 서버와 클라이언트가 데이터를 송/수신하는 동안 상태를 저장하지 않는 무상태성(Statusless)과 서버의 응답이 종료되면 클라이언트와의 연결을 끊는 비연결성(Connectionless)이 그러하다. 하지만 웹의 발전으로 요청과 응답간의 상태가 유지(로그인) 되어야 할 필요가 생겼다. 쿠키 브라우저 접속 시 생성되는 정보를 담은 임시 파일이다. 서버가 사용자의 정보를 브라우저에 저장하는 데이터를 의미하며 Key와 Value로 구성된 문자열(String)이다. 사용자가 서버로 요청을 보내면 요청안에 쿠키가 포함되어 있으므로 서버는 이 쿠키를 통해 사용자를 식별한다. 브라우저마다 저장되는 쿠키가 다름 크롬 브라우저의 쿠키와 ..

네트워크 2022.08.04

로드밸런서

로드밸런서 서버에 가해지는 부하(로드)를 분산(밸런스) 해주는 장치 또는 기술을 의미한다. 서버와 클라이언트 사이에 위치하고 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각 서버가 최적의 퍼포먼스를 낼 수 있도록 한다. 로드밸런서를 제대로 이해하기 위해서 Scale-up과 Scale-out을 이해해야 한다. Scale-up 물리적 장비 하드웨어를 통해 서버 성능을 향상시킨다. Scale-out 기존과 동일하거나 성능이 조금 낮은 서버를 2대 이상 증설하여 운영한다. 로드밸런싱 알고리즘 2대 이상의 서버를 증설하는 Scale-out 방식을 사용하면 하나의 서버에 트래픽이 몰리지 않도록 분배하는 로드밸런싱을 해야 한다. 로드밸런싱 알고리즘의 종류는 대표적으로 5가지가 존재한다. 1. 라운드로빈 현..

네트워크 2022.08.03

Proxy

“You just may be hacked when some yet-unknown buffer overflow is discovered. Not that couldn’t happen behind nginx, but somehow having a proxy in front makes me happy.” Proxy 사용자의 요청을 대신하여 처리하는 대리인 중계기의 개념으로 서버와 클라이언트 사이에 위치하고 있으며 사용자가 외부 접근(WWW/FTP) 을 요청할 경우 사용자의 요청(Request) 을 대신한다. 이를 통해 직접적인 내부 서버로의 접근을 차단하며 간접적으로 한 단계를 추가해 보안성을 강화할 수 있는 등 여러 가지 이점이 있어 많이 사용된다. 프록시 서버 공통 기능 사용자(Client) 최초 페이지..

네트워크 2022.08.01

HTTP 비연결성 무상태성

HTTP HTTP(Hyper Text Transfer Protocol)은 데이터를 송/수신할 수 있는 프로토콜(규칙)이다. 클라이언트 서버 구조로 돼있으며 이 세상 모든 웹 개발자는 프로토콜을 준수하여 개발하므로 웹 페이지는 데이터를 주고받을 수 있다. HTTP Method 클라이트가 서버에게 요청 시 어떤한 목적을 갖는 요청인지 Method에 명시한다. 1. GET(조회) 서버에게 리소스를 요청 2. HEAD GET과 같지만 서버는 응답으로 헤더만을 반환 클라이언트는 헤더만을 통해 정보를 얻을 수 있음 3. POST(삽입) 클라이언트가 입력한 데이터를 서버로 전송하며 요청 본문에 넣음 4. PUT(전체 수정) 서버는 요청 본문을 통해 리로스의 모든 걸 업데이트 서버는 요청 본문을 통해 새로운 리소스를 ..

네트워크 2022.07.30