'스프링'에 해당되는 글 7건

  1. 2019.08.18 [Spring] 03. VIEW 파일 추가.
  2. 2019.08.16 [Spring] 02. 컨트롤러 추가
  3. 2019.08.14 [Spring] 01. 프로젝트 생성
  4. 2015.09.03 [넋두리] 스프링3.2가 아니었어...
  5. 2015.08.25 [Spring] 03. Spring 프로젝트 생성 7
  6. 2015.08.24 [Spring] 02. Spring 플러그인 추가
  7. 2015.08.23 [Spring] 01. Spring AOP

[Spring] 03. VIEW 파일 추가.

개발공부/Spring 2019. 8. 18. 16:20

pom.xml 파일을 열어서 dependency를 추가.

		<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version><!--$NO-MVN-MAN-VER$-->
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
		<dependency>
		    <groupId>org.apache.tomcat.embed</groupId>
		    <artifactId>tomcat-embed-jasper</artifactId>
		    <version>9.0.24</version><!--$NO-MVN-MAN-VER$-->
		</dependency>

google에 maven repository 검색 -> 사이트 내에서 검색하면 나옴.

 

프로젝트에서

main/resources/application.properties 파일 오픈.

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

추가.

 

webapp폴더 하위에 spring.mvc.view.prefix에 설정한 구조와 같도록 디렉터리 생성.

컨트롤러 파일 오픈후, 아래 내용 입력.

	@RequestMapping("/page")
	public ModelAndView page() {
		ModelAndView mv = new ModelAndView("tester");
		mv.addObject("text", "tester2");
		return mv;
	}

 

위에 spring.mvc.view.prefix 에서 설정한 디렉터리에 ModelAndView 에서 설정한 파일명으로 파일 추가.

ex) /WEB-INF/jsp/tester.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${text }
</body>
</html>

파일내용 입력.

mv.addObject("키", "데이터");

 

tester.jsp 에서 ${키} 하면 컨트롤러에서 셋팅된 데이터가 나옴.

 

 

 

 

:

[Spring] 02. 컨트롤러 추가

개발공부/Spring 2019. 8. 16. 10:39

새로운 컨트롤러 추가.

 

새로운 패키지 생성.

 

새로만든 패키지에 새로운 클래스 생성.

 

새로만든 클래스를 @Controller 어노테이션을 붙여서 컨트롤러로 등록.

클래스 안에 @RequestMapping("/hello") 를 추가하여 /hello로 접근시 아래 매소드가 실행되도록 적용.

 

http://localhost:8080/hello 접속.

화면이 나오지 않음... 왜그럴까.. 한참고민.

구글링 결과, 컴포넌트 스캔이 필요하다는것을 알게됨.

이전 글에서 DB관련 문제때문에 서버가 뜨지 않았을때, 어노테이션으로 처리하던 파일에 들어감. (*Application.java)

거기에 @ComponentScan("com.example")를 추가 후 저장.

다시 http://localhost:8080/hello 접속.

Hello Spring Boot World! 가 나오는것을 확인.

 

나는 프로젝트 생성시 시큐리티도 추가해서 시큐리티 관련 설정을 더 추가함...

관련 설정을 해주지 않을경우, /hello 접근시 시큐리티가 'ㅇㅇ 안돼 돌아가' 시전..

그래서 구글링해서 해당 설정을 추가 후 화면을 볼수있었음.

 

 

:

[Spring] 01. 프로젝트 생성

개발공부/Spring 2019. 8. 14. 00:13

완전 공부용으로 새로 시작!

 

이클립스 Project Explorer 우클릭 -> New -> Project... 선택

 

Spring Boot 폴더안에 Spring Starter Project 선택

 

기본적으로 입력이 되어있음.

입맛에 맞게 수정. Packaging만 War로 수정하였음.

 

Frequently Used는 최근에 선택했던 친구들.

원하는 기능들을 체크한 뒤에 Finish 클릭.

 

프로젝트 우클릭 -> Run As -> Spring Boot App 클릭 하면 프로젝트가 실행됨.

 

실행시 콘솔에 위와같은 내용이 나오고 서버가 제대로 뜨지 않을경우, DB관련 설정이 없어서 생기는 현상.

방법은 2가지 있음.

 

  1. 어노테이션을 추가하는 방법.
    1. 생성된 패키지 안에 *Application.java 파일을 연다. (스프링부트 메인 클래스)
    2. 해당 클래스 안에 @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 을 추가한다.
  2. DB정보를 추가하는 방법.
    1. src -> main -> resources -> application.properties 파일 오픈.
    2. 아래 정보 본인의 DB에 맞게 수정하여 입력.
      spring.datasource.url=jdbc:mysql://localhost/databasename 
      spring.datasource.username=root
      spring.datasource.password=root
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver


서버실행.

 

콘솔에 정보가 출력되면서 서버 올라감.

 

페이지 확인결과 서버 제대로 올라감. (스프링 시큐리티 추가해서 기본 로그인 페이지가 뜸.)

:

[넋두리] 스프링3.2가 아니었어...

넋두리 2015. 9. 3. 11:04

이클립스에서 STS 받아서 룰루랄라하고 스프링 프로젝트 만들고나서 '이제 타일즈를 해볼까!' 하고

pom.xml에 타일즈 룰루랄라 집어넣고 해보자! 해서 servlet-context.xml 들어가서 tiles3을 해보려 했더니

에러가 똭!! 아 왜 에러지 내가 뭐 잘못했나 해서 여기저기 두리번 두리번...

ctrl+space 눌러가면서 해보니 tiles3이 아니라 tiles2는 무리없이 추가가 되네?!

 

아니 이클립스양반 이게 무슨소리요... 왜 안돼나여... 3도 해주세요... tiles3 쓰고싶어요... 뭐가다른지는 공부해봐야 할지만 그래도 쓰고싶어요... 높은버전 쓰고싶어요.. 이러고있는데

문뜩 tiles3은 스프링 3.2버전 이상부터만 된다는게 생각남.

 

아... 설마.. 안돼.. 제발 하느님.. 지저스... 하고 스프링 버전을 봤더니 3.1.1이네요... 으아.. 내시간... STS가 날 배신했어...

다른사람들 블로그 찾아가서 기웃기웃하면서 STS 받는거 보니 다들 3.2 잘만받더만... 왜 내 마켓에는 3.2가 안보이나...

3.2로 숫자 슥 바꿔봤더니 안돼서 그냥 스프링가서 이클립스 다운받고 재설정...ㅠㅜ

 

다시해봐야지!

 

 

 

:

[Spring] 03. Spring 프로젝트 생성

개발공부/Spring 2015. 8. 25. 00:19

원래 이전글에 다같이 쓰려고했는데... 일하면서 쓰다보니 힘들더라구요ㅠ

별것도아닌걸로 글을 나눠버렸네요ㅠ 죄송합니다아ㅠ


바로 시작해볼까요!!


1. 프로젝트 생성

  1. 자 일단 프로젝트 익스플로러에 마우스를두시고 우클릭을 합시다.
    거기서 New -> Project 를 클릭해주세요.


  2. 누르셨으면 창이 하나 뜰꺼에요~ 거기서 'spring'을 찾아서 눌러주시면3가지가 나옵니다.
    Import Spring 어쩌구랑, Spring Project, Spring starter Project 이렇게 나오는데 이중에 'Spring Project'를 선택해주시면 됩니다.


  3. 그리고 Next를 눌러주시면 다른창으로 변하는데 여기서 맨 위에 'Project Name'에 프로젝트명을 적어주시고, 아래 보시면 'Templates'라는게 보이고 그 안에 이것저것 리스트가 보입니다. 거기서 맨 아래쪽으로 내리셔서 보시면 'Spring MVC Project'라는 친구가 보일겁니다. 그친구를 선택해주시고 Next를 눌러주시면 됩니다.


  4. 자 다시 창이 변했는데... 이번엔 뭐 없어보여요. 입력할곳도 하나밖에 없습니다.
    그런데 이게 대체 무슨소린지 알아먹을수가 없네요. 그래요 저는 못알아먹었어요ㅠㅠ 초딩영어부터 해야할까봐요ㅠ
    그래서 이게 무슨소린가 하니 패키지명을 정하는겁니다. '.'으로 구분지어서 3뎁스까지 만들어주시면 됩니다.
    ex) com.test.tester

자 이러면 이제 프로젝트 생성이 완료되었습니다!!
이것저것 해야하는 설정따위 이클립스가 기본은 다 해줬어요!! 우리는 이제 커스터마이징을 해야겠죠ㅠㅠ 그래봐야 필요한거 붙이는정도죠 뭐..
자 그럼 이제 'Hello World'를 구경하러 갈까 했더니.. 이친구를 확인하려면 서버가 있어야 해요.
서버를 추가할때가 온거같네요.


2. 톰켓서버 추가

우리가 방금만든 친구를 확인해보려면 톰켓서버가 필요합니다!!

뭔가 없다싶으시면 이전글을 보고오세요 ㅋㅋ 이전글에 어디서 받고 어떻게하고 나와있어요!!

자 이제 시작해보겠습니다.

  1. 자 먼저 이클립스에서 화면이 여기저기 나뉘어져있습니다. 그중에서 'Servers'를 찾으세요!!
    아마 안보이는분이 태반일겁니다. 그럼 어떻게하느냐?? Window -> Show View -> Servers를 클릭해줍니다.



  2. 그러면 Servers가 똭!! 하고 나타납니다. 어딘가 있을거에요 잘 찾아보세요...ㅠㅠ
    찾으셨다 치고 진행하겠습니다ㅠ 못찾으신분은 찾을때까지 이거 읽지 마세요ㅠㅠ
    자 그럼 이번엔 'Servers'에서 우클릭을 한 다음에 New -> server를 클릭해줍니다.


  3. 자 그럼 창이하나 뜰텐데, 여기서 'Apache'폴더를 눌러보시면 버전별로 여러개 뜰겁니다.
    여기서 지난번에 다운받은 톰켓 버전에 맞게 선택해주시고 Next를 눌러주세요.
    저는 7.0을 사용하기때문에 7.0을 선택하였습니다.
    아 그리고 저는 이전에 설정을 미리 해놓와서 Server runtime Environment'가 표시되는데, 처음하시는 분들은 아마 나타나지 않을것입니다. 그래도 그냥 설치한 버전 선택하고 Next 눌러주세요. 제가 다른버전을 선택해서 같은 화면이 나오게끔 진행하겠습니다.


  4. 자 그럼 아래와 같은 화면이 나올겁니다.
    여기서 두번째 입력칸 옆에 'Browse'를 눌러주시고, 톰켓이 설치된 곳까지 찾아갑니다.



    아래 이미지와 같이 톰켓 폴더까지만 가세요. 더 깊이 들어가지 마시구요.
    install 파일을 이용해서 설치하신 분들이 계실텐데 그분들은 c:/Program Files/apache어쩌구 아래 가보시면 있을겁니다. 거기서 버전에 맞게 선택하시면 됩니다.


    그리고 확인을 눌러주시면 아래 이미지와 같이 경로가 입력됩니다.
    저는 설명을 위해 이클립스에서 8.0을 선택하고 폴더를 찾아들어가서 7.0을 선택한 뒤에 확인을 눌러서 안된나고 이클립스가 호통치는겁니다. 보고계신분들은 버전에 맞게 선택해주시면 아무 탈 없이 잘 진행될겁니다.



  5. 자 이제 거의 다왔어요!! finish 누르셔도 되는데 이왕이면 Next 누릅시다.
    다음화면이 궁금하지않아요?? 안궁금해도 그냥 Next 눌러주세요. 그래야 제가 쓸게 좀 더 많아져요.
    자 이제 Next를 누르시면 프로젝트 목록이 오른쪽에 주르륵 뜹니다. 그중에 방금 생성한 프로젝트를 하나 선택하시고 'Add >'버튼을 눌러서 오른쪽으로 이동시켜주시고 Finish버튼 눌러주시면 됩니다.


자 이제 서버에 프로젝트까지 추가했습니다!!

이제 실행화면을 보시죠.

3. 실행

아까 'Servers'탭으로 가셔서 

저친구를 눌러주세요. 그럼 Console창이 떠있다면 글씨가 막 바바박!!!! 하고 올라갈껍니다.

그뒤 프로젝트를 우클릭 한 뒤에 Run As... -> Run on Server를 눌러줍니다.


그럼 창이하나 뜨는데 서버 뭐로할꺼냐고 묻는겁니다.

아까 프로젝트를 추가한 서버를 선택한 후에 Finish 버튼을 눌러주시면 됩니다~
지금 전부 처음하는걸 기준으로 작성중이니 서버도 한대밖에 없을거에요. 더있으면 아까 만든거 찾아서 눌러주시면 됩니다.


자 그럼 화면이 떴는데... 나오는데... 뭐가 좀 이상해요.

? 겁나나오고 숫자나오고 그러는데 딱봐도 뭔가 이상해요. 문제가 있습니다.


해당 파일을 찾아가볼께요.

기본적으로 구조는 아래 이미지처럼 되어있습니다.




이중에 우리는 'home.jsp'파일을 수정할겁니다. 이 파일을 열어볼까요??

열어보시면 이렇게 페이지인코딩이 안되어있습니다.. 이친구가 자동으로 하나 만들어주는데 거기에 인코딩부분이 빠졌습니다.


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


맨 위에 이거한줄 추가해주시고 다시 실행해봅시다.

자 이제 한글도 잘나옵니다. 고생하셨습니다~

다음번엔 하나하나 설정을 해보던지 할께요!! 아 물론 제가 먼저 작업해본다음에 하는거라서 좀 걸린텐데...
주말에 하려고 하는데 이번주말에 친척형 결혼식있어요ㅠ 그전에 해보도록 노룍해볼께요ㅠ

'개발공부 > Spring' 카테고리의 다른 글

[Spring] err-02. spring 한글 깨짐  (0) 2015.09.13
[Spring] err-01. @Autowired  (0) 2015.09.13
[Spring] 04. Spring + tiles 설정  (28) 2015.09.09
[Spring] 02. Spring 플러그인 추가  (0) 2015.08.24
[Spring] 01. Spring AOP  (0) 2015.08.23
:

[Spring] 02. Spring 플러그인 추가

개발공부/Spring 2015. 8. 24. 10:28

안녕하세요!! 오늘은 Spring와 maven을 기반으로한 프로젝트를 만들려고합니다.

어제 제가 공부할꺼 만들면서 사진만 찍어놓고 글을 안썼어요.. 이렇게 게으릅니다 제가 ㅋㅋㅋ

그런데 Spring + maven이 맞겠죠...?

 

일단 준비물이 몇개 필요해요!!

 

1. 준비작업

  1. JDK (Java Development Kit)
    http://www.oracle.com/technetwork/java/javase/downloads/index.html
    들어가시면 영어로 뭐가 많은데 무시하시고

    이친구를 찾아서 클릭해주시면 페이지가 이동합니다. 역시 영어로 뭐라 말이 많아요.

    이친구 찾으신 다음에 저기 Accept License Agreement 눌러주시면


    빨간 네모부분이 변하면서 아래 파일들이 다운로드 가능하도록 변합니다.
    어디누르는지 모르겠으면 빨간박스 안에보시면 보일겁니다.
    자 이제 각자 OS에 맞게 다운받아주시고 설치하시면 됩니다.
    잘 모르겠으면 그냥 NEXT 누르시면 자기가 알아서 다해요 ㅋㅋ

  2. 이클립스
    http://www.eclipse.org/downloads/

    위 이미지처럼 Java EE Developers 받으셔야해요!!
    받으시고 원하는 위치에다가 압축푸시면 됩니다.
    실행하기전에 1번부터 작업해주셔야지 안그러면 'JDK없어ㅠㅜ!!' 하고 울어요ㅠ
    정확히는 자바가 없다고 우는거지만.. 여튼 그러합니다.

  3. 톰켓
    사이트에 들어가신 후에(http://tomcat.apache.org/) 왼쪽에 보시면


    이런 메뉴가 있습니다. 원하시는 버전을 선택해 주시면 오른쪽 화면이 바뀌는데 여기서

    이부분을 찾으신 후에 OS에 맞게 원하시는거 찾아서 설치 혹은 압축 풀어주시면 됩니다,

이렇게 3개가지가 필요합니다. 이제 준비물은 다 챙기셨구요. 다음으로 넘어가겠습니다.

 

2. 플러그인 추가

 

프로젝트 생성은 매우 쉬워요. 밥아저씨가 그림그리는거마냥 쉬워요. 이미지 같이 올리니까 따라하시면 됩니다.

일단 이클립스를 실행하면 이클립스가 뭐하나 물어봐요.

'너 작업하면 이제 파일들 겁나생기는데 그거 어따둘래??' 하고 물어봅니다. 참 착해요. 물어봐줄줄도알고 아주 배려심이 남다르네요. 자 그럼 자기가 작업한 내용을 모아둘곳을 지정해주시면 됩니다. 기본적으로 'workspace'라고 자기가 이름하나 추천해주는데 거기에 작업하셔도 무난해요. 그런폴더 없다구요?? 이클립스가 알아서 만들어서 저장해줘요 걱정하지맙시다.

 

자 이제 뭔가 막 나오는데 우리는 스프링을 할꺼니까 일단 스프링을 추가해줍시다.

이클립스는 플러그인 방식이라 필요한거 추가해주시면 됩니다.

마친 앱스토어나 구글플레이에서 앱 검색해서 추가하듯이 플러그인 검색해서 추가해주면 됩니다.

자 따라해봅시다. 저도 그냥 따라했어요.

  1. 메뉴에서 Help -> Eclipse Marketplace... 를 찾아서 눌러주세요~


  2.  find에 'spring' 또는 'STS'를 입력해주시면 아래 'Spring Tool Suite'가 나옵니다. 찾아서 'Install'을 눌러서 추가해주세요~


  3. 다른거 보지 마시고 빨간 테두리 안을 클릭해주시면 됩니다.


  4.  그리고 Finish를 눌러주시면 이렇게 인스톨이 진행됩니다. 진행되는동안 다른거 하지마시고 그냥 기다리세요. 이클립스 재실행해야하니까 다 무의미합니다..ㅠ


  5.  이렇게 재실행하자고 하니 따라줍시다.

자 이제 프로젝트를 만들 준비는 다 했어요!!

다음시간에는 스프링 프로젝트를 만들어볼께요!!

 

'개발공부 > Spring' 카테고리의 다른 글

[Spring] err-02. spring 한글 깨짐  (0) 2015.09.13
[Spring] err-01. @Autowired  (0) 2015.09.13
[Spring] 04. Spring + tiles 설정  (28) 2015.09.09
[Spring] 03. Spring 프로젝트 생성  (7) 2015.08.25
[Spring] 01. Spring AOP  (0) 2015.08.23
:

[Spring] 01. Spring AOP

개발공부/Spring 2015. 8. 23. 16:19

안녕하세요~ 오늘은 Spring에 관해서 적어볼까 해요!!

Spring은 저도 공부하는중이라서 '다른'게 아니라 '틀릴'수도 있어요!!

참고는 하시되 너무 맹신하지 마시고, 저역시 알려드리는게 아닌 공부하는것이니 틀린부분이 있으면 지적 부탁드립니다!!


오늘부터 스프링으로 프로젝트를 만들어보려고 이것저것 찾아봤습니다.

사실 다른분들 블로그나 개발예제 같은거 주로 보고 나름대로 다시 정리하는겁니다 ㅋㅋㅋ

나중에 제가 잊어버리면 다시보기위해서 말이죠 ㅋㅋㅋ


저는 처음에 Spring의 개념을 잡기위해 'Spring 개념'으로 검색을 하다가 AOP에 대한글을 먼저 읽었습니다.

그러므로 오늘은 AOP를 이야기해보도록 할께요.


1. AOP란?


Aspect Oriented Programming의 약자라고 합니다.

저는 영어를 못해서 이게 뭔소린지 알아먹지 못하기때문에, 구글번역기를 돌려봤습니다.


이거래요. 뭐 구글님이 이거라고하시니 이게 맞을껍니다.

'관점 지향 프로그래밍' 이라고 합니다. 다른분이 블로깅하신 글을 보면


AOP는 '어플리케이션을 다양한 관점으로 분해하여 객체지향에서 추구하는 모듈화를 더욱 잘 지원하도록 하는 프로그래밍 기법'

이라고 설명해 주셨네요. 자 여기서 다른건 좀 알아먹겠는데, '다양한 관점' 이라는말이 도대체 무슨말인지 이해가 되지 않아요ㅠ

다양한 관점이란 무엇을 말하는것인지 알수가없으니 좀더 알아보겠습니다.


'다양한 관점'에는 두가지 관점이 있다고 합니다. '핵심관심사'에대한 관점과, '횡단관심사'에대한 관점이죠.

제가 읽어보고 이해한 바로 적어놓겠습니다.



핵심관심사

'각 모듈마다 수행되는 기본적이고 대표적인 기능' 이렇게 적혀있습니다.

말그대로 제가 작성한 모듈이 해야하는 일 자체를 '핵심관심사' 라고 부르는거같습니다.


횡단관심사

'여러개의 모듈에 걸치는 시스템의 부가적인 업무' 이렇게 적혀있습니다.

이것만 들어서는 도대체 무슨말인지 잘 와닿지 않았습니다. 그러나 친절하게 아래 예를 적어주셔서 좀 나았어요.

ex : 로깅, 사용자 인증, 성능 관리

예시를 보니 어플리케이션이 운영되는 전반에 걸쳐서 사용자에게 편의를 주기보다, 사용자를 컨트롤(사용자 인증, 사용자별 권한)하고 어플리케이션의 자체를 관리(로깅, 성능, 트랜잭션)하는 부분을 의미하는 것 같습니다.


아래 제가 참고한 사이트의 출처를 적어놓았습니다.

들어가보시면 이미지도 있어요!! 참고해보시면 좋을거같습니다.

출처 : http://blog.naver.com/dworyu/100028862065


2. AOP의 목적 및 장점


AOP의 시작은 '중복을 줄여서 조금만 수정해도 프로젝트 전체의 변화를 줄수있도록 하자!!' 로 출발했다고 합니다.

위에서 설명한 '두가지 관점'들을 생각하고 관점을 분리하여 작업한다고 하는데 실제로 프로젝트 셋팅 및 개발에 들어가기 전까지는 크게 와닿지 않을것으로 생각됩니다....ㅠㅠ 일단은 그러한 개념이 있고, 그걸 기반으로 한다는 부분이 중요하다고 생각되니 기억해 두는걸로 만족해야겠습니다!! 개발작업에 들어가면서도 이해가 안되면 다시 읽어보고 더 찾아봐야겠어요!!(설마 그러겠어? 라고 생각은되지만 설마가 사람잡는다 고 진짜 그럴거가은 느낌적인 느낌...ㅋㅋ)


장점으로는

  • 중복되는 코드 제거
  • 효율적인 유지보수
  • 높은 생산성
  • 재활용성의 극대화
  • 변화수용에 용의하다
라고 적혀있지만... 거의 모든사람들이 이런것을 추구하지 않을까 하는 생각이 들어요. 뭔가 개발자들이 '이랬으면 좋겠어!!' 한걸 모아놓은 느낌이랄까... 감사합니다ㅠ 정말 이러면 너무좋지요ㅠ 과연 저는 저장점들을 얼마나 살리면서 작업이 가능할까요..ㅋㅋ



3. AOP 용어


이번엔 AOP의 용어들에 대해서 살펴볼께요.

  1. 어드바이스
  2. 조인포인트
  3. 포인트컷
  4. 애스팩트
  5. 인트로덕션
  6. 위빙
순으로 읽고 작성해보겠습니다.

어드바이스
어떠한 작업을 언제할지 정의한것을 어드바이스라고 한다고 합니다.

제가 이해한것을 토대로 예를 들어보면 만약 회원가입을 한다고 했을때, 어떠한 작업(커밋, 로깅, 에러처리)을 언제(커밋 = 문제없이 처리가 끝난시점, 로깅 = 회원가입 처리 메소드 호출시, 에러처리 = 회원가입도중 문제가 생겼을 경우)할지 정의된것으로 보여집니다.


여기서 '어떠한 작업'은 작업 내용에 따라 달라진다고 생각되니 패스하고, '언제'에 대해서 적어보겠습니다.


  1. 이전(before) : 호출하려는 메소드가 호출되기 전에 기능을 수행한다.
    제생각으로는 권한체크를 할때 유용하다고 생각됩니다. 만약 관리자메뉴에 접근하려고 한다면 관리자 메뉴 호출전에 권한이 있는지 없는지를 먼저 확인해볼때 유용하지않을까요?? 굳이 권한체크가 아니더라도 게시글을 읽는데 포인트가 소모된다고 하면, 포인트가 있는지 확인하는 작업을 여기서 할수도 있을것같아요. (이게 맞나 모르겠습니다...)

  2. 이후(after) : 결과에 상관없이 어드바이스 대상 메소드가 완료된 후에 어드바이스 기능을 수행한다.
    어떠한 작업을 할때 에러가 났던, 성공적으로 마쳤던 해당 메소드가 끝났을 경우 수행되는 부분이라고 합니다. 어거지로 예를하나 들자면, 메소드가 성공 또는 실패 후에 해당 결과에 관한 로그를 남긴 뒤에, 해당메소드가 끝났다는것을 로그에 남길수있겠죠.

  3. 반환 이 후(after-returning) : 어드바이스 대상 메소드가 성공적으로 완료된 후에 기능을 수행한다.
    만약 회원가입을 한다고 할 경우, 회원가입이 정상적으로 완료된 후에 커밋하는 부분을 구현하면 될것같아요.

  4. 예외 발생 이후(after-throwing) : 어드바이스 대상 메소드가 예외를 던진 후에 어드바이스 기능을 수행한다.
    회원가입을 진행하는데 하나의 테이블에만 추가하라는 법은 없습니다. 각 테이블들에 정보를 순차적으로 추가하다가(중복되는 데이터 말구요ㅠㅠ) 중간에 예외상황이 생겨서 정상적으로 마치지 못할경우 이 정보들을 롤백하는 부분을 구현하면 될거같아요.

  5. 주위(around) : 어드바이스가 대상메소드를 감싸서 호출 전/후에 기능을 수행한다.
    1번과 2번을 합쳐놓은 느낌인거같아요. 이해가 잘 가지 않아서 다른글도 살펴보다가 읽은것을 말씀드리면, 떄에따라 해당 메소드를 SKIP할수도 있다고합니다! 어떤 예시를 들어야 할지는 잘 모르겠지만.. 메소드 실행 전과 실행 후에 같은동작을 하는것일텐데 도대체 뭘까요.. 이해는 되는데 어디에 사용해야할지 잘 모르겠어요ㅠ

조인포인트
어드바이스를 적용할 수 있는 포인트를 의미한다고 합니다.
어드바이스를 적용하는 포인트라고 합니다. 스프링에서는 메소드 호출에 한해서만 조인포인트를 지원한다고 합니다!
어드바이스의 '언제'와 상당히 비슷해보이는데 맞는지 모르겠네요.. 써보면 개념이 좀 잡힐거같아요!

포인트컷
어드바이스의 조인포인트 영역을 좁혀주는 역할을 한다고 합니다.
스프링에서는 메소드 호출에 한해서만 조인포인트를 지원한다고 위에서 말씀드렸는데... 더이상 영역을 좁힐수있나요??
스프링에만 관해서 한정적으로 생각해서 그런거같긴한데....
일단! 스프링을 기준으로 작성하겠습니다!

애스팩트
어드바이스와 포인트컷을 결합한 형태로 어디에서 언제 무엇을할지 정의한 것이라고 합니다.
애스팩트와 포인트컷을 결합하여 작업한 형태의 예로 위에서 적은 횡단관심사를 예로들고 있네요.
예를들어 로그를 작성한다고 하면, 어드바이스 하는 메소드 내에서(어디에서) 메소드 호출시(언제) 로그를 작성(무엇을) 하는것을 애스팩트 라고 하는것같아요.

인트로덕션
기존의 코드를 수정하지 않고, 해당 클레스에 새로운 메소드 및 맴버변수를 추가하는 기능이라고 합니다.
이건 딱 이렇다라고 개념만 잡는게 정신건강에 좋을거같아요..
예제소스는 다른분 블로그를 보기는걸 추천합니다ㅠ

저는 http://www.javajigi.net/pages/viewpage.action?pageId=1084 여기서 설명 및 소스를 보고 이해했어요!!

위빙
어드바이스를 적용하는 것을 말한다고 합니다.
그런데 애스팩트가 어드바이스 + 포인트컷이면 애스팩트를 적용하는것이 맞는건 아닌가 하는 생각이 들어요.
일단 '횡단관심사'를 적용하는 것이라고 이해하는게 좋을거같아요.

위빙의 방식에는 3가지가 있다고 합니다.
  1. 컴파일시 위빙
    컴파일할때 알맞은 위치에 공통코드(횡단관심사를 모듈화하여 구현한 코드)를 삽입한다.

  2. 클레스 로딩시에 위빙하기
    로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통코드를 삽입한 후에 새로운 클래스 바이너리 코드를 사용하도록 한다고 한다. 원본 바이너리 코드 + 공통관심사 = 새로운 바이너리 코드 이거겠지??

  3. 런타임시 위빙
    스프링에서 자체적으로 지원하고있는 기능이며, 1번과 2번처럼 코드를 수정하지 않고, 프록시를 사용하여 AOP를 적용한다.
    객체에 직접 겁근하는것이 아니라 중간에 프록시를 생성하여 접근하는데, 프록시는 메서드의 호출에 한해서만 어드바이스를 적용할 수 있다. 위 내용중 '포인트컷'이 한정적으로 되는 이유가 이때문이 아닐까 생각된다.
    뭐 원한다면 포인트컷의 영역을 늘릴수도 있겠지만!!


참고
  1. http://najuung.tistory.com/category/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B3%B5%EB%B6%80/Spring
  2. http://ssad.tistory.com/50
  3. http://blog.naver.com/andwise/220144147253


'개발공부 > Spring' 카테고리의 다른 글

[Spring] err-02. spring 한글 깨짐  (0) 2015.09.13
[Spring] err-01. @Autowired  (0) 2015.09.13
[Spring] 04. Spring + tiles 설정  (28) 2015.09.09
[Spring] 03. Spring 프로젝트 생성  (7) 2015.08.25
[Spring] 02. Spring 플러그인 추가  (0) 2015.08.24
: