Wanna be Brilliant Full-Stack Developer
2/22 Spring Web.xml은 무엇인가?? 본문
Web.xml이라는건 관문 같은것이다. 그래서 web.xml은 하는일들이 여러가지가 있다.
-ServletContext의 초기 파라미터
-Session의 유효시간 설정
-Servlet/JSP에 대한 정의
-Servlet/JSP 매핑
-Mime Type 매핑
-Welcome File list
-Error Pages 처리
-리스너/필터 설정
-보안
-ServletContext의 초기 파라미터 이거부터 설명을 하자면
WEB.xml은 엄청나게 큰 성이 있는데 그 성의 입구가 있다. 그리고 입구에는 문지기가 하나 있다.
그 문지기는 스스로 일을 할 수가 없다. 그래서 문지기에게 누군가가 관리하는 관리자가 문지기한테 문서를 던진다.
그리고 그 문서대로 일을 하면되라는 문서를 준다!
이 일은 관리자에 따라 달라질 수 있다. 관리자가 바뀔떄마다 문지기가 하는 일이 바뀔 수 있다.
우리는 좋은게 문지기가 달라질일이 없다. 문지기는 WEB.XML 파일이다.
이 파일의 토대로 문지기가 일한다
일을 하는것 중에 첫번쨰는 ServletContext의 초기 파라미터 초기 설정하는것이다.
예를 들자면 외부에서 사람이 들어오는데 초기 파라메터가 적혀 있다. 암구호는 왈라
제일 처음에 A라는 사람이 들어오면 문지기가 A한테 암구호는 왈라야 라고 말하고 돌아다니다가 누가 암구호를 물어보면 왈라야라고 대답하면 그사람은 정상이고 어떤 사람은 이 문을 통해 들어온사람이 아니라 몰래 잠입한 사람에게 암구호를 물어보면 왈라 라고 대답을 못하는것이 초기 파라메터이다.
초기 파라메터는 한번 설정하면 어디에서든지 성내부에서 동작 할 수 있다.
두번쨰로는 세션의 유효시간을 설정한다는건?
세션이라는건 어떤 집이 있는데 들어오려고하면 너가 누구야? 라고 물어보면 아들이야라고 대답하면 너가 내 자식이야? 이렇게 물어보고 들어오는 이것이 세션이다! ( 인증을 통해서 들어오는것이 세션이다, 인증이 되지 않으면 누군가를 우리집에 들여보내지 않는다)
인증을 어떻게 하는가? 그러면 아버지는 아들의 얼굴을 보고 할것이다. 중요한 어떤게 (누구인지 확인할 수 있는?) 있으면 예를 들어 은행에서는 주민등록증과 같은 웹에서는 공인인증서 와 같은 것이 세션이다!
A라는 사람이 문지기의 세션이 3일로 설정되어 있으면 a는 3일동안 체류가능하다는것을 알려주고 a가 자유롭게 돌아다니다가 3일이 지나면 자동으로 추방된다.
만약에 3일이 지나고나서도 더 있고 싶으면 다시 문지기한테 나 3일더 있고 싶어 이렇게 하면 세션이 초기화되서 3일을 더 있을 수 있다. 항상 문지기한테 와서 내가 누군지 알리고 내가 있을수 있는 시간을(세션) 늘리려면
문지기한테 말하면된다.
하지만 몰래 들어온사람은 문지기한테 갈수가 없다. 이런사람들이 잡히면 바로 튕겨 나간다, 이런것이 세션의 시간을 설정하는것이다.
세번쨰
-Servlet/JSP에 대한 정의
-Servlet/JSP 매핑
두가지 에대해 한꺼번에 설명을 해보려고한다!
a 가 들어올떄 가고자하는 목적지 가 있을것이다. 그 목적지는 가 , 나 , 다 ,라 가 있는데
a가 갈려고하는 목적지가 문지기가 어디로가는지 물어보는데 만약 다라는곳을 간다고하면 문지기는 어 하고 다로 보내면 된다.
a가 다에 갈꺼야 하면서 다를 달고오면 문지기는 이 다라는것을 보고 다라는곳을 찾아서 어디로 가면되는것을 알려준다.
만약에 a가 나라는것을 간다고 하면 나라는곳을 어떻게 가는지 주소를 알려주는데 이것이 서블릿 매핑이다!
니가 요청한 자원이, 니가 요청한 로케이션이, 니가 요청한 식별자가 나가 어디에 있는지 정확히 알려주고 그쪽으로 이동할수 있도로고 도와준다!
쉽게 말하면 나가 서울 강남구고 , 다는 서울 용산구, 라는 부산 수영구, 가는 창원 용호동이라고 하면
a가 만약 다라는것을 가져오면 문지기는 다는 서울 용산구인데 라는 그 문서를 web.xml에 들고있다. 그래서 다라고 하면 a가 들어오면 문지기가 다면 서울 용산구로 가면되라는것이 JSP 매핑(그 장소에 매핑) 이자 정의(다는 서울 용산구)이다.
네번쨰로는 -Mime Type 매핑
a라는 사람이 들어올떄 그냥 들어올수도 있지만 만약 엄청나게 많은 쌀을 가져온다 생각해보자
쌀을 이만큼 가져오고 입구에 도착해서 문지기가 쌀이 Mime TYPE을 물어보면 a는 쌀이라고 대답한다!
Mime TYPE이라는건 니가 데려올 데이터 타입이 무엇이냐는 것이다. 니가 우리 성에 들어올떄 어떤 물건을 들고 들어왔니 라고 물어보는것이다.
어떤애는 아무것도 안가져올수도 있고, 어떤애는 멀 들고 올것이다.
보통 아무것도 안들고오는것은 그 성에 들어오는 이유가 무엇을 보기 위해서 일것이다.
아무것도 안들고 오는애들은 HTTP방식의 GET방식을 쓴다! 애는 머를 줄려고 오는것이아니라 먼가를 가지러 오는것인데 흔히 SELECT라고 한다
get방식의 요청은 데이터를 가져오지 않는다!
그다음에 a가 쌀이라는 데이터를 들고왔으니 문지기가 Mime Type이 머냐물어보고 쌀이라고 대답하면
쌀창고로 이동해라고 한다! 쌀 창고로 이 데이터를 보내면 쌀 창고를 데이터에 보내서 이 쌀을 우리나라에서 먹을수 있을지 없을지 판단을 하고 먹을 수 있으면 소비에게 전달하기위해 가공을 하는일
이걸하려면 Mime Type을 알아야한다. 왜냐하면 문지기가 어떤 물건을 들고 들어오는지 알아야지 문지기가 이쌀을 어디에 보내야하는지 안다!
애 가 쌀을 보낸건데 Mime Type을 쌀을 들고 물을 들고왔다고 거짓말을 해버리면 물창고에 보내면 이쌀을 검색할수 없고 가공을 할수가 없다. Mime Type이 그래서 중요하다. Mime Type이 틀리게 되면 에러가 나온다!
너 쌀들 고 왔는데 왜 거짓말 했어? 이것이 아니라
컴퓨터가 바보기 떄문에 너 쌀들고왔는데 물창고에 가는 순간 고장이난다. 이게 Mime Type이다 .
Mime TYPE은 종류가 굉장히 많다
그래서 Mime TYPE은 내가 들고올 데이터가 먼지를 알려주는것이다.
5번쨰로는
WELCOME FILE LIST
a라는 애가 도착을 했는데 문지기가 왜 머하러 왔어 어디로 갈꺼야? 하는데 원래는 앞에다가 내가 어디로 갈지 이런가 있어야하는데 어디로 갈지도 모르고 데이터도 안가져오고 그냥 온거다.
그러면 문지기 입장에서는 머하로왔어? 그냥 왔다고 말하면 문지기는 어떻게 해야할까요? 어디로 보내야할까요?
그거에대한 정의가 있어야한다.
문지기한테 관리자가 아무 이유없이 들어온 애들은 우선 가운데 광장으로 보내 , 그 광장에는 일거리가 굉장히 많으니까 일거리를 찾을수 있게 광장으로보내 하면
문지기는 A를 Welcome 하고 광장으로 보내는것이다.
그것이 WELCOME FILE LIST이다. 관리자가 누군가에 따라 내가 설정하기 나름이다.
그다음에 Error Pages처리!
만약 a가 들어오는데 성안에 없는 목적지 파를 가지고 들어오면 문지기는 파? 파라는 곳은 없다는걸 확인하고
a한테 파가 어디야? 라고 물어보고 파? 파? 파? 하다보면 문지기는 여기에서 부하가 일어날것이다.
왜냐하면 문지기가 어떻게 해야될지 모르니까. 그러니 관리자가 문지기한테 이상한 주소가 들어오면 에러 페이지로 던져라고 말한다.
누군가 이상한곳으로 가려고하면 아무것도 안적은 사람은 광장으로 보내지만 어딘가로 가려하는 사람들은 잘못들어왔으니까 일단은 이상한 놈들이 모이는 이상한 광장으로 a를 보내는것이 에러 페이지 처리이다!
그다음 리스너 /필터 설정은
필터라는건? a가 들어왔을떄 a의 신분을 확인하는것이다. 우리나라가 A라는 나라면 a라는 사람이 들어올떄 그사람이 나라가 b나라면 필터링에서 쫓겨난다. 이게 필터이다.
그리고 만약에 a가 총을 들고왔는데 우리나라는 총소유가 금지 되어있으면 문지기는 총을 뺏고 들여보내주는데 그것도 필터이다.
리스너는 무엇인가? 고급 관리자 집이 있는데 관리자집에 되게 높은 양반이있는데 이 사람이 술을 잘마시는 사람이 필요한것이다. 이사람이 너무 잘마셔서 같이 마시는사람이 맨날 뻗어버리니까 술친구가 필요한거다
그래서 리스너로 등록하는것이다. 문지기야 술잘먹는 사람 그 사람들을 찾아내 하면
문지기는 저 WEb.xml에 적혀있는 해야될 일들이 너무 많아서 내가 다 못할거같은데 니가 하면 안되냐?
관리자는 니가 해야지 하면 문지기는 진짜 못하겠다고 하면 이 떄 리스너를 만든다.
리스너는 새로운 문지기이다. 문지기가 아니고 리스너는 술잘먹는 사람만 확인하는 대리인 같은애이다.
입구에서 대리인이 같이 지키고 있으면서 문지기가 일을 하고 있지만 문지기가 일을 하는 동시에 새로운 대리인이 새로운 사람이 들어오는걸 지켜보고 있는데 문지기가 a, b , c , d ,e 가 일을 하고있어서 바쁘면 리스너는 동시에 a에게 너 술잘마시니? B술잘마시니? 네 하면 네 한다고 무조건 술 잘마시는것은 아니니 대리인이 실제로 먹여보고 먹여봤더니 실제로 잘마시면 문지기한테 야 문지기야 더이상 검사하지말고 나 애좀 데려갈게 하면
문지기는 애는 어디로 가야하는지 데이터 처리해야한다고 하면 다 무시하고 새로운 대리인은 낚아챈다? 강제로 관리자한테 데려가는것이 리스너이다!
보안은 말그대로 내성을 보호하는것이다.
이상한 사람 들어오면 쫓겨내고, 이상한나라에서 들어오면 쫓겨내고, 예를 들어서 불법체류자 들어오면 쫓겨내는등
현상 수배범이 들어오면 쫓겨내기도 하면서 낚아채서 감옥으로 보내기도한다.
이러한일들을 하는것이 WEB.xml이다. WEB.xml은 초반에 돌아간다.
우리가 웹서버에 진입을 하면 최초로 도는것이 web.xml이다.
다음에는 여기에서 들어오는 JSP매핑시에 문지기가 해야할일이 너무많은데 문지기가 하는 일을 줄이기 위해서 FrontController 패턴을 이용할것인데 여기에대해 알아보려고한다!
'Some Memos > Spring 개념' 카테고리의 다른 글
2/24 SPRING Controller 기본 동작 이해하기! (0) | 2022.02.24 |
---|---|
2/24 SRPING YML 파일 이해하기! (0) | 2022.02.24 |
Spring 서블릿 객체의 생명주기?? (0) | 2022.02.22 |
2/21 Spring 톰캣은 무엇인가?? (0) | 2022.02.22 |
2/17 SpringBoot 개념 HTTP는 무엇인가? (0) | 2022.02.18 |