본문 바로가기

🌱BackEnd/Spring13

Spring REST Docs 사용해보기 백엔드 개발자끼리만 개발할 때는 API를 짤 일이 없었지만 프론트 혹은 어플리케이션 개발자와 협업하기 위해서는 API 문서가 필수적입니다. 문서를 통해 개발 된, 개발 할 API 문서를 공유할 수 있으며 입력과 출력의 형식, 제약사항 등을 명시할 수 있으므로 신뢰성있고 통일성 있는 작업이 가능하게 됩니다. 이번에 iOS 개발자와 협업하게 되면서 필수적으로 API 명세서를 작성해야 했는데, Spring REST Docs를 통해 작성하기로 했고, CICD 파이프라인를 통해 지속적인 배포까지 구현해보았습니다. Swagger vs Spring REST Docs 문서화를 고려하면서 가장 많이 언급되는 두 가지의 방식 중 하나를 선택해야 했습니다. Swagger와 Spring REST Docs 입니다. 각각의 장단.. 2023. 9. 7.
[SPRING] BDD란? Mock이란? Mock 객체는 테스트에서 실제 객체를 대신하여 사용되는 가짜 객체입니다. 테스트 중에 호출되는 메서드의 반환 값을 지정하거나 예외를 발생시키는 등의 동작을 모방하여, 의존하는 다른 객체에 영향을 받지 않고 독립적으로 테스트할 수 있습니다. Spring 프레임워크에서는 Mock 객체를 사용하여 다른 구성 요소와 상호작용하는 코드를 테스트할 수 있습니다. 예를 들어, Spring MVC 컨트롤러를 테스트할 때는 MockMvc 객체를 사용하여 HTTP 요청을 보내고 응답을 검증할 수 있습니다. MockMvc는 실제 HTTP 요청을 처리하는 대신 가상의 요청을 처리하여 컨트롤러를 테스트하는 데 사용됩니다. BDD란? BDD란 Behavior Driven Development의 약자로써 행위 주도.. 2023. 6. 21.
[SPRING] @WebMvcTest 사용시 주의점 Controller의 단위 테스트를 위해 @WebMvcTest를 이용하고 있었습니다. 컨트롤러만 스캔 대상에 포함되는 것으로 알고 있었기 때문에 Config와 같은 것들은 모두 직접 주입해 스캔 대상에 포함시켜야 하는 것으로 알고 있었지만 SpringConfig가 자동으로 스캔이 돼어 오류가 발생해서 이유를 찾아봤습니다. @SpringBootTest vs @WebMvcTest @SpringBootTest는 전체 애플리케이션 컨텍스트를 로드해 모든 구성요소와 빈들을 메모리에 로드합니다. 통합 테스트나 애플리케이션 전체 동작을 테스트할 때 주로 이용합니다. 반면에 @WebMvcTest는 전체 애플리케이션 컨텍스트를 로드하지 않아 컨트롤러에 대한 단위 테스트를 작성할 수 있습니다. 이는 MVC 계층을 테스트하.. 2023. 6. 15.
[SPRING] CORS 웹 개발을 할 때 CORS가 개발자들을 많이 괴롭힌다고 해서 무엇인지, 어떻게 해결하는 지에 대해 공부해봤습니다. SOP란? SOP(Same Origin Policy)란? 다른 출처의 리소스를 사용하는 것을 제한하는 보안 방식입니다. 여기서 출처란? 프로토콜, 호스트, 포트가 같다면 동일 출처로 판단합니다. 셋 중 하나라도 다르다면 다른 출처겠죠? 왜 SOP를 사용해야 보안에 도움이 될까요? 다른 출처 제한 : 다른 출처의 스크립트나 리소스에 대한 접근을 차단함으로써 데이터의 악의적인 접근을 방지합니다. XSS, CSRF 방지 : SOP는 XSS와 CSRF 공격을 어렵게 만듭니다. 악의적인 요청이 올 때 SOP는 이를 차단합니다. 그렇다면 다른 출처의 리소스가 필요하다면 어떻게 할까요? SOP의 제약사항.. 2023. 5. 19.
[SPRING] 일급 컬렉션 도입해보기 List 타입에 대한 값을 일급 컬렉션을 이용해서 반환해 보셔도 좋을 것 같아요! 그렇게 되면 서비스 레이어에서 dto를 생성하는게 아닌 일급 컬렉션에게 객체를 생성하라는 명령을 줄 수 있고 코드가 조금 더 간결해질 수 있을 것 같습니다! 라는 리뷰를 받았습니다. 리뷰를 받은 Service 레이어의 해당 코드는 다음과 같습니다. /** * 키워드로 게시글 최근 100개 조회 * * @param keyword * @return List */ @Transactional(readOnly = true) public List findPostsByKeyword(String keyword) { // 제목에 키워드를 포함한 Post 최근 100개 조회 List postList = postRepository.findTo.. 2023. 5. 12.
[JAVA] record 클래스, DTO로 이용하기 record 클래스란? Record 클래스는 JAVA14부터 프리뷰로 도입됐으며 JAVA16부터 정식 기능으로 채택된 클래스다. 레코드 클래스는 데이터를 담는 컨테이너로 이용할 수 있으며 특징과 사용방법에 대해 알아보겠다. 언제쓸까? 기존에는 DTO나 VO를 작성할 때 필드, 생성자, getter, toString등 보일러 플레이트 코드를 작정해야하는 번거로움이 있었다. 지금부터 나오는 Record 클래스는 주로 DTO(데이터 전달 객체)나 VO(값 객체) 등 데이터를 담는 컨테이너 역할을 하는 클래스를 더 간결하게 작성할 수 있도록 도와주는 클래스다. 생성 방법 public record Sample(int x, int y) { } 클래스를 정의하는 것처럼 record타입을 명시한 후 클래스 명을 적으면.. 2023. 4. 13.