티스토리 뷰
[Spring 프로젝트를 생성할 때 다양한 방법]
✔️ Spring Starter Project
- Spring Boot 기반
✔️ Spring Legacy Project
- 설정을 하나하나 해줘야 함. 전자정부프레임워크는 이걸 사용하고 있음.
- sts 기본 설정 적용됨
✔️ Dynamic Web Project
- 사용자가 직접 설정
cf> Spring MVC Project requires a download of 16608 bytes.
-> 무슨의미? jar 파일 다운로드 받는 크기
※ Maven (= 빌드툴)
▶ 소스 -> 컴파일 -> 빌드 (해당 애플리케이션에 실행 가능한 구조로 만드는 행위 )
▶ 빌드 후 최종적으로 .war 산출물이 생긴다.
▶ 메이븐 종류 : Gradle(안드로이드 기본), Ant(옛날), Maven(전자정부 프레임워크 기본)
▶ pom.xml : 메이븐 설정 파일
[POM 구성]
1. 프로젝트 기본 정보
- 프로젝트 이름
- 프로젝트 URL
- 프로젝트 참여자
- 라이센스
2. 빌드 설정
- 소스/테스트 소스 디렉토리
- 리소스(자원) 디렉토리
- 플러그인
- 리포팅(문서화)
3. 프로젝트 관계 설정
- groupId/artifactId/version
- 모듈
- 상속
- 의존 라이브러리 관리
4. 빌드 환경
- 빌드할 환경에 따른 정보
- 프로파일
[pom.xml dependencies]
▶ groupId - 어떤 회사에서 만들었느냐
▶ artifactId - 프로젝트의 이름
▶ packaging - 프로젝트의 최종 산출물이 뭐냐
▶ properties - Java version (내 프로젝트 - 1.8) / SpringFramework version 등
▶ 최종적으로 Effective POM을 가지고 빌드하게 된다. ★☆★☆★
메이븐이 가진 공통설정(최상위 pom.xml)과 프로젝트별 pom.xml을 더해서 최종적으로 Effective POM을 만들고, 이걸 가지고 빌드한다.
(Effective POM은 수정할 수 없다.)
▶ maven에서 다운로드 받은 것을 다 .m2 밑에 갖다둔다.
[Spring Framework legacy project 구조]
✔️ maven 프로젝트가 제대로 빌드되려면 위 사진과 같은 구조가 필요하다.
✔️ java 폴더에는 java 파일, resources 폴더에는 나머지(프로퍼티 ,xml등)
✔️ main폴더에는 실제 애플리케이션과 관련된 파일들
✔️ test 폴더에는 개발 도중 테스트할 때 필요한 파일들
✔️ target 폴더에는 빌드 후에 최종 산출물을 저장하는 곳이다.
✔️ webapp 폴더 밑에 WEB-INF 폴더가 있고, 그 안에 기본으로 폴더들과 web.xml이 들어가 있다.
[Spring Framework legacy project 설정할 것]
1. servlet spec 변경 (2.5 -> 4.0)
2. Java Build Path / Libaries 에서 JRE 버전 1.6 -> 1.8 변경
- servlet spec 4.0을 사용하려면 자바8 이상 되어야 하기 때문에 필수로 수정하기
3. Java Compiler 1.8로 변경
4. Project Facets - Dynamic Web Module(4.0)과 Java(1.8) 버전 변경
5. web.xml을 잠시 web2.xml 이름으로 바꾸고, 프로젝트 이름 우클릭 -> Java EE Tools -> Generate Deployment Descriptor stub
-> web.xml 자동 생성됨 (refresh 하기) -> <web-app> 태그가 4.0 버전으로 바뀜
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
6. pom.xml 에서 자바버전 1.8로 바꾸기
7. pom.xml 에 변경해야 할 사항이 너무 많다.
방법(1) -> 아예 파일을 없애버리고 필요한것만 추가해서 사용하기 -> 밑에 설명함
방법(2) -> 아래 8번처럼 하나씩 변경하기
8. Maven Repository에 가서 dependency 하나씩 변경하는 방법 (매우중요 ★★★★★)
8-1. servlet spec 4.0으로 변경
8-2. jsp 2.3으로 변경 (servlet 버전에 따라서 함께 수정해야 한다.)
8-3. junit 4.9버전으로 수정해야 함.
8-4. 자바 버전 1.8로 수정
[Spring Boot project 설정할 것]
1. pom.xml에 추가
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2. application.properties 수정
3. WEB-INF 폴더 생성
4. controller 패키지 생성
5. Boot Dashboard에서 devtools 추가
- devtools를 이용하면 코드를 저장했을 때 자동으로 reload 된다.
[(방법2) SpringFramework pom.xml에 처음부터 필요한것만 추가하기]
0. 새로운 Spring legacy project 복사해서 만들기
1. 프로젝트 우클릭 -> Maven -> Disable Maven Nature -> pom.xml 삭제
2. 프로젝트 우클릭 -> Configure -> Convert to maven project -> pom.xml 생성됨
3. dependency 4개 추가
3-1. webmvc
3-2. log4j
<scope>test</scope> : test 할때만 적용된다. 그래서 이걸 지워준다.
3-3. jstl
3-4. javax.servlet-api
<scope>provided</scope> 생략하면 안됨.
-> 실제 실행할 때는 WAS의 서블릿을 제공받아서 실행하겠다는 의미이다. 즉, 이 서블릿은 최종 산출물에 포함하지 않는다.
- 컴파일할 때는 WAS가 없어도 실행이 되어야 하므로 서블릿 설정을 추가한 것이고, 최종 산출물(.war)에서는 제거한다.
3-5. jsp
[Maven 프로젝트의 최종 산출물을 만드는 방법]
Maven 에서 산출물을 만들 때 Export로 산출물을 만드는 것은 이클립스의 방식이라 정석은 아니다.
▶ 프로젝트이름 우클릭 -> Run As -> Maven install -> refresh -> 최종 산출물 생성 (.war)
[메이븐 저장소]
▶ 중앙 저장소 : 오픈 소스 라이브러리 관리
▶ 로컬 저장소
: 내 프로젝트에서 메이븐 빌드하거나, pom.xml 파일에서 dependency 라이브러리 설정하게 되면
로컬 저장소 (.m2/repository)폴더에 의존 라이브러리가 다운로드된다.
내 프로젝트에서는 이 로컬 저장소를 참조해서 라이브러리를 사용하게 된다.
(만약 라이브러리를 참조하지 못하면 .m2/repository를 삭제하고 다시 메이븐 빌드해보기 )
[Log4j 설정]
1. dependency 추가
2. Java Resources > src/main/resources > log4j.xml
✔️ log4j.xml의 Appenders
<!-- 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() - %m%n" />
</layout>
</appender>
-> 로그를 출력하는 곳을 console로 지정하겠다.
이 로그를 디비나 파일에 출력할 수 있다.
[ConversionPattern 해석한 것] 👇🏻
%-5p는 왼쪽 정렬, 5글자, 로그레벨 출력 의미
%c는 클래스 이름
%m은 로그메세지
%n은 개행
.%M() 메소드 이름 출력
cf> log4j 도큐먼트 -logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
✔️ log4j.xml의 Application Loggers
<!-- Application Loggers -->
<logger name="com.mycompany.webapp">
<level value="info" />
</logger>
-> name : 로그레벨(여기서는 info)을 적용할 패키지를 의미한다.
✔️ log4j.xml의 Root Logger
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
-> 아무것도 적용하지 않은 패키지의 디폴트 레벨을 warn으로 지정하겠다.
3. 로그 출력하는 코드 실습
@Controller
public class HomeController {
// 현재 클래스 이름과 똑같이 주기. 로그가 어디서 출력되는지 위치를 알려주는 역할
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/")
public String home() {
// 메소드 이름이 로그 레벨이다.
logger.error("error 메세지");
logger.warn("warn 메세지"); // error level 일때는 출력이 안됨
logger.info("info 메세지"); // warn level 일때는 출력이 안됨
logger.debug("debug 메세지"); // info level 일때는 출력이 안됨
return "home";
}
}
[로그 출력 실행 결과 - log level info로 설정했을 때]
▶ Spring Framework 버전 선택
github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions
주의) 자바 버전 7을 사용한다면 스프링 5점대 버전은 사용할 수 없다.
▶ Spring Framework의 모듈(라이브러리, jar) 종류
github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts
▶Spring Framework document
spring.io/projects/spring-framework#learn
API doc 참고하기
Reference doc은 교과서이다.
'Web > Spring' 카테고리의 다른 글
[Spring] 스프링 시큐리티 구조 - 1 (0) | 2021.04.21 |
---|---|
[Spring] Cookie / Session (0) | 2021.03.29 |
[Spring] ORM vs MyBatis / SqlSessionTemplate (0) | 2021.03.28 |
[Spring] WebApplicationContext / ConnectionPool (0) | 2021.03.28 |
[Servlet] Dynamic web project / Servlet / Controller (0) | 2021.03.15 |
- Total
- Today
- Yesterday
- 자바스크립트Promise
- es6모듈
- yarn start
- 백준
- 자바빌드도구
- os
- java
- method와 function
- dynamic-project
- 정적멤버
- jdk
- jre
- @functools.lru_cache
- 백준2206 파이썬 풀이
- 생성자필드메소드
- 자바스크립트Call-back
- sequelize.fn
- 익명자식객체
- @functools.singledispatch
- 메이븐 저장소
- nodejs
- 클래스와객체
- 객체지향개념
- 자바스레드
- 인스턴스멤버
- 사용자정의예외클래스
- Git
- @functools.wraps
- nunjucks
- ES6
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |