본문 바로가기

Spring/스프링 입문

02. 회원 관리 페이지 만들기 - (1) 비지니스 요구사항 정리

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술에 대해 공부하고, 정리한 내용입니다.

1) 프로젝트 진행 단계

  1. 비즈니스 요구사항 정리
    • 가장 기본적인 요구사항 설정
    • 데이터: 회원 ID, 이름
    • 기능: 회원 등록(중복 이름 불허), 회원 조회
    • DB 미선정 상태에서의 개발 시나리오 가정
  2. 회원 도메인 & 리포지토리 구축
    • 회원 객체와 회원 데이터 저장/조회를 위한 리포지토리 개발
  3. 리포지토리 테스트 케이스 작성
    • 리포지토리 기능의 정상 작동 확인
    • Junit과 test framework 사용
  4. 회원 서비스 개발
    • 실제 비즈니스 로직을 포함한 서비스 레이어 개발
  5. 회원 서비스 테스트
    • 개발된 서비스의 기능 검증

2) 비지니스 요구사항 정리

(1) 데이터 요구사항:

  • 회원 ID
  • 회원 이름

 

(2) 기능적 요구사항:

  • 회원 등록
  • 회원 조회

 

(3) 개발 시 고려사항:

  • 현재 DB는 미정 상태입니다.
    • 어떤 DB를 사용할지 아직 결정되지 않았습니다.
    • 성능이 좋은 관계형 DB를 사용할지, 또는 noSQL을 채택할지에 대해 결정해야 할 상황입니다.

3) 웹 어플리케이션 계층 구조

 일반적인 웹 어플리케이션들은 컨트롤러, 서비스, 리포지트리, 도메인 객체, 데이터베이스(DB)로 구성됩니다.

  • 컨트롤러: 웹 MVC의 컨트롤러 역할 (사용자의 요청을 받아 처리하는 역할)
    • UserController: 사용자와 시스템 간의 인터페이스를 제공합니다.
    • 예를 들어, 웹 요청을 받아 새로운 사용자를 등록하거나, 특정 사용자의 정보를 조회하거나 업데이트하거나 삭제하는 등의 작업을 수행할 수 있습니다.
  • 서비스: 핵심 비즈니스 로직 구현 (요청 받은 업무를 처리하는 역할)
    • UserService: 비즈니스 로직을 구현합니다.
    • 예를 들어, 새 사용자를 등록할 때 사용자 이름이 이미 사용 중인지 확인하거나, 사용자 정보를 업데이트할 때 권한을 확인하는 등의 작업을 수행할 수 있습니다.
  • 리포지토리: 데이터 베이스에 접근, 도메인 객체를 DB에 저장하고 관리
    • UserRepository: 사용자 정보를 관리하는 데 사용될 수 있습니다.
    • 이 Repository를 사용하여 사용자를 생성, 조회, 업데이트, 삭제하는 기능을 제공할 수 있습니다. 또한, 이메일이나 사용자 이름과 같은 특정 필드를 기준으로 사용자를 찾는 메서드를 추가로 제공할 수도 있습니다.
  • 도메인: 비즈니스 도메인 객체 (업무를 처리하는 과정에서 필요한 정보를 담고 있는 객체)
    • User: 사용자 정보를 나타내는 도메인 객체입니다.
    • 이 객체는 사용자의 이름, 이메일, 비밀번호 등의 정보를 속성으로 가질 수 있습니다.

 


4) 클래스 의존 관계

  • MemberService
    • 핵심 비즈니스 로직을 담당하는 서비스 클래스.
    • 회원 관련 비즈니스 로직 구현.
  • MemberRepository:
    • 현재 DB 선택은 미정 상태입니다.
    • 초기 구현은 메모리 기반 저장소(Memory Member Repository)를 사용합니다.
    • 단순 메모리 저장 방식을 통해 개발을 진행하며, 이는 나중에 구체적인 DB 기술로 쉽게 전환할 수 있습니다.
    • 유연한 전환을 위해 리포지토리는 인터페이스로 개발됩니다. 
      => 이 접근 방식은 후에 데이터베이스 기술이 결정되면, 메모리 구현체를 새로운 DB 기술로 교체하는 유연성을 제공합니다.
  • 데이터 저장소: 
    • 아직 데이터 저장소가 선정되지 않았기 때문에, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계.
    • 데이터 저장소는 RDB, NoSQL 등 다양한 저장소를 고민중인 상황이라고 가정.
    • 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용.