티스토리 뷰

728x90
반응형

 

오늘은 회원관리 예제를 하나 만들어 보도록 하겠습니다.



먼저 비즈니스 요구사항을 정리해 봅시다.
요구사항은 가장 간단하게 구현하였습니다.

  • 데이터 : 회원 ID, 이름
  • 기능 : 회원 등록, 조회

 

 

일반적인 웹 애플리케이션 계층 구조를 먼저 확인해 봅시다.

 

웹-애플리케이션-계층-구조

 

 

  • 컨트롤러(Controller) : 웹 MVC의 컨트롤러 역할
  • 서비스(Service) : 핵심 비즈니스 로직 구현
  • 리포지토리(Repository) : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
  • 도메인(Domain) : 비즈니스 도메인 객체, ex) 회원, 주문, 쿠폰 등 주로 데이터베이스에 저장하고 관리됨

 

 

회원 비즈니스 로직이 있는 MemberService와 회원을 저장하는 부분은 interface로 설정하고 MemberRepository로 하겠습니다.
그리고 구현체를 MemoryMemberRepository로 만듭니다.

아직 데이터 저장소가 선정되지 않았다는 가정하에, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계합니다.
데이터 저장소는 RDS, NoSQL 등 다양한 저장소를 고민 중인 상황으로 가정합시다.
개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용합니다.

 

 

이제 위의 정리를 바탕으로 코딩으 진행해 보도록 하겠습니다.

 

먼저 controller와 같은 경로에 domain package를 하나 추가합니다.

여기에 Member라는 class를 만듭니다.

 

 

 

내용은 아래와 같이 회원 ID와 이름으로 구성하였습니다.

 

 

package com.demoproject.demo.domain;

public class Member {

    private Long id;
    private String name;

    public Long getId(){
        return id;
    }

    public void setId(Long id){
        this.id = id;
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }
    
}

 

 

그리고 repository package를 추가합니다.
repository 회원 객체를 저장하는 저장소 역할을 하게 될 것입니다.

 

그리고 MemberRepository interface를 하나 생성합니다.

 

 

 

그리고 repository에 4가지 기능을 추가해 줍니다.

 

 

package com.demoproject.demo.repository;

import java.util.List;
import java.util.Optional;

import com.demoproject.demo.domain.Member;

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

 

save 하면 회원이 저장소에 저장되는 것입니다.
그다음엔 findById와 findByName로 저장소에서 찾아올 수 있습니다.
그리고 지금까지 저장된 모든 회원 List를 반환해 줍니다.

 

 

이제 구현체를 만들어 주기 위해 MemoryMemberRepository를 하나 생성해 주도록 하겠습니다.

 

 

 

코드는 아래와 같이 작성합니다.

 

package com.demoproject.demo.repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import com.demoproject.demo.domain.Member;

public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
    
}

 

 

이렇게 작성한 코드가 이제 실제로 돌아가는지 테스트해야 합니다.

이럴 때, 테스트 케이스를 작성하여 확인하면 됩니다.

 

 

테스트 케이스는 다음 글에서 이어서 학습해 봅시다.

 

[Spring] Spring 시작해보기 - 5. 회원 리포지토리 테스트 케이스 작성하기

어제에 이어 회원 리포지토리에 작성한 사항을 테스트 해 볼수 있는 테스트 케이스를 작성해 보려고 한다. 개발한 기능을 실행해서 테스트를 할 때 자바의 main 메서드를 통해서 실행하거나, 웹

icandhee.com

 

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31