본문 바로가기

기술 블로그 (Tech Blog)/Project-coopang

쿠팡 프로젝트를 설계하면서..

 

Today I Learn ✍🏼 

 

  • 오늘 하루 가장 인상 깊었던 배움에는 뭐가 있었지?

 

  • 그 배움까지 다가가는데 어떤 어려움이 있었지?

 

  • 그 어려움을 해결하기 위한 나의 시도들은 무엇이 있었지?

 

  • 그 과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었었지?

 

  • 이 상태에서 이후 더 나은 내가 되려면 무엇을 보완하지?

 


 

쿠팡 프로젝트 시작 1일차이다.

MSA로 설계를 하려는데

 

이전에 했던 배달민족 프로젝트에서 멘토님이 해주신 코멘트로 인해

설계에서 고민 중이다.

 

 


 

Gateway서버와 Auth 서버의 역할

1. **역할 분리**: Gateway는 인증과 관련된 로직을 모두 제거하고, 인증은 오직 Auth 서버로의 API 호출을 통해 처리해야 합니다. 이렇게 함으로써 Gateway는 트래픽 관리와 요청 분배 역할에 집중하고, 인증 및 권한 부여는 Auth 서버에서 전담하도록 구조를 명확히 할 수 있습니다.

 

2. **Security Filter 활용**: 인증 요청을 Auth 서버로 전달하는 로직은 Gateway의 Security Filter에서 처리하는 것이 가장 적절합니다. 이를 통해 Gateway는 단순히 요청을 필터링하고 인증 로직을 Auth 서버로 위임함으로써 역할을 분리할 수 있습니다.

 

3. **통신 비용 최적화**: 로컬에서 수행되던 인증을 외부 통신(Auth 서버)으로 전환하는 것은 통신 비용이 증가할 수 있는 부담이 있습니다. 이 경우 Redis나 로컬 캐시를 활용해 통신 비용을 줄이고 성능을 최적화할 수 있습니다. 예를 들어, 인증된 토큰 정보를 Redis에 저장해 반복적인 인증 요청 시 빠르게 처리할 수 있도록 합니다.

 

4. **캐시 사용 기준 명확화**: Redis 로컬 캐시를 언제 사용할지에 대한 명확한 기준을 세우는 것이 중요합니다. 일반적으로 Redis 여러 인스턴스 간의 일관된 캐시가 필요한 경우나, 세션 관리, 전체 로그아웃 등의 기능을 지원할 적합합니다. 반면, 로컬 캐시는 인스턴스 내부에서만 유효한 짧은 주기의 데이터를 캐싱할 효과적입니다. 캐시 사용의 장단점을 고려하여 상황에 맞게 사용해야 합니다.

 

 

 

==> 게이트웨이는 그럼 라우팅만 한다

인증, 인가, jwt 생성, jwt 검증도 인증서버가 한다고 치자.

어쩃든 user db는 호출해야함.

그러면 유저 관련 CRUD는 인증서버에서 다 다루는게 맞는걸로 현재 임시 결정.

 

 

 

 

 

 

 

 

 


 

 

서로 다른 서버가 하나의 데이터베이스를 사용하는 것은 권장하지 않는다.

Auth 서버와 Mono 서버가 하나의 데이터베이스를 공유하는 것은 여러 잠재적인 위험이 있을 수 있습니다.

1. **데이터 변경 시 알림 부족**: Mono 서버에서 데이터베이스 마이그레이션이나 스키마 변경이 있을 경우, Auth 서버는 이러한 변경 사항을 즉시 알 수 없습니다. 이로 인해 데이터 불일치나 예상치 못한 오류가 발생할 수 있으며, Auth 서버가 적절히 대응하지 못해 서비스 중단이나 보안상의 문제가 생길 위험이 있습니다.

 

2. **데이터베이스 커넥션 풀 관리 어려움**: 두 서버가 동일한 데이터베이스를 사용하면, 커넥션 풀 관리가 매우 복잡해집니다. 특히 한 서버(Mono 서버)의 레플리카가 갑자기 증가하면, 데이터베이스 커넥션 풀이 한계에 도달할 수 있고, 이로 인해 다른 서버(Auth 서버)의 성능에도 영향을 미칠 수 있습니다. 결과적으로 데이터베이스 커넥션이 부족해지고, 전체 시스템 성능이 저하되거나 서비스 장애가 발생할 수 있습니다.

 

3. **성능 저하와 스케일링 문제**: Auth 서버와 Mono 서버가 같은 데이터베이스를 공유하면, 하나의 서버에서 발생하는 과부하가 다른 서버의 성능에도 영향을 줄 수 있습니다. 예를 들어, Mono 서버의 트래픽이 급증하여 데이터베이스에 부하가 걸리면, Auth 서버의 인증 요청 처리 속도가 느려지고 사용자 경험이 악화될 수 있습니다. 이러한 구조에서는 각 서버의 독립적인 스케일링이 어려워, 전체 시스템의 확장성과 성능 관리가 복잡해집니다.

 

4. **보안 취약점 증가**: 동일한 데이터베이스를 공유할 경우, 보안적인 취약점도 증가할 수 있습니다. Mono 서버의 취약점이 악용되면 데이터베이스가 손상될 수 있고, 이는 곧 Auth 서버의 보안에도 큰 영향을 미칩니다. 특히 인증 관련 민감한 데이터가 Mono 서버와 공유되는 구조는 보안 사고 시 피해 범위를 더욱 확대할 수 있습니다. 데이터 접근을 제한하거나 데이터베이스를 분리하여 민감 정보를 보호하는 것이 필요합니다.

 

이러한 위험 요소들을 고려할 ,  서버가 독립적인 데이터베이스를 사용하거나, API 통해 간접적으로 데이터를 접근하도록 구조를 개선하는 것이 바람직합니다. 이를 통해 시스템의 안정성과 보안을 높일  있습니다.

 

 

 

 


 

아니 그러면

다른 서버로 요청 던질때

애초에 권한별로 할수있는지 없는지 하는건 어디서 해야하는거지?

게이트웨이? 인증서버? 각자의 서버?

 

 

아니 그럼 jwt 토큰을 각 서버별로 검증해야한다는 소리인데 이게 맞나?????????????


내일 튜터님 찾아뵈야할듯

 

 

'기술 블로그 (Tech Blog) > Project-coopang' 카테고리의 다른 글

Grafana  (0) 2024.09.14
prometheus  (0) 2024.09.14
docker-compose.yml 네트워크 만든 후 실행 방법  (0) 2024.09.13
멀티모듈 프로젝트 설정  (0) 2024.09.12
API 설계 원칙  (0) 2024.08.20