[Spring][혼곡] 7. AOP(Aspect Oriented Programming) - (1) AOPκ°€ ν•„μš”ν•œ 상황

2021. 10. 23. 14:04Β·πŸ“ Language/✏ JAVA

AOP

μ²˜μŒλΆ€ν„° AOP 이둠 및 μš©μ–΄λ₯Ό ν•™μŠ΅ν•˜κΈ°μ—” μ–΄λ €μš°λ‹ˆ κ°„λ‹¨ν•œ 예제λ₯Ό 톡해 ν•™μŠ΅ν•œ ν›„ μ•Œμ•„λ³Ό 것이닀.

 

1. AOPκ°€ ν•„μš”ν•œ μƒν™©

1) 예제

μ‹œκ°„ μΈ‘μ • 둜직

  • λͺ¨λ“  λ©”μ„œλ“œμ˜ ν˜ΈμΆœ μ‹œκ°„μ„ μΈ‘μ •ν•˜κ³  μ‹Άλ‹€λ©΄?
  • λͺ¨λ“  λ©”μ„œλ“œμ˜ μ‹œμž‘κ³Ό 끝에 μ‹œκ°„ μΈ‘μ • λ‘œμ§μ„ μΆ”κ°€ν•˜μ˜€λ‹€.
  • λ§Œμ•½, κ°‘μžκΈ° μ‹œκ°„ λ‹¨μœ„λ₯Ό λ³€κ²½ν•΄μ•Ό ν•œλ‹€λ©΄ λͺ¨λ“  λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.
package hello.hello.spring.service;

import hello.hello.spring.domain.Member;
import hello.hello.spring.repository.MemberRepository;
import hello.hello.spring.repository.MemoryMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Transactional
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    // νšŒμ› κ°€μž…
    public long join(Member member) {
        long start = System.currentTimeMillis();

        try {
            validateDuplicateMember(member);
            memberRepository.save(member);
            return member.getId();
        } finally {
            long end = System.currentTimeMillis();
            long timeMs = end - start;
            System.out.println("join = " + timeMs + "ms");
        }
    }

    private void validateDuplicateMember(Member member) {
        memberRepository.findByName(member.getName())
                .ifPresent(member1 -> {
                    throw new IllegalStateException("이미 μ‘΄μž¬ν•˜λŠ” νšŒμ›μž…λ‹ˆλ‹€.");
                });
    }

    // 전체 νšŒμ› 쑰회
    public List<Member> findMembers() {
        long start = System.currentTimeMillis();

        try {
            return memberRepository.findAll();
        } finally {
            long end = System.currentTimeMillis();
            long timeMs = end - start;
            System.out.println("findMembers = " + timeMs + "ms");
        }
    }

    // νšŒμ› 쑰회
    public Optional<Member> findOne(Long memberId) {
        long start = System.currentTimeMillis();

        try {
            return memberRepository.findById(memberId);
        } finally {
            long end = System.currentTimeMillis();
            long timeMs = end - start;
            System.out.println("findOne = " + timeMs + "ms");
        }
    }
}

 

2) 예제 결과

μ‹œκ°„ μΈ‘μ • ν…ŒμŠ€νŠΈ

  • νšŒμ› κ°€μž… 및 쑰회 ν…ŒμŠ€νŠΈλ₯Ό ν•  λ•Œλ§ˆλ‹€ μ‹œκ°„μ΄ μΈ‘μ •λ˜λ©° ν•΄λ‹Ή 둜그λ₯Ό 남기고 μžˆλ‹€.
  • 처음으둜 κ°€μž… 및 쑰회 ν…ŒμŠ€νŠΈν•  땐 μ‹œκ°„μ΄ μ’€ 더 였래 κ±Έλ¦°λ‹€.

 

3) 문제점

  • 핡심 관심 사항은 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이고 μ‹œκ°„μ„ μΈ‘μ •ν•˜λŠ” κΈ°λŠ₯은 곡톡 관심 사항이닀.
  • μ‹œκ°„μ„ μΈ‘μ •ν•˜λŠ” 둜직과 핡심 λΉ„μ¦ˆλ‹ˆμŠ€μ˜ 둜직이 μ„žμ—¬μ„œ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅λ‹€.
  • μ‹œκ°„μ„ μΈ‘μ •ν•˜λŠ” λ‘œμ§μ„ λ³„λ„μ˜ 곡톡 둜직으둜 λ§Œλ“€κΈ° 맀우 μ–΄λ ΅λ‹€.
  • μ‹œκ°„μ„ μΈ‘μ •ν•˜λŠ” λ‘œμ§μ„ λ³€κ²½ν•  λ•Œ λͺ¨λ“  λ‘œμ§μ„ μ°Ύμ•„κ°€λ©΄μ„œ λ³€κ²½ν•΄μ•Ό ν•œλ‹€.
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Spring][혼곡] 7. AOP(Aspect Oriented Programming) - (2) AOP 적용
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (6) μŠ€ν”„λ§ 데이터 JPA
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (5) JPA
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (4) μŠ€ν”„λ§ JDBC Template
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Spring][혼곡] 7. AOP(Aspect Oriented Programming) - (1) AOPκ°€ ν•„μš”ν•œ 상황
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”