*본 프로젝트는 JSP 팀 프로젝트로 만들었던 Learning Management System을 Spring으로 이식하는 과정입니다.
**본 프로젝트는 김영한 선생님의 인프런 강의 스프링 핵심원리 - 기본편
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주
www.inflearn.com
을 바탕으로 실습하는 과정입니다. 스프링에 대해서 배우고 싶으시다면 이 강의를 들어보시는 것도 좋을 것입니다.
개발 환경
IDK : intelliJ
JDK : 자바 11
의존성은 김영한 선생님의 강의 순서대로 하기 위해 아무것도 넣지 않고 시작한다.
요구된 구현 목표
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를 마칩니다.
긴글 읽어주셔서 감사합니다.
'프로그래밍 언어 > Spring' 카테고리의 다른 글
<Spring>LMS프로젝트5. 학생 출결 로직 작성(2) 스프링으로 이식 (0) | 2021.10.31 |
---|---|
<Spring>LMS프로젝트4. 학생 출결 로직 작성(2)OCP,DIP 준수하게 수정 (0) | 2021.10.29 |
<Spring>LMS 프로젝트 3. 학생 출결 로직 작성(1) 로직 작성 (0) | 2021.10.29 |
<Spring>LMS 프로젝트 Member OCP, DIP 준수한 코드로 변경 (0) | 2021.10.25 |
<Spring> 시작 하기 -환경설정- (0) | 2021.09.25 |