개발자
안녕하십니까 제가 현재 인증 서버와 리소스(어플리케이션) 서버는 왜 분리되어야하는가에 대한 의문을 조금 가졌는데요. 조금 찾아보니 분리의 이유가 1. 공격자가 리로스 서버에 대한 접근권한을 얻었을 때, 사용자의 민감한 정보를 얻을 수 없기 위해 분리를 한다. 2. 보안 서버에 대해 좀 더 강한 보안 강화를 할 수 있게끔 한다. 였던 것 같습니다. 궁금한 점은 1. 그러면 인증 서버와 리소스 서버는 디비를 분리해야하는것인가? 2. 서로 다른 서비스에 대해 같은 인증 서버를 공유해도 되는것인가? 3. 보안을 위해서 인증서버는 세션이나 토큰에 저장하는 값 중 어떤 것을 제한해야하는가? 4. 예를 들어 /my-info, /me 같은 자신의 정보 혹은 id를 가지고 오는 api는 그러면 인증서버에서 갖고 있어야하는가 리소스서버에서 갖고 있어야하는가? 에 대해 궁금한데 혹시 관련해서 제가 들어볼 수 있을까요?
답변 1
인기 답변
1. 그러면 인증 서버와 리소스 서버는 디비를 분리해야하는것인가? 정확한 판단을 위해서는 아키텍쳐를 전반적으로 봐야하겠지만 일반적으로는 인증 서버와 리소스 서버의 디비는 분리하는 것이 권장됩니다. 디비를 분리하지 않으면 서로 역할이 다른 두 서비스 간에 불필요한 의존성이 생길 수 있으며 디비 스키마를 변경하는데 비용과 리스크가 증가합니다. 뿐만 아니라 두 서비스에 투입된 하드웨어 리소스를 독립적으로 확장하기도 어려워집니다. 2. 서로 다른 서비스에 대해 같은 인증 서버를 공유해도 되는것인가? 여러 서비스가 인증 작업을 하나의 서비스에 위임하는 것은 마이크로서비스 아키텍쳐에서 흔하게 볼 수 있는 설계 패턴입니다. 이를 통해서 동일한 인증 로직을 여러 서비스에 걸쳐서 중복해서 구현하지 않을 수 있어서 개발 생산성 측면에서 유리합니다. 뿐만 아니라 인증 로직을 한 곳에서 관리할 수 있어서 보안이나 유지보수 측면에서도 이점이 있습니다. 3. 보안을 위해서 인증서버는 세션이나 토큰에 저장하는 값 중 어떤 것을 제한해야하는가? 보안을 위해서 세션이나 토큰에는 민감한 정보를 가급적 저장하지 않는 것이 좋으며 꼭 저장해야하는 경우에는 반드시 암호화하여 탈취 당하더라도 알아볼 수 없도록 해야합니다. 일반적으로 세션이나 토큰에는 서버에서 사용자를 식별할 수 있는 최소한의 정보만 저장하는 것이 좋으며 해당 사용자에 대한 추가 정보가 필요한 경우에는 서버에서 사용자 DB를 조회하거나 사용자 정보를 관리하고 있는 리소스 서버와 통신하는 것이 바람직하겠습니다. 4. 예를 들어 /my-info, /me 같은 자신의 정보 혹은 id를 가지고 오는 api는 그러면 인증서버에서 갖고 있어야하는가 리소스서버에서 갖고 있어야하는가? 인증 서버와 사용자 리소스 서버가 분리되어 있다면 /my-info, /me 같은 API 앤드포인트는 인증 서버에서 요청을 처리해줘야 할 것입니다. 많은 경우 인증 서버는 인증이 성공하면 해당 요청을 사용자 리소스 서버로 전달하여 추가적으로 필요한 사용자 정보를 응답해줘야할 것입니다. 하지만 인증과 권한 관리는 사용자 정보 관리와 때놓기 어려운 경우가 많아서 인증 서버와 사용자 리소스 서버를 분리하지 않는 경우도 있습니다.
김준형
작성자
애즈위메이크 백엔드 개발자 • 2023년 06월 19일
인증 서버에 대해 갑론을박이 많아 한참 고민하던 찰나였습니다ㅠ 자세히 알려주셔서 너무 감사합니다
강모민
부산컴퓨터과학고등학교 소프트웨어과 • 2023년 07월 09일
세션이나 토큰은 사실 다를게 거의 없다고 알고있어요. https://koldin.tistory.com/m/12
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!