목록전체 글 (531)
개발놀이터
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 스프링은 @Aspect 어노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. 바로 사용방법을 알아보자 1. 사용할 클래스에 @Aspect를 붙여준다. 2. 적용할 Advice에 @Around를 붙여준다 Around는 포인트컷이 된다. 3. 반환 타입은 Object 인자값으로 ProceedingJoinPoint를 넣어서 Advice로직을 만든다. 이어서 @Aspect를 어드바이저로 변환해서 저장하는 과정을 알아보자 1. 실행 : 스프링 애플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다. 2. 모든 @Aspect 빈 조회 : 자동 프록시..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 빈 후처리기란 무엇일까? 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하는 기능이다. 그림으로 간단하게 알아보자 1. A객체를 생성하고 2. A객체를 빈 후처리기에 전달한다. 3. A객체를 B객체로 바꿔치기하고 4. 스프링 빈 저장소에 B객체를 저장한다. 이해를 돕기위해 예제코드로 살펴보자 public class BasicTest { @Test void basicConfig() { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BasicConfig.cl..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 포인트컷 : 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링한다. 이름 그대로 어떤 포인트에 기능을 적용할지 하지 않을지 잘라서 구분하는 것이다. 어드바이스 : 이전 포스팅에서 본 것 처럼 프록시가 호출하는 부가 기능이다. 단순하게 프록시 로직이라 생각하면 된다. 어드바이저 : 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 쉽게 이야기해서 포인트컷1 + 어드바이스1이다. 정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에 적용할지를 선택하고, 어드바이스로 어떤 로직을 적..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 앞서 마지막에 설명했던 동적 프록시를 사용할 때 문제점을 다시 확인해보자 문제점 1. 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?2. 두 기술을 함께 사용할 때 부가기능을 제공하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor를 각각 중복으로 만들어서 관리해야할까? Q: 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까? 스프링은 유사한 구체적인 기술들이 있을 때 ..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 지금까지 프록시를 적용하기 위해 적용 대상의 숫자 만큼 많은 프록시 클래스를 만들었다. 적용 대상이 100개면 프록시 클래스도 100개를 만들었다. 그런데 앞서 살펴본 것과 같이 프록시 클래스의 기본 코드와 흐름은 거의 같고, 프록시를 어떤 대상에 적용하는가 정도만 차이가 있었다. 쉽게 얘기해서 프록시의 로직은 같은데, 적용 대상만 차이가 있는 것이다. 이 문제를 해결하는 것이 바로 동적 프록시 기술이다. 동적 프록시 기술을 사용하면 개발자가 직접 프록시 클래스를 만들지 않아도 된다. 이름 그대로 프록시 객체를 동적으로 런타임에 개발자 대신 만들어준다. 그리고 동적 프록시에 원하는 실..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 저번 포스팅에서 우리는 템플릿 메서드 패턴, 전략 패턴에 대해서 알아보았다. https://coding-review.tistory.com/93 디자인패턴 (템플릿 메서드 패턴, 전략 패턴) 이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 오늘 알아볼 패턴들을 보기 전에 간단한 예시를 먼저 소개하겠다. coding-review.tistory.com 앞서 배운 디자인 패턴들은 우리가 원했던 요구사항에 맞긴 하지만 코드를 직접 다 고쳐야 한다는 엄청난 부담감이 있다. 수백개면 수백개 수천개면 수천개의 코드를 일일히 다..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 오늘 알아볼 패턴들을 보기 전에 간단한 예시를 먼저 소개하겠다. 비즈니스 로직을 실행하는데 있어서 어딘가에서 병목현상이 자꾸 벌어진다는 것을 확인했다. 어디서 병목현상이 발생하는지 알아보기 위해서 비즈니스 로직 앞뒤에 시간을 체크해 걸린 시간을 뽑아오라는 임무를 부여받았다. @Test void templateMethodV0() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 log.info("비즈니스 로직 1 실행"); //비즈니스 로직 종료 long..
이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 이번 시간에는 스프링을 사용할 때 주의할 점과 해결방법인 스레드 로컬에 대해 알아보겠다. 스프링을 사용할 때 우리는 컴포넌트스캔을 이용하고 스프링 빈을 자동 등록하든 수동 등록하든 자연스럽게 사용하고 있다. 스프링의 장점중 하나는 이 스프링 빈이 싱글톤 패턴으로 만들어지기 때문에 메모리를 효율적으로 사용할 수 있다는 점이다. 하지만 이러한 싱글톤 패턴은 조심해서 사용해야 한다. 바로 동시성 문제 때문이다. 동시성 문제에 대한 가벼운 예시를 들어 설명할 예정이다. FieldService.java @Slf4j public class FieldService { private String n..
스레드에 대해 공부하다 보니 문득 궁금증이 생겼다. https://coding-review.tistory.com/90 스레드와 멀티스레드 스레드 스레드를 알기전에 우리는 프로세스에 대해서 알아야한다. 프로세스는 무엇인가? 프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 coding-review.tistory.com 생각해보니 우리는 스레드란 말을 어디선가 들어봤다. 바로 CPU의 코어와 스레드이다. 자바의 스레드와 CPU의 스레드는 같은의미일까? 다른의미일까? 글에 들어가기 앞서 CPU의 스레드를 하드웨어 스레드 자바같은 언어가 지원하는 스레드를 소프트웨어 스레드라 칭하겠다. 하드웨어 스레드 하드웨어 스레드를 설명하기 전에 CPU의 코어를 먼저 알아보자 ..
스레드 스레드를 알기전에 우리는 프로세스에 대해서 알아야한다. 프로세스는 무엇인가? 프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 그럼 스레드는 무엇인가? 스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스는 한개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다. 예를 들어 Controller - Service - Repository로 이어지는 로직을 하나의 프로세스라 하면 이 프로세스는 하나의 스레드가 할당되어 실..