Spring
[Spring] Webflux + RSocket, React 사용한 전체 채팅 구현
Webflux에서 RSocket을 사용하여 전체 채팅을 구현해보자. build.gradle 의존성은 다음과 같이 추가했다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-rsocket' implementation 'org.springframework.boot:spring-boot-starter-webflux' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org...
[Spring] SpringBoot K6 + Grafana 부하 테스트 및 모니터링
SpringBoot 프로젝트에 K6 + Grafana + InfluxDB를 사용해서 부하 테스트와 성능 테스트를 진행해보겠다. 1. k6 설치cmd 창에 다음을 입력한다.window가 아닌 다른 환경이라면 여기를 참고하면 된다.choco install k6 동작 확인을 위해 프로젝트 root 폴더 하위에 scripts폴더를 만들어 sample.js 파일을 생성해서 다음 코드를 작성해주었다.Http Get 메서드를 사용하여 해당 url로 요청을 보낸다. 해당 코드는 공식 문서에 있는 sample 코드이다.import http from 'k6/http';import { sleep } from 'k6';export default function () { http.get('https://test.k6.i..
[Spring] Jacoco 적용하여 코드 커버리지 확인 및 Codecov사용한 PR에 커버리지 코멘트 추가
프로젝트에 Jacoco를 적용해서 테스트 커버리지를 확인해보자. 그리고 나서 git actions와 codecov를 사용하여 PR에 커버리지 코멘트를 달아보자. 1. build.gradle 설정 plugins { // ... id 'jacoco' //추가 } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } jacoco { toolVersion = "0.8.8" //추가: 버전 명시 } dependencies { //생략 } tasks.named..
[Spring] SpringBoot Prometheus, Grafana를 사용한 모니터링(Feat. Docker)
1. 의존성 추가 Spring Boot Actuator를 활성화하여 모니터링/관리할 수 있는 엔드포인트에 접속 할 수 있도록 해준다. implementation 'org.springframework.boot:spring-boot-starter-actuator' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' 프로젝트를 실행하고, 다음 경로에 접속하자. http://localhost:8080/actuator 8080 부분에는 본인 프로젝트의 서버 포트를 입력해주면 된다. 접속하면 다음과 같은 창이 뜬다. Actuator가 현재 제공하는 엔드포인트를 확인할 수 있다. 2. application.yml 설정 actuator의 prometheus 엔드포인..
[Spring] Spring WebFlux 간단한 예제
Spring WebFlux를 이용하여 간단하게 상품 등록/삭제, 카트에 상품 담기/삭제 기능을 구현해보도록 하겠다. 1. 프로젝트 생성 2. 환경 구성 build.bradle 에 다음 dependency를 추가해준다. implementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo:3.3.0' implementation 'org.mongodb:mongodb-driver-sync' testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo:3.3.0' 프로젝트 구조는 다음과 같다. 3. 코드 Cart.java @Getter @Setter @ToString @NoArgsConstructor @AllArg..
[Spring] @RequestParam으로 Enum 타입 매개변수 받기
@RequestParam으로 입력받은 String 문자열을 enum 타입으로 바꿔 사용할 수도 있지만, 매번 String 문자열을 enum 타입으로 바꾸지 않고, CustomConverter를 만들어 문자열을 enum 타입으로 변환할 수 있다. Category @Getter public enum Category { FashionStuff("FashionStuff"), HomeLiving("HomeLiving"), TechEletrics("TechEletrics"), Beauty("Beauty"), Food("Food"), LeisureSports("LeisureSports"); private String categoryName; Category(String category) { this.categoryN..
[Spring] @RequestPart 사용하여 MultipartFile과 Dto 함께 받기, Postman 테스트
글을 작성한다고 할때, 제목, 내용을 작성할 수 있다면 다음과 같이 Controller와 dto클래스를 작성할 수 있을 것이다. @PostMapping("/post") public ResponseDto savePost(@Valid @RequestBody PostRequestDto postRequestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) { return postService.savePost(postRequestDto, userDetails.getMember()); } @Getter public class PostRequestDto { private String title; private String content; } PostMan으로 요..