본문 바로가기
반응형

전체 글341

Spring Camp 2024 후기 😎 참가 신청 2024년 5월 25일, KSUG가 주관하는 스프링 캠프 컨퍼런스에 다녀왔다. 매년 인기가 좋은 컨퍼런스인지 작년만 해도 1분도 안되어 참가 신청이 매진되었다고 한다. 작년에는 나 역시 선착순에서 떨어졌었으나, 올해는 알람을 맞춰두고 대기한 덕에 신청 성공하였다.   🥸 세션을 듣고 세션을 듣고 생각하거나 느낀 점을 간단히 정리한다. 실제 세션 내용은 KSUG 측에서 3개월 후에 영상을 공개한다고 하니 해당 영상을 참고하길 바란다. 01 동시성의 미래 - 코루틴과 버츄얼 스레드 (이상훈님)전통적인 웹과 jvm에서 스레드를 어떻게 다뤘는지부터 시작해, 코루틴이 스레드를 어떻게 다루는지, 버츄얼 스레드에 와서는 스레드를 어떻게 다루는지 바뀌었는지에 설명한다. 여러 상황을 가정하시면서 성능 .. 2024. 5. 25.
[Reactor] 서버 느리게 만드는 API 개발하기 (feat: block) 1. 엉망진창 시작 🤯 Reactor에 대해서 'WebFlux는 비동기 프로그래밍할 때 쓴다', 'Mono는 단일 요소, Flux는 여러 요소' 이 두 가지 외에는 아무것도 모르는 상태에서 로직을 작성해야 했다. WebFlux의 기본 문법을 공부하는 중이긴 했지만, 학습 속도보다 업무 진행이 훨씬 급했다. 무작정 코드를 작성하니 어떻게든 내가 원하는 결과가 만들어졌다. 베타 서버 데이터를 이용한 테스트도 완료했다. 성공 케이스, 실패 케이스, 에러 케이스 모두 예상한대로 돌아갔다. 며칠 뒤, 퇴근했다가 갑자기 베타 서버가 이상하다는 슬랙이 온다.😭  2. 문제의 코드 😵 자세한 비즈니스 로직을 생략하기 위해 조금 억지스러운 예제를 가져왔다. 상품을 조회할 때, 상품을 판매하는 판매사명이 "test".. 2024. 5. 6.
[Spring] ReactiveCrudRepository를 이용한 삭제 시 주의점 😟 문제 상황 찜을 삭제하고 별도의 작업을 위해 event publish 하는 로직을 작성하였다.fun remove(favorite: Favorite): Mono = favoriteRepository.deleteById(favorite.id) .flatMap { productService.findById(favorite.productId) } // event publish할 때 필요한 데이터 조회 .flatMap { product -> val favoriteRequest = toFavoriteEventRequest(favorite, product) Mono.fromCallable { favoriteEventPublisher.publ.. 2024. 4. 28.
[책 후기] 도둑맞은 집중력 저자: 요한 하리 출판사: 어크로스 책 링크: https://product.kyobobook.co.kr/detail/S000201621022 1. 읽게 된 계기 오늘 후기를 작성하는 책은 IT 서적은 아니다. 서점에서 베스트셀러라고 자주 홍보하는 책인데 몇 가지 기억에 남는 부분을 기록하고 싶어서 이 글을 적기 시작했다. 나는 서점에서 책 구경하기를 좋아한다. 이 책을 구매하던 날에도 별생각 없이 교보문고를 거닐며 책을 구경하고 있었다. SNS에서도 몇 번 봤던 책이 서점 내 눈에 가장 잘 보이는 베스트셀러 코너에 들어와 있으니 호기심이 동했다. 요즘 정신이 산만하다고 느끼던 차에 이걸 읽으면 집중력을 되찾을 방법에 대해 알 수 있을까? 핸드폰을 멀리해라~라는 뻔한 말 말고 내가 모르는 다른 이야기도 있.. 2024. 4. 21.
[Reactor] zip vs zipWith vs zipWhen 💡 zip() 여러개의 Publisher를 인자로 넘기고, 이 모든 Publisher들의 결과를 한 묶음으로 조회할 수 있다. Publisher를 최대 8개까지 넘길 수 있다. 예외나 빈값이 발견되면 즉시 에러/완료 처리된다. Flux userFluxFromStringFlux( Flux usernameFlux, Flux firstNameFlux, Flux lastNameFlux ) { return Flux.zip(usernameFlux, firstNameFlux, lastNameFlux) .map(it -> new User(it.getT1(),it.getT2(),it.getT3())); // 아래와 같이 각 결과에 이름을 붙일 수 있다. // .map((username, firstName, lastNam.. 2024. 4. 7.
무기력을 흘려보내는 이야기 목차1. 무기력이 찾아온 이야기2. 무기력을 받아들이는 이야기3. 무기력을 흘려보내는 이야기4. 마무리하는 이야기   1. 무기력이 찾아온 이야기 작년 말에 회고글(1년 차 개발자의 2023 회고)을 작성하며 열정을 불태우며 목표를 세우던 게 엊그제 같은데, 무기력증이 찾아왔다. 번아웃이 온 거냐고 묻느냐면 그것과는 다르다. 번아웃은 보통 열심히 산 사람이 모든 열정을 소모해 버린 뒤 극도한 피로감이 찾아오는 것을 의미하지 않는가? 지금의 내 상황과는 조금 달랐다. 주변 환경이 많이 변했고, 그로 인해 어떤 목표들은 이룰 수 없거나 이룰 필요가 없는 것이 되어버렸다. 목표가 사라짐에 따라 나의 열정은 갈 곳을 잃었고, 그 자리에는 무기력으로 채워졌다. 어떤 일이 있었는지 조금 더 자세히 풀어보고자 한다... 2024. 3. 31.
[Java] compiler message file broken 에러 compiler message file broken: key=compiler.misc.msg.bug arguments=11.0.13, {1}, {2}, {3}, {4}, {5}, {6}, {7} java.lang.AssertionError: Incorrect number of arguments; expected 4, found 0 에러 에러 발생 코드 에러가 발생한 코드를 살펴보자면 아래와 같다. REST API 호출 시 발생하는 예외를 executeApi() 메서드를 통해 공통적으로 처리했다. 이 코드 중에서 ParameterizedTypeReference(){} 부분에서 에러가 발생했다. @Slf4j @RequiredArgsConstructor @Service public class AuthUserA.. 2024. 3. 17.
[SpringDoc] 쿼리 파라미터가 이상하다? SpringFox에서 SpringDoc으로 마이그레이션하던 와중, 몇가지 이슈가 발생했다. (참고글: [SpringDoc] SpringFox -> SpringDoc 마이그레이션 일지) 그 중에서도 쿼리 파라미터와 관련된 이슈들을 해당 글에서 정리해보고자 한다. ❓ Swagger에서 @ModelAttribute request를 json 형태로 받는 현상 스프링에서 @ModelAttribute를 이용하면 쿼리 파라미터 목록을 DTO로 받을 수 있다. 이때 SpringFox에서는 아래와 같이 필드 하나하나를 따로 입력받을 수 있었다. 하지만 SpringDoc에서는 아래와 같이 json 형태로 입력하도록 변경되었다. 쿼리 파라미터를 따로 입력하고 싶다는 요구사항이 들어와서 방법을 고민하게 되었다. 💡 해결방법.. 2024. 2. 18.
[SpringDoc] 우리 enum이 달라졌어요 SpringFox에서 SpringDoc으로 마이그레이션 하던 와중, 몇 가지 이슈가 발생했다. (참고글: [SpringDoc] SpringFox -> SpringDoc 마이그레이션 일지) 그중에서도 enum과 관련된 이슈가 많았는데, 어떤 이슈가 발생했고 어떻게 해결했는지 그 방법에 대해 공유하고자 한다. 이모티콘 설명 - ❓ 이슈 - ✅ 선택한 방법 - ⬜️ 선택되지 않은 방법 ❓ name()이 아닌 toString() 값이 노출되는 현상 SpringFox에서 SpringDoc으로 전환하자, enum 타입의 필드들이 이상한 형태로 조회되었다. 예를 들어, 아래와 같이 Color라는 enum이 있다고 가정해 보자. @ToString public enum Color { ORANGE("red", "yello.. 2024. 1. 28.
반응형