본 강의에서는
보안이 무엇인지와
왜 우리 웹 애플리케이션에서 중요한지를 이해해 봅시다
Spring Security의 여정을 시작하고
Spring Security 프레임워크를 통해
웹 애플리케이션을 구현하기에 앞서
먼저 웹 애플리케이션을 보호해야 하는 사실을
꼭 확인하시기 바랍니다
그렇게 하기 위해 본 강의에서
시간을 잠깐 내봅시다
화면에서 볼 수 있듯이 은행이 있습니다
그리고 우리 도시나 동네에
은행이 있으면
아마 확실히 보셨을 텐데
은행들은 매우 보안이 잘 되어 있습니다
이러한 은행들의 보안을 유지하는데에는 여러 방법이 있습니다
상시 대기 보안 인력도 있으며
동시에 강력한 잠금 장치도 있으며
또한 상시 모니터링하는 웹 카메라도 있습니다
그리고 은행 안에는 밤에 작동하는
센서도 있을 것입니다 이렇게 은행들은
여러 중요한 보안 조치를 구비하고 있습니다
왜냐하면 이유는 당연히
은행들은 중요한 자산을 보유하기 있기 때문입니다
중요한 자산이라고 하면 생각할 수 있는 것은 금
또는 돈 입니다 왜냐하면 쉽게 생산
할 수 없는 제품들이자 아무나 가질 수 없는 것들이기 때문입니다
그래서 이러한 것들은 매우 중요한 자산이며
은행은 충분한 보안 조치가 있는 것을 확실하게 하여
아무나 은행에 들어와
중요한 자산들을 훔칠 수 없게 합니다
이와 매우 비슷하게 여러분에게 질문 하나를 드리고 싶습니다
은행과 비슷하게
우리의 웹 애플리케이션 또한 중요한 자산을 갖고 있지 않을까요?
여기서 말하는 중요한 자산은
은행 거래 내역
건강 기록
아니면 개인 기록일 수도 있으며 이러한 것들 모두 소중한 정보인만큼
우리는 아무나 이러한 내용을 쉽게 접근하길 원치 않습니다
이것들 모두 중요한 정보이니
웹 애플리케이션 보안을 강화해야 하지 않을까요?
개발자로서 우리 스스로에게 물어봐야하는 질문인 것 같습니다
만약에 웹 애플리케이션을 보호하지 않는다면
웹 네트워크 안에 있는
해커나 나쁜 유저가
쉽게 여러분의 데이터를 훔칠 수 있게 됩니다
왜냐하면 여러분의 웹 애플리케이션이
확실하게 보안이 확보되지 않았거나
아니면 단순히 여러분이 웹 애플리케이션을
정적 웹 애플리케이션으로 개발했기 때문입니다
그렇기 때문에
웹 애플리케이션을 보호하는 것 또한
은행을 보호하는 것과 마찬가지로 중요합니다
또한 보안은 현대 사람들이 개발한
컨셉이 아닙니다
보안은 석기시대 때부터 존재했습니다
석기시대에도
사람들은 금, 돈과 같은 중요한 자산을
보호했습니다 이와 마찬가지인 컨셉으로
우리 웹 애플리케이션에 적용할 수 있습니다
이제는 여러분에게
웹 애플리케이션이 중요한 데이터를 가지고 있기에
보호해야 한다는 점이 확실해졌으면 좋겠습니다
이제는 웹 애플리케이션의 선에서
보안에 관련한 더 많은 디테일에 대해서 이야기해 드리겠습니다
말씀드렸던 것처럼 보안은 웹 애플리케이션 내에
여러분의 데이터 보호 뿐만 아니라 비즈니스 로직을 위해서 존재합니다
항상 데이터 보호만 하고 싶은 것이 아니라
가끔은 비즈니스 로직 또한 보호하고 싶을 수 있습니다
예를 들어 구글 검색 엔진을 보게 되면
알고리즘이 엄청나게 많이 존재하며
그들은 이러한 알고리즘을 모든 사람들에게 공유하고 싶어하지 않습니다
그렇기에 그것은 그들이
일상적으로 비즈니스를 운영하는 비즈니스 로직입니다
이것이 구글이 비즈니스 로직을
아무한테나 공유 하지 않으며 엄청난 보안 조치로
알고리즘을 보호하는 이유입니다
따라서 보안 웹 애플리케이션은
데이터 뿐만 아니라 비즈니스 로직을 위한 것이기도 함을 명심해주시기 바랍니다
다음으로 강조하고 싶은 점은
보안은 비기능적 요구사항입니다
그 어떤 고객도 여러분에게 대놓고
웹 애플리케이션을 개발하며 보안에 유의해달라고 부탁하지 않을 것입니다
이것은 고객이 비기능적 요구사항의 일부로서
기본적으로 가정하는 것입니다
비기능적 요구사항은
고객의 비즈니스 로직과 상관이 없는 요구사항으로
예를 들어 보안, 성적, 코딩 기준 모두
비기능적 요구사항이며
모든 고객은 계약서나 요구사항에
노골적으로 정의를 하든 안 하든 상관없이
개발자인 여러분에게 기대하는 사항들입니다
따라서 우리는 개발 단계부터
보안을 생각해야 합니다
우리는 보안이
UAT 테스트 또는 프로덕션 개발 이후에
온다는 가정을 절대로 해서는 안 됩니다
우리는 개발자로서의 일이 쉽게 느껴질 수 있도록
항상 개발 단계에서부터
보안을 생각해야합니다
보안을 개발 단계부터
고려하지 않고
UAT와 퍼포먼스 테스팅을 완료한 후
보안에 중점을 두는
시나리오를 가정해 봅시다
이러한 시나리오들은 회귀 문제를
초래할 수 있습니다
그렇기 떄문에 보안은 항상
개발 단계에서부터 보안을 고려해야 합니다
그리고 보안이라 하면
여러 종류의 보안이 있습니다
따라서 DevOps 팀이나 서버 관리자가
처리할 특정 보안 책임들이 있습니다
예를 들어 HTTPS
방화벽, SSL 인증서와 같은
보안 종류들은
서버 관리자와 DevOps 팀이 담당합니다
하지만 이러한 HTTPS, SSL 인증서
방화벽들은 모두 서버를 보호합니다
우리의 웹 애플리케이션 또는
비즈니스 로직 또는 데이터를 보호하지 않을 것입니다
따라서 웹 애플리케이션 내에
인증과 권한을 구현하는 것은
개발자로서 우리의 책임입니다
앞으로 진행되는 강의들에서
인증과 인가가 무엇인지에 대해 상세하게 다룰 예정입니다
하지만 제가 말했듯이
웹 애플리케이션 내에
인증과 권한을 구현하는 것은
개발자의 책임인 점을 기억해주세요
이전에 이야기했듯이 보안은 왜 중요한가?
왜냐하면 보안이 없으면
데이터 침해, 보안 취약점
그리고 웹 애플리케이션 내에 보안 공격들이 일어날 수 있습니다
이러한 것들은 데이터 손실 또는
비즈니스 로직 손실을 초래할 수 있고 이러한 시나리오에서는
여러분이 일하는 회사 또는
일하는 단체는
최종 사용자와 고객으로부터 브랜드와 신뢰 이슈를 마주하게 될 것입니다
또 다른 시나리오에선
여러분 단체들은 고객으로부터
법적 문제 또한 상대해야 할 수도 있습니다
따라서 항상 보안이 중요하다는 점을
기억해 주시기 바랍니다
제발 웹 애플리케이션 개발 단계에서
이 점을 무시하지 마십시오
그리고 제가 마지막으로 강조하고 싶은 것은
웹 애플리케이션을 보호 할 때마다
항상 더해지는 이점이 있습니다
CSRF 공격, XSS 공격
취약한 인증 공격과 같이
산업에서 나날의 발생하는 흔한 보안 공격들이
어느정도 존재합니다
따라서 웹 애플리케이션을 보호 할 때
모두 고려해야 되는 사항들입니다
저는 여러분들에게 웹 애플리케이션을 보호하는 것은
매우 중요하다는 것을 높은 수준에서 설득하고 싶었습니다
그것을 하는 방법은 또 다른 이야기며
우리는 이번 강의 코스에서 Spring Security의 도움으로
중점적으로 다룰 것입니다
이것을 끝으로 여러분이 보안이 무엇인지 그리고
왜 중요한지에 대해 명확하게 이해했을 것이라 생각합니다
감사합니다 다음 강의에서 뵙겠습니다