전체 글 112

Docker란?

이전 프로젝트부터 Docker를 사용해 배포를 한 경우가 많았다. 주로 배포를 직접 담당하지 않았어서 Docker에 대해 어렴풋이 알고 있던 내용을 이번 학기에는 직접 사용해볼 기회가 생겼다 ! 이번에는 Docker에 대해서 먼저 알아본 뒤, 사용방법에 대해 공부해야겠다. 🌱 Docker란? Docker란, GO 언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다. 컨테이너로 프로젝트를 관리하여 더 쉽게 실행하고, 관리할 수 있게 도움을 준다. 정의에 적힌 용어들이 와닿지 않았다. 🤕 처음 접하는 용어가 너무 많아 용어부터 정리하기로 했다. 용어 정리 가상화 (Virtualization) 하나의 컴퓨터 안에 잇는 하드웨어자원 (cpu, 메모리, 스토리지)를 가상머신(VM, 가상서버)라..

BACKEND/INFRA 2024.04.17

Call By Value & Call By Reference 정리

정렬에 대해서 다시 공부하던중.. swap 함수를 작성하면서 Call By Value와 Call By Reference의 차이점을 정확히 알지 못한다는 사실을 깨닫고 지금이라도 공부해야겠다 생각했다.. 2024년도에는 모르는 것들을 꼼꼼하게 챙겨갈 수 있는 해가 되어야지 !! Call By Value : 값에 의한 호출 public class CallByValue { public static void main(String[] args) { int a = 1; int b = 2; int temp = a; a = b; b = temp; System.out.println("a: "+a+" b: "+b); // a: 2 b: 1 } } Call By Reference : 주소에 의한 호출 public class..

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프 - MINI Pro 숙박 예약 서비스 so2zy

서비스 개요서비스 목적 및 목표서비스 설계패키지 구조요구사항 분석Event StormingERDArchitecture서비스 기능개발스택입출력화면 & 배포 역할 분담팀 협업1차 스프린트 (11.21 ~ 11.24)2차 스프린트 (11.26 ~ 11.30)리팩토링Trouble Shooting 🚀프로젝트를 마무리하며 .. 🐣서비스 개요서비스 목적 및 목표목적숙박업소를 조회하고 예약하는 서비스를 만든다.목표REST API를 구현하여 FE에게 JSON 형식의 데이터를 전달합니다.회원 인증과 인가를 Spring Security를 이용하여 진행합니다.숙박 상품에 대한 데이터를 오픈 API를 통해 검증/활용합니다.https://www.data.go.kr/data/15077518/openapi.dohttps://api...

장바구니 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어노테이션을 제공해준다.이 어노테이션은, 암묵적으로 중간 테이블을 생성해주어서 자기도 ..

MultiBagFetchException

문제문제해석해결방안1. Bag을 Set으로 바꿔서 한번에 쿼리를 진행한다.2. Join Fetch를 한번만 진행한다.문제@Query("select ac from Accommodation ac join fetch ac.roomList r" + "join fetch r.roomProductList rp where ac.id = :accommodationId" + "AND rp.startDate = :startDate")c.a.global.error.GlobalExceptionHandler : org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags: [com.aroom.domain.room.model.Ro..

UnsupportedTemporalTypeException HH:MM

문제문제해석해결방안문제this.checkIn = room.getCheckIn().format(DateTimeFormatter.ofPattern("HH:MM")); this.checkOut = room.getCheckOut().format(DateTimeFormatter.ofPattern("HH:MM"));c.a.global.error.GlobalExceptionHandler : Unsupported field: MonthOfYear java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: MonthOfYear 문제해석room의 checkIn과 checkOut이 LocalTime이지만, HH:MM 포맷인 String type으로 바꿔서..

Jackson 직렬화 제한자 문제

발생과정문제해결방안왜 이렇게 해결? so2zy 프로젝트를 할때 발생한 Jackson 직렬화 제한자 문제이다. 코딩할 때 항상 “문제”를 겪을 수 밖에 없는 것 같다. 다양한 문제 상황을 겪으면서 기록하고 공유하면서 한걸음 성장해 나가는 것이 얼마나 중요한지 깨달아 가고 있다. 🌱🔗 https://github.com/so2zy/so2zy_BE/discussions/29#discussion-5881119발생과정public RoomCartResponseDTO postRoomCart(Long member_id, Long room_id){ Room room = roomRepository.findById(room_id).get(); Cart cart = cartRepository.findByMemberId(memb..