spring - 프로젝트 내부구조 및 초기설정

yeong ·2023년 2월 9일
0

spring

목록 보기
2/8

main과 test 폴더

main = 실제 작동할 프로그램을 만드는 폴더

  • Java
    클래스,매퍼(xml이지만 interface랑 바인딩을 위하여)

  • resources (프로그램에 필요한 값들을 저장하기 위한 폴더)
    xml,propertes

  • webapp
    다양한 웹자원을 만듬(저장)

test 테스트할 프로그램을 만드는 폴더(webapp가없음 웹자원) (테스트 프로그램 = 모듈 테스트)

  • Java
    클래스,매퍼(xml이지만 interface랑 바인딩을 위하여)

  • resources
    xml,propertes

라이브러리

JRE 자바가 제공해주는 라이브러리
(11버전이지만 1.6으로 보여짐 바꿔야함)

Maven(스프링:Maven 스프링부트:grandle // 교체될 수 있음) 첫번째에만 알아서 다운 나중에는 로컬 레파지토리에 존재하는 것을 자동 사용 {중간에 끊기지 않게 조심 }

Maven 제대로 빌드 되지 않을 경우

여기에 Maven이 없으면 add해서 추가해주면 된다

아예 Maven다운이 잘못 되었을 경우 사용이 안 될 경우 aop~를 삭제처리하고 다시 빌드되게 한다.

기본적으로 MVC를 제공한다.

homeController.java >> model
home.jsp >> view
controller는 따로 제공

  • 모델(model) 정보들의 가공을 책임지는 컴포넌트를 말합니다.
  • 뷰(View) 사용자에게 보여지는 부분을 말합니다.
  • 컨트롤러(Controller) 모델과 뷰사이를 이어주는 역할을 합니다.

11버전으로 바꾸기 위해서 = 스프링 프로젝트 우측버튼 >> Project Facets >> 프로퍼티 >> Java 11 // Dynamic web Module 2.5 >> 5.0으로 교체

정상적으로 교체된 경우 이렇게 바뀐다.

라이브러리 최신버전으로 바꾸기 (porm.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 https://maven.apache.org/maven-v4_0_0.xsd">
	<!-- Maven : 빌드 툴 - 프로젝트의 라이브러리를 관리하는 프로그램 -->
	<!-- porm.xml : Maven 빌드 툴을 이용하여 프로젝트에 라이브러리를 빌드하기 위한 정보를 
	제공하는 환경설정 파일 -->
	<!-- => 로컬 저장소의 라이브러리 파일을 프로젝트에 빌드되도록 처리 -->
	<!-- => 로컬 저장소에 라이브러리 파일이 없는 경우 메이븐 저장소에서 다운로드 받아 로컬 저장소에 저장 -->
	<!-- 로컬 저장소(Local Repository) : 프로젝트에 빌드될 라이브러리 파일을 저장하기 위한 폴더 -->
	<!-- => 사용자 폴더의 .m2 폴더를 로컬 저장소로 사용 -->
	<!-- => 라이브러리 파일에 문제가 있는가 있는 경우 이클립스 종료 후 .m2 폴더의 라이브러리
	파일을 삭제하고 이클립스 재실행 -->
	<!-- 메이븐 저장소(Maven Repository) : 라이브러리 파일이 저장된 인터넷상의 저장소 -->
	<!-- => https://mvnrepository.com 사이트 참조 -->
	<modelVersion>4.0.0</modelVersion>
	<groupId>xyz.itwill</groupId>
	<artifactId>controller</artifactId>
	<name>spring</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<!-- properties : porm.xml 파일에서 자주 사용하는 값을 이름(식별자)을 이용하여 등록하기 위한 엘리먼트 -->
	<!-- => 하위 엘리먼트 이름을 값을 구분하기 식별자로 사용하며 엘리먼트 내용이 제공되는 값을 표현 -->
	<!-- => porm.xml 파일에서 ${이름} 형식으로 값을 제공받아 사용 가능 -->
	<!-- => 라이브러리의 버전을 효율적으로 관리하기 위해 properties 엘리먼트 사용 -->
	<properties>
		<org.springframework-version>5.3.25</org.springframework-version>
		<org.aspectj-version>1.9.19</org.aspectj-version>
		<org.slf4j-version>2.0.6</org.slf4j-version>
	</properties>
	<!-- dependencies : dependency 엘리먼트 목록을 설정하기 위한 엘리먼트 -->
	<dependencies>
		<!-- Spring -->
		<!-- dependency : 라이브러리 파일을 프로젝트 빌드 처리하기 위한 엘리먼트 -->
		<!-- => 의존관계로 설정된 라이브러리 파일도 자동으로 빌드 처리 -->
		<dependency>
			<!-- groupId : 라이브러리 파일을 제공하는 그룹의 식별자(도메인)를 설정하기 위한 엘리먼트 --> 
			<groupId>org.springframework</groupId>
			<!-- artifactId : 라이브러리의 이름(식별자)을 설정하기 위한 엘리먼트 --> 
			<artifactId>spring-context</artifactId>
			<!-- version : 라이브러리 버전을 설정하기 위한 엘리먼트 -->
			<version>${org.springframework-version}</version>
			<!-- exclusions : exclusion 목록을 설정하기 위한 엘리먼트 -->
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<!-- exclusion : 의존관계의 라이브러리 중 제외 라이브러리를 설정하기 위한 엘리먼트 --> 
				<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>aspectjrt</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 : 라이브러리 파일이 빌드되어지는 범위를 설정하기 위한 엘리먼트 -->	
			<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>
			<scope>runtime</scope>
		</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>4.0.1</version>
		    <scope>provided</scope>
		</dependency>
		<dependency>
		    <groupId>javax.servlet.jsp</groupId>
		    <artifactId>javax.servlet.jsp-api</artifactId>
		    <version>2.3.3</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.13.2</version>
		    <scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/xerces/xercesImpl -->
		<!-- => 로그 구현체를 이용한 로깅 정보 처리시 경로에 문제가 있는 경우 해결방법을
		제공하는 라이브러리 --> 
		<dependency>
		    <groupId>xerces</groupId>
		    <artifactId>xercesImpl</artifactId>
		    <version>2.12.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin -->
		<!-- => Maven Plugin 문제의 porm.xml 파일에서 에러가 발생된 경우 빌리 처리에 대한 
		해결방법을 제공하는 라이브러리 -->
		<!--
		<dependency>
		    <groupId>org.apache.maven.plugins</groupId>
		    <artifactId>maven-resources-plugin</artifactId>
		    <version>3.3.0</version>
		</dependency>
		-->
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

log4.xml 설정변경

로그 구현체에 대한 클래스를 설정

<?xml version="1.0" encoding="UTF-8"?>
<!-- log4.xml : 로그 구현체에 대한 환경설정 파일 -->
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<!-- Appenders -->
	<!-- appender : 로그 구현체를 구성하는 클래스를 설정하기 위한 엘리먼트 -->
	<!-- name 속성 : appender 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정 -->
	<!-- class 속성 : 로그 구현체로 사용하기 위한 클래스를 속성값으로 설정 -->
	<!-- => class 속성값으로 설정된 클래스에 따라 로깅정보를 기록하는 방식이 다르게 설정 -->
	<!-- => class 속성값으로 설정된 클래스는 반드시 Appender 인터페이스를 상속받아 작성 -->
	<!-- => ConsoleAppender 클래스 : 로깅정보를 서버 콘솔에 기록하기 위한 클래스 -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<!-- param : Appender 클래스에 필요한 값을 제공하기 위한 엘리먼트 -->
		<param name="Target" value="System.out" />
		<!-- layout : 로깅정보를 제공받아 로그 형식을 설정하기 위한 엘리먼트 -->
		<!-- class 속성 : 로그 형식 관련 정보를 제공하기 위한 클래스를 속성값으로 설정 -->
		<!-- => PatternLayout 클래스 : 로그 형식을 작성하기 위한 변환 문자를 제공하는 클래스 -->
		<!-- # 변환문자(Conversion Character) - 변환문자는 일반문자와 구분하기 위해 % 기호로 시작 -->
		<!-- %c : 패키지가 포함된 클래스의 이름을 기록 - {정수값}을 이용하여 원하는 형식으로 기록 가능 -->
		<!-- => %c{1} : 패키지를 제외한 클래스의 이름만 기록 -->
		<!-- %d : 날짜와 시간을 기록 - {SimpleDateFormat}을 이용하여 원하는 형식으로 기록 -->
		<!-- => %d{yyyy-MM-dd} : [년-월-일] 형식으로 로그시간 기록 -->
		<!-- %m : 로그 이벤트에 의해 생성된 로그 메세지를 기록 -->
		<!-- %n : 엔터(Enter)를 기록 - 로그 줄바꿈 -->
		<!-- %M : 로그 이벤트가 발생된 메소드의 이름을 기록 -->
		<!-- %p : 로그 메세지가 발생된 로그 이벤트를 기록 -->
		<!-- => 로그 이벤트 : TRACE > DEBUG > INFO > WARN > ERROR > FATAL -->
		<!-- # 변환문자 자릿수 설정 - %p 변환문자를 이용하여 예제 설정 -->
		<!-- %p : 로그 이벤트의 길이만큼 자릿수를 제공받아 기록 -->
		<!-- %5p : 로그 이벤트를 5자리(최대 자릿수)를 제공받아 기록 - 오른쪽 정렬 -->
		<!-- => 자릿수가 부족하면 기록이 잘리고 남으면 공백으로 처리되어 기록 -->
		<!-- %-5p : 로그 이벤트를 5자리(최대 자릿수)를 제공받아 기록 - 왼쪽 정렬 -->
		<!-- %.5p : 로그 이벤트를 5자리(최소 자릿수)를 제공받아 기록 - 오른쪽 정렬 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	<!-- Application Loggers -->
	<!-- logger : 특정 패키지의 클래스에서 발생되는 로그 이벤트를 기록하기 위한 엘리먼트 -->
	<!-- name 속성 : 패키지 경로를 속성값으로 설정 -->
	<logger name="xyz.itwill.controller">
		<!-- level : 패키지에 작성된 클래스에서 발생되는 로그 이벤트를 설정하기 위한 엘리먼트 -->
		<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 : 모든 클래스에서 발생되는 로그 이벤트를 기록하기 위한 엘리먼트 -->
	<!-- => 모든 logger 엘리먼트는 root 엘리먼트의 정보를 상속받아 사용 -->
	<root>
		<!-- priority : 모든 클래스에서 발생되는 기본 로그 이벤트를 설정하기 위한 엘리먼트 -->
		<!-- value 속성 : 로그 이벤트를 속성값으로 설정 -->
		<!-- => 속성값으로 설정된 로그 이벤트보다 상위의 이벤트가 발생된 경우 로그 구현체로 기록 -->
		<priority value="warn" />
		<!-- appender-ref : 로그 구현체를 참조하기 위한 엘리먼트 -->
		<!-- ref 속성 : appender 엘리먼트의 식별자를 속성값으로 설정 -->
		<appender-ref ref="console" />
	</root>
</log4j:configuration>

0개의 댓글