inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 BE 2기] 백엔드 프로젝트 - 3주차 발자국

vin
0

이번 주차에서는 포트폴리오 사이트 화면과 어드민 기능을 개발하며, 사이트의 삽입, 수정, 조회 API 구현과 인터셉터 설정을 완료하였다. 타임리프와 부트스트랩을 활용한 뷰 템플릿 구성, 데이터 처리, 예외 관리 등 다양한 기능을 학습하며 웹 개발의 전체적인 흐름을 이해할 수 있었다.

 

포트폴리오 사이트 화면 개발하기 1

RestController와 Controller의 차이점

부트스트랩과 타임리프 프래그먼트 사용

타임리프 문법 활용


포트폴리오 사이트 화면 개발하기 2

동적 콘텐츠와 레이아웃 처리

인터셉터의 역할과 설정


어드민 공통 기능 개발하기

클래스 생성 및 관리

예외 처리와 로깅

DTO 개발

인터셉터 추가


데이터 조회 기능 개발하기

조회 기능 구현


데이터 삽입, 수정, 삭제 기능 개발하기

DTO와 데이터 처리

ifPresent 사용



[미션4] 조회 REST API 만들기

이번 미션에서는 제품, 브랜드, 카테고리, 재고에 대한 조회 API를 개발하고, 각 경로(/api/products, /api/brands, /api/categories, /api/stocks)에 대해 테스트 코드를 작성하였다.

이번 미션에서는 조회 API 개발 및 테스트 코드 작성을 통해 RESTful API의 기본 구조를 익히고, Null 처리영속성 관리를 경험하였다. 특히 **?.let {}**과 ?: 엘비스 연산자를 활용해 null-safe한 코드를 작성하는 방법을 익혔으며, 서비스 계층 분리를 통해 더 효율적인 설계를 계획하게 되었다.


ProductDTO에서 발생한 Null 처리 이슈와 해결

조회 API를 구현하는 과정에서 ProductDTO 내의 brandcategory가 null일 경우 NullPointerException이 발생하는 문제가 발견되었다. 이를 해결하기 위해 ?.let {} 구문을 사용해 null-safe하게 처리하였다.

?.let {}의 역할


엘비스 연산자(?:) 사용

조회 로직에서는 **엘비스 연산자 ?:**를 사용하여, 값이 null일 경우 대체 동작을 수행하도록 하였다.

product = stock.product ?: throw IllegalArgumentException("제품정보를 찾을 수 없습니다..")

영속성 설정: Cascade = PERSIST

재고와 관련된 엔티티를 영속성 컨텍스트에 포함시키기 위해, cascade = PERSIST 옵션을 사용하였다. 이 설정은 엔티티가 함께 영속화될 수 있도록 보장하며, 이를 통해 테스트 코드가 문제없이 성공적으로 실행되었다.


재고 수량 설정과 서비스 계층 분리 계획

현재 재고 테이블의 재고 수량(stockCount) 설정은 Stock 엔티티의 메서드를 통해 처리하고 있다.
하지만, 이 로직을 추후 삽입 및 수정 API에서 더 깔끔하게 관리하기 위해 서비스 계층으로 분리할 계획이다.

웹 개발 백엔드 워밍업클럽 백엔드프로젝트 웹개발

답변 0