2023. 4. 17. 08:44ใ์ธํ๋ฐ/์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
0๏ธโฃ WAR ๋ฐฐํฌ ๋ฐฉ์์ ๋จ์
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋ ค๋ฉด
์ฐ์ ํฐ์บฃ ๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ ๋ค์, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ WAR๋ก ๋น๋ํ ๋ค์ ๋ค์ ์ด ๋น๋ํ WAR ํ์ผ์ WAS์ ๋ฐฐํฌํด์ผ ํ๋ค.
์ฆ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๊ณ ์ถ๋ค๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ ๊ตฌ์กฐ์ด๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ๋ ์ด ๋ฐฉ๋ฒ์ ๋จ์ ์ผ๋ก๋
- ํฐ์บฃ ๊ฐ์ WAS๋ฅผ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ค.
- ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ด ๋ณต์กํ๋ค.
( ์น ์ ํ๋ฆฌ์ผ์ด์ ์ WAS๋ฅผ ์คํํ๊ณ WAR์ ์ฐ๋ํ๊ธฐ ์ํ ๋ณต์กํ ์ค์ ์ด ํ์ํ๋ค.)
- ๋ฐฐํฌ ๊ณผ์ ์ด ๋ณต์กํ๋ค.
(WAR ํ์ผ์ ๋ง๋ค๊ณ ์ด๋ฅผ ๋ WAS์ ์ ๋ฌํด์ ๋ฐฐํฌํด์ผํ๋ค.)
- ํฐ์บฃ์ ๋ฒ์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ํฐ์บฃ์ ๋ค์ ์ค์นํด์ผ ํ๋ค.
๊ณผ๊ฑฐ์๋ ์ด๋ ๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ๋ ๊ตฌ์กฐ๊ฐ ๋๋ฌด๋ ๋น์ฐํด์ ์ด๊ฒ ๋จ์ ์ธ๊ฐ? ์ถ๊ธดํ๋ฐ
์๋์ ์ผ๋ก ํ์ฌ ๋ด์ฅ ํฐ์บฃ์ ์ฌ์ฉํด์ ํ๋ ๋ฐฉ์๊ณผ ๋น๊ตํด๋ณด๋ฉด ๋จ์ ์ด ๋ ์ ์๋ค.
WAR ๋ฐฐํฌ ๋ฐฉ์์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ํฐ์บฃ ๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ด์ฅํด ์ ๊ณตํ๋ ๋ด์ฅ ํฐ์บฃ ๊ธฐ๋ฅ์ด ๋ฑ์ฅํ๋ค.
์ธ์ฅ ์๋ฒ ๋ฐฉ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ WAR ํ์ผ์ ๋ฐฐํฌํ๋ ๋ฐฉ์์ด๊ณ , WAS๋ฅผ ์คํํด์ ๋์ํ๋ค.
๋ด์ฅ ํฐ์บฃ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ JAR ์์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ WAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋๋ ๋ฐฉ์์ผ๋ก main() ๋ฉ์๋๋ฅผ ์คํํด์ ๋์ํ๋ค.
1๏ธโฃ ๋ด์ฅ ํฐ์บฃ ์ค์
//์คํ๋ง MVC ์ถ๊ฐ
implementation 'org.springframework:spring-webmvc:6.0.4'
//๋ด์ฅ ํฐ์ผ ์ถ๊ฐ
implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'
build.gradle์ tomcat-embed-core ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ค๋ค. ์ด๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ refresh ํด์ฃผ๋ฉด ํฐ์บฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฌํจํด์ ํฐ์บฃ ์๋ฒ๋ฅผ ์๋ฐ์ฝ๋๋ก ์คํํ ์ ์๋ค.
EmbedTomcatServletMain
public class EmbedTomcatServletMain
{
public static void main(String[] args) throws LifecycleException
{
System.out.println("EmbedTomcatServletMain.main");
// ํฐ์บฃ ์ค์
Tomcat tomcat = new Tomcat();
Connector connector = new Connector();
connector.setPort(9090);
tomcat.setConnector(connector);
// ์๋ธ๋ฆฟ ๋ฑ๋ก
Context context = tomcat.addContext("", "/");
File docBaseFile = new File(context.getDocBase());
if (!docBaseFile.isAbsolute()) {
docBaseFile = new File(
((org.apache.catalina.Host) context.getParent()).getAppBaseFile(), docBaseFile.getPath());
}
docBaseFile.mkdirs();
tomcat.addServlet("", "helloServlet", new HelloServlet());
context.addServletMappingDecoded("/hello-servlet", "helloServlet");
tomcat.start();
}
}
- ํฐ์บฃ ์ค์
์ฐ์ ํฐ์บฃ ์ค์ ์ ๊ฐ๋จํ๋ฐ ๋ด์ฅ ํฐ์บฃ์ ์์ฑํ๊ณ , ํฐ์บฃ์ด ์ ๊ณตํ๋ Connector ๋ฅผ ์ฌ์ฉํด์ 9090 ํฌํธ์ ์ฐ๊ฒฐํ๋ค.
- ์๋ธ๋ฆฟ ๋ฑ๋ก
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet.service");
resp.getWriter().println("hello servlet!");
}
}
HelloServlet์ ์์ฑํ ๋ค์,
ํฐ์บฃ์ ์ฌ์ฉํ contextPath์ docBase๋ฅผ ์ง์ ํด์ฃผ๊ณ , tomcat.addServlet์ ํตํด์ ์๋ธ๋ฆฟ์ ๋ฑ๋กํด์ค๋ค.
๊ทธ ํ context.addServletMappingdDecoded()๋ฅผ ํตํด์ ๋ฑ๋กํ ์๋ธ๋ฆฟ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ค๋ค.
- ํฐ์บฃ ์์
์ค์ ์ ๋๋ ํ์ tomcat.start() ์ ํตํด์ ํฐ์บฃ์ ์์ํด์ฃผ๋ฉด ๋๋ค.
๐ ๋ด์ฅ ํฐ์บฃ ๋ฐฉ์์ ํฐ์บฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฌํจํ๊ณ , ์์ ๊ฐ์ด ์๋ฐ์ฝ๋๋ก ์ง์ ์คํํ๋ ๊ฒ์ด๋ค.
2๏ธโฃ ๋ด์ฅ ํฐ์บฃ, ์คํ๋ง ์ฐ๊ฒฐ
EmbedTomcatSpringMain
public class EmbedTomcatSpringMain
{
public static void main(String[] args) throws LifecycleException
{
System.out.println("EmbedTomcatSpringMain.main");
// ํฐ์บฃ ์ค์
Tomcat tomcat = new Tomcat();
Connector connector = new Connector();
connector.setPort(9090);
tomcat.setConnector(connector);
// ์คํ๋ง ์ปจํ
์ด๋ ์ค์
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(HelloConfig.class);
// ์คํ๋ง MVC ๋์คํจ์ฒ ์๋ธ๋ฆฟ ์์ฑ, ์คํ๋ง ์ปจํ
์ด๋ ์ฐ๊ฒฐ
DispatcherServlet dispatcher = new DispatcherServlet(appContext);
// ๋์คํจ์ฒ ์๋ธ๋ฆฟ ๋ฑ๋ก
Context context = tomcat.addContext("", "/");
tomcat.addServlet("", "dispatcher", dispatcher);
context.addServletMappingDecoded("/", "dispatcher");
tomcat.start();
}
}
๋ด์ฅ ํฐ์บฃ์ ์คํ๋ง ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ๋น์ทํ๊ฒ
ํฐ์บฃ ์ค์ ์ฐ์ ํด์ฃผ๊ณ , ์คํ๋ง ์ปจํ ์ด๋ ์์ฑํ ๋ค์, ์ด๋ฅผ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์ฐ๊ฒฐํด์ฃผ๊ณ ,
์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ฑ๋กํด์ฃผ๋ฉด ๋๋ค.
์ค์ ์ ๋ง์น๊ณ ์ด์ main() ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ๋ด์ฅ ํฐ์บฃ์ ์์ฑํด์ 9090 ํฌํธ๋ก ์ฐ๊ฒฐํ๋๋ก ์ค์ ํ๊ณ ,
์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ ์ด์ ํ์ํ ๋น๋ค์ ๋ฑ๋กํ๋ค.
์คํ๋ง MVC ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ง๋ค๊ณ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ ๋ค์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ด์ฅ ํฐ์บฃ์ ๋ฑ๋กํ๊ณ ๋ด์ฅ ํฐ์บฃ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๐ ์คํ๋ง MVC ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ WebApplicationInitalizer (tistory.com)
์คํ๋ง MVC ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ WebApplicationInitalizer
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (tistory.com) ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋? (tistory.com) ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋? WAS๋ฅผ ์คํํ๋ ์์
hyejin.tistory.com
์ฌ๊ธฐ์ ํ๋ ๋ฐฉ์๊ณผ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ธ๋ฐ ์ฐจ์ด์ ์ด๋ผ๊ณ ํ๋ฉด ๊ฐ๋ฐ์๊ฐ main ๋ฉ์๋๋ฅผ ์ง์ ์คํํ๋๊ฐ ์๋๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ํตํด์ ์คํํ๋๊ฐ์ ์ฐจ์ด๊ฐ ์์ ๋ฟ์ด๋ค.
'์ธํ๋ฐ > ์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถํธ ํด๋์ค ๋ง๋๋ ๋ฒ (0) | 2023.04.18 |
---|---|
๋ด์ฅ ํฐ์บฃ ๋น๋, ๋ฐฐํฌ (Fat Jar) (0) | 2023.04.18 |
์คํ๋ง MVC ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ WebApplicationInitalizer (0) | 2023.04.13 |
์คํ๋ง ์ปจํ ์ด๋ ๋ฑ๋ก (0) | 2023.04.13 |
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (0) | 2023.04.11 |