분류 전체보기 513

@Aspect AOP

Spring에 @Aspect 애노테이션을 사용하면 이것이 Advisor 생성 기능을 지원한다. @Aspect는 AspectJ에서 제공하는 애노테이션으로 스프링은 이를 사용해 AOP를 가능케한다. 코드로 살펴보자 @Aspect : 프록시를 적용하기 위한 애노테이션 @Around : Pointcut을 위한 애노테이션, 인자로 AspectJ표현식을 넣는다. @Around가 붙은 메서드가 바로 Advice이다.(여기서는 execute) ProceedingJoinPoint : MethodInvocation과 유사하다. 내부에 실제 호출 대상(target), 전달 인자, 어떤 객체와 어떤 메서드가 호출되었는지에 대한 정보가 포함되어 있다. proceed() : target 호출 이렇게 만들어진 프록시를 스프링 빈으..

빈 후처리기

빈 후처리기란?(BeanPostProcessor) @Bean이나 컴포넌트 스캔으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그 이후에는 등록된 빈을 조회하고 사용할 수 있게된다. 스프링이 빈 저장소에 등록할 목적으로 객체를 생성하는데(Singleton) 등록 직전에 조작하고 싶을 때 사용하는 것이 바로 빈 후처리기!! 즉, 빈을 생성한 후에 무언가를 처리하는 용도로 이해하자! 빈 후처리기 기능 객체를 조작 다른 객체로 바꿔치기 빈 후처리기 과정 생성 : 스프링 빈 대상이 되는 객체를 생성 전달 : 생성된 객체를 빈 후처리기에 전달 후 처리 작업 : 빈 후처리기가 스프링 빈 객체를 조작 등록 : 스프링 컨테이너의 내부 저장소에 빈 객체 등록 Bean..

2022년 11번가 신입사원 최종합격 후기

11번가 신입사원 채용 SW개발직무에 최종합격하므로서 짧았다면 짧았고 길었다면 길었을 나의 2달 반 가량의 취준이 끝이났다. 어떤 마음으로 11번가에 지원을 하게되었고 어떤 프로세스를 거치며 최종합격에 도달할 수 있었는지를 적어보려한다. 11번가에 관심있는 누군가가 이 글을 읽고 도움을 받길 기도하며 부검(?)을 시작해보자. 1. 지원하게된 이유 취준을 시작하며 스스로가 정한 내가 가고싶은 회사에 대한 기준이 있었다. 성장할 수 있는 환경 어느정도의 MAU를 가진 B2C 기업 내부 기술 스택 첫 취준이기도 했고 첫 회사를 잘 들어가 정말 폭발적인 성장을 하고 싶다는 열망이 강했다. 관심있는 기업의 채용이 뜨면 그 회사에 대해 찾아보고 어떤 일을 하며 어떤 문화를 가지고 있는지를 유심히 찾아보곤한다. 11..

잡담/회고 2022.01.06

2021년 하반기 회고

길고 길었던 2021년의 끝에서 뒤를 돌아보니 감회가 남다르다. 많은 일이 있었고 많이 배웠다. 상반기 회고글을 마무리하며 라고 했었다. 지금 나는 그때보다 더 나은 내가 되었을까?라는 물음에 “맞아요”라는 대답보다는 “나는 여전히 개발이 좋아요” 라고 답하고 싶다. 성장 하반기에는 정말 많은 것을 배웠다. 그 중 첫번째로 빗썸테크아카데미의 서버 백엔드 교육생으로써 교육을 이수했다. 두번째로는 사이드 프로젝트이다. 사실 이것이 나에게 가장 큰 영향을 주었다.(Team Ark 만세!!) 정말 능력있고 좋은 분들을 만나 함께 프로젝트를 진행하며 성장한 것 같다. 다시 한번 우리 팀원들에게 감사의 마음을 전한다. 이전에 한번도 경험해보지 못했던 실무적인 작업들을 할당받아 진행하며 말할 거리도 많아졌고 시야의 ..

잡담/회고 2021.12.31

Spring의 프록시 기술

JDK 동적 프록시는 인터페이스가 있는 경우에만 사용이 가능하고, CGLIB은 구현체에도 적용이 가능하다. 이 두가지를 일관성있게 사용할 수는 없을까? Spring은 동적 프록시를 통합하여 편리하게 만들어주는 ProxyFactory를 제공한다! ProxyFactory는 인터페이스가 있다면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB을 사용한다. 물론 이 기본설정을 변경할 수도 있다! ProxyFactory Proxy에 추가할 부가 기능을 적용하기위해 Advice를 만들어주면된다. 이 Advice는 JDK 동적프록시의 InvocationHandler, CGLIB의 MethodInterceptor가 호출한다. Advice는 프록시에 적용할 부가 기능 로직이다. InvocationHandl..

@ModelAttribute와 @RequestBody 그리고 Setter

@RequestBody와 Setter 본 주제에 대해 이야기하기 전에 먼저 @ModelAttribute에 대해 이야기해보려합니다. @ModelAttribute 우리는 Spring에서 Reqeust Parameter를 얻기 위해 @ModelAttribute를 사용하곤합니다. 값을 바인딩하여 우리가 원하는 객체로 변환해주는 역할을 하는데 아래와 같이 형식에 맞춰 값이 넘어오면 원하는 객체로 손쉽게 변환할 수 있다는 큰 장점이 있습니다. 물론 타입이나 형식이 안맞으면 TypeConverter에서 예외가 발생함 값을 바인딩하길 원하는 객체인 RequestDto는 name과 age필드 두가지를 가지고 있는데 실제 요청을 postman을 사용해 html-form 형식으로 전달해보겠습니다.(query paramete..

Spring 2021.11.24

Spring과 Redis를 연동하여 Session Clustering

안녕하세요!😄 현재 진행 중인 프로젝트의 백엔드 서버에 적용된 Session Clustering에 대해 이야기 해보려 합니다. 여기서는 Load Balancing, Reverse Proxy와 같은 개념이 등장합니다. 이젠에 작성된 해당 글을 참조해주세요! 세션 클러스터링이란? Session Clustering이란 말 그대로 Session을 Clustering 즉, 군집화한다고 생각하면 이해가 빠를 것 같습니다. 우리가 웹사이트에 로그인하는 과정을 생각해봅시다.(쿠키-세션 방식을 이야기합니다.) 먼저, 클라이언트는 서버로 자신의 인증 정보를 전달합니다. 서버는 인증 정보를 검증한 후 인증된 사용자라면 해당 사용자의 정보를 서버 내 Session에 저장하게 됩니다. 서버가 한 대만 존재한다면 사용자의 요청은..

Spring 2021.11.19

동적 프록시 기술

리플렉션 Java가 제공하는 JDK 동적 프록시, CGLIB같은 프록시 생성 오픈소스를 사용하면 프록시 객체를 동적으로 만들어낼 수 있다. 하나의 대상 클래스를 위해 프록시 클래스를 계속 만들지 않아도된다! 먼저 Java의 리플렉션에 대해 알아야하는데, 리플렉션을 사용하면 클래스나 메서드의 메타 정보를 동적으로 획득하고 코드도 동적으로 호출할 수 있다. 위와 같이 callA, callB 메서드를 가지고 있는 정적 클래스가 있다. 이 메서드를 호출하고 싶을 때 우리는 대부분 아래와 같이 코드를 짠다. 객체 생성 -> 호출 이 방식은 소스 코드에 명시적으로 작성되어있기 때문에 정적이라고 말할 수 있다. 이 자바 코드는 클래스 단위로 컴파일되어 바이트 코드가 되는데 이 바이크 코드를 조작하는 방법이 바로 리플..

프록시 패턴과 데코레이터 패턴

2021.11.01 - [Spring/Spring Core Advanced] - 템플릿 메서드 패턴과 콜백 패턴 템플릿 메서드 패턴과 콜백 패턴 2021.10.29 - [Spring/Spring Core Advanced] - ThreadLocal ThreadLocal 2021.10.28 - [Spring/Spring Core Advanced] - 로그 추적기 로그 추적기 애플리케이션이 커질수록 모니터링과 운영이 중요해진다. 어떤.. minchul-son.tistory.com 앞서 템플릿 메서드 패턴, 전략 패턴, 콜백 패턴을 로그 추적기에 적용시켜보며 공통의 변하지 않는 코드와 변하는 코드를 분리해 로직을 좀 더 간단하게 변경해보았다. 이 방법 또한 원본 코드에 코드 수정이 많이 필요하다. 기존 애플리케..

HTTP 완벽 가이드 - 10장 : HTTP/2.0

10장. HTTP/2.0 등장 배경 HTTP/1.1은 심각한 회전 지연이 발생하기 때문에 성능 문제가 존재한다. 이를 해결하기위해 구글에서 SPDY를 개발하였고 이것이 바로 HTTP/2.0의 기반이 되었다. HTTP/2.0 HTTP/2.0 또한 TCP Connection 위에서 동작한다.(초기화는 클라이언트) 요청과 응답을 길이가 정의된 한 개 이상의 Frame에 담는다.(HTTP Header는 압축되어 담김) 이 Frame들은 하나의 스트림을 통해 보내진다. 한 개의 TCP Connection은 여러 Frame을 만들 수 있기 때문에 HTTP Transaction을 동시에 처리하는 것이 가능해진다. 또한 스트림에 대한 흐름 제어와 우선 순위를 부여할 수 있다.(중요한 리소스가 담겨있는 스트림에 우선 순..

Book 2021.11.08
반응형