Spring MVC, 어렵지 않게 만들기

2021. 4. 9. 02:36Spring

안녕하세요 ~.~ 

요즘은 Spring을 다시 잡고 있어서  스프링 시리즈를 기획하고 있어요.

다시 한 번 생각하지만 역시 Spring 은 너무 재밌네요 💃🏻

 

참고! 저를 포함한 이 포스팅을 보시는 분들마다 java, spring 버전이 다르기 때문에 100번 생각해도 왜 안되는지 모르겠을 땐,  버전을 한 번 챙겨보시는 걸 추천드립니다 ㅎㅎ,,,,

 

 

****************  INDEX  *****************

1 부

🌱 Maven Project 

⏳ Spring Project 설정

🐈 Tomcat 설정

🗂  Library 설정

💼 Controller Test

 

2부

🤖 JDBC

 

******************************************** 

 

 


🕶  개발 환경

운영체제 - macOS Big Sur (version 11.2.3) 

IDE - IntelliJ (Eclipse와는 생성되는 프로젝트 구조가 다릅니다)

Server - Apache Tomcat

JDK - 1.8

 

 

자 그럼 바로 만들어 볼게요.

 

 

 

 

🌱  Maven Project

먼저 IntelliJ에서 Create New Project를 선택해주세요.

 

Maven 기반의 프로젝트를 만들 것이기 때문에 Maven을 선택해주시고, 처음이라면 SDK 위치를 설정해줍니다.

Mac os에서는 /Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home 이 곳에 저장이 되네요 ~

 

입력하셨다면 Next!

 

 

 

 

GroupId와 ArtifactId 와 Project명을 입력할 차례인데요.

 

GroupId는 프로젝트 고유 아이디입니다.

모든 프로젝트 중에서 당신의 프로젝트를 식별하게 해주는 식별자로, 도메인 이름의 반대로 시작합니다.

예를 들어 org.apache.maven 처럼 말이죠 〰️ 

 

ArtifactId는 버전 없는 jar파일의 이름입니다.

특수 문자를 사용하지 않고 소문자로만 작성합니다.

프로젝트 명과 동일하게 적어주세요.

 

Finish를 선택하면 프로젝트 생성이 완료됩니다.

 

 

 

위에 뜨는 Maven projects need to be imported는 Enable Auto-import를 선택해줍시다 〰️ 

 

 

 

 

 

⏳  Spring Framework 설정

 

 

 

이번에는 프로젝트에 Spring MVC를 더해봅시다 〰️ 

최상위 프로젝트에 우클릭으로 Add Framwork Support... 를 선택해줍니다.

 

 



스크롤을 조금 내리면 Spring MVC 가 보입니다. 선택해주세요!

선택 후 OK를 눌러주세요.

 

 

 

web이라는 폴더가 생긴 걸 확인할 수 있습니다.

내부를 하나씩 확인해볼까요?

 

applicationContext.xml ( Eclipse: root-content.xml)

이 파일에 정의 된 객체(Bean)들이 생성되고 의존성 주입이 처리됩니다.

 

dispatcher-servlet.xml ( Eclipse: servlet-context.xml)

Web과 관련 처리 작업 설정합니다.

 

web.xml

이 파일 내부의 ContextLoaderListener가 웹 애플리케이션 구동 시 가장 먼저 동작합니다.

Tomcat 관련 설정을 합니다.

 

 

 

 

 

🐈  Tomcat 설정

 

 

상단에 Add Configuration... 을 선택해주세요.

 

 

 

 

 

 

 

좌측 상단에 + 를 눌러 Tomcat Server > Local 를 선택해주세요.

 

 

 

 

 

 

Tomcat 을 설치하지 않으신 분들은 Tomcat 사이트에서 설치해서 그 위치를 연결해주셔야해요.

 

하나 더! 아래를 보면 Warning: No artifacts marked for deployment 라는 경고창이 있어요.

먼저 그 오른쪽에 Fix를 눌러주세요.

 

 

 

 

 

그럼 위와 같은 창이 나옵니다.

여기서 Application context 에 있는 /SpringDemo_war_exploded 를 / 로 변경해주세요!

그럼 톰캣 설정이 끝났습니다.

 

 

 

 

 

 

실행을 하면 정상적으로 실행된 걸 확인할 수 있어요.

 

 

 

 

🗂  Library 설정

 

먼저, Lombok Plugin을 사용하고자 합니다. 

 

Preferences... 에서 plugin을 선택한 후, Lombok을 검색해서 설치해주세요.

 

 

이번엔 pom.xml에 라이브러리 의존성을 명시하여 사용할 수 있게끔 해볼게요.

pom.xml 중 <project></project> 사이, <properties></properties> 바로 아래에

아래 코드를 추가해주세요.

 

    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>5.0.7.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
        </plugins>
    </build>

 

 

 

이런 식으로 추가해주세요 〰️ 버전을 잘 확인해주세요. 

${org.springframework-version} 에는 <properties>에 적힌 5.0.7.RELEASE 가 입력됩니다.

 

spring-context, spring-webmvc, aspectjrt, junit, lombok ... 등 추가했습니다.

이번엔 라이브러리들을 적용시켜보도록 할게요.

 

 

 

 

 

 

File > Project Structure ... 을 선택해주세요. 단축키 ⌘(command) + ; 입니다.

Artifacts 탭에서 Available Elements 들을 옮겨줍니다.

 

 

 

 

 

 

모든 Elements를 선택해서 Put into /WEB-INF/lib 를 선택해줍니다. 

혹은 원하는 Element를 두 번 클릭해도 이동되어집니다.

 

 

 

 

🕶  로그 기록 남기기

이번에는 로그를 남기기 위해 Log4j를 사용해보겠습니다.

log4j.xml 라는 이름의 파일을 생성해서 로그를 남길 건데요.

 src/main/resources 에 log4j.xml 파일을 생성하고 아래 코드를 입력해주세요.

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>

	<logger name="org.springframework.core">
		<level value="info" />
	</logger>	
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="info" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

 

 

 

 

💼  Controller Test

자 이제 Controller를 하나 만들어 테스트를 해보겠습니다.

 

 

✔️ web.xml - url pattern 변경

 

 

web.xml 파일에서 dispatcher의 url-pattern을 *.form 에서 / 로 변경해주세요.

 

 

 

 

✔️ Controller 작성 

 

 

이번엔 controller를 작성해볼게요.

/src/main/java 에 패키지를 하나 만들겠습니다.

 

 

저는 위와 같이 설정했어요.

패키지를 만들었다면, 그 아래에 TestController를 생성합니다.

 

 

 

 

저는 위와 같은 코드를 적어봤어요.

@Log4j:  로그를 기록하는 Logger 타입의 log 객체를 자동으로 생성

@Controller:  해당 클래스가 Controller라는 걸 명시

@RequestMapping:  '/sample' 요청이 들어오면 해당 클래스에 진입

@GetMapping:  '/sample/test' GET 요청이 들어오면 해당 메소드 실행

@ResponseBody:  해당 요청의 응답 바디로 해당 메소드가 Return 하는 String 을 보냄

 

 

 

package com.gngsn.controller;

import lombok.extern.log4j.Log4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Log4j
@Controller
@RequestMapping("/sample")
public class TestController {

    @GetMapping("/test")
    public @ResponseBody String test() {
        log.info("테스트 잘 됨 ? ");
        return "SPRING DEMO TEST";
    }
}

 

자 거의 다 왔습니다 !

 

 

 

 

✔️ dispatcher-sevlet에 Bean 등록 

 

이제 마지막으로 Controller를 Bean으로 등록시켜줍니다.

dispatcher-servlet.xml에 Bean을 등록시켜줄건데요.

 

<context:component-scan base-package="com.gngsn.controller" />

 

base-package에는 본인의 패키지명을 적으면 됩니다. 

component-scan이라는 말과 같이 해당 패키지 아래의 개체를 스캔해서 Bean으로 생성하게 됩니다.

위의 코드를 추가하면 context가 존재하지 않아서 import 하라는 경고창이 뜨니, import 해주세요!

단축키 option+enter(⌥⏎) 입니다.

 

 

 

입력이 끝났다면, Test를 위한 환경 준비를 마쳤습니다.

이제 서버를 실행해서 확인해보도록 하겠습니다.

 

 

 

 

 

아래 콘솔 창에 로그가 잘 남는 것을 확인할 수 있습니다 ~!

 

 

 

 

아까 반환타입으로 설정했던 SPRING DEMO TEST 도 잘 나오는 것을 확인할 수 있습니다.

 

 

 

 

지금까지 기록 겸... 포스팅 겸.. 

스프링 프로젝트 생성하기 1부 였습니다 !

다음에는 Lombok plugin을 추가하는 아주아주 간단한 과정과 데이터베이스를 연결하는 법에 대해 포스팅하겠습니다

'Spring' 카테고리의 다른 글

@ExceptionHandler, @ControllerAdvice  (3) 2022.03.08
Spring Exception, 제대로 처리하기  (0) 2022.03.06
Spring, 3-Tier-Architecture  (0) 2021.05.06
Spring MVC, 동작 원리  (4) 2021.05.02
Spring MVC, DB 연결하기  (0) 2021.04.18