영운's 블로그

스프링 입문(4) - AOP, 앞으로의 공부 로드맵 본문

카테고리 없음

스프링 입문(4) - AOP, 앞으로의 공부 로드맵

오영운(you88) 2022. 5. 24. 19:46

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

해당 글은 김영한님의 스프링 입문을 강의를 들으며 개인적으로 정리한 내용입니다.

모든 자료의 출처는 김영한님의 스프링 입문 강의임을 미리 밝힙니다.

 

실습 코드: https://github.com/you88311/spring-example1

 

 

 

<AOP> 

 

메소드의 호출 시간을 측정하고 싶을 때 직접 이를 코딩으로 구현하는 경우 다음과 같이 모든 메소드에 시간을 측정하는 로직을 넣어야함. 

 

package hello.hellospring.service;

@Transactional
public class MemberService {
    /**
    * 회원가입
    */
    public Long join(Member member) {
    long start = System.currentTimeMillis();
    
    try {
        validateDuplicateMember(member); //중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    } finally {
        long finish = System.currentTimeMillis();
        long timeMs = finish - start;
        System.out.println("join " + timeMs + "ms");
    	}
    }
    /**
    * 전체 회원 조회
    */
    public List<Member> findMembers() {
        long start = System.currentTimeMillis();
        try {
        	return memberRepository.findAll();
        } finally {
        	long finish = System.currentTimeMillis();
        	long timeMs = finish - start;
        	System.out.println("findMembers " + timeMs + "ms");
        }
    }
}

 

문제는 메소드의 개수가 늘어날 수록 해당 로직을 넣는 시간이 비례적으로 증가한다는 것.

또한 메소드의 호출 시간을 측정하는 기능은 핵심 사항이 아닌 공통 관심 사항.

근데 이런 공통 로직을 직접 비즈니스 로직의 코드에 함께 넣는 것은 유지보수 측면에서 바람직하지 않음 

 

이때 필요한 것이 AOP(Aspect Oriented Programming)

 

 

 

 

 

별도의 공통 로직을 만들면서도 함수처럼 일일히 추가하지는 않아도 됨!!

원하는 적용 대상 선택가능 => @Around 부분이 Aop를 적용할 범위를 설정하는 것

지금은 springpractice.hellospring..*(..)으로 하위 모든 부분에 적용하도록 한 것

 

 

강의에서 AOP 로직을 구체적으로 설명해 주시지는 않았다.

단지 별도로 프록시(가상의) memberService를 일단 돌리고 joinPoint.proceed()함수 호출 시 실제 memberService를 호출한다. 그리고 이것은 spring이 DI(의존성 주입)를 사용하기에 Controller입장에서는 그게 무엇이든 그냥 받는 것을 실행하기에 가능한 방식

 

 

 

<앞으로의 공부 로드맵>

 

강의를 통해 스프링 웹 애플리케이션 개발에 대해 넓고 얇게 학습하였다.

이제부터는 각각의 기술들에 대해 깊이있게 공부할 시간이라고 하심.

 

아래는 김영한님이 강의하신 강의에 대한 간략한 소개

 

  • 스프링 핵심 기술: 스프링 DI, 스프링 container 스프링의 핵심 기술들을 보다 이론적으로 자세히 설명하는 강의. 이 강의에서 얻어갈 것은 각 기술의 기능 보다는 이 기술이 왜 나왔는지 그 배경과 사용하는 이유를 알아가는 것이 포인트
  • 스프링 웹 MVC: 서블릿, 스프링이 어떤 원리로 웹 MVC를 작동시키는지, 필터, 인턴셉터, 예외처리 등을 실무 트랜드에 맞게 설명하는 강의
  • 스프링 DB 접근 기술: 스프링으로 DB에 접근하는 기술등에 대해 실무 level로 설명하는 강의
  • 스프링부트: 스프링부트는 스프링을 쉽게 쓰게 해주는 것. 이것도 보다 실무에 사용하는 방법들을 집중적으로 공부하는 강의

---------------------------------------------------------------------------------------------------------------------------------

  • 활용편 1 - 먼저 활용편 1을 쭉 따라 치며 전체 기술과 백엔드 서비스 개발의 감을 익히는 강의. (이해가 좀 부족해도 우선 진행하시길 권장합니다.)
  • 2. JPA 기본편 - JPA 기본 내공을 다지는 강의.
  • 3. 활용편 1 복습 - 이미 기본편을 학습한 상태이기 때문에 처음부터 다시 쭉 따라하다 보면 JPA의 깊이있는 내용을 이해할 수 있다.
  • 4. 활용편 2 - 실전에서 JPA를 개발하고, JPA 성능 최적화를 어떻게 하는지 이해한다.
  • 5. 스프링 데이터 JPA - 실무에서 필요한 기능 위주로 스프링 데이터 JPA를 학습한다.
  • 6. Querydsl - 복잡한 쿼리와 동적쿼리 문제를 해결한다.

 

이후에 김영한님이 추천하는 공부방법은 다음과 같습니다. Q&A 내용을 스크랩한 것입니다.

 

강의 순서에 대해서 질문 있습니다.

현재 '스프링 완전 정복 시리즈'에서 '스프링 핵심 기술' 편만 있는 상황인데요, 저 강의만 듣고 다른 강의들 나오기 전에 '스프링 부트와 JPA 실무 완전 정복 로드맵' 을 먼저 들어도 무리 없을까요?

그리고 JPA 로드맵에서  2번 '실전!스프링 ~~ ' 을 1번 '자바 ORM 표준 JPA 프로그래밍 -기본편' 보다 먼저 보는 것이 맞나요?

 

김영한2020.12.03 PM 22:42

안녕하세요. taehyun16님

현재 가장 추천하는 코스 순서는 다음과 같습니다.

1. 스프링 입문

2. 스프링 핵심 원리 - 기본편

3. 스프링 부트와 JPA 실무 완전 정복 로드맵 -> 타입 B 야생형

타입 B - 야생형(추천)

링크:  [ https://www.inflearn.com/roadmaps/149]

 

스프링 입문과 스프링 핵심 원리를 듣고 나면 스프링으로 개발하는 가장 중요한 기본 지식을 쌓은 상태가 됩니다. 그래서 바로 활용편에 들어가는 것도 좋은 선택입니다. 스프링을 실무에서 어떤 식으로 활용해서 개발하는지 먼저 배워두고, 이후에 스프링 완전정복 시리즈를 통해 스프링 MVC나 스프링 데이터 접근 기술 같은 부분은 더 깊이있게 학습하시면 됩니다.

 

감사합니다.

 

출처: <https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/lecture/49601?tab=community&volume=1.00&mm=null&speed=1.25&q=98766

 

 

 

 

 

 

 

Comments