-
코드로 배우는 스프링 웹 프로젝트 1) 개발환경코드로 배우는 스프링 웹 프로젝트_intellij 2021. 4. 12. 10:01
저 같은 경우는 Spring을 위주로 지금 학습을 하고 있는 학생입니다. 구글링을 하거나 책을 보거나 인강을 듣거나 해도 버전이 다르거나 Mac 이용자 분들의 강의에서 단축키가 달라 어려움을 겪는 일들이 빈번하게 있었고 이러한 과정들을 제가 블로그에 적어나가면서 후에 저와 같은 어려움을 겪지 않았으면 하는 바람에 이러한 글을 작성하게 됬습니다.
이 책은 이클립스와 Maven을 기준으로 하고 있는데 저 같은 경우는 Intellij로 개발을 시작할 예정입니다. 그 이유는 이클립스에서 발생하는 잔에러 등이 있기 때문에 조금은 어려움이 있을지 모르지만 책 부록에 있는 Intellij와 구글링을 참고하면서 만들 예정입니다.
1. 개발 환경 준비
Java 버전 : 11
Tomcat : 8.5 or 9.0
Spring 5 프레임 워크
Gradle과 Maven
Intellij 2021.1(최근에 업데이트된 버전 210410 기준)
Lombok
Log4j
* 플러그인들을 추가하는 방식 또한 많은 정보들이 나와있기에 생략하겠습니다. Lombok은 꼭 필요하니 플러그인 설치와 Intellij의 컴파일 관련 옵션또한 조정을 해야합니다.
2021.1 gradle 7.0 설치 완료 Intellij와 gradle maven 모두 다운로드 받고 그 과정을 설명한 것은 구글링 해도 너무 많이 나오기에 저는 생략하고 진행하도록 하겠습니다.
2. 프로젝트 생성
spring project 생성 1 new > project를 한 후 gradle로 할 경우는 이런 식으로 java와 web을 체크하면 되고 Maven으로 빌드하겠다 하는 경우는 유사한 과정을 거치면 됩니다.(이 내용은 후에 메이븐으로 진행할 때 마저 진행하겠습니다.)
컴퓨터의 사양에 따라서 데이터를 갖고오는 속도 차이가 있을 순 있지만 잠깐의 여유를 갖고 기다리면 금방 될 것입니다. 프로젝트 명까지 정하게 되면 프로젝트가 만들어지게 되는데 아직은 스프링 프레임워크에 대한 지정이 없는 상태입니다.
스프링 프레임워크를 추가하면 Add Framework Support를 이용하는 방법, Gradle이나 Maven에 직접 추가하는 방식이 있습니다.
spring projec 생성 3 프로젝트에 오른쪽 마우스를 클릭하게 되면 위 사진과 같이 Add FrameWork Support 방식이 보이게 됩니다. 이걸 눌러 프로젝트에 spring framwork를 지정해주도록 하겠습니다.
spring에 대한 여러 이름이 들어가서 '어떤거지?'하는 그런 고민이 있을 수 있지만 개발을 할 때는 MVC가 기본이기 때문에 Spring Mvc를 눌러 다운로드 받아주면 됩니다.
교재에는 Add FrameWork 방식을 사용하면 버전이 낮다는 적혀있는데 지금은 많이 해소된 것으로 보이고 있습니다.
만약 이외에 원하는 버전으로 조정하는 방식으로 만들고 싶다면 직접 Gradle, Maven을 이용하면 됩니다.
톰캣은 각자 준비를 했을 것인데 톰캣을 프로젝트에서 사용하기 위해서는 오른쪽 상단의 Add Configuration를 누르게 되면 Run/Debug Configurations 창이 열리게 됩니다.
+ 버튼을 눌러서 Tomcat>Local을 눌러 톰캣을 추가하고 경로를 지정해주도록 하겠습니다. 그리고 아래에 빨간 글씨록 에러버튼이 난다면 Fix버튼을 사용해 하나씩 하나씩 고쳐나가면 됩니다.
또 Deployment탭에 들어가서 + 버튼을 사용해 톰켓이 현재 프로젝트를 바라보도록 설정을 해주면 됩니다.
초록색 Run 버튼을 눌르면 정상적으로 수행되는 것을 알 수 있습니다.
* 스프링 프레임워크를 buildl.gradle에 부여하면 되는데 아래와 같은 코드 방식으로 작성하면 된다. build.gradle에 코드를 추가하면 자동으로 다운로드와 빌드가 실행.
dependencies { testImplementation 'junit:junit:4.11' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' compile group : 'org.springframework', name : 'spring-context', version : '5.0.7. RELEASE' compile group: 'org.springframework', name : 'spring-test', version : '5.0.7.RELEASE' }
또 롬복 같은 경우는 plugin으로 설치를 한 후 build.gradle 파일에 의존성을 추가해야하는데
compile group : 'org.projectlombok', name : 'lombok', version: '1.18.0'
이런 코드를 추가한다.
Log4j 같은 경우는 테스트를 진행하거나, Tomcat을 실행하면서 필요한 메세지를 System.out.println() 대신에 Log4j를 이용해서 기록하는데 이를 위해서 Log4j 라이브러리가 필요하고 관련 설정을 추가해 줄 필요가 있다.
compile group : 'log4j', name : 'log4j', version: '1.12.17'
Log4j를 제대로 이용하기 위해서는 Log4j의 설장 파일 혹은 객체를 생성해야 한다. 주로 XML파일이나 properties 파일을 이용해서 설정한다. 프로젝트 내에 resources를 생성하고 함께 나중에 사용할 java 폴더도 생성한다.(지금은 자동 생성)
log4j.properties log4j.rootLogger=INFO, stdout # Direct log message to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stout=org.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %-5p %c{1}: %L - %m%n
위의 코드는 log4j를 사용하기 위해 resources 하위에 만든 log4j.properties 파일에 들어갈 값이다.
Spring mvc 추가와 XML 파일 생성
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.7.RELEASE'
spring-mvc 의존성을 추가하고 xml폴더를 만드는 경우는 WEB-INF 폴더를 먼저 생성하고 그 안에 spring>appServlet 폴더를 생성하면 된다.
spring 폴더에는 root-context.xml 파일을 생성하면된다. 직접 만들어도 되나 NEW>XML Configuration File을 누르면 된다.(이 것은 최신 버전의 Intellij에는 없다) 그래서 직접 생성하였는데
이런 구조를 가지며 2개의 xml을 직접 생성하였다. 두개의 xml파일을 만들 때 우측 상단에 Configure이 뜨는데 이때 클릭해서 두 개의 xml을 추가하자.(Intellij는 자동으로 트래킹해서 해당 파일이 어떤 프레임워크의 설정 파일인지 확인하고 프로젝트에 포함시켜준다.)
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
Intellij는 XML 파일들을 자동으로 추적해서 해당 파일에 어떤 프레임워크의 설정 파일인지를 파악하고 프로젝트 정보에 포함합니다. project structure를 확인해보면 root-context.xml과 servlet-context.xml이 추가된 것을 확인 할 수 있습니다.
src/jmain/java는 실제로 들어가는 스프링 코드의 경로이고 src/main/resources는 실행할 때 참고하는 기본 경로(설정파일) src/test/java는 test용을 만드는 곳이고 webapp/WEB-INF/Spring/appServlet/servlet-contex.xml은 "웹과 관련된 스프링 설정 파일" root-context.xml은 스프링 설정파일(공통) views는 jsp경로 web.xml은 톰켓 파일 build.gralde은 pom.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="org.zerock.controller" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
이 내용을 자세히 보면 <mvc:annotation-driven>은 annotation 설정을 한번에 하기 위한 설정이다. 또한 후에 자세히 알게되겠지만 내가 설정한 zerock controller 패키지의 컴포넌드들을 스캔에 빈 등록을 자동으로 해준다.
* 직접 타자로 mvc를 입력한다면 네임스페이스가 달라 에러가 발생할 수 있다. 네임 스페이스를 cache가 아닌 mvc로 해야한다.
<context:component-scan~>을 사용함으로 @Controller이 가능해지는 것이다.
마지막에 보이는 <bean>에는 InternalResourceViewResolver를 갖고 오는 것으로 컨트롤러가 뱉는 논리적 뷰 이름을 보여줄 JSP로 매칭시켜주는 것이다.
이제 web.xml을 생성해야하는데 생성법은 new>xml>Spring Config를 누르면 만들 수 있다. 여기서 더 중요한것은 File>Porject Structure>Factes>Web>+버튼>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/spring/root-context.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
위의 코드는 web.xml인데 이를 참고하면 좋다. 이클립스처럼 하기 위해서 src/main/webapp/WEB-INF/web.xml 경로를 지정해야한다.
에러발생
Caused by org.codehaus.groovy.control.MultipleCompilationErrorsException:가 발생하면 project structure에 jdk 설정을 11로 맞추어주고 setting>gradle에서 build하는 것을 gradle이 아닌 intellij로 바꾸어 준다.
참고 :
코드로 배우는 스프링 웹 프로젝트] 1. 스프링 개발 환경 구축 - 1
책에서는 이클립스와 Maven 을 기준으로 하고 있는데 나는 인텔리제이를 사용하고 사랑하기 때문에 인텔리...
blog.naver.com
velog.io/@wimes/1.-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-1xk4ceqje3
'코드로 배우는 스프링 웹 프로젝트_intellij' 카테고리의 다른 글
Chapter 4. MyBatis 스프링 연동 (0) 2021.04.15 Chapter 3. 스프링과 Oracle Database 연동 (0) 2021.04.14 Chapter 2. 스프링의 특징과 의존성 주입 (0) 2021.04.13 Chapter 1. 스프링 개발 환경 구축 (0) 2021.04.12