
프로젝트 [만원의 행복] 개발 중에 이미지 저장하는 DB가 아직 구축이 되지 않아서, 일단 MySql에 이미지로 저장하고 프론트엔드한테는 endpoint api로 전달하기로 했다. ✔️ 결제 처리 로직 1) 짠처리 상품 구매 2) 서버 : 결제 API 처리 3) 서버 : QR code 발급 1) 짠처리 상품 사용하고 싶음 2) 업주 : QR code 찍음 3) 서버 : QR code 사용처리 4) 상품 제공 ✔️ ERD 는 다음과 같다. (아직 수정 중이고 많이 부족하다ㅜ) 📌 QR image Entity (QR code 이미지 저장 entity) 일단 QR 코드 (이미지) 를 저장할 수 있는 entity는 다음과 같다. 이미지는 byte 타입으로 저장해야하므로, byte[] 로 선언한다. ✔️ @Lob..

상품 주문하기를 개발하던 중, 단 1초의 오차도 없이 동시다발적으로 상품을 주문한다고 가정할 때 문제가 발생한다. 일단 동시적으로 값을 보내주기 위해 테스트를 만들어보자. #상황 원래는 로그인 환경에서 해야하지만, 그러면 테스트가 더 복잡해지니 시큐리티에서 로그인 안해도 되도록 설정을 바꿔준 후 로컬에서 테스트를 진행했다. 포스트 맨에서 Body를 작성한 후에, 옆에 누르면 자동으로 curl 코드를 만들어준다. 그대로 복사. 메모장에 여러번 복붙해서 테스트 케이스를 만들자, 여러개 붙일 때에는 & 를 붙여준다. 그대로 전부 복사해서 터미널에 실행시키면 끝 📌 문제 상황 요청을 7개를 보냈으나, 응답이 7개는 정상적으로 온다. 그렇지만, DB에는 1개밖에 처리되지 않은 상태. 어찌보면 예외 발생보다 더 최..

📌 원래의 방식 여정들을 부를 때 마다 각각의 API를 호출하기 때문에 삽입 부분에서 많은 시간이 걸렸었다. 📝 기존 코드 List saveItineraryList = new ArrayList(); for (ItineraryRequest ir : itineraryRequests) { Itinerary saveItinerary = itineraryRepository.save( ItineraryFactory.getItineraryEntity(trip, ir) ); saveItineraryList.add(saveItinerary); } 매 여정들 마다 save를 불렀었다. 이 당시 걸린 시간은 약 2초 정도 걸렸었다. (여정 13개 기준) 여정들이 무수히 많아지면 시간이 더 오래 걸릴것 같았고, 성능을 개선해..

📌 문제점 기존의 예외 처리들을 하기 위해서는 RuntimeException을 상속받은 예외들을 각각 클래스를 만들어서 처리하였다. 하지만, 이렇게 예외 하나당 파일 하나를 만들면 각각 에러마다 핸들러를 만들어야하고, 클래스도 많아져서 관리하기 힘들어졌다. 📌 enum을 활용하자. enum은 열거형으로, 상수들을 정의해서 열거하여 편리하게 사용할 수 있는 클래스이다. 밑에 처럼 모든 도메인에서 나올 수 있는 예외들을 한 곳에 다 넣었다. @AllArgsConstructor @Getter public enum ExceptionCode { INTERNAL_SERVER_ERROR("서버에 오류가 발생했습니다."), BAD_REQUEST("잘못된 입력값 입니다."), INVALID_REQUEST("잘못된 요청입..

▶️ 해당 reqeust 파일이 있다고 해보자. 내가 만약 [ tripName ]을 입력하지 않았다면, 사용자에게 해당 [ message ]를 출력하고 싶다. @Getter @Builder @AllArgsConstructor @NoArgsConstructor public class TripRequest { @NotNull(message = "여행 이름을 입력하세요.") private String tripName; @NotNull(message = "출발 날짜를 입력하세요.") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate startDate; @NotNull(message = "도착 날짜를 입력하세요.") @JsonFormat(pattern = "yyyy-..

이 게시글은 pjh3749님의 게시글을 참고하였습니다. 📌 문제 상황 프로젝트를 하던 중 .. 상속관계에 있는 엔티티들을 매번 빌더로 만들어야하는 상황이었다. 방법이 없어 보여 switch 문 사용해서 썼지만, 프로젝트 팀원분이 조금 더 깔끔하게 만들면 보자 해서 리팩토링을 하기로 했다. 📌 기존 코드 부모 클래스 : itinerary 자식 클래스 : Movement, Lodgement, Stay 부모 클래스의 type 필드에 따라 자식들을 구분해서 객체를 만들어야하는 상황. 참고로 밑의 코드는 만든 객체들을 jpa를 이용해 db에 저장하는 상황이다. for (ItineraryRequest ir : itineraryRequests) { switch (ir.getType()) { case MOVEMENT:..

📌 에러 상황 스프링은 컨트롤러 - 서비스 - 레포지토리가 유기적으로 잘 연결되어있어야하는데, 레포지토리에서 빈을 생성할 수 없다고 에러 발생!!! defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object 📌 이유 ItineraryRepoistory 즉 제네릭 타입을 사용해서 발생. 이유는 JPARepository 입장에서는 Itinera..
- Total
- Today
- Yesterday
- 그룹스터디
- 야놀자X패스트캠퍼스부트캠프
- 백엔드부트캠프
- 패스트캠퍼스
- be
- 국비지원
- 백엔드
- 자료구조 #스택 #큐 #덱 #선형자료구조
- 프로젝트후기
- 백엔드개발자
- boj
- springboot
- 야놀자
- 과정중간회고
- 자료구조
- #국비지원취업
- 커리어멘토링
- 패스트캠퍼스강의
- 백준
- 데이터베이스
- qjzl
- 부트캠프
- TiL
- 채팅기능개발
- 스터디후기
- 카카오API
- Java
- 국비지원캠프
- 국비지원취업
- 그룹스터디워크샵
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |