공부

    [Spring] AOP 개념 및 용어 정리<img src=">

    [Spring] AOP 개념 및 용어 정리

    AOP란Aspect-Oriented Programming , 관점 지향 프로그래밍이란 뜻으로 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것이다. 부가 기능과 부가 기능을 어디에 적용할 지 선택하는 기능을 합해서 하나의 모듈로 만든 것을 Aspect라고 한다. 이 Aspect 를 사용한 프로그래밍 방식을 AOP 라고 한다. AOP는 OOP를 대체하기 위한 것이 아닌 횡단 관심사(하나의 부가 기능이 여러 곳에 동일하게 사용됨)를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다. AOP 의 대표적인 구현으로는 AspectJ 프레임워크가 있다.  AOP 적용 방식적용 방식에는 크게  3가지 방식이 있다. 컴파일 시점클래스 로딩 시..

    [Spring] @Aspect란, 생성 과정 설명<img src=">

    [Spring] @Aspect란, 생성 과정 설명

    @Aspect란 AOP(관점 지향 프로그래밍)를 가능하게 하는 AspectJ 프로젝트에서 제공하는 어노테이션이다.  @Aspect를 스프링 프록시에 적용하려면 어드바이저(Advisor)를 만들어서 스프링 빈으로 등록하면 된다. 그러면 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고 스프링 빈에 자동으로 프록시를 적용해준다.  @Aspect 프록시 예제  빨간 박스는 포인트컷 부분이고 초록색 박스는 어드바이스 부분이다.  @Aspect를 어드바이저로 변환해서 저장하는 과정 1. 실행 : 스프링 어플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다. 2. 모든 @Aspect 빈 조회 : 자동 프록시 생성기는 @Aspect 어노테이션이 붙은 스프링 빈을 모두 조회한다. 3. 어드바이저 생성 :..

    [Spring] 빈 후처리기

    [Spring] 빈 후처리기

    이전에 작성했던 프록시 팩토리의 문제점을 해결하기 위해서 빈 후처리기를 사용한다고 했다. 프록시 팩토리 내용에 대해 알고싶으면 아래 링크를 참고하면 된다. https://bsssss.tistory.com/1482  빈 후처리기란 일반적으로 @Bean 이나 @Component 를 사용하면 스프링은 대상 객체를 생성하고스프링 컨테이너 내부의 빈 저장소에 등록한다. 빈 후처리기는 객체를 조작할 수도 있고, 다른 객체로 바꿔치기 하는 것도 가능하다.  빈 후처리기 - 스프링 빈 등록 과정생성 : 스프링 빈 대상이 되는 객체를 생성(@Bean, 컴포넌트 스캔 포함)전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달후 처리 작업 : 빈 후처리기는 전달된 스프링 빈 객체를 조작하거나 다른 객체로 ..

    CKA 자격증 취득을 위한 학습 방법 및 시험 팁 및 후기

    CKA 자격증 취득을 위한 학습 방법 및 시험 팁 및 후기

    자격증 취득 이유cka를 통해 얻고자 하는 것은 쿠버네티스에 대해 아는 것과, 관리자로써 어느정도 필요한 능력과 검증할 자료를 가지고자 하기 위해서 이다. 인프라 DevOps 에 관심이 있기도 해서 공부할 겸 자격증을 취득하고자 했다.   학습방법1cka 강의를 검색하면 가장 많이 추천하는 Udemy 강의 를 신청했다. 강좌 후반부에 있는 Mock Exam은 최소 2번 이상 하는 것을 추천한다. udemy 에서 연습할 수 있는 실습환경인 kubekloud 도 제공해준다.     2따배쿠 강의 유튜브 구독 or 패스트캠퍼스 강의 유데미에서 이해안가는 내용을 따배쿠에서 들으면 도움이 된다. 즐겨찾기에 대해서도 공유해준다. 근데 이제는 시험에서 즐겨찾기 기능을 사용할 수가 없다. 즐겨찾기 기능 없이 문서 내에..

    [Gradle] Gradlew 빌드 시 gradle 다운로드 속도가 느릴 때

    이미지 빌드 중 ./gradlew 실행을 위해 gradle 다운로드하는데 시간이 너무 오래걸리는 문제가 있었다. 빠를때도 있고 느릴때도 있었는데 계속 기다릴 수 없기에... 해결해보는걸로 하자. 찾아보니 종종 배포파일 다운로드가 느리다는 것 같았다. 해결 방법으로는 다운로드 받는 gradle 주소를 변경해서 진행하면 된다. 파일 위치는 gradle/wrapper/gradle-wrapper.properties 에 있고 distributionUrl 에 있는 주소를 변경해주면 된다. Downloading https://services.gradle.org/distributions/gradle-[버전]-bin.zip Downloading https://downloads.gradle.org/distributions..

    [Spring] Thread Pool - pool size설정

    Thread Pool Thread Pool 은 여러 개의 쓰레드를 유지하고 관리하기 위해 사용된다. Thread Pool 의 사이즈 쓰레드를 불필요하게 많이 만들게 되면 메모리의 낭비가 심해지고 너무 적은 수의 쓰레드를 만들게 되면 효율성이 떨어진다. 쓰레드의 개수를 고정 시키는 것보다 서비스가 실행되는 CPU의 코어 개수에 따라 유동적으로 생성할 수 있도록 해주는 것이 좋다. 많이 생성하는 것이 아니라 어떤 작업을 처리하느냐에 따라 기준이 바뀔 수 있다. CPU 처리가 많은 경우 - CPU 코어가 N개인 경우 N+1만큼의 쓰레드를 생성해주면 최적에 가까운 성능을 낼 수 있다고도 한다. I/O 작업이 많은 경우 - N*2 만큼의 쓰레드를 생성해준다.

    [Querydsl] Resolved [com.querydsl.core.types.ExpressionException ~ ]

    selet 문에 내가 원하는 값으로 리턴하기 위해 Querydsl 에서 Projections.fileds를 사용하는데 다음과 같은 에러가 발생했었다. @Override public List getMasterIdList(Long memberId) { return jpaQueryFactory.select( Projections.fields(AnswerDTO.class, answer.answerId.as("answerId"), answer.answerId.count().coalesce(0L).as("answerCount")) ) .from(answer) .where(answer.mberId.eq(memberId)) .fetch(); } Projections의 경우 생성자 기반이 아닌 필드 기반으로 가져올 때 ..

    [Git] error: The following untracked working tree files would be overwritten by checkout:

    develop 브랜치에서 다른 feature 브랜치로 checkout 하는데 다음과 같은 에러가 발생했다. error: The following untracked working tree files would be overwritten by checkout: 해결방법 추적하지 않는 파일을 제거하면 된다. # == 적용하지 않고 무엇을 해야할 지만 보고 싶을 때 == git clean -fd --dry-run # 또는 git clean -fdn # == 적용하고 싶을 때 == git clean -fd

    [Spring] Spring 3버전에 Springdoc 라이브러리를 사용해 swagger 적용하기

    Springfox가 아닌 Springdoc으로 Swgger를 사용하는 이유 이전 Spring 에서 swagger를 사용할 때 springfox를 사용했는데 springdoc 에서 제공하는 swagger를 더 선호한다고해서 사용해보았다. springdoc는 webflux도 지원하며 더 사용하기 쉽다고 한다. Springdoc 사용하기 spring boot버전에 따라서 springdoc코드를 추가한다. spring boot 3버전부터 springdoc 2버전을 사용해야지 오류가 안난다. build.gradle //swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' config 파일 Springdoc에서는 config..

    FCM(Firebase Cloud Messaging)

    FCM 사용 이유 플랫폼에 종속되지 않고 push 메시지를 사용할 수 있다. 서버를 경유해서 실시간으로 push 메시지를 받으려면 사용자는 서버에 항상 접속하고 있어야 하는데 이는 사용자의 기기의 배터리 및 네트워크 리소스를 크게 낭비한다. FCM을 사용하면 메시징 서버를 중간에 둠으로써 낮은 배터리와 적은 네트워크 사용만으로도 메시지를 실시간으로 처리할 수 있다. 또한 iOS, Andriod, Web 에 각각 push 메시지를 보내려면 각각의 환경별로 개발해야하는데 이를 하나로 통합하는 솔루션이다.     Notification Server - 모바일 기기에서 push 알림을 전송하는 서버 - FCM 사용  Client App- 사용자의 모바일 기기에 설치된 앱 - pu..