2024/12 9

TIL 2024-12-19 (Trouble Shooting (plus week) )

1 ) @NotNull?? (nullable = false)?? 개요플러스 주차 개인 과제 도중 nullable = false 의 제약 조건을 테스트를 하는 과제 도중 혼자 코드를 작성했지만 평소 테스트 코드를 작성하지 않기도 하고 발제를 정확히 이해하지 못하여 지금 작성한 테스트 코드가 맞는지 의문이 생겼다. 문제발생스스로 생각한 과제는 'status = null' 이면 예외처리를 하면 된다는 생각에 객체에 직접 데이터를 값을 입력해주어서 테스트 진행하다가 이렇게 객체에 데이터를 넣으면 무조건 null 값인데 굳이 테스트를 해야되는 이유를 모르겠어서 튜터님에게 상담 요청하였고 튜터님이 과제의 목적을 정확히 설명해주셨다.코드 수정 후 테스트 진행 중 코드의 문제점이 없다고 생각하였지만 계속해서 예외처리가..

카테고리 없음 2024.12.19

TIL 2024-12-17 ( 5주차 - 데이터베이스 다루기 )

1) 오늘 학습한 내용QueryDLSAuditing@Dynamicinsert@DynamicUpdate QueryDSLEntity의 매핑 정보를 활용하여 쿼리에 적합하도록 쿼리 전용 클래스(Q클래스)로 재구성해주는 기술.JPAQueryFactory을 통한 Q클래스를 활용할 수 있는 기능들을 제공.JPAQueryFactory?재구성한 Q클래스를 통해 문자열이 아닌 객체 또는 함수로 쿼리를 작성하고 실행하게 해주는 기술.JPAQueryFactory 사용을 위해서는 entityManager를 주입해서 Bean으로 등록해줘야 한다.// config 패키지안에 추가@Configurationpublic class JPAConfiguration { @PersistenceContext private EntityMan..

TIL/Spring 2024.12.17

TIL 2024-12-12 ( 4주차 - 데이터베이스 다루기 )

1) 오늘 학습한 내용CascadeorphanRemovalFetchJpaRepository페이징JPQL Cascade (영속성 전이)사용위치 : 연관관계의 주인 반대편 - 부모 엔티티 (N대1 에서 1), (OneToMany or OneToOne)양쪽 엔티티의 라이프 사이클이 동일하거나 비슷해야한다.옵션 종류 ALL : 전체 상태 전이PERSIST : 저장 상태 전이REMOVE : 삭제 상태 전이MERGE : 업데이트 상태 전이REFERESH : 갱신 상태 전이DETACH : 비영속성 상태 전이 orphanRemoval (고아 객체 제거)사용위치 : OneToMany or OneToOne에서 사용 - 부모 엔티티Cascade.REMOVE와 비슷한 용도로 삭제를 전파하는데 쓰인다.부모 객체에서 리스트 요소..

TIL/Spring 2024.12.12

TIL 2024-12-10 ( 2-3주차 - 데이터베이스 다루기 )

1 ) 오늘 학습한 내용DB(H2) 사용 방식트랜잭션DB Driver 역할 및 종류DB Driver 동작 방식JDBCMyBatisORM DB(H2) 사용방식Server Mode : 현업에서 사용하는 모드, 컴퓨터에 DB 엔진을 설치하고 엔진을 구동하는 방식In - memory Mode : 애플리케이션에 DB 엔진이 내장되어 에플리케이션과 함께 실행되고 종료되는 방식Embedded Mode : 인메모리와 같은 방식이지만 데이터를 로컬에 저장하기 때문에 휘발에서 자유로운 방식 트랜잭션DB의 상태를 변화시키기 위해서 수행하는 작업의 단위데이터 처리 중에 문제 발생시 그 전에 했던 변경을 아무일도 없는 것 처럼 모두 되돌림.3가지 특징원자성 (All or Nothing) : 모두 반영되던가 전혀 반영되지 않아야..

TIL/Spring 2024.12.10

[KPT 회고록] (project : 먹GO)

KPT 회고록1. Keep - 현재 만족하고 있는 부분 팀원들간의 피드백 (코드리뷰) 깃브랜치 나눠서 작업 (Master - Develop - feat/user, feat/admin, feat/store) 에러코드 공통화 적극적인 소통 패키지 도메인 단위로 나누기 enum 활용해 공통 String 처리2. Problem - 불편하게 느끼는 부분erd - api 명세서가 처음부터 제대로 되어있지 않아 생기는 의견 충돌에러코드 공통 작업으로 인한 충돌 -> merge 해야함erd 중요한 칼럼 순서대로 정렬상수 활용3. Try - Problem에 대한 해결책, 당장 실행 가능한 1) 설계 더 신경 쓰고, 시간을 투자해보기2) api 명세서 쓸 때, 미리 생각하고 공통 코드로 작성! -> 혼자 관리3) pk -..

TIL/Project 2024.12.09

TIL 2024-12-08 (Trouble Shooting (먹GO) )

1.  Cookie 역직렬화 1) 개요쿠키에서 장바구니 데이터를 읽어와 객체로 변환하는 방식을 구현하려고 하였고 처음엔 단순한 형변환으로 데이터를 저장할 수 있다고 생각하였지만 파싱이란 개념을 몰라 문제가 발생하였다. 2) 문제 발생// 처음에 생각한 방법List basket = (List) basketCookie.getValue();문제 1.처음엔 단순한 형변환으로 데이터를 저장할 수 있다고 생각하였다. 하지만 여기서 ClassCastException 이라는 exception이 발생하는데 쿠키 값은 단순 문자열이기에 이를 Java 객체로 직접 변환하려고 발생하는 에러인 것을 알았다.문제 2.쿠키 값은 JSON 형식이므로 JSON 데이터를 처리하지 않으면 문자열 데이터인데 쿠키 값을 그대로 사용하려고 하..

TIL/Project 2024.12.08

TIL 2024-12-06 (outsourcing 3일차)

1) 프로젝트 진행도가게 CRUD 구현가게 생성가게 수정가게 단건 조회(메뉴 같이 조회)가게 이름 검색(이름으로 검색히 연관된 가게 다 조회)가게 페업메뉴 CRUD 구현메뉴 생성 (1일차)메뉴 삭제메뉴 수정 (2일차)장바구니 (쿠키 활용)장바구니 메뉴 추가장바구니 메뉴 주문 처리 (3일차) 장바구니 메뉴 추가 public List addBasket(OrderRequestDto requestDto, Cookie basketCookie, HttpServletResponse response) { List basket = parseBasketFromCookie(basketCookie); //메뉴 가져오기 Menu menu = menuRepository.findByMenuO..

카테고리 없음 2024.12.06

TIL 2024-12-05 (outsourcing 2일차)

1) 프로젝트 진행도가게 CRUD 구현가게 생성가게 수정가게 단건 조회(메뉴 같이 조회)가게 이름 검색(이름으로 검색히 연관된 가게 다 조회)가게 페업메뉴 CRUD 구현메뉴 생성 (1일차)메뉴 삭제메뉴 수정 (2일차)장바구니 (쿠키 활용)한 번에 주문 가게 단건 조회 (@Service) public StoreMenuResponseDto findStore(Long storeId, User loginUser) { // 가게 Id 확인 Store findStore = storeRepository.findByStoreOrElseThrow(storeId); if(findStore.getStatus() == StoreStatus.CLOSURE){ if(lo..

TIL/Project 2024.12.05

TIL 2024-12-04 (outsourcing 1일차)

1) 프로젝트 진행도가게 CRUD 구현가게 생성가게 수정가게 단건 조회(메뉴 같이 조회)가게 이름 검색(이름으로 검색히 연관된 가게 다 조회)가게 페업메뉴 CRUD 구현메뉴 생성 (1일차)메뉴 삭제메뉴 수정장바구니 (쿠키 활용)한 번에 주문 모든 예외처리는 임시로 NOT_FOUND_USER로만 해놓은 겁니다.가게 생성가게는 오픈 및 마감 시간이 있습니다.가게는 최소 주문 금액이 있습니다.사장님은 최대 3개의 가게만 소지 가능. //권한 검증 if(!loginUser.getAuthority().equals(Authority.OWNER)) { throw new CustomException(ErrorCode.NOT_FOUND_USER); } ..

TIL/Project 2024.12.04