<span style="font-size:medium;line-height:normal;">OKJSP에 이 글을 올리면 짤리는 글입니다. 이유는 아래에 설명합니다.</span> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">초보자분들이 자바웹(스프링/정부표준 등)에 입문하실 때</div> <div style="font-size:medium;line-height:normal;">강사나 선배 개발자분들이 표준을 가르칩니다.</div> <div style="font-size:medium;line-height:normal;">그때 가장 질리게 들을 확장자가 .do 이고, 항상 .do 로 끝나야 한다고 하죠.</div> <div style="font-size:medium;line-height:normal;">몇번 프로젝트할 때 이게 업무표준일 줄 알았지만,</div> <div style="font-size:medium;line-height:normal;">스트럿츠 하면서 저도 의문점을 가지게 됐습니다.</div> <div style="font-size:medium;line-height:normal;">왜 확장자를 반드시 .do 로 해야 하는가.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">StackOverflow 에 해답이 있었습니다.</div> <div style="font-size:medium;line-height:normal;"><a target="_blank" href="http://stackoverflow.com/questions/3597582/why-do-java-webapps-use-do-extension-where-did-it-come-from" target="_blank">http://stackoverflow.com/questions/3597582/why-do-java-webapps-use-do-extension-where-did-it-come-from</a><br></div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">여기서 채택된 답변을 보시면,</div> <div style="font-size:medium;line-height:normal;">스트럿츠 1 사용자 가이드가 있었습니다. 스트럿츠 1은 나온지 10년이 넘었고, 그때 당시에는 자바 웹 개발자들에게는 정말 단비같은 프레임워크였죠.</div> <div style="font-size:medium;line-height:normal;">지금은 스프링만의 Resolver가 강력해지고 다른 강력한 템플릿 엔진이 있어서 잘 안쓰긴 하지만, 스트럿츠에 한번 빠진 선배 개발자라면 계속 스트럿츠 씁니다. 심지엇 2가 나온지도 오래됐는데도 1 고집하는 분도 봤습니다.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">어쨌든, 이 스트럿츠에서는 확장자를 do로 하라고 (주:do something - 뭔가 수행해라) 가이드에서 가르치고 있습니다.</div> <div style="font-size:medium;line-height:normal;"><pre class="lang-java prettyprint prettyprinted" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;overflow:auto;width:auto;max-height:600px;line-height:17.8048000335693px;background:#eeeeee;"><code style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;font-family:Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;white-space:inherit;"><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"><</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">servlet</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">mapping</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">></span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"> </span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"><</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">servlet</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">name</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">></span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">action</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"></</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">servlet</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">name</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">></span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"> </span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"><</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">url</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">pattern</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">>*.</span><span class="kwd" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;color:#00008b;background:transparent;">do</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"></</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">url</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">pattern</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">></span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"></span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;"></</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">servlet</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">-</span><span class="pln" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">mapping</span><span class="pun" style="margin:0px;padding:0px;border:0px;font-size:13.6960000991821px;vertical-align:baseline;background:transparent;">></span></code></pre></div> <div style="font-size:medium;line-height:normal;">그렇다면 왜 이렇게 가이드를 냈을까요?</div> <div style="font-size:medium;line-height:normal;">정답은 바로 "다른 서블릿과 URL 충돌을 막기 위해"서 그렇습니다.</div> <div style="font-size:medium;line-height:normal;">JSP 서블렛을 배우면 특정 URL에 서블릿 매핑을 실습해봤을 겁니다.</div> <div style="font-size:medium;line-height:normal;">스프링이 재대로 정착되지 않았을 때, 스프링이 있어도 스트럿츠와 같이 써야 했던 시절이 있었는데, 다른 서블릿을 쓰는데 이와 충돌하지 않기 위해서 .do 로 끝나는 매핑을 가이드했죠.</div> <div style="font-size:medium;line-height:normal;">하지만 요즘은 스프링이 워낙 강력해서 스프링 외 별도 서블렛 매핑을 할 필요가 없어졌으니 다른 별도의 서블릿이 굳이 필요가 없게 되고, JSP 자체에서도 3.0 에 어노테이션 매핑이 지원되면서 의미가 상당히 퇴색됐습니다.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">즉, 2000년대 초창기 자바 웹 개발자들에게 .do 는 역사적인 확장자라 봐도 과언이 아니죠.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">하지면 WAS도 이제 매핑에 강력해지고, 요즘 서블릿 따로 안쓰고 Spring으로 통일하거나 Play! 라는 다른 웹 프레임워크도 나온 상황입니다.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">하지만 여기에 익숙했던 개발자나 강사는 확장자를 .do 로 하라고 가르치죠.</div> <div style="font-size:medium;line-height:normal;">스프링을 가르치거나, 정부표준을 가르치거나.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">정부표준 기본 세팅에서 URL 확장자가 항상 .do 로 끝나도록 매핑한 이유 또한 이 역사 때문입니다.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">한마디로 관행이고, 이게 한국에서는 "표준"인양 취급을 하고 있죠.</div> <div style="font-size:medium;line-height:normal;">요즘은 검색과 경량화 두마리 토끼를 잡는 REST URL이 대세이긴 하지만,</div> <div style="font-size:medium;line-height:normal;">아직도 do를 고집하고 있는 개발자들이 상당히 많습니다.</div> <div style="font-size:medium;line-height:normal;">그래서 왠만한 정부 사이트들이 모두 이 관행이 반영되어 .do 로 끝나는 URL을 흔히 볼 수 있을 겁니다.</div> <div style="font-size:medium;line-height:normal;"><br></div> <div style="font-size:medium;line-height:normal;">초보자분들은 이 .do를 왜 쓰는지 궁금하다면 제 글을 보시면 됩니다.</div> <div style="font-size:medium;line-height:normal;">저도 왜 궁금했는지 OKJSP에 올린 적 있었지만 아무도 시원한 답변을 주지 못해 제가 직접 구글링 하고 물어보고 해서 나온 허무한 결과입니다.</div> <div style="font-size:medium;line-height:normal;">그냥 그렇게 아세요. 그저 전통적인 관행일 뿐입니다.</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.