본문 바로가기

Spring30

Spring Boot Batch 프로젝트에서 Webclient 사용시 주의점 오늘은 Spring Boot Batch 프로젝트에 Webclient 의존성을 추가하면서 발생한 이슈를 기록하고자 합니다. 이벤트 관련  Spring Boot Batch 비즈니스 로직을 작성하며 기술적 부채였던 RestTemplate을 더이상 사용하지 않고 점진적으로 Webclient로 교체해나가기 의존성을 추가하기로 결정하였습니다. implementation 'org.springframework.boot:spring-boot-starter-webflux' Webclient를 사용하기 위해서는 Webflux의존성을 추가하였는데 웬걸?  Spring Boot Batch는 일괄작업만 하고 종료되기에 특별히 Web 요청을 받을 필요가 Spring Boot 기본적으로 추가되어 있는 임베디드 톰캣의존성을 제거하였는.. 2024. 12. 5.
Spring Framework ResponseEntity 사용에 대한 고찰 현업에서 Spring Framework로 Rest Api서버를 구현하다보면 ReponseEntity를 자주 보게됩니다. Spring Framework Rest Api를 처음 공부할때는 ResponseEntity를 사용하지않고 대부분 Java 객체를 직접 응답하였는데 현업에서 기존에 있던 코드들을 확인해보니 ResponseEntity를 사용하여 Java 객체를 응답하는 형식으로 대부분 구성되어 있었습니다. 일반적으로 Java 객체를 응답해도 HTTP 프로토콜형식에 맞게 응답이 잘 되었는데 ResponseEntity를 사용하면 혹시나 내가 모르는 다른 차이점이 있나해서 눈으로 직접 확인해보기로 했습니다. @PostMapping public ResponseEntity requestOrder(@RequestBo.. 2024. 11. 17.
스프링 서버가 우아하게 죽는법 "Graceful Shutdown" 제가 속해있던 회사에서는 백엔드 어플레이케이션 서버는 Spring Framework를 사용했었고 Github marster 브렌치 머지 -> Github Action -> Aws ecr -> Aws ecs -> Aws ec2 CI/CD환경으로 구성되어 있었습니다. 다만 ec2에 새롭게 업데이트된 버전으로 docker container를 시작 시킬때는 꼭 ecs를 통해 자동으로 실행하는것이 아닌 개발자가 직접 베스찬 서버를 통해 프라이빗 네트워크의 ec2 하나하나 직접 접근하여 무중단 배포 롤링 방식으로 서버를 리스타트하는 정책으로 진행했었습니다. 추후 블루/그린, 카나리까지 염두하고 있었지만, 아직 서비스가 많이 크지 않았기 때문에 크게 문제 되는 배포 방식은 아녔습니다. 개발자로 첫 업무를 시작한 지 .. 2024. 9. 10.
섹션 8-1 [외부 설정을 이용한 자동 구성] Enviroment 추상화와 프로퍼티 Enviroment 추상화와 프로퍼티스프링 부트는 외부 설정 정보를 이용해서 생성된 빈 오브젝트의 프로퍼티값을 수정할 수 있습니다.대부분 자동 구성에 의해서 만들어지는 빈 오브젝트는 대부분 디폴트값이 들어가 있습니다. 예시로 스프링 부트의 톰켓 포트번호를 지정하지 않아도 8080포트로 서블릿이 설정되는 부분이 있습니다.서블릿을 구성할때 직접 톰캣 구성정보를 등록하여 커스텀 빈 등록을 하여 사용할 수도 있지만 기술적으로 여러 지식이 필요한 기술 빈들이 존재하여 한두가지 설정을 변경하기 위해 직접 커스텀빈으로 생성하는 작업을 직접 작상한다는 것은 오류가 발생할 여기도 있고 굉장히 번거로운 일입니다.따라서 Spring boot는 Spring boot가 제공하는 자동 구성 Configuration클래스에 다양한.. 2024. 7. 26.
PostMan으로 gRPC요청 하기 최근에 gRPC를 통한 서버간 통신을 구현해보기 위해 Spring Boot로 gRPC서버를 구현해 보았습니다.일반적으로 http 프로토콜을 통한 Rest Api를 테스트할때는 여러 방법이 있지만 그중 많이 사용한 툴은 PostMan인데 gRPC또한 PostMan으로 테스트가 가능하더군요. 그래서 오늘은 간략하게 PostMan을 통한 gRPC통신을 하는 방법을 공유해볼까 합니다. application.ymlgrpc:  server:    port: 5043먼저 Spring Boot  gRPC 서버 환경은 다음과 같습니다. gRPC 프로토콜 포트는 5043입니다.delivery.protosyntax = "proto3";option java_multiple_files = true;option java_pack.. 2024. 7. 1.
섹션 7-5 [조건부 자동구성] 자동 구성 정보 대체하기 자동 구성 정보 대체하기Spring Boot애플리케이션 구성 정보를 작성하는 방식은 크게 두 가지 나뉘어진다는 부분을 우리는 이전 공부한 내용을 토대로 이해할 수 있습니다.애플리케이션 로직을 담당하는 빈들을 사용자 구성 정보 방식으로 등록을 하고 주로 컴포넌트 스캔에 의해서 등록을 시킵니다.  일정한 패키지에 빈 클래스들을 등록합니다. 그리고 주로 기술과 관련된 빈들은 스프링 부트의 자동 구성 동작 방식에 의해서 말 그대로 자동으로 등록되게 구성합니다.이러한 이점을 통해 우리는 기존 스프링 프레임워크의 자율성으로 인해 환경을 구성하는데까지 너무나 많은 기술들을 결정하여 설정 했어야 하는 것에 비해 스프링 부트는 여러 개발자들에 의해 결정되고 노하우를 통해 정한 기술들을 미리 정의 하여 빠르게 스프링 프레.. 2024. 6. 27.