728x90
728x90
Virtual Thread란…? JDK 21에 새롭게 들어온 개념 (2023.09.19 에 LTS 출시) gradle 8.4v 부터 지원 kotlin v1.9.20 부터 21 바이트 코드 지원 Spring 6.1, Spring boot 3.2 부터 지원 Jetbrain Intellij 2023.3 JDK 21(LTS)에 추가된 경량 스레드, OS 스레드를 그대로 사용하지 않고 JVM 내부 스케줄링을 통해서 수십만 ~ 수백만개의 스레드를 동시에 사용할 수 있게한다. 전통적인 Java의 Thread Java의 Thread는 OS Thread를 랩핑한 것 (Platform Thread) Java 애플리케이션에서 Thread를 사용하면 실제로 OS Thread를 사용한 것 OS Thread는 생성 갯수가 제한적..
Go에 대해서 아예 무지한 상태로 해당 책을 접하게되었다. 평소 다른 언어를 찍먹해보고 싶은 욕구가 가득하던 찰나에 서평의 기회가 찾아와서 책을 간단히 리뷰해본다. 항상 어떤 새로운 언어를 배울 때는 그 언어가 어떤 목적을 가지고 탄생했는지가 늘 궁금해진다. 나뿐만 아니라 다른 사람들도 똑같지 않을까하는 생각에 1장만 간단하게 요약해려고한다. 😃 Go가 탄생한 이유 Go의 탄생이유는 Go at Google에서 확인할 수 있고 개발 배경은 'Why did you create a new language?'에 있다. 2007년 구글이 개발한 프로그래밍 언어인 Go는 당시 구글이 겪던 아래의 문제들을 해결하기위해 탄생했다. 수십 분, 수 시간이 걸리는 빌드 동일한 내용의 표현 방법이 프로그래머마다 달라서 생기는..
2023년의 시작은 너무 슬프고 한편으로는 회사라는 존재에 대해서 많은 생각을 하게했던 사건을 겪게된 시기이다. 회사는 그대로이다. 하지만 큰 변화가 있었는데 그 변화는 함께 회사의 성장을 위해 함께 치열하게 고군분투했던 많은 동료들을 떠나보내게된 것이다. 경제를 잘 알지는 못하지만 2022년 하반기부터 닥쳐온 세계적인 경제위기로 투자시장이 얼어붙게되고 스타트업이었던 우리 회사도 그 영향 탓에 자금 조달을 하지 못했다. 꾸준히 적자를 내왔던 우리 회사는 자연스럽게 인건비라는 고정비를 줄이는 선택을 하게되었다. 아무런 언질도 없이 갑작스럽게 진행된 구조조정은 떠나는 구성원과 남게된 구성원 모두를 혼란스럽게했다. 1) 살아남았다. 결과적으로 나는 운이 좋게도 회사에 남을 수 있게 되었다. 이제 막 2년차로..
물리치료 스터디에 도움이될만한 사이드 프로젝트를 진행하고있다. 프로젝트는 SpringBoot 3.x + Kotlin 1.8.22 버전을 사용하고있다. 해당 프로젝트의 MVP는 프론트 혹은 앱과 같은 클라이언트의 리소스를 들이지 않고, 오로지 Slack API와 통신하며 쓸 수 있는 애플리케이션을 만드는 것이다. 슬랙 API(= 외부 API)를 사용해야했는데, 이런 Http 클라이언트를 무엇을 쓸지 고민해보다가, Netflix의 Feign 클라이언트가 사용성이 좋았던 기억이 있어서, Feign 클라이언트로 셋티을 했다. 그런데 셋팅을 분명 잘한 것 같은데, 아래와 같은 에러가 계속해서 떳다. Consider defining a bean of type 'org.springframework.cloud.open..
ECS를 선택한 이유 최근에 물리치료 스터디를 진행하고있다. 이 스터디를 원활하게 도와줄 수 있는 서비스를 만들고 싶어져서 개인적인 토이프로젝트를 진행하고있다. 엄밀한 의미의 CI / CD는 아니지만 코드가 main 브랜치에 푸쉬됐을 때, 자동으로 배포되는 환경은 만들어두고 싶어 서버 인프라를 구성하게 되었다. 고전적인 방식으로 EC2 인스턴스를 띄워두고 배포 쉘 스크립트를 작성하여 깃 웹훅을 통해서 메인 브랜치에 푸쉬가 발생했을 때, 쉘 스크립트가 실행되도록 트리거를 방식도 있고 또 Jenkins나 CodeDeploy 툴을 이용한 방식도 있지만 전자처럼 직접 EC2 인스턴스로 접속하여 리눅스환경에서의 작업(리눅스도 공부를 하기는 해야할거 같은데 언제하지... 🫠)을 하는 것이 싫었고 후자는 배포를 위한..
이 해결법을 모르는 것은 아니지만 이 현상을 자주 맞이하는게 아니다보니, 늘 쓰는방식만쓰고 지나갔던 기억이 있다. 이번 기회에 정리해두고 똑같은 상황을 맞이했을 때 조금 더 현명(?)하게 대처할 수 있도록 기록을 남긴다. 총 3가지 예외 해결방법이 있다. @Autowired 필드명 매칭 @Qualifier -> @Qualifier끼리 매칭 (Bean 이름 매칭) @Primary 1. @Autowired 필드명 매칭 Autowired는 우선적으로 타입 매칭을 시도하고 타입이 매칭되는 빈이 여러개라면 이름(파라미터 이름)으로 빈 이름을 매핑한다. (필드명 매칭은 타입 매칭 결과가 1개뿐이라면 발생하지 않는다) @Autowired private FooComponent foo; // FooComponent 타입..