씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[Spring] 스프링MVC - AOP
Java 관련/Spring Legecy

[Spring] 스프링MVC - AOP

2022. 4. 4. 11:11
728x90

11. pom.xml : aspectjweaver, aspectjrt

pom.xml에 디펜던시 추가해주세요!

		<!-- aop 관련 -->
		<!-- aspectjweaver -->
		<dependency>
		  <groupId>org.aspectj</groupId>
		  <artifactId>aspectjweaver</artifactId>
		  <version>${org.aspectj-version}</version>
		</dependency>
		<!-- aspectjrt 위에 있기떄문에 원래 없어야함... 하지만 버전까지 완벽하게 똑같아서 있어도 되긴함 -->
		<dependency>
		  <groupId>org.aspectj</groupId>
		  <artifactId>aspectjrt</artifactId>
		  <version>${org.aspectj-version}</version>
		</dependency>

version이 다르면 충돌이 날수도 있어서 ${org.aspectj.version}을 사용합니다!

​

12. com/mvc/upgrade/common/aop/LogAop

package com.mvc.upgrade.common.aop;

import org.aspectj.lang.JoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogAop {

	public void before(JoinPoint join) {
		Logger logger = LoggerFactory.getLogger(join.getTarget() + "");		// 대상 객체
		logger.info("----------AOP Strat----------");
		
		Object[] args = join.getArgs();										// 대상 파라미터
		if(args != null) {
			logger.info("method : " + join.getSignature().getName());		// 대상 메서드 정보
			for(int i = 0; i < args.length; i++) {
				logger.info(i+"번째 : " + args[i]);
			}
		}
	}
	
	public void after(JoinPoint join) {
		Logger logger = LoggerFactory.getLogger(join.getTarget() + "");
		logger.info("----------AOP End----------");
	}

	public void afterThrowing(JoinPoint join) {
		Logger logger = LoggerFactory.getLogger(join.getTarget() + "");
		logger.info("----------AOP Error Log----------");
		logger.info("ERROR : " + join.getArgs());
		logger.info("ERROR : " + join.toString());
	}
	
}

​

​

13. WEB-INF/spring/appServlet/aop-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
		
	<bean name="logAop" class="com.mvc.upgrade.common.aop.LogAop" />
	
	<aop:config>
		<aop:pointcut expression="execution(public * com.mvc.upgrade.model.dao.*Dao*.*(..))" id="daoPoint"/>
		<aop:aspect id="logAop" ref="logAop">
			<aop:before method="before" pointcut-ref="daoPoint"/>
			<aop:after method="after" pointcut-ref="daoPoint"/>
			<aop:after-throwing method="afterThrowing" pointcut-ref="daoPoint"/>
		</aop:aspect>
	</aop:config>


</beans>

​

14. web.xml : aop-context.xml 추가(DispatcherServlet의 init-param)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <!-- The definition of the Root Spring COntainer shared by all Servlet and Filters -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/appServlet/application-context.xml</param-value>
  </context-param>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- Creates the Spring Container shared by all Servelts and Filters -->
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
      	/WEB-INF/spring/appServlet/servlet-context.xml
      	/WEB-INF/spring/appServlet/aop-context.xml
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <!-- Processes application requests -->
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <!-- 서버 밖에서 존재. 요청되는거, 응답되는거 받는 역할 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <!-- 패키지 : org.spirngframework.web.filter -->
    <!-- 클래스 : CharacterEncoding -->
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter>
  	<filter-name>logFilter</filter-name>
  	<filter-class>com.mvc.upgrade.common.filter.LogFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>logFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>

​

15. src/main/resources/log4j.xml (logger 추가 및 log level 변경)

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

알수없는 오류가 있는데 2번째 줄을 해당 코드로 바꿔주세요!(신기하게 바꾸면 에러가 사라지더라구요)

​

​

	<!-- Root Logger -->
	<root>
		<priority value="trace" />
		<appender-ref ref="console" />
	</root>

log4j log level

- Level.FATAL : 치명적인 에러

- Level.ERROR : 에러

- Level.WARN : 경고

- Level.INFO : 정보

- Level.DEBUG : 디버깅 정보

- Level.TRACE : DEBUG + @(상세한 정보)

​

​

Legacy프로젝트를 실행시키면 console창에 검정색 글씨로 뜨는 것들이 있는데 그것을 출력하는 것들이 <!-- 3rdparty Loggers --> 부분에 해당하는 core & beans & context & web들입니다.

검정색 글씨는 log4j가 하는것이고 에러가 발생했을때의 빨간색 글씨는 java가 해주는것입니다!

​

​

프로젝트를 실행시키면 이런 내용이 console에 찍힙니다.

파란색 영역은 LogAop파일에서 찍어준 내용이고

빨간색 영역은 log4j에서 TRACE로 찍었기에 DEBUG뿐만 아니라 모든 내용이 다 나오게 됩니다.

728x90

'Java 관련 > Spring Legecy' 카테고리의 다른 글

[Spring] Interceptor(인터셉터)  (0) 2022.04.06
[Spring] Login / Regist(로그인 / 회원가입)  (0) 2022.04.05
[Spring] filter(javax.servlet.Filter)  (0) 2022.04.03
[Spring] 스프링으로 게시판만들기  (0) 2022.04.02
[Spring] request, response  (0) 2022.04.01
    'Java 관련/Spring Legecy' 카테고리의 다른 글
    • [Spring] Interceptor(인터셉터)
    • [Spring] Login / Regist(로그인 / 회원가입)
    • [Spring] filter(javax.servlet.Filter)
    • [Spring] 스프링으로 게시판만들기
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바