Spring Boot 맛보기
Spring Boot란?
스프링 프레임워크를 사용하는 프로젝트를 간편하게 설정할 수 있는 스프링의 서브 프로젝트 개념이다.
스프링을 편하게 설정할 수 있으니 당연 여러가지 장점이 있다.
- 반복되는 개발환경 구축을 위한 코드 작성등의 노력을 줄여주고 쉽고 빠르게 프로젝트를 설정 할 수 있도록 도와준다.
- 빠르게 모든 스프링 개발에 관한 경험에 광범위한 접근을 제공한다.
-프로젝트 환경 구축에서 큰 영역을 차지하는 비기능적인 기능들을 기본적으로 제공한다.
(내장형 서버, 시큐리티, 외부 설정)
pom.xml
tomcat dependency 추가하는데,
version은 삭제해준다
<!-- [https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper](https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper) -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>10.0.5</version> ⇒ 삭제하기!
</dependency>
태그립 core 사용하고싶을 때는 pom에 얘를 추가한다
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- devtools : 수정했을때 자동으로 리로드해주는애 -->
<!-- [https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools](https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
application.properties
#server
server.port=8787 // 이걸 안하면 8080 으로 연결된다
#view
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#encoding
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
#resources
spring.mvc.static-path-pattern=/resources/**
#jdbc
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=kh
spring.datasource.password=kh
#mybatis alias
mybatis.type-aliases-package=com.boot.jdbc.model.dto.MyDto
tomcat dependency 추가하는데,
version은 삭제해준다
<!-- [https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper](https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper) -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>10.0.5</version> ⇒ 삭제하기!
</dependency>
태그립 core 사용하고싶을 때는 pom에 얘를 추가한다
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- devtools : 수정했을때 자동으로 리로드해주는애 -->
<!-- [https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools](https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
#server
server.port=8787 // 이걸 안하면 8080 으로 연결된다
#view
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#encoding
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
#resources
spring.mvc.static-path-pattern=/resources/**
#jdbc
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=kh
spring.datasource.password=kh
#mybatis alias
mybatis.type-aliases-package=com.boot.jdbc.model.dto.MyDto
타임리프
- #객체 $ 밸류값 @ url *포인터 (땡겨올때)
Spring Boot 에서 AOP 추가해보기
- pom.xml 에 dependency 추가하기
<!-- aop 추가 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 최상위 패키지에서 Annotation 추가해주기
package com.boot.jdbc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.web.bind.annotation.GetMapping;
@EnableAspectJAutoProxy //aop annotation 추가해주기
@SpringBootApplication
public class StartBoot02Application {
public static void main(String[] args) {
SpringApplication.run(StartBoot02Application.class, args);
}
@GetMapping("/")
public String root() {
return "index";
}
}
- 공통기능을 정의하고 공통기능이 사용될 시점을 정의한다.
package com.boot.jdbc.LogAspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LogAspect {
Logger logger = LoggerFactory.getLogger(LogAspect.class);
//around는 메소드의 실행 전 후로 공통로직을 적용하고 싶을 때 사용한다. 즉 시점을 선택해서 정의.
//MyBoardBizImpl 의 모든 메서드
@Around("execution(* com.boot.jdbc.model.biz.MyBoardBizImpl.*(..))")
public Object logging(ProceedingJoinPoint joinpoint) throws Throwable {
logger.info("start :" +joinpoint.getSignature().getDeclaringTypeName()+"/" + joinpoint.getSignature().getName());
Object result = joinpoint.proceed();
logger.info("finishes :" +joinpoint.getSignature().getDeclaringTypeName()+"/"+joinpoint.getSignature().getName());
return result;
}
}
<!-- aop 추가 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
package com.boot.jdbc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.web.bind.annotation.GetMapping;
@EnableAspectJAutoProxy //aop annotation 추가해주기
@SpringBootApplication
public class StartBoot02Application {
public static void main(String[] args) {
SpringApplication.run(StartBoot02Application.class, args);
}
@GetMapping("/")
public String root() {
return "index";
}
}
package com.boot.jdbc.LogAspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LogAspect {
Logger logger = LoggerFactory.getLogger(LogAspect.class);
//around는 메소드의 실행 전 후로 공통로직을 적용하고 싶을 때 사용한다. 즉 시점을 선택해서 정의.
//MyBoardBizImpl 의 모든 메서드
@Around("execution(* com.boot.jdbc.model.biz.MyBoardBizImpl.*(..))")
public Object logging(ProceedingJoinPoint joinpoint) throws Throwable {
logger.info("start :" +joinpoint.getSignature().getDeclaringTypeName()+"/" + joinpoint.getSignature().getName());
Object result = joinpoint.proceed();
logger.info("finishes :" +joinpoint.getSignature().getDeclaringTypeName()+"/"+joinpoint.getSignature().getName());
return result;
}
}
→ 나는 logger 라는 공통기능을 정의하고, 그 시점을 @Around로 메소드의 실행 전 후로 설정한 것
즉 , 두번째 단계에서 @EnableAspectJAutoProxy는 스프링이 자동으로 개발자의 메서드를 호출하기 전에 가로챌 수 있게한다. 이렇게 가로채야만 메서드를 사용하기 전이든 사용 후든 어떤 시점에 적용 할 수 있는것. 그러니 새롭게 정의한 LogAspect 클래스가 핵심 비즈니스 로직과 분리된 공통 로직인 것이고, 나머지 클래스들이 핵심 비즈니스인 것을 확인 할 수 있다.
참고:
https://jeong-pro.tistory.com/171
Author And Source
이 문제에 관하여(Spring Boot 맛보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@charamee/Spring-Boot-맛보기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)