Home

0

네트워크 - HTTP

네트워크 - OSI 7 계층과 TCP/IP 5계층 네트워크 - HTTP 네트워크 - HTTP Version 네트워크 - HTTP 메시지 구조 네트워크 - HTTPS Post not found: computer-science/network/tcp HTTP란 HyperText Transfer Protocol 의 약자로 HTML 문서를 전송하기 위해 만들어진 규약조건이다.HTTP는 TCP/IP 기반으로 되어있다. Client - Server 구조 Stateless (무상태) 프로토콜 비 연결성 Client - Server 구조 클라이언트는 서버에 요청을 보내고 서버로부터 응답을 기다리는 단방향 통신 구조 Request Response 구조 Stateless (무상태) 프로토콜

0

네트워크 - OSI 7 계층과 TCP/IP 5계층

네트워크 - OSI 7 계층과 TCP/IP 5계층 네트워크 - HTTP 네트워크 - HTTP Version 네트워크 - HTTP 메시지 구조 네트워크 - HTTPS Post not found: computer-science/network/tcp 네트워크 - OSI 7 계층과 TCP/IP 5계층 OCI 7 계층 다양한 컴퓨터 시스템이 표준 프로토콜을 사용하여 통신할 수 있도록 국제 표준화 기구(ISO) 에서 만든 개념 모델이다. OSI 표준 모형은 7계층으로 이루어져 있다. 계층별로 역할을 분리해서 각 계층이 독립적으로 기능을 수행하고, 계층 간 통신을 통해 전체 통신 프로세스를 가능하게 한다. TCP/IP 5 계층 프로토콜 프로토콜 : source와 target간의 데이터를 어떻게 주고 받을 지에 대한 규약(방법)이다. 크게는 동기식 과 비동기식 으로 나뉘게 된다.

0

Spring - Embeded Redis 사용하기

목차 Spring - M1 맥북에서 Embeded Redis 사용하기 Spring - Embeded Redis 사용하기 참고https://www.baeldung.com/spring-embedded-redis Embeded Redis 사용하기 보통 Local 에서 테스트를 위해 많이 사용하며, 별도의 Redis 를 설치하지 않고 실행할 수 있게 해줍니다. 보통 Redis를 사용하는 스프링 프로젝트를 Local에서 프로젝트 실행시 Redis를 선행적으로 설치해줘야 한다. 이 문제를 Embedded Redis를 사용해 프로젝트가 Local 환경에 의존적이지 않고 프로젝트 만으로 구동할 수 있도록 한다. 1. Embedded Redis 사용을 위한 의존성 추가build.gradle 에 다음 Embedded Redis 사용을 위한 의존성을 추가해줍니다.

0

Spring AOP Pointcut 표현식 - this, target

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut 포인트컷 표현식 - this, targetthis 와 target 은 객체를 대상으로 AOP 를 적용할 때 사용하는 포인트컷 표현식입니다. 두 표현식 모두 상위 타입이나 인터페이스를 이용해 AOP 를 적용할 수 있습니다. this 는 스프링 빈으로 등록돼 있는 프록시 객체를 대상으로 Advice 를 적용합니다. 때문에 스프링에서 프록시 객체를 생성하는 전략에 따라 AOP 가 다르게 적용될 수 있습니다. target 은 실제 객체를 대상으로 Advice 를 적용합니다. this 와 target 작동방식 확인을 위한 테스트 코드@AutowiredMemberService memberService;@Testvoid success() { log.info("memberService Proxy={}", memberService.getClass()); memberService.hello("helloA");}@Aspectstatic class ThisTargetAspect { //부모 타입 허용 @Around("this(hello.aop.member.MemberService)") public Object doThisInterface(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[this-interface] {}", joinPoint.getSignature()); return joinPoint.proceed(); } //부모 타입 허용 @Around("target(hello.aop.member.MemberService)") public Object doTargetInterface(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[target-interface] {}", joinPoint.getSignature()); return joinPoint.proceed(); } @Around("this(hello.aop.member.MemberServiceImpl)") public Object doThis(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[this-impl] {}", joinPoint.getSignature()); return joinPoint.proceed(); } @Around("target(hello.aop.member.MemberServiceImpl)") public Object doTarget(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[target-impl] {}", joinPoint.getSignature()); return joinPoint.proceed(); }} JDK 동적 프록시를 이용한 프록시 객체 생성

0

Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut Advice 에 매게변수 전달포인트 컷 포현식을 사용해서 AOP 가 적용되는 객체나 메소들의 정보를 Advice 내 매개변수로 정보들을 전달 할 수 있습니다. Advice 로 매개변수로 정보들을 넘기기 위해서는 포인트컷의 이름과 매개변수 이름이 같아야 합니다. 또한, 값이 들어올때 타입이 매개변수에서 정의한 타입으로 제한이 됩니다. AOP 적용 확인을 위한 테스트 코드@AutowiredMemberService memberService;@Testvoid success() { log.info("memberService Proxy={}", memberService.getClass()); memberService.hello("helloA");} 메소드 매개변수값 정보를 Advice 에 전달args 를 이용하면 메소드에 전달된 매개변수의 값 정보를 가져올 수 있습니다.

0

Spring AOP Pointcut 표현식 - bean

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut beanbean 표현식은 스프링에서만 사용한 포인트컷 지시자로 Bean 이름으로 Advice 적용 여부를 판단합니다. @Slf4j@Import(BeanTest.BeanAspect.class)@SpringBootTestpublic class BeanTest { @Autowired OrderService orderService; @Test void success(){ orderService.orderItem("itemA"); } @Aspect static class BeanAspect{ // orderService 빈과 Repository 로 끝나는 빈들에 Advice 를 적용합니다. @Around("bean(orderService) || bean(*Repository)") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[bean] {}", joinPoint.getSignature()); return joinPoint.proceed(); } }} 2021-12-21 00:13:43.463 INFO 35836 --- [ Test worker] com.example.aop.pointcut.BeanTest : [bean] void com.example.aop.order.OrderService.orderItem(String)2021-12-21 00:13:43.474 INFO 35836 --- [ Test worker] com.example.aop.order.OrderService : [orderService] 실행2021-12-21 00:13:43.475 INFO 35836 --- [ Test worker] com.example.aop.pointcut.BeanTest : [bean] String com.example.aop.order.OrderRepository.save(String)2021-12-21 00:13:43.480 INFO 35836 --- [ Test worker] com.example.aop.order.OrderRepository : [orderRepository] 실행

0

Spring AOP Pointcut 표현식 - @annotation

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut @annotation 메서드가 주어진 어노테이션을 가지고 있는 조인 포인트를 매칭 @annotation 은 특정 어노테이션이 적용된 메소드 를 기준으로 Advice 를 적용합니다. Custom Annotation 생성@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface MethodAop { String value();} Advisor 생성어노테이션을 이용해 Advice 적용하기 위해 @annotation 에 어노테이션 패키지 경로를 지정합니다.

0

Spring AOP Pointcut 표현식 - @args

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut @args 메서드내 매개변수에 특정 어노테이션을 가지고 있는 경우 조인 포인트를 매칭 @args 는 메서드내 매개변수가 특정 어노테이션을 가지고 있는 경우 Advice 를 적용합니다. 런타임 시점에서 해당 어노테이션이 실제로 존재하는지 확인합니다. 커스텀 어노테이션@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation {} Advisor 생성매개변수가 @MyAnnotation 를 가질 경우 advice 를 적용하기 위해 Adivsor 를 생성합니다.

0

Spring AOP Pointcut 표현식 - @target, @within

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut @target 과 @within 클래스에 특정 어노테이션이 적용된 경우 조인 포인트를 매칭 @target 과 @within 은 어노테이션을 기준으로 AOP를 적용하기 위해 사용되는 Pointcut 표현식입니다. 특정 어노테이션이 적용된 클래스내 모든 메서드에 AOP 를 적용합니다. @target 은 런타임 객체의 실제 타입 을 기준으로 매칭합니다. 이 과정에서 해당 객체의 부모 클래스나 인터페이스에 선언된 어노테이션도 포함하여 검사하기 때문에 부모 타입의 메서드까지 Advice 를 다 적용합니다. @within 경우 컴파일 시점 에 특정 클래스 에 어노테이션이 선언되었는지를 기준으로 확인하기 때문에 정의된 클래스내 메서드에만 Advice 를 적용합니다. Custon Annotation 생성

0

Spring AOP Pointcut 표현식 - args

목차 Spring AOP Pointcut 표현식 - this, target Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달 Spring AOP Pointcut 표현식 - bean Spring AOP Pointcut 표현식 - @args Spring AOP Pointcut 표현식 - @annotation Spring AOP Pointcut 표현식 - @target, @within Spring AOP Pointcut 표현식 - args Spring AOP Pointcut 표현식 - within Spring AOP Pointcut 표현식 - execution Spring 핵심원리 고급편 - Pointcut Pointcut 표현식 - args args 는 메서드의 매개변수를 기준으로 AOP 를 적용 args는 메서드의 매개변수를 기준으로 매칭하기 위한 표현식입니다. 메서드의 매개변수 타입이나 값을 기준으로 특정 메서드에만 AOP를 적용할 수 있습니다. 테스트를 위한 객체@ClassAop@Componentpublic class MemberServiceImpl implements MemberService { @Override @MethodAop("test value") public String hello(String param) { return "ok"; } private String internal(String param) { return "ok"; }} args 를 이용해 적용 여부 판단@BeforeEachpublic void init() throws NoSuchMethodException { helloMethod = MemberServiceImpl.class.getMethod("hello", String.class);}private AspectJExpressionPointcut pointcut(String expression) { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(expression); return pointcut;}@Testvoid args() { // hello(String)과 매칭 assertThat(pointcut("args(String)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); // Object 는 String 의 상위 타입 assertThat(pointcut("args(Object)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args()") .matches(helloMethod, MemberServiceImpl.class)).isFalse(); assertThat(pointcut("args(..)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args(*)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args(String,..)") .matches(helloMethod, MemberServiceImpl.class)).isTrue();}