본문 바로가기

카테고리 없음

디자인패턴 (2) : 프록시 패턴, 이터레이터 패턴

5) Proxy pattern - 프록시 패턴

대상 객체에 접근하기 전, 접근에 대한 흐름을 가로 채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴. 

이해하기 어려운데, '가로채다' 라는 단어에 집중하면 좋을 것 같다. 중간에 가로채서 뭔가를 해주는 것. 보안, 데이터 검증, 캐싱, 로깅에 사용한다. 

 

 

*프록시 서버로도 활용되고 자바스크립트에서 프록시 객체로 사용되기도 한다.

 

프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다. *위키백과      ex) 프록시 서버로 쓰이는 CloudFlare

 

장점

- 프록시 서버에서의 캐싱

캐시 안에 있는 정보를 요구하는 요청에 대해 멀리 있는 원격 서버에 요청 하지 않고 캐시 안에 있는 데이터를 활용 하는 것. 트래픽을 줄일 수 있다는 장점이 있다. 

 

 

- DDOS 공격 방어 / HTTPS 구축

DDOS : 짧은 기간 동안 많은 네트워크 요청을 보내 네트워크 마비 시키는 것.

HTTPS : 보통 인증서를 통해 구축해야 하나 프록시 서버를 통해 인증서 설치 없이 손쉽게 구축 가능.

 

 

ex) Nginx

"node.js의 *버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 앞단에 놓고 node.js를 뒤쪽에 놓는 것이 좋다"

- nodejs 창시자 라이언 달

익명 사용자의 직접적인 서버로의 접근을 차단하고 간접적으로 한 단계를 더 거침으로써 보안성을 강화할 수 있다. 

실제 포트를 숨길 수 있고, 정적 자원을 gzip 압축하거나 메인 서버 앞단에서의 로깅을 할 수 있다. 

 

* 버퍼 오버플로우 : 버퍼 - 데이터가 저장되는 메모리 공간. 버퍼 오버플로우는 그 메모리 공간을 벗어 나는 경우. 이 때 사용 되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이 발생하기도 한다. 

 

 

- * CORS 에러와 프록시 서버

CORS 에러 : 서버가 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 것.

 

프론트에서 127.0.0.1:3000으로 테스팅 하는데 백엔드 서버는 127.0.0.1:12010 이라면 포트 번호가 달라서 에러가 났다면,

프록시 서버를 통해서 프론트 서버에서 요청 되는 오리진을 127.0.0.1:12010 서버로 바꿀 수 있다. 

 

 

 

6) Iterator pattern 이터레이터 패턴

순회할 수 있는 여러가지 자료구조 들이 이터레이터라는 하나의 인터페이스로 순회가 가능하게 한다.

다른 다료구조 Map과 Set인데 같은 인터페이스 for a of b 로 순회된다.

const mp = new Map() 
mp.set('a', 1)
mp.set('b', 2)
mp.set('cccc', 3) 
const st = new Set() 
st.add(1)
st.add(2)
st.add(3) 
const a = []
for(let i = 0; i < 10; i++)a.push(i)

for(let aa of a) console.log(aa)
for(let a of mp) console.log(a)
for(let a of st) console.log(a) 
/* 
a, b, c 
[ 'a', 1 ]
[ 'b', 2 ]
[ 'c', 3 ]
1
2
3
*/

 

 

 

 

참고사이트

면접을 위한 CS전공지식노트

https://blog.hexabrain.net/346