인프런 커뮤니티 질문&답변

hi_man159님의 프로필 이미지
hi_man159

작성한 질문수

스프링 핵심 원리 - 고급편

스프링 AOP 구현6 - 어드바이스 종류

어드바이스에 변수

작성

·

251

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

 

안녕하세요, 궁금한 점이 있어 문의 드립니다.

 

AOP를 적용하여, joinPoint.proceed(); 수행 시간을 재려고 하는데요,
어드바이스 Method안에서, 시작 시간과, 종료시간을 모두 측정하거든요, 그럼 ThreadLocal을 사용하지 않아도 된다고 생각했습니다.(인스턴스 변수가 아니기 때문에) 제 판단이 맞을까요?

- 클래스의 인스턴스 변수 만이 동시성 문제가 있는걸까요?

답변 2

0

안녕하세요, hi_man159 님! 공식 서포터즈 codesweaver 입니다.

AI 답변에 더하여 답변 드립니다 :)
질문하신 내용이 맞습니다. AOP를 적용할 떄 메소드 안에서 선언한 변수는 자원경쟁 이슈가 발생하지 않습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.
1. 질문 내용과 관련하여 답변드리겠습니다. AOP를 적용하여 joinPoint.proceed(); 수행 시간을 재려고 할 때, 시작 시간과 종료 시간을 어드바이스 메소드 안에서 모두 측정하고자 한다면 ThreadLocal을 사용하지 않아도 되는지 여부에 대해서 물어보셨는데요,
2. ThreadLocal은 변수의 값이 스레드에 안전하게 유지되도록 하는 방법 중 하나입니다. ThreadLocal은 인스턴스 변수가 아니더라도, 해당 스레드 안에서만 유효한 값이기 때문에 굳이 사용하지 않아도 된다고 생각합니다.
3. 클래스의 인스턴스 변수가 아니더라도, 여러 스레드가 접근할 수 있는 공유 변수가 있을 수 있으며, 동시성 문제가 발생할 수 있습니다. 따라서 스레드 안전성을 고려하여 코드를 작성해주시는 것이 좋습니다.
4. 다시 말씀드리지만, ThreadLocal은 변수의 값이 스레드에 안전하게 유지되도록 하는 방법 중 하나일 뿐이며 자신이 작성하는 코드에 따라서 적용 여부가 결정되어야 합니다.
5. 참고로 인프런 홈페이지에 스레드 관련된 컨텐츠들이 많이 있으니 참고해주세요.
6. 이상입니다. 더 궁금하신 내용이 있으시다면 언제든지 물어보세요. 감사합니다.

hi_man159님의 프로필 이미지
hi_man159

작성한 질문수

질문하기