프로그래밍 언어/Spring

<Spring> LMS 프로젝트 1. 회원관리 모델 생성

창조적생각 2021. 10. 22. 16:31

 

*본 프로젝트는 JSP 팀 프로젝트로 만들었던 Learning Management System을 Spring으로 이식하는 과정입니다.

**본 프로젝트는 김영한 선생님의 인프런 강의 스프링 핵심원리 - 기본편

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주

www.inflearn.com

을 바탕으로 실습하는 과정입니다. 스프링에 대해서 배우고 싶으시다면 이 강의를 들어보시는 것도 좋을 것입니다.

 

개발 환경

IDK : intelliJ

JDK : 자바 11

의존성은 김영한 선생님의 강의 순서대로 하기 위해 아무것도 넣지 않고 시작한다.

환경설정1
환경설정2

요구된 구현 목표

 

1. 학생들의 인적사항을 관리할 수 있는 가입 및 조회 시스템을 구현한다.

2. 학생들의 출결사항을 관리할 수 있는 출결 체크시스템 및 출결 조회 시스템을 구현한다.

3. 학생들의 과제사항을 관리할 수 있는 과제 출제 및 제출 시스템과 제출 현황 조회 시스템을 구현한다.

4. 기타 커뮤니티 게시판을 구현한다.

 

1. 학생(회원) 관리 모델 생성

 

지금은 간단한 테스트를 위해 학생 이름 및 아이디만 구현한다.

 

Member 객체다이어그램

클라이언트가 회원서비스를 통해 회원가입을 하면 저장소에 그 정보가 저장됩니다.

 

그리고 회원서비스를 통해 회원의 정보를 요청하게 되면 회원저장소에서 그 정보를 찾아옵니다.

 

 

Member 클래스다이어그램

 

Interface를 선언하고  클래스로 구현함으로써 다형성을 실현한다.

 

1)회원 엔티티 생성

 

*member 패키지를 생성하여 그 안에 Member 클래스 생성

Member class

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
package com.example.lms.member;
 
public class Member {
    private Long id;//회원ID
    private String name;//회원 이름
 
    public Member(Long id, String name) {//생성자
        this.id = id;
        this.name = 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;
    }
}
 
cs

 

 

* Alt+Insert 단축키를 통해 generator에서 생성자와 gettersetter를 손쉽게 만들 수 있다.

 

2) 회원 저장소

 

(1) MemberRepository 인터페이스

1
2
3
4
5
6
7
8
9
package com.example.lms.member;
 
public interface MemberRepository {
 
    void save(Member member); //회원정보 저장
 
    Member findById(Long memberId);
}
 
cs

인터페이스에서는 회원정보를 저장할 수 있는 save 메서드와 아이디로 멤버의 정보를 조회할 수 있는 findById 메서드를 선언해 준다.

 

(2) 구현체 MemoryMemberrepository Class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.example.lms.member;
 
import java.util.HashMap;
import java.util.Map;
 
public class MemoryMemberRepository implements MemberRepository{
 
    private static Map<Long,Member> store = new HashMap<>();
 
    @Override
    public void save(Member member) {
        store.put(member.getId(),member);//해시맵의 key는 id로 value는 member로 저장 이 후 필드가 늘어남을 고려하여
 
    }
 
    @Override
    public Member findById(Long memberId) {//id를 통한 조회
        return store.get(memberId);
    }
}
 
cs

해시맵에 <id,member>의 형식으로 저장하여 key값인 id로 원하는 member를 불러 올 수 있도록

save 메서드와 findById 메서드를 작성한다.

 

3)MemberService

 

 (1) MemberService 인터페이스

1
2
3
4
5
6
7
8
9
10
package com.example.lms.member;
 
public interface MemberService {
 
    void join(Member member); //회원가입 메서드
 
    Member findMember(Long memberId); // 회원 조회 메서드
 
}
 
cs

 

MemberService는 클라이언트의 요청을 직접적으로 받아들이고 소통하는 클래스이다. 따라서 클라이언트가 회원가입 요청과 id를 통해서 정보를 찾을 수 있도록 join 메서드와 findMember 메서드를 작성한다.

 

 (2)MemberServiceImpl 구현체

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.lms.member;
 
public class MemberServiceImpl implements MemberService{
 
    private final MemberRepository memberRepository = new MemoryMemberRepository(); //구현체 
 
    @Override
    public void join(Member member) {//회원가입
        memberRepository.save(member);
    }
 
    @Override
    public Member findMember(Long memberId) {//회원조회
        return memberRepository.findById(memberId);
    }
}
 
cs

 

MemberRepository를 import 해 오면서 인터페이스의 구현체인 MemoryRepository를 끼워준다.

그리고 join과 findMember 메서드를 구체화 시켜준다.

 

4) 테스트

*test안에 memberTest 패키지를 만들어주고 MemberServiceTest 클래스를 생성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.lms.memberTest;
 
import com.example.lms.member.Member;
import com.example.lms.member.MemberService;
import com.example.lms.member.MemberServiceImpl;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
 
public class MemberServiceTest {
    MemberService memberService = new MemberServiceImpl();
 
    @Test
    void join(){
        //given
        Member member = new Member(1L,"studentA");
        //when
        memberService.join(member);
        Member findMember=memberService.findMember(1L);
        //then
        Assertions.assertThat(member).isEqualTo(findMember);
    }
}
 
cs

join 메서드를 테스트 해본다.

given/when/then/ 주석문은 김영한 선생님께서 가르쳐주신 것으로

주어진 입력자료를 메서드에 실행했을 때 결과를 세단계로 나눈 것이다.

 

*Assertions를 선택할때, org.assertj.core.api 를 선택하도록 한다.

테스트를 실행하니 코드가 잘 돌아가는 것이 보였다.

이상으로 member를 마칩니다.

 

긴글 읽어주셔서 감사합니다.

 

728x90