본문 바로가기

개인 공부/TIL25

TIL : @Async, @EnableAsync (24) Spring Async비동기 처리를 나타내는 @Async에는 proxy target 옵션이 존재한다.처리 모드가 프록시일 때만 설정할 수 있는 옵션인데, true라면 CGLIB로, false라면 동적 프록시로 생성한다. 두 방법 모두 프록시를 사용하므로 당연히 상속을 사용하는데, CGLIB는 subclass 기반이고 동적 프록시는 interface 기반이다.여기서 CGLIB는 바이트 코드 기반으로 생성하기 때문에 성능적으로 약간 낫다. @Async가 아닌 커스텀 어노테이션을 등록해서도 사용할 수 있다.@EnableAsync 속성에 annotation 필드가 바로 이 옵션이다. 비동기를 사용하기 앞서 thread pool의 사이즈, queue 사이즈를 정해서 하나의 Executor를 빈으로 등록한다.poo.. 2024. 6. 12.
TIL : gradle-build-action (짧) 🏃‍♂️ Github Action 이번에 CI를 작성하면서 시간이 생각보다 더 걸려서 gradle을 캐싱해야 하는 일이 생겼다. 처음에는 "CI를 굳이 어렵게 가야하나? 적당히 긁어와서 쓰자"라는 생각으로 다음 코드를 붙여서 사용했다. - name: Gradle Caching uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- 근데 뭔가 시간적으로 개선이 안되는 것 같아서 "다른 방법이 없을.. 2023. 10. 27.
TIL : import문이 빨갛게 되고 import가 안되는 문제 고치기 (IntelliJ) (23) 🏛️ IntelliJ 가끔 인텔리제이를 사용하다가 import문이 고장 나는 경우가 있습니다. 다음과 같이 말이죠 🥹🥹 어김없이 구글링을 통해서 해결하려고 신나게 찾아다녔습니다. 다행히도 결과는 많았습니다. 캐시도 비워보고, JDK도 확인해보고 프로젝트도 리빌드를 해보았지만 어떤 방법도 통하지 않았습니다. 🥹🥹 한참을 뻘짓하다가 기능을 하나 찾았습니다! 다행히도 IDE 자체에서 고장을 고치는 기능이 있었습니다. File > Repair IDE 탭에서 찾을 수 있는 기능입니다. 😎😎 저같은 문제를 겪으신 분이 있다면 이 기능을 한번 꼭 써보시기 바랍니다 ㅎㅎ😋😋 😋 지극히 개인적인 블로그지만 훈수와 조언은 제 성장에 도움이 됩니다 😋 2023. 6. 21.
TIL : Bean 컨테이너와 ComponentScan (22) 🎛️ ApplicationContext 스프링에서 핵심인 ApplicationContext는 Bean을 관리해준다. 싱글톤 레파지토리로도 불리는데 Bean을 싱글톤으로 관리해주기 때문이다. 우리가 작성한 설정 정보를 적용시키려면 @Configuration을 붙여준다. 여기에 싱글톤의 비밀이 들어있다. 설정 정보는 우리가 작성한 순수 자바 클래스가 빈으로 등록되는 것이 아니다. 작성한 자바 클래스를 상속받는 임의의 다른 클래스를 만들고 빈으로 등록한다. 여기서는 CGLIB라는 바이트코드 조작 라이브러리를 사용한다. CGLIB 라이브러리가 내부적으로 어떻게 구현되었는지는 모르겠지만, 빈이 존재하면 기존 인스턴스를 반환하고 아니라면 생성할 수 있도록하는 클래스로 변환될 것이다. 따라서 @Configuratio.. 2023. 5. 17.
TIL : 위상정렬 알고리즘 (21) 💻 알고리즘 📌 위상정렬 알고리즘 Cycle이 없는 방향 그래프에서 작업 순서를 구하는 알고리즘이다. 이전에 공부한 적 있으나 기록을 남겨두지 않아서 남겨두려고 한다. 💡 특징 순환하지 않는 방향 그래프에서만 가능하다. 진입 차수 (in-degree) 또는 진출 차수 (out-degree)를 이용한다. 여러 개의 답이 존재할 수 있다 O(V+E)의 시간 복잡도를 가진다. 💡 동작 원리 (진입차수 ver) 진입 차수가 0인 정점을 큐에 넣는다. 큐에서 원소를 꺼내 연결된 간선을 제거한다. 진입 차수가 0이라면 해당 정점을 큐에 삽입한다. 마지막에 Cycle의 존재 유무를 확인한다. 결과의 크기가 정점의 개수보다 작다면 Cycle이 존재하는 것이다. from collections import deque de.. 2023. 3. 3.
TIL : @PathVariable vs @RequestParam (20) 🌞 Spring Spring에서 URI로 전달되는 값을 받아오는 방법이 두 가지 존재한다. id가 1인 게시글을 가져올 때 다음과 같이 표현할 수 있다. GET http://xxx.xxx.xxx/api/post?id=1 // query parameter GET http://xxx.xxx.xxx/api/post/1 // path variable 딱 보면 다른데 자세하게 어떤 차이가 있는지 알아보자! 🌀RequestParam GET http://xxx.xxx.xxx/api/post?id=1 이렇게 URI에 쿼리가 들어가는 방식일 때 사용하는 어노테이션이다. 일반적으로 Http GET Method에서 많이 사용한다. 조금 더 자세하게 들어가면 다음 4가지 경우로 많이 사용한다. 1️⃣ Searching @Ge.. 2023. 1. 10.