본문 바로가기
728x90
반응형

요즘은 Spring Boot로 바로 개발한다.

하지만 Spring을 제대로 알려면 Servlet부터 Spring, Spring Boot 순서로 배워야 잘 배운거라 생각한다!

옛날 포스팅된 글들 혹은 이클립스, STS로 스프링프로젝트를 만드는 글들은 많으니

IntelliJ로 Spring 프로젝트를 만드는 방법을 포스팅해볼까 한다~~!

[ IntelliJ Version 2021.1.2 Ultimate Version ] 으로 작성됨

1.

File -> 새 프로젝트

에서 Maven을 선택하고 SDK버전을 선택하고(본인은 1.8 = 8), archetype은 체크하지 않고 다음으로 넘어간다

2.

프로젝트명을 적어주고 완료를 누른다

GroupId, ArtifactId, Version은 여기서 생략했다.

GroupId는 작성하는 것을 보통 권장한다.

-GroupId: 최상위 패키지명으로 사용된다. com.XXX.BBB의 방식

-ArtifactId: 프로젝트명으로 사용

-Version: 개발 버전은 SNAPSHOT, 배포버전은 RELEASE를 붙여서 사용

3.

프로젝트에서 마우스 우클릭으로 프레임워크를 추가한다(Add Framework Support...)

왼쪽 탭에서 쭉 아래로 내려서 Spring(S)탭에 있는 Spring MVC 체크박스를 체크해준다( 현재 본인 버전: 5.2.3 )

라이브러리 사용 말고 다운로드로 선택한다( 어차피 디폴트 )

확인을 눌러준다

프로젝트 구조에 web 디렉토리가 추가되고 아래에 WEB-INF, 밑에 applicationContext.xml, dispatcher-servlet.xml, web.xml이 생성 된것을 볼 수 있고, index.jsp가 생성되었다.

이클립스, STS와 intelliJ는 파일명이 다르다(동작은 동일)

관련 설정 IntelliJ Eclipse
빈(bean) 설정 applicationContext.xml root-context.xml
내부 웹 관련 처리 작업 설정 dispatcher-servlet.xml servlet-context.xml
톰캣(tomcat) 구동 관련 설정 web.xml web.xml

4.

lib를 우클릭해서 삭제를 해준다

기본적으로 인텔리제이의 lib를 사용하는것이 아닌 우리는 Maven Repository(pom.xml)에 의존성(라이브러리)을 명시해서 사용할 것이기 때문이다.

 

5.

pom.xml에 필수적인 의존 라이브러리들을 추가하자

복붙이...아마 안될거긴한데 <properties></> 부분과 <dependencies></dependencies>부분만 직접 작성해보자

<!-- -->의 주석부분은 각 프로젝트마다 다르다.

* 기존

기존 pom.xml

* 수정

수정후 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

<!-- groupId, artifactId, version은 각각 개인의 프로젝트 마다 다르다 -->

  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <org.springframework-version>5.2.3.RELEASE</org.springframework-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
  </dependencies>

</project>

추가한 후에는 intelliJ 우측의 Maven탭을 클릭하고 새로고침을 해준다 그러면 dependencies(종속 요소)가 추가되며 업데이트 된다

또는 수정을 할때마다 저기 V모양의 표시가 뜨는데 저 버튼을 눌러도 된다

업데이트 전
업데이트 후

6.

인텔리제이에서의 설정은 인텔리제이의 설정과 프로젝트 설정 이렇게 2가지가 있는데, 여기서는 프로젝트 설정을 열어준다.

File->Project Structure( 단축키-> 윈도우:(Ctrl+Alt+Shift+S) / 맥:Command+; ) 자주 쓰이는 단축키니까 외워두자

왼쪽 프로젝트 설정 탭의 라이브러리 탭으로 가서 빨간 줄이 뜬 Spring MVC-..., Spring- ... 2가지를 하나씩 클릭하고 -를 눌러서 제거해주자

이번에는 아티팩트로 가서 프로젝트 밑을 다 선택해서 /WEB-INF/lib에 넣는다

7.

프로젝트 구조를 조금 변경해준다

- web -> src/main/webapp

- web/index.jsp -> src/main/webapp/views/index.jsp

- src/test -> src/test/resources 폴더 추가

web 폴더를 src/main까지 끌어다가 놓고 이름을 webapp으로 변경해준다(디렉토리 이름 변경은 Shift+F6 / function+Shifht+F6)

기존
수정 후

아까 설정했던 프로젝트 설정창을 열고 모듈 탭을 클릭한다

빨간색으로 표시되어 있는 웹 리소스 디렉토리 경로를 변경해줘야 한다

Web을 클릭하고 경로를 /src/main/webapp으로 바꿔주자

변경 후엔 빨간색이 없어진 것을 볼 수 있다. 확인을 눌러준다.

 

8.

간단한 컨트롤러를 만든다

java/controller/HomeController.java

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "index";
    }
}

 

9.

web.xml과 dispatcher-servlet.xml(servlet-context.xml)을 수정해준다

* web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

맨 아래의 url-pattern이 *.form으로 되어있던 것을 /로 수정

 

* dispatcher-servlet.xml(servlet-context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

  <mvc:annotation-driven />
  <context:component-scan base-package="controller" />

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
  </bean>
</beans>

base-package는 groupId마다 다르다. 나는 groupId를 작성하지 않았다.

작성했던 사람은 XXX.BBB.controller 이런 식으로 설정하면 된다.

이 안의 의미는 우리는 @Controller라는 어노테이션으로 작성했기 때문에 mvc:annotation-driven이라는 태그를 작성해주었고

스프링에서는 xml에 빈들이 scan될 수 있도록 적어줄 수 있는데, base-package (기본패키지) 경로를 controller로 잡았다는 뜻이다.

추가로 밑에는 view에 관한 설정인데 우리는 웹에서 파일명을 적으면 실제로 IDE 내부에서는 경로를 /WEB-INF/views/ 파일명 / .jsp

이 열리게 된다는 뜻이다.

헥헥 거의 다왔다.

10.

tomcat 추가

참고로 tomcat이 아직 없는 사람은 8,9버전 중에서 설치하면 될것이다. (보통 최신의 버전은 불안정하다고 생각함)

https://tomcat.apache.org/download-90.cgi

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

본인은 9 버전으로 설치했다. Mac이라서 tar.gz를 다운로드 받았다. 윈도우는 .zip 을 받으면 될 것이다.

맥북 설정은 이 주소를 보고 진행했다.

https://es2sun.tistory.com/188

톰캣을 다운로드 받았다면

우측의 구성 추가(Add Configuration)을 클릭하자

더하기 눌러서 쭉쭉 내려서 톰캣 서버-local을 클릭한다

제대로 다운로드 하고 설정을 했다면 열자마자 경로가 바로 잡힐 것이다

아래 보면 한글은 저렇게 나오고, 영어로는 Warning: No Artifacts marked for deployment라고 나온다

수정 또는 Fix 버튼을 누르자

그리고 스크롤을 아래로 내려서

/프로젝트명_war_exploded라고 되어 있는 경로를 /로 바꿔주자

11.

index.jsp를 간단하게 수정해주자(안해도 됨)

아 스프링 정말 ..진심 힘드네

기본적으로 body태그 안에 $END$가 되어있을것이다.

자 이제 우측 위에 톰캣 재생 버튼을 눌러보자 오류 없이 톰캣이 실행된다면 index.jsp 가 뜰 것이다.

성공!!!!!

추가로 몇가지 유용한 팁을 적어보자면

Tomcat은 기본적으로 8080 포트로 실행된다.

다른 프로젝트에서 이미 실행중이면 포트 충돌로 실행이 되지 않을 것이다.

또는 8080 포트를 쓰고 있는 다른 프로그램이 있다면 톰캣의 기본 실행 포트를 변경해줄 수 있다.

아까 했던 인텔리J 우측 상단의 구성 편집을 눌러서 톰캣 설정으로 들어가자

이 부분을 변경해주면 다른 포트로 톰캣을 실행시킬 수 있다. 또한 톰캣이 설치된 폴더에 직접 가서 설정을 바꿔주는 방법이 있다.

 

또한 jsp html css 등 리소스 파일이 바뀔 때마다 톰캣을 계속 이 버튼으로 실행시켜줘야 하는데..

서버 다시 시작보다는 클래스 및 리소스 업데이트 하는 쪽이 속도의 이점을 취할 수 있다. 최신형의 노트북이나 컴퓨터는 그냥 쌩으로 다시 시작해도 된다..

 

또 한가지 팁을 적자면 인텔리J와 톰캣을 제대로 종료했음에도 불구하고 8080 포트가 사용중이라는 에러 메세지를 볼 수 있다.

이럴때는 터미널을 열어서 직접 프로세스를 kill 해줘야 한다.

되게 자주 쓰일거니깐 어디 메모해두고 계속 보면 좋다 ㅋㅋ(외워질때까지)

 

- Windows: 

netstat -a -o -n

taskkill /F /PID 8080포트의 PID

 

- Mac

lsof -i :8080

kill -9 PID

 

자 이제 정말 끝이다.. 아마 이런 초기 설정들 그리고 무거운 스프링때문에 내장톰캣을 달고 스타터들과 몇개의 의존성을 가진 스프링 부트가 나온게 아닌가싶다. 그래도 힘들지만 이런 프로젝트를 만들어 본다는것, 스프링을 제대로 배워본다는 것이 더 가벼운 부트를 할때 도움이 될거라 생각한다.

 

참고 : https://jeeneee.dev/spring/spring-project-intellij/

728x90
반응형

댓글