Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-03 11:24
관리 메뉴

모든 경험을 소중하게

01. 클라이언트와 DB 를 직접 연결하지 않는 이유 본문

Trouble Shooting

01. 클라이언트와 DB 를 직접 연결하지 않는 이유

0woo 2021. 4. 25. 23:33

대부분의 어플, 웹사이트는 <프론트 - 서버 - DB> 같은 방식으로 통신하고 있다.

만약 서버의 역할이 거의 없다면, 서버를 제외하여 프론트와 DB를 직접 연결하면 안되는 걸까?

 

우선, 프론트와 DB 를 직접 연결하는게 가능할까? 

👉🏻정답은 가능하다. 

 

하지만, 주변에서 개발한다는 사람들과 많은 프로젝트 코드를 봤을 때, 클라이언트와 DB를 직접 연결하는 경우를 보지 못했다.

왜 그럴까? 서버의 역할이 없다면 그렇게 하면 안되는 것일까? 


그 이유는 다음과 같다.

 

1. 클라이언트의 코드는 난독화등 보안을 위해 몇가지 처리가 되지만, 소스 코드를 볼 수 있다. 따라서 DB 와 통신하기 위해 필요한 DB username, id, pw 등의 정보가 필요한데, 이러한 중요한 정보가 외부로 노출될 수 있기 때문이다.

 

2. 클라이언트와 DB가 통신하기 위해서는 DB의 ip 가 필요하다. 일반적으로, DB(AWS 의 RDS) 의 ip 가 바뀌는 경우는 잘 없지만(이 경우가 정확히 어떤 상황에서 일어나는지 기억이 안난다. 추후 수정하겠다), 바뀌게 된다면, 갱신되지 않은 ip로는 DB와 통신이 불가능하다. 

 

클라이언트와 코드를 수정해야하는 것을 막기 위해 DNS에 DB의 ip 와 domain 을 연결하면 어떨까? 물론 불가능하지는 않다. 하지만 매우 나쁜 행위라고 생각이 든다. 그 이유는 다음 3번에서 설명하고 있다.

 

3. DB는 private zone 등, 매우 보안을 위한 처리가 많은 시스템이다. DB안에 있는 정보에 접근하기 위해서는 id, pw 등 많은 정보가 필요하다. 즉, 보안에 엄격한 시스템을 누구나 domain 만 알고 있다면, 접근할 수 있는 DNS 에 직접 등록하는 것은 DB 의 목적성과는 매우 어긋나는 행위라고 생각이 된다.

 

4. 웹사이트로 예를 들어보겠다. 클라이언트는 브라우저 위에서 돌아간다. 만약 수백만개의 데이터를 불러와서 처리를 해야하는 query 문을 서버를 통해서가 아닌, 직접 DB에 요청해서 클라이언트에서 받는다면, 브라우저는 뻗을것이다(이 표현보다 적절한 표현이 떠오르지 않는다). 반면, 요즘 서버는 AWS ec2, 즉 서버용 컴퓨터에서 동작한다. 그렇기 때문에, 성능면에서 브라우저보다 데이터를 처리하기 좋다.

 

위에 적은 4가지 이유의 출처는 다음과 같다.

1-3 : www.youtube.com/watch?v=L7yW9OWTNP8

4 : 현직 프론트 개발자

Comments