당니의 개발자 스토리

회원 도메인 개발 본문

스프링/스프링 핵심 원리 - 기본편

회원 도메인 개발

clainy 2024. 1. 16. 12:51

회원 도메인 개발

이제 본격적으로 회원 도메인을 개발해보겠습니다.

이 그림을 보고 만들면 되겠죠? 꼭 직접 따라치세요!

먼저, member 패키지를 만들겠습니다.

그리고 나서, member에다가 등급을 만들겁니다.

Enum 으로 만드셔야 합니다.


Enum 클래스란?


요구사항 중에 회원 등급basic 이랑 vip, 두가지가 있다고 했죠.

그 다음에, 회원 Entity를 만들겁니다. Entity는 JPA에서 테이블에 대응하는 하나의 클래스라고 생각하면 됩니다.

클래스로 Member 를 만들고,

회원은 세 가지 속성밖에 없습니다. 그리고 나서, cmd + N 해서 생성자를 만들겠습니다.

Ok 하면,

이렇게 됩니다. 그 다음에 Getter, Setter 를 만들어 줄 거에요. 역시 cmd + N 해서 Getter and Setter를 검색하시면 됩니다.

Ok 하면,

Get, Set으로 데이터를 가지고 오고, 뽑는 getter, setter를 만들어 줬습니다. 그래서 이 get, set 메서드들을 통해서 private 으로 선언된 값들을 세팅할 수 있겠죠.

그리고 이제 제일 중요한 interface를 만들어 보겠습니다.

MemberRepository 라는 인터페이스를 만들면,

hello 패키지 안의 core 패키지 안의 member 패키지 안에다가 만든 겁니다.

그 다음에 회원을 저장하는 메서드회원의 아이디로 회원을 찾는 기능, 이렇게 두 가지만 딱 만들겠습니다.

그리고 이러한 회원 저장소(MemberRepository)를 만들었으니까 이제 구현체를 만들어야 되겠죠. 인터페이스만 가지고는 동작하지 않으니까요.

이제 구현체의 위치를 정해야 하는데, 원래는 인터페이스랑 구현체를 같은 패키지에 두는 것보다는 다른 패키지에 두는 게 더 설계성이 좋은데, 그럼 예제가 너무 복잡해지니까 간단하게 같은 패키지에 넣겠습니다.

MemoryMemberRepository를 만들고, 그 다음에 인터페이스를 implements 해서 MemberRepository를 구현하겠다고 하면 됩니다.

빨간줄 쳐지면 어지간하면, option + enter 누르면 대부분 해결이 됩니다.

Ok 누르면,

우리가 구현해야할 메서드들이 다 뜹니다.

여기는 저장소니까 Map 같은 게 필요합니다. 스프링 입문 강의를 들으신 분들은 굉장히 익숙하실 겁니다.

그리고 나서, 원래는 오류처리까지 다 해야하는데, 그게 이 예제의 핵심은 아니니까 하지 않겠습니다.

이렇게 간단하게 만들었습니다.

아직 데이터베이스가 확정이 안되었으니, 가장 단순한 MemoryMemberRepository로 만든 겁니다. 그래서 일단 개발을 진행할 수 있겠죠. 물론 메모리에서만 하는거기 때문에 그냥 테스트 용으로만 써야 됩니다.

그리고 여기서는 HashMap을 썼는데, 사실은 동시성 이슈가 발생할 수 있기 때문에 원래는 ConcurrentHashMap을 써야됩니다. 실무에서는 여러 군데서 동시에 접근하기 때문에 당연히 ConcurrentHashMap을 쓰지만, 여기서는 예제기 때문에 HashMap을 쓰겠습니다.


여기까지해서 회원 저장소를 다 만들었죠. 그러면 이번에는 회원 서비스를 만들게요.

MemberService 를 interface로 만들면 됩니다.

회원 서비스는 회원가입회원조회, 두 가지 기능이 있다고 했습니다.

이렇게 완성했습니다. 이렇게 인터페이스를 먼저 만들었고, 이제 구현체를 만들겠습니다.

MemberServiceImpl 이라고 뒤에 Impl 을 붙이는 거는 관례 같은 건데요, 구현체 하나만 있을 때는 그냥 그 인터페이스명 뒤에 Impl 이라고 관례상 많이 씁니다.

이렇게 implements 해주고, 이제 여기서 회원가입을 하고, 회원을 찾으려면 뭐가 필요한가요?

우리가 앞에서 만들었던 MemberRepository 인터페이스가 필요하죠.

그런데 이렇게 인터페이스만 가지고 있으면, NullPointException이 나겠죠.

그래서 구현 객체를 선택을 해줘야 됩니다.

여기서는 우리가 앞에서 만들었던 MemoryMemberRepository를 딱 넣으시면 됩니다.

이렇게 완성하면 어떻게 됩니까?

join에서 save를 호출하면, 다형성에 의해서 인터페이스의 save가 아니라, 이 MemoryMemberRepository에 있는 save가 호출되겠죠. override 한 게 호출됩니다.

이렇게 하면 개발이 끝났습니다.


그러면 다음 시간에 이게 잘 동작하는지 한번 테스트를 해볼게요.

'스프링 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글

주문과 할인 도메인 설계  (0) 2024.01.17
회원 도메인 실행과 테스트  (0) 2024.01.17
회원 도메인 설계  (0) 2024.01.16
비즈니스 요구사항과 설계  (0) 2024.01.16
프로젝트 생성  (0) 2024.01.16