코틀린으로 만들어진 스프링부트 프로젝트에서 jacoco를 추가하는 방법을 알아보자. 1. JaCoCo란?JaCoCo(Java Code Coverage)는 자바 프로그램의 코드 커버리지를 측정하기 위한 오픈 소스 도구이다. 코드 커버리지는 테스트가 코드의 몇 퍼센트를 실행하는지를 측정하는 지표이다. JaCoco로 다음과 같은 작업을 수행할 수 있다. 코드 커버리지 분석JaCoCo는 어떤 코드가 테스트되었는지, 어떤 코드가 테스트되지 않았는지를 보여준다. 이를 통해 테스트가 부족한 부분을 찾아낼 수 있다. 리포트 생성JaCoCo는 HTML, XML, CSV 등 다양한 형식의 리포트를 생성하여 커버리지 결과를 시각적으로 제공한다. CI/CD 통합JaCoCo는 Jenkins, GitLab CI/CD 등 다양..
SpringBoot로 개발한 API를 React에서 호출하려면 CORS 설정을 해줘야 한다. (React, SpringBoot 모두 설정해주어야 하는 것으로 알고있다.) 프론트 개발자분이 이거 CORS 오류가 떠요! 하면 어떻게 해결할 수 있는지 알아보자. 🤔 1. CORS란? 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 웹 보안의 핵심 개념 중 하나로, 다른 출처의 리소스에 대한 접근을 허용하는 메커니즘이다. "출처"는 프로토콜, 도메인(또는 IP 주소), 그리고 포트 번호의 조합으로 정의된다. 예를 들어, https://example.com은 https://another.com 또는 http://example.com:8080 (프로토콜, 도메인, 포트 중..
프로젝트를 진행하며, 이때까지 jar 파일을 로컬에서 빌드하고 scp를 이용하여 jar 파일을 배포 서버에 올리고 nohup java -jar jar파일명.jar & 명령어로 배포를 진행하였다. 하지만.. 이렇게 해서는 안된다는 것을 알고 있었기에, 이번에는 CI/CD 까지는 아니더라도 (지식이 부족해서...........) 다음과 같은 목표를 가지게 되었다. 우분투에 깃 원격저장소를 연결하고 pull 받은 후 script를 사용하여 기존에 돌아가던 jar 파일을 멈추고 pull 받은 상태의 프로젝트를 새로 빌드 후 실행시키는 것! 크게 깃 설치 및 레포 연결, 쉘 스크립트 부분으로 나눌 수 있다. 01. Ubuntu에 Git 설치 1. 깃 설치 sudo apt install git 2. 레포를 저장할 ..
지난 글에 이어서 이번에는 엔티티를 Dto로 변환하여 응답을 내려주는 것을 할 것이다. 01. 코드 작성 다음과 ordersV2 를 작성한다. @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAllByString(new OrderSearch()); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) // order를 dto로 변환함 .collect(Collectors.toList()); return result; } @Data static class SimpleOrderDto { private Long orderId; pr..
API 개발 고급 에서는 주문 + 배송정보 + 회원을 조회하는 API를 만들 것이다. 지연 로딩 때문에 발생하는 성능 문제를 해결하는 것이 목표이다. Order - Member 는 ManyToOne, Order - Delivery 는 OneToOne 이다. 여기에서는 @XToOne에 대한 성능 최적화를 위한 과정을 진행한다. Order - OrderItem은 OneToMany이며 Collection 형태로, 나중에 진행한다. 00. 컨트롤러 작성 요청을 받아 처리할 컨트롤러를 작성하자. @RestController로 Json 형태로 객체 데이터를 반환함을 명시한다. @RequiredArgsConstructor 로 final 필드인 orderRepository를 주입받는다. @RestController @..
요구사항 지난번에는 ConstraintViolationException이 발생했을 때 응답을 커스터마이징 했다. 하지만 Exception은 하나의 애플리케이션에서 여러 개가 발생할 수 있다. 이 때 마다 응답 형식이 다르면 일관성이 없어보일 수 있지 않을까? 라는 생각을 했다. 그래서 이번에는 Exception에 대한 응답 형식을 만들고, 해당 형식에 맞게 응답을 반환하는 것을 구현하고자 한다. 구현 먼저, global 패키지의 exception 패키지에 enum 타입인 ErrorCode를 작성한다. ErrorCode에는 세 개의 속성이 있는데, code는 오류 코드를 식별하는 문자열로, message는 응답에 포함되는 오류 메시지, status는 HTTP 응답에서 사용될 상태 코드이다. package ..
요구사항 프론트에서 받은 값을 백엔드에서 처리할 때, 값이 비어있는 경우에 대한 검증을 하고 오류 메세지를 응답으로 내려주고자 한다. 다음과 같은 코드가 있다. api/account/check-id?id=thisIsId 경로로 요청이 들어오면 응답으로 불린 타입을 리턴해 주는 Controller 를 작성한 것이다. package kr.go.data.member.controller; import jakarta.validation.constraints.NotEmpty; import kr.go.data.member.service.MemberServiceImpl; import org.springframework.http.HttpStatus; import org.springframework.http.Respons..
이 글은 https://spring.io/guides/gs/rest-service/ 를 따라하며 스프링으로 RESTful 웹 서비스를 만드는 과정을 보여줄 것이다. 01. 우리가 만들 것은? http://localhost:8080/greeting 에서 HTTP GET 요청을 받는 서비스를 만들 것이다. 이 요청에 대해 JSON 형식으로 다음과 같은 응답을 반환할 것이다. { "id" : 1, "content" : "Hello, World!" } 아래와 같이 쿼리 스트링에 있는 선택적 파라미터인 name으로 커스터마이징 할 수 있다. http://localhost:8080/greeting?name=User name 의 값은 기본값인 World를 오버라이딩하고, 아래와 같이 응답에 반영된다. { "id" :..