web.xml
엄청나게 큰 성이 있다고 생각해보자. 그 성의 입구가 있고, 그 입구를 지키는 문지기가 있다. 이 문지기는 스스로 일을 할 수가 없어서 이 문지기에서 성의 관리자가 어떻게 일을 하면 되는 지가 적힌 문서를 던져준다. 이 문서는 관리자에 따라 달라질 수 있다.
여기서 좋은 점은 관리자가 바뀌고 문서가 바뀌어도 문지기는 변할 일이 없다. 문지기는 그저 주어진 문서에 따라 일만하면 되는 것이다.
ServletContext 초기 파라미터 생성
성의 입구를 통해 들어가는 A와 몰래 침입한 B가 있다고 가정하자. A는 초기 파라미터로 암호가 '왈라'인 것을 알고 있다. 따라서 성 안에서 누군가가 암호를 물어봤을 때 정상적으로 대답이 가능하므로 초기에 한번 설정한 파라미터로 인해 성 안 어디서든지 동작이 가능해지는 것이다.
이에 반해 B는 암구호를 몰라서 동작이 안된다.
Session 유효시간 설정
Session은 인증을 위해 필요한 것으로 문지기의 Session이 3일로 설정되어 있다고 가정하자.
A라는 사용자는 문지기에게 자신이 누군지 인증 후 Session 유효기간인 3일동안 이 성 안에서 체류가 가능하게 된다. 3일이 지나면 성에서 추방된다.
만약 더 있고 싶다면 다시 문지기에게 가서 Session을 초기화 시켜서 3일을 더 있을 수 있다.
Servlet/JSP 매핑
A가 들어올 때 목적지를 가지고 들어온다. 문지기는 그 목적지를 읽어서 성 안에서 찾은 후 위치를 A에게 알려주고 목적지로 이동할 수 있도록 도와준다.
Servlet/JSP 매핑 시 문지기가 해야할 일이 너무나도 많기 때문에 문지기의 일을 줄이기 위해 FrontController 패턴을 이용한다.
Mime Type 매핑
A는 성에 들어올 때 어떤 물건을 들고 온다. 아무것도 안들고 온 경우도 있는데 이 경우는 성 안에서 무언가 보기 위해 들어온 것으로 간주하고 모두 http GET 방식을 사용한다. 무엇을 줄려고 온 것이 아닌 무언갈 가지로 온 것이다(SELECT)
만약 A가 쌀을 들고 왔을 때 문지기가 Mime Type이 쌀인 것을 확인하고 쌀창고로 이동시킨다. 그 후 쌀이 성 안에 필요한 것인지 판별 후 필요가 있다고 판단되면 가공을 시작한다.
이렇게 가공을 하기 위해서는 Mime Type 매핑이 필요하다. 왜냐하면 만약 물을 들고 왔는데 쌀이라고 Mime Type을 잘못 적었을 때 쌀창고에 보내져서 Mime Type 매핑을 통해 쌀이 아니라는 것을 확인해야 하기 때문이다.
Mime Type에는 종류가 굉장히 많다. 나중에 한번 따로 공부해볼 필요가 있다.
Welcome File list
A가 목적지도 없이 물건도 없이 그냥 왔다고 하면 문지기는 어디로 보내야 할까? 관리자에 따라 다르다.
관리자의 Welcome File List에 따라 문지기는 A를 설정된 곳으로 보낸다.
Error Pages 처리
성 안에 가, 나, 다 건물이 있는데 A가 '라'라는 목적지를 가려고 한다고 하면 문지기는 성 안에 그런 곳은 없으니까 Error Pages로 처리한다.
리스너/필터 설정
필터는 A의 신분을 확인하는 것이다.
- 성의 거주자가 아닌 경우 필터에서 거름
- 성 금지 반입물품을 지닌 경우 필터가 압수하고 출입시킴
관리자가 관리자의 집에 필요한 인력이 있을 경우 리스너에 등록해둔다.
리스너는 문지기는 아니고 문지기 옆에 서서 들어오는 사람이 관리자가 찾는 인력인지 아닌지 테스트를 통해 판단한다. 만약 통과하면 리스너가 강제로 관리자의 집으로 데려간다.
보안
이상한 사람 들어오면 추방 or 감옥
출처
[무료] 스프링부트 개념정리(이론) - 인프런 | 강의
스프링부트를 공부하며 헷갈리는 개념이 많았던 분 스프링부트에 대해 공부하고 싶었던 모든 분, - 강의 소개 | 인프런...
www.inflearn.com
'Spring > Spring 기초 이론' 카테고리의 다른 글
[Spring 기초 이론] 애플리케이션 컨텍스트 (0) | 2022.04.01 |
---|---|
[Spring 기초 이론] 디스패처 서블릿 (0) | 2022.03.31 |
[Spring 기초 이론] Springboot - 서블릿 컨테이너 (0) | 2022.03.17 |
[Spring 기초 이론] Springboot - Apache Tomcat (0) | 2022.03.03 |
[Spring 기초 이론] JPA (0) | 2022.02.28 |