전체 글
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJwkHp%2FbtsJ08TZov3%2FVn7rMrK72MEkJ7qCpCtHaK%2Fimg.png)
[Spring] RestClient 에서 Okhttp3 라이브러리를 사용할 때 주의할 점
이 글은 실무에서 겪은 이슈의 원인과 해결, 문제 분석을 회고 형식으로 작성한 글입니다. 결론만 보아도 무방합니다! 1. 개요 (문제 상황)사내에서 스프링 부트 버전을 3.2.3 으로 업그레이드를 하면서 HTTP 클라이언트로 RestClient 를 도입하기로 했습니다. RestClient 는 스프링 부트 3.2.x 버전부터 사용할 수 있으며 RestTemplate 을 더이상 유지보수 하지 않게 되면서 스프링 진영에서 권장하고 있는 HTTP 클라이언트 입니다. WebClient 도 있긴 하지만 따로 spring-cloud 의존성을 추가해야 하기 때문에 후보에서 제외되었습니다. 잠깐 RestClient 의 장점에 대해서 설명하자면 fluent 한 API 를 제공하고 체이닝 메서드를 제공하기 때문에 가독성이..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTWb1g%2FbtsJETCjO52%2FAXzQKeU30GnPZtku634GFK%2Fimg.png)
삶의 지도
해당 글은 글또 10기를 지원하면서 작성한 삶의 지도입니다. 딱히 하고싶은게 없어서 정보통신과를 왔어요 학창시절의 저는 딱히 하고싶은게 없고 친구들과 놀기를 좋아하는 어른들앞에선 조용한 그런아이였습니다. 부모님이 성적에 크게 관심을 가지지도 않았고 그런저런 성적에 맞춰서 전문대 정보통신과에 진학했습니다. 간단히 말하면 소프트웨어 / 전기공학 반반을 다루는 과였어요. 그러던 중 학교에서 어떤 기업과 연계하여 소프트웨어 부트캠프를 진행했는데 또 재밌어보이는건 무작정 도전해보는 성격이라 지원했고 합격 후 학교앞에서 자취하면서 낮에는 부트캠프, 밤에는 야간으로 수업을 들으면서 공부했어요. 자바 스프링으로 웹서버를 만드는 프로젝트를 진행했는데 자연스레 학교 성적도 좋아지더라구요. 그 때부터 프로그래밍에 흥미가 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO02n3%2FbtsJClUjUYp%2Fh296HztkgKXn5MjhceHKG0%2Fimg.png)
[Spring] @Async 애노테이션에서 커스텀 스레드풀 이름을 설정해줬을 때 따로 빈으로 등록하지않아도 스프링컨테이너가 구동된다구??
1. 발단별도의 커스텀 스레드풀을 빈으로 등록해주지 않고 @Async("customThreadPoolExecutor") 를 메서드에 붙여주고 스프링 컨테이너를 실행했을 때 당연히 빈을 못찾아서 실행부터 오류가 날거라고 생각했다.@Servicepublic class MyService { @Async("customTaskExecutor") public void performAsyncTask() { // 비즈니스 로직 System.out.println("비동기 작업 실행: " + Thread.currentThread().getName()); }}하지만 스프링 컨테이너는 잘 실행되었고 해당 기능을 호출하기 전까지 아무런 문제없이 구동되고 있었다.그리고 해당 기능이 호출되..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7Fz8%2FbtsHSzZ8c0A%2FyK4aLtjaPCKvrSTcTNANbK%2Fimg.png)
[spring-authorzaiton-server] RegisteredClient를 JPA 로 구현하기
1. Spring Authorization Server 의 Core Model 을 알아보자 1) RegisteredClient인가 서버에 등록된 클라이언트를 의미한다.OAuth2.0 또는 OAuth2.1 을 통해 인증 및 권한 부여를 요청하는 클라이언트를 구성하는데 사용된다.예를 들어, 클라이언트가 authorization_code 또는 client_credentials 와 같은 권한 부여 흐름을 시작하려면 먼저 클라이언트를 권한 부여 서버에 등록해야한다.클라이언트 등록시 클라이언트는 고유한 client_id, client_secret 및 고유한 클라이언트 식별자와 연결된 메타 데이터를 할당한다.클라이언트의 주요 목적은 보호된 리소스에 대한 액세스를 요청하는 것으로 클라이언트는 먼저 권한 부여 서버를 인..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwqerW%2FbtsF3dRmhqu%2Fcj3CTByRNTmfEGgR8kXKV0%2Fimg.png)
[Spring Boot 3.2 마이그레이션] @TransactionalEventListener 사용시 트랜잭션을 분리하고 싶다면 반드시 전파속성을 명시해라!
문제Spring Boot 2.7 에서 3.2.3 로 마이그레이션을 하던 중 아래와 같은 에러가 발생했다. 원인에러 내용을 읽어보면 @TransactionalEventListener 가 쓰인 곳에서 @Transactional 을 사용하려면 반드시 REQUIRES_NEW 또는 NOT_SUPPORTED 전파속성을 명시해야 한다고 한다.에러가 발생한 코드는 스프링 이벤트 리스너를 사용하면서 커밋된 후 이벤트를 발생시키기 위해서(관심사와 비관심사 로직을 분리하기 위해)@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) 을 사용했고 이 트랜잭션과 분리하여 새 트랜잭션에서 커밋을 발생시키기 위해 @Transactional 을 같이 사용하였다. @T..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEoYd%2FbtsF0b2eGjr%2Fct4ig2odOsjk6p608nKzaK%2Fimg.png)
[Spring Boot 3.2 마이그레이션] hibernate @Type, @TypeDef deprecated
개요 postgresql 에서 jsonb 타입으로 데이터를 저장하고 있었다. spring boot 2.7.6 버전을 사용중이었고 spring boot 3.2.3 로 버전업을 하게 되면서 @Type, @TypeDef 가 deprecated 되었다. 해결 @JdbcTypeCode(SqlTypes.JSON) 또는 AttributeConverter 를 새로 만들어주면 된다는데 postgresql 에서는 dependency 만 새로 바꿔주면 된다! https://github.com/vladmihalcea/hypersistence-utils GitHub - vladmihalcea/hypersistence-utils: The Hypersistence Utils library (previously known as Hi..