[Spring] IntelliJ Tomcat, MySQL, SpringMVC 설정

2020. 8. 20. 02:22Spring/Spring

1. Tomcat 설치

1) 설치 방법

홈페이지(http://tomcat.apache.org/) 수동 다운로드 방식과 Homebrew를 이용한 다운 방식이 있다. 지원하는 Java 버전을 고려하여 Tomcat 버전을 선택하여 다운받도록 한다.

Tomcat 설치

// brew 업데이트
brew update

// Tomcat 버전 확인
brew search tomcat

// 'tomcat'은 가장 최신버전으로 설치
brew install tomcat@8

// 정상적인 설치 확인
brew list

※ brew로 설치한 내용은 /usr/local/Cellar 폴더 하위에 설치된다.

2) 압축 해제 및 권한 설정

다운받은 압축파일은 바탕화면에 있다고 가정한다.

// 직접 다운받을 경우
sudo mv ~/Desktop/apache-tomcat-8.5.57 /usr/local/Cellar
sudo ln -s /usr/local/Cellar/apache-tomcat-8.5.57 /Library/Tomcat
sudo chown -R <맥북 사용자 ID> /Library/Tomcat
sudo chmod +x /Library/Tomcat/bin/*.sh

// brew로 다운받을 경우
sudo ln -s /usr/local/Cellar/tomcat@8/8.5.57/libexec /Library/Tomcat
sudo chown -R <맥북 사용자 ID> /Library/Tomcat
sudo chmod +x /Library/Tomcat/bin/*.sh

3) 실행 및 종료

Tomcat 실행 후 localhost:8080 으로 접속하면 톰캣 화면이 나온다.

sudo /Library/Tomcat/bin/startup.sh
sudo /Library/Tomcat/bin/shutdown.sh

 

 

 

2. MySQL

1) 설치 방법

홈페이지(https://www.mysql.com/) 수동 다운로드 방식과 Homebrew를 이용한 다운 방식이 있다. 수동으로 다운받는 방법은 홈페이지의 DOWNLOAD 탭 - MySQL Community Downloads로 접속하여 설치를 진행한다.

MySQL 설치

// MySQL 버전 확인
brew search mysql

// 'mysql'은 가장 최신버전으로 설치
brew install mysql

// 정상적인 설치 확인
brew list

2) MySQL 설정

// MySQL 서버 가동
mysql.server start

// MySQL 비밀번호 설정
mysql_secure_installation
질문 답변 설명
Would you like to setup VALIDATE PASSWORD component?  Y / N 비밀번호 복잡도 설정
Remove anonymous users? Y / N Y 일 경우 mysql -u[사용자] -p[비번]
N 일 경우 mysql 로만 접속
Disallow root login remotely? Y / N localhost를 제외한 다른 IP에서의 원격 접속 허용 유무
Remove test database and access to it? Y / N MySQL의 Test DB 삭제 유무
Reload privilege tables now? Y / N 설정한 내용을 적용할 것인지에 대한 질문이기에 'Y'로 지정

mysql_secure_installation의 비밀번호 복잡도 설정을 변경은 MySQL 로그인 후 설정을 변경해준다.

// 확인
SHOW VARIABLES LIKE 'validate_password%';

// 복잡도 변경
SET GLOBAL validate_password.policy=LOW;

// 재설정
mysql_secure_installation

3) Java MySQL JDBC 연동

자바에서 데이터베이스를 연결하기 위해서는 JDBC가 필요하다. MySQL 데이터베이스를 Java에서 사용하기 위해 MySQL Connector를 설치한다(https://dev.mysql.com/downloads/connector/j/). ('Looking for the latest GA version?' 문구 - Tar 파일 다운 - 원하는 파일 위치에 압축 해제 /usr/local/Cellar/)

Java MySQL JDBC 연동

 

 

 

3. SpringMVC 프로젝트 생성

1) 프로젝트 생성

프로젝트 생성

2) SpringMVC 적용

SpringMVC 적용

3) 라이브러리 추가 ver1 (pom.xml)

라이브러리를 추가할 때,  Add Framework Support을 통해 Spring MVC를 다운받는 버전으로 통일화해주는게 좋다. (<org.springframework-version>5.2.3.RELEASE</org.springframework-version>)

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.2.3.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>

4) 라이브러리 추가 ver2 (pom.xml)

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.2.3.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <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>

        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

        <!-- Logging -->
        <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>

        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!-- Servlet -->
        <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>

        <!-- Test -->
        <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>

        <!-- JDBC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <!-- DBCP -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!-- Jackson2 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>

        <!-- JPA, 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.20.Final</version>
        </dependency>

        <!-- JPA Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </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>

</project>

maven-compiler-plugin 에러가 날 경우 Tomcat 서버나 프로젝트를 새로 만드는 것을 권장한다. 그럼에도 불구하고 동작하지 않는다면  StackOverflow의 내용을 참고하여 해결을 할 수 있다.

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.2.8.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>

        <!-- org.apache.maven.plugins
             maven-compiler-plugin 오류 해결 -->
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

	...

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

5) MySQL JDBC 적용

Preference Structure (Command + ;)

MySQL JDBC 적용

※ Finder에서 Command + Shift + g 단축키로 원하는 경로로 이동할 수 있다.

6) MySQL 연동

연동하기 전에 미리 MySQL 서버를 가동한다. 이 후 Test Connection을 통해 생기는 오류를 해결(ServerTimeZone - UTC)하고 연결을 확인한다.

MySQL 연동

연결 확인을 위한 테스트 클래스 생성 후 결과를 확인한다.

package com.springstudy.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCTest {

    public static void main(String[] args) {
        Connection con = null;

        String server = "localhost"; // MySQL 서버 주소
        String database = ""; // MySQL DATABASE 이름
        String user_name = "root"; //  MySQL 서버 아이디
        String password = ""; // MySQL 서버 비밀번호

        // 1.드라이버 로딩
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println(" !! <JDBC 오류> Driver load 오류: " + e.getMessage());
            e.printStackTrace();
        }

        // 2.연결
        try {
            con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password);
            System.out.println("정상적으로 연결되었습니다.");
        } catch(SQLException e) {
            System.err.println("con 오류:" + e.getMessage());
            e.printStackTrace();
        }

        // 3.해제
        try {
            if(con != null)
                con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

7) 라이브러리 적용

Preference Structure (Command + ;)

라이브러리 적용

8) Tomcat 적용

사용하고자 하는 Tomcat 버전을 추가하여 설정한다. (초기 설정 부분은 하단 'IntellJ 초기 설정' 참고)

Tomcat 적용

9) log4j.xml

/src/main/resources/log4j.xml 파일을 생성하고 수정해준다.

<?mappers version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration>

    <!-- Appenders -->
    <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>

    <!-- Application Loggers -->
    <logger name="Controller">
        <level value="info" />
    </logger>

    <!-- 3rdparty Loggers -->
    <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>

 

 

 

4. IntelliJ 초기 설정

1)  초기 Server 설정

Preference - Application Servers - Tomcat - 파일 위치 설정 (직접 다운받았을 경로와 brew로 다운받은 경로가 다르니 주의해야한다.)

Server 설정


[참고] https://velog.io/@max9106/Mac-apache-tomcat%ED%86%B0%EC%BA%A3-%EC%84%A4%EC%B9%98-l0k4zt4f3c

[참고] https://mommoo.tistory.com/89

[참고] https://haddoddo.tistory.com/entry/Homebrew-Mac%EC%97%90%EC%84%9C-Tomcat-MySQL-%EC%84%A4%EC%B9%98-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

[참고] https://dog-developers.tistory.com/20

[참고] https://baekjungho.github.io/springboot-intellijconnect/


[참고] https://k39335.tistory.com/70

[참고] https://atoz-develop.tistory.com/entry/IntelliJ-JAVA-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EB%B0%A9%EB%B2%95-Maven-Tomcat

[참고] https://goddaehee.tistory.com/247

[참고] https://m.blog.naver.com/1ilsang/221314109439

[참고] https://isabeller.tistory.com/23

[참고] https://namubada.net/254

[참고] whitepaek.tistory.com/41

728x90

'Spring > Spring' 카테고리의 다른 글

[Spring] AWS 배포  (0) 2020.08.23
[Spring] 간단한 API 제작  (0) 2020.08.20
[Spring] 어노테이션 기반 프로젝트 진행 순서  (0) 2020.08.13
[Spring] XML 기반 프로젝트 진행 과정  (0) 2020.08.13