우리가 만든 샘플 애플리케이션이 보안을 전혀 고려하지 않은 상태로 오픈 되었다고 가정해보자.

이 경우, 어떤 문제가 발생할 수 있을까?

✅ 로그인 기능(인증, Authentication)이 없음

로그인 기능이 없다면 어떤 문제가 발생할 수 있을까?

나 자신을 증명할 방법이 없으므로 다른 사람이 회원으로 등록한 내 정보 또는 내가 주문한 주문 정보 등에 대해서 애플리케이션의 API를 호출해서 얼마든지 조회할 수 있게 된다.

한마디로 애플리케이션의 상태가 우리 집 대문에 자물쇠를 채우지 않은 상태로 활짝 열어놓은 거나 마찬가지의 상태가 되는 것이다.

이 상태로는 다른 사람의 개인정보를 탈취하는 것은 식은 죽 먹기나 마찬가지일 것이다.

✅ API에 대한 권한 부여(인가, Authorization) 기능이 없음

애플리케이션의 서비스를 사용하기 위한 적절한 인증 절차를 거쳤다 하더라도 모든 리소스에 접근할 수 있는 것은 아니다.

예를 들어 단순히 커피를 주문하는 회원의 경우 커피 목록에서 커피를 조회해서 주문하고자 하는 커피를 선택한 후, 주문을 할 것입니다.

한 마디로 이 회원은 커피를 주문하는 손님이다.

그런데 손님이 매장에서 판매하는 커피 정보를 마음대로 등록할 수 없어야 하는데 여러분이 만든 샘플 애플리케이션에서는 손님이 마음대로 커피 정보를 등록할 수 있다.

즉 API에 대한 접근 권한이 부여되지 않았기 때문이다.

✅ API에 대한 권한 부여(인가, Authorization) 기능이 없음

웹 애플리케이션을 위협하는 세션 고정 공격, 클릭재킹 공격, CSRF 등의 보안 취약점에 대한 고려가 전혀 이루어지지 않은 상태이다.

이제 우들이 만든 샘플 애플리케이션에서 발생하는 보안 문제점을 해결해야 하는 시점이다.

바로 Spring Security라는 보안 프레임워크를 이용해서.