아웃소싱 프로젝트 2일차

박재성·2025년 1월 8일
0

오늘은 오전에 회의를 하고 오후부터 코딩을 시작했습니다.

📌코딩하며 일어난 일


❗First Event

Controller, Service, Repository, Entity, Dto에 해당하는 Directory를 만들고 CRUD를 순서대로 만들었어요. 하지만 시작부터 난관에 부딪혔답니다...

처음부터 모든 Entity를 만들지 않고 시작하여 Import를 할 수 없고 Service에서 가져와야 할 Repository도 사용할 수 없었어요!


그래서 어쩔 수 없이 빨간 상태로 두고 다들 기본 파일을 만든 후 Merge하여 만들기 시작했어요.

⁉️깨달은 것

프로젝트를 시작할 때에는 기본 Entity와 Repository를 만들고 시작하자!


❗Second Event

참조를 위해 StoreRepository에서 findbyId를 통해 Store 값을 가져왔어요. 근데 그냥 가져오면 Optional<Store>로 가져와져요. 하지만 보통은 마지막에 .orElseThrow를 사용하여 예외를 던지고 그대로 Store로 가져와요.

Optional<Store> storeById = storeRepository.findById(storeId);
Store store = storeRepository.findById(storeId)
		.orElseThrow(() -> new NoSuchElementException("Store with id " + storeId + " not found"));

📚 Service 내에 .orElseThrow()가 있으면 거슬려요!

그래서 Service 아래에 private으로 getStore()를 만들었답니다. 훨씬 보기 편해요!

Store store = getStore(storeId);

/**
 * Store 객체 가져오며 예외처리
 */
private Store getStore(Long storeId) {
	return storeRepository.findById(storeId)
		.orElseThrow(() -> new NoSuchElementException("Store with id " + storeId + " not found"));
}

❗Third Event

📚builder()가 뭔가요?

처음 보는 친구가 등장했어요! 바로 builder인데요, 생성자를 통해 만들던 객체를 static 매서드를 통해 만들고, stream처럼 사용해요.

public static Menu newMenu(Store store, MenuRequestDto dto) {
    return Menu.builder()
            .store(store)
            .name(dto.getName())
            .description(dto.getDescription())
            .price(dto.getPrice())
            .img_path(dto.getImg_path())
            .build();
}

📖GPT 설명

Builder는 소프트웨어 개발에서 객체 생성 패턴 중 하나로, 복잡한 객체를 단계적으로 생성할 수 있도록 도와주는 디자인 패턴입니다. 특히 객체의 속성이 많거나, 생성 과정이 복잡한 경우에 유용합니다.

0개의 댓글