[Spring] 데이터 접근 기술 - 기본(1)

JJoSuk·2023년 6월 16일
0

본 프로젝트 자료는 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술을 참고 제작됐음을 알립니다.

일단 기본 베이스를 깔고가는 코드들을 설명하고자 한다.

프로젝트 구조 설명1 - 기본 구조

도메인 분석

Item - 도메인 생성

이름, 가격, 수량을 속성을 가진 Item 객체 다.

리포지토리 분석

ItemRepository - 인터페이스 생성

메모리 구현체에서 향후 다양한 데이터 접근 기술 구현체로 손쉽게 변경하기 위해 리포지토리에 인터페이스를 도입했다.

ItemSearchCond - 검색 생성

검색 조건을 위해 만든 객체 다.

ItemUpdateDto - 수정 생성

상품을 수정할 때 사용하는 객체 다

  • 단순 데이터 전달을 위한 객체라 뒤에 + DTO

DTO(data transfer object)

  • 데이터 전송 객체
  • DTO는 기능은 없고 데이터를 전달만 하는 용도로 사용되는 객체를 뜻한다.
  • 있고 없고 상관이 없지만, 규칙을 위해 만들어준다.

MemoryItemRepository - 인터페이스 for 구현 생성

  • ItemRepository 인터페이스를 구현하기 위한 객체 다.
    • 데이터베이스가 아닌 단순 메모리이기에 재 실행할 시 데이터는 전부 초기화된다.
  • findById 는 Optional 을 반환해야 하기 때문에 Optional.ofNullable 을 사용했다.
  • clearStore() 는 테스트 용도로 만들었다.

서비스 분석

ItemService - 인터페이스 생성

서비스의 구현체를 쉽게 변경하기 위해 인터페이스를 사용했다.
원래는 클래스로 생성한다.

ItemServiceV1 - 구현체 클래스 생성

ItemServiceV1 는 ItemRepository 에 대부분의 기능을 전부 위임한 구현체 다.

컨트롤러 분석

HomeController - 컨트롤러 생성

단순 홈을 불러오기 위한 컨트롤러 다.

ItemController - CRUD 컨트롤러 생성

상품을 CRUD하는 컨트롤러 다.


프로젝트 구조 설명2 - 설정

스프링 부트 설정 분석

MemoryConfig - Config 생성

ItemServiceV1 , MemoryItemRepository 를 스프링 빈으로 등록하고 생성자를 통해 의존관계를 주입한다.

  • 서비스와 리포지토리는 구현체를 편리하게 변경하기 위해, 이렇게 수동으로 빈을 등록했다.

TestDataInit - 이벤트 생성

애플리케이션 실행할 때 초기 데이터를 생성한다.

ItemServiceApplication - 등록한 이벤트 생성

등록한 초기 데이터를 local 이름의 프로필이 사용될 경우 testDataInit 이라는 스프링 빈을 호출 할 수 있게 만들었다.

application.properties - 프로필 등록

spring.profiles.active=local 이라고 하면 스프링은 local 이라는 프로필을 동작하기 위해 @Profile("local") 가 동작하고, testDataInit 가 스프링 빈으로 등록된다.

이걸 실행하면 아래와 같이 미리 생성한 데이터 정보가 등록된다.


프로젝트 구조 설명3 - 테스트

ItemRepositoryTest - 테스트 생성

인터페이스를 대상으로 테스트하면 향후 다른 구현체로 변경되었을 때 해당 구현체가 잘 동작하는지 같은 테스트로 편리하게 검증할 수 있다.

profile
안녕하세요

0개의 댓글