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)
์ฌ๊ธฐ์ ํ๋ ๋ฐฉ์๊ณผ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ธ๋ฐ ์ฐจ์ด์ ์ด๋ผ๊ณ ํ๋ฉด ๊ฐ๋ฐ์๊ฐ 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 |