springboot 6

@SpringBootTest, @MockBean, Mockito, Junit 등 테스트에 대해서…

MockMvc?MockMvc란MVC에 관련된 Mock 가짜 객체웹 어플리케이션을 서버에 배포하지않고, 테스트용 MVC 환경을 만들어서 요청 및 전송, 응답 기능을 제공해주는 객체MockMvc를 통해 @Autowired로 주입받아서 사용 가능 @SpringBootTestSpringApplication을 통해서 테스트에서 사용할 ApplicationContext를 쉽게 생성할 수 있습니다.그러므로, @SpringBootAplication이 붙은 어노테이션을 찾아 하위의 모든 빈들을 scan하기 때문에 애플리케이션에 정의된 모든 빈을 생성하여 ‘실행 시 느려질 수 있으므로, 단위 테스트에서는 적합하지 않다.’@SpringBootTest@AutoConfigureMockMvc //SpringBootTest에서는 ..

장바구니 api - Create 추가 #2 (Feat. SpringBoot)

로직 설명개발 에러 상황V1 serviceV2 serviceV2 service #2V2 service #3배운점 장바구니 api - Create 추가 #1 (Feat. SpringBoot) 에서 설명한 Table 구조에 따른 장바구니 추가 api 코드에 대해 설명하겠다. v1와 v2 기간을 거치면서 장바구니 api를 고도화했다. 간단한 api일줄 알았으나, 직접 개발을 하면서 여러 에러를 겪고 해결하며 성장할 수 있었다. 🌱로직 설명단기투숙startDate = 2023-11-29endDate = 2023-11-30roomProduct |2023-11-29| stock : 2장바구니 = 11월 29일만 담긴다.만약, 11월 29일의 재고가 이미 cart에 2번 담겨있다면, “상품의 재고 부족으로 장바구니 ..

장바구니 api - Create 추가 #1 (Feat. SpringBoot)

중간 테이블 java 구조 다대일 양방향 관계RoomCart.javaCart.java다대일 단방향 관계RoomCart.javaRoomProduct.java So2zy 프로젝트에서 장바구니 추가 api를 담당해서 개발을 했다. “야놀자”의 객실상품을 “장바구니”에 추가하는 로직을 구현해야하므로, ERD를 아래와 같이 작성해보았다. 🌱처음에는 ERD를 짤 때, Room, Cart 테이블만 존재하면 될 줄 알았다.. 😲근데, JPA 특성상 N:M관계는 최대한 지양하는 추세이므로 Room_cart와 Room_product라는 중간 테이블을 구현해야했다. ⚠️왜 N:M관계는 최대한 지양해야할까 ?JPA에서는 @ManyToMany어노테이션을 제공해준다.이 어노테이션은, 암묵적으로 중간 테이블을 생성해주어서 자기도 ..

자바, JSP, 스프링, 스프링부트란?

최근 자주 언급되는 언어부터 프레임워크까지 개념 정리를 하고 넘어가고자 한다.이를 주로 사용하는 백엔드 개발자가 되기 위해선 꼼꼼히 정확하게 이해해보자 🌱 Java public class JavaProject { // Java를 처음 접하면서 보게되는 코드 public static void main(String[] args) { System.out.println("Hello World"); } }객체지향적 프로그래밍 언어스프링의 근간이 되는 언어(한글)스프링은 자바 뿐 아니라 코틀린, 그루비로도 사용할 수 있으나 여기서는 자바로 진행스프링 자체도 거의 대부분 자바로 만들어져 있음 JSP (Java Server Page)자바로 프론트엔드를 엮어서 사용하는 개념프론트와 백이 모두 JAVA를 사용해서 페이지를..

@Controller vs @RestController

@Controller@Controller로 View 반환하는 case 전통적인 Spring MVC의 @Controller는 주로 View(화면)을 반환하기 위해 사용한다. Client가 URL형식으로 CRUD와 같은 요청을 보낸다.DispatcherServlet이 요청을 위임할 Handler Mapping을 찾고 이를 통해 요청을 Controller에 위임한다.Controller는 요청을 처리한 후, View Name을 Handler Adapter에게 반환하고 이를 DispatcherServlet에게 반환한다.DispatcherServlet은 View Resolver를 통해 View Name에 해당하는 View를 찾아 Client에게 반환한다. @Controller로 Data 반환하는 case 하지만, ..

카카오맵 open API - 키워드 검색하기

Toy Project #2에서 카카오맵에서 제공하는 키워드 장소 검색하기 open API를 적용한 경험을 남겨본다. 🌱 왜 카카오맵 open API 중 키워드 검색하기를 사용했는가?패키지 구조ItineraryRestControllerItinerarySearchResponseDTO ItineraryService결과(Postman Test)왜 카카오맵 open API 중 키워드 검색하기를 사용했는가?Toy Project #2의 요구사항 중 “일정 정보에 위치 정보를 확인 및 추가하는 공통 유틸리티 클래스 제공”이 있었다. 이를 위해 일정 정보를 추가할 때, 해당 일정 장소를 검색하여 키워드를 토대로 위치정보를 확인하기 위해 카카오맵 open API를 사용했다. 패키지 구조Toy Project #2는 Spri..