프로젝트 개요 : 이것이 취업을 위한 백엔드 개발이다 클론코딩 - 상품관리 애플리케이션
프로젝트 환경 : IntelliJ, SpringBoot, MySQL
프로젝트 코드 : https://github.com/smkim9202/ProductManagement
상품 관리 애플리케이션의 요구사항
List로 관리되는 상품을 관리하는 애플리케이션 => DB로 관리되는 상품을 관리하는 애플리케이션
- 상품
- 상품 번호
- 1부터 시작, 추가시 1씩 증가, 동일한 상품 번호는 존재 불가
- 상품 이름
- 1~100글자 사이의 문자열, 동일한 상품 이름 존재 불가
- 가격
- 0~1,000,000원 사이의 값
- 재고 수량
- 0~9,999개 사이의 값
- 상품 번호
- 상품에 대한 행동
- 상품 추가
- 단건으로 하나씩 상품 추가
- 상품 조회
- 상품 번호 기준으로 하나의 상품을 조회
- 전체 상품 목록 조회
- 상품 이름에 포함된 특정 문자열 기준으로 검색
- 상품 정보 수정
- 상품 번호를 기준으로 상품 번호를 제외한 나머지 정보 수정
- 상품 제거
- 상품 번호를 기준으로 특정 상품을 제거
- 상품 추가
프로젝트 생성하기
spring initalizr 접속 - https://start.spring.io/
데이터 구조 정의하기
상품 클래스 정의
- 상품 : Product -> 클래스
- 상품 번호 : id -> Long
- 상품 이름 : name -> String
- 가격 : price -> Integer
- 재고 수량 : amount -> Integer
1. Product 대문자로 시작하는 이유
자바 명명 규칙에 따르면 클래스명은 대문자로 시작, 필드명은 소문자로 시작한다.
2. 상품 번호가 id인 이유
Product 안에 존재 할 것이기 때문에 굳이 productId로 칭하지 않고, 상품 번호 기준으로 식별하는 식별자에는 보통 id라는 이름을 붙인다.
3. 상품 번호 Long으로 설정한 이유
Interger는 약 -21억~21억까지 표현 하는 큰 범위라 가격과, 재고수량은 값의 범위에는 충족하지만 상품 번호는 서비스 규모에 따라 21억개를 넘어 설 수 있기 때문이다.
4. long vs Long
long : Primitive Type, 언어 차원에서 지원하는 기본 타입으로 순수한 타입, 원시 타입
Long : Wrapper Type, 클래스로서 존재하는 클래스 타입
클래스 타입은 원시 타입과 달리 해당 레퍼런스 변수가 null 갑을 가질 수 있고, ArrayList 같은 컬렉션이 요소가 될 수 있다. JSON에 특정 필드가 '없다'라는 상태를 나타내거나, 컬렉션에 값을 넣고 싶다면 원시타입으로는 어렵다.
원시타입과 클래스타입간의 변환 과정은 Boxing(원시타입=>클래스타입)과 Unboxing(클래스타입=>원시타입)이라고 표현한다.
5. 가격, 재고수량 Integer 사용 이유
price와 aomount는 정의되지 않은 상태를 null로 표현하려면 래퍼 클래스를 사용해야 한다. int를 사용 할 경우 0으로 초기화하면 되지만 정의되지 않은 상태를 허용하지 않는다.
상품 클래스 코드 : Product.java
package kr.co.api.product.management;
public class Product {
private Long id;
private String name;
private Integer price;
private Integer amount;
}
'프로젝트 > clone coding' 카테고리의 다른 글
[백엔드 개발 : ProductManagement] DTO와 getter, setter (0) | 2025.03.18 |
---|---|
[백엔드 개발 : ProductManagement] 상품 추가 구현(프로젝트 구조 잡기) (0) | 2025.03.17 |
[Jump to SpringBoot : SBB] 프로젝트 개발과 서버 환경 분리 (0) | 2022.05.12 |
[Jump to SpringBoot : SBB] 프로젝트 AWS 서버에 배포하기 (0) | 2022.05.09 |
[Jump to SpringBoot : SBB] 스프링 시큐리티 (0) | 2022.04.26 |