드디어 인생 처음으로 서버란 것을 구현해보았습니다. 물론 직접 처음부터 끝까지 한 것은 아니고 주어진 것 중에 일부를 구현하는 과제였을 뿐이지만요.
모르는 것을 알아가는 과정은 분명 흥미로운 작업이지만, 한편으론 표지판이 없다 보니 좀 많이 헤매게도 됩니다. 그럴 때 페어가 있어서 함께 고민할 수 있는게 얼마나 다행인지 모르겠습니다.
XSS 와 CSRF 는 웹 상에서의 기초적인 공격 방법의 일종이라고 합니다. XSS (Cross-Site Scripting) 는 자바스크립트 코드를 끼워넣어 공격하는 방식이고, CSRF (Cross-Site Request Forgery) 는 사이트 간 요청 위조를 통해 사용자의 의지에 관계 없이 공격자가 의도한 행동을 하도록 하는 공격 방식이라고 합니다.
프로그래밍 공부를 하다 보면 어떤 개념을 어디까지 이해해야 할지 몰라 막막할 때가 있는데요. 위의 개념들은 지금 단계에서는 굳이 깊게 알 필요는 없다고 합니다. 그 대신 중점적으로 알아야 할 것이 바로 제목으로 다룬 CORS 입니다.
Cross-Origin Resource Sharing, 한국어로는 교차 출처 리소스 공유 입니다.
CORS 는 HTTP 헤더에 기반하는 메커니즘으로, 서로 다른 Origins (출처) 를 갖는 웹앱의 요청의 승인 여부를 서버가 확인하고 승인할 수 있게 합니다. Origins 라는 말이 약간 낯설기도 한데요. Origins 란 domain, scheme, port 로 이루어져 있고, 이 3가지가 다 같을 경우 같은 출처 (Origins) 라고 할 수 있습니다.
아주아주 쉽게 설명하자면 a.com 에서 b.com 으로 리소스를 요청하는 경우에 CORS 가 일어난다고 할 수 있습니다. 같은 소속도 아닌데 리소스를 요청하니, 니가 우리가 가진 자료를 받아가도 되는지 여부를 파악하겠다는 것이죠. 만약 괜찮다면 자료를 주고, 아니라면 거절할 수 있다는 겁니다.
예전에는(얼마나 예전의 이야기인지는 잘 모르겠습니다만..) 늘 같은 소속끼리, 다시 말해서 a.com 은 a.com 의 리소스만을 요청했다고 합니다. 그러나 웹이 애플리케이션화 되고 웹에서 할 수 있는 것들이 많아지면서, 다른 Origins 에 접근해 자료를 요청해야 할 일이 많아진 것이죠. 그렇다고 아무 접근이나 용인했다가는 위에서 말한 것처럼 외부의 공격에도 취약해질 수 밖에 없다보니, 이를 막기 위해 CORS 라는 메커니즘이 탄생하게 되었고, 정책화 된 것이라고 할 수 있습니다.
이 중에서 오늘 제가 사용해본 것은 프리플라이트 요청이라고 정리되어 있는 부분입니다. OPTIONS 메서드를 이용해 HTTP 요청을 먼저 보내 안전한지 여부를 확인하고, 요청이 승인되면 실제 필요한 것을 요청하는 것이죠. 그러다보니 HTTP 요청이 두 번 이루어지게 되고, 서버에서는 OPTIONS 요청과 POST 요청을 나누어 답변하게 됩니다.
더욱 자세한 것은 추가적인 공부가 필요해 일단의 정리를 마치도록 하겠습니다. CORS 의 개념을 잘 모를 경우 로그인을 구현하는 것에도 어려움을 겪을 수 있다고 하니 틈틈이 더 알아갈 수 있도록 노력해야겠습니다.