일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- inflearn
- 자바
- SWEA
- DFS
- Spring
- html
- java
- 구현
- 검색트리
- 순환
- codecademy
- CSS
- 알고리즘
- SQL
- BFS
- CleanCode
- javascript
- algorithm
- Color
- 프로그래머스
- front-end
- 클린코드
- Web
- 코딩테스트
- 정렬
- DP
- android
- 다이나믹 프로그래밍
- 해슁
- Today
- Total
깡뇽
[Spring] 스프링 입문 - 회원 관리 예제(1) 본문
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 수강하면서 정리하는 글.
비즈니스 요구사항 정리
- 데이터 : 회원 ID, 이름
- 기능 : 회원 등록, 조회
- 아직 데이터 저장소가 선정되지 않은 상황 (가정)
< 일반적인 웹 애플리케이션 계층 구조 >
- 컨트롤러 : 웹 MVC의 컨트롤러 역할
- 서비스 : 핵심 비즈니스 로직 구현
- 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인 : 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등 주로 데이터베이스에 저장하고 관리됨
< 클래스 의존관계 >
데이터 저장소가 아직 선정되지 않았으므로 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계해야 한다.
초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용하고 추후에 데이터 저장소를 RDB, NoSQL 등으로 결정하면 바꿔줄 수 있다.
회원 도메인과 리포지토리 만들기
1단계
1) java폴더 -> hello.hellospring패키지 -> "domain" Package 생성
2) domain패키지 -> "Member" Java Class 생성 후 코드 작성
요구사항 정의서에 있던 데이터 id와 name을 만들어주고, Getter와 Setter을 생성해준다.
2단계
1) java폴더 -> hello.hellospring패키지 -> "repository" Package 생성
해당 저장소에는 회원 정보를 저장하게 될 것이다.
2) reository패키지 -> "MemberRepository" Interface 생성 후 코드 작성
save로 회원 정보가 저장소에 저장하고, findById와 findByName으로 정보를 찾아올 수 있고, findAll을 통해 모든 정보를 리스트로 반환할 수 있다.
3) reository패키지 -> "MemoryMemberRepository" Class 생성 후 코드 작성
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());
}
}
save하면 sequence값을 하나 올려서 id를 만들어 주고 store에 저장한 뒤에 결과를 반환한다. 그리고 id를 찾을 때에 store에서 id를 가져오는데 Null일 수 있으므로 Optional.ofNullable()로 감싸준다. 또한 name을 찾을 때에는 store에서 람다함수를 활용해서 루프를 돌면서 찾아지면 반환하고 없으면 Optional에 Null이 포함되서 반환된다. findAll을 하면 Map을 List로 반환해야 하므로 store에 있는 값들을 ArrayList로 만들어 반환한다.
'Web > Spring' 카테고리의 다른 글
Java 개발 환경 설정 - 윈도우 Open JDK 설치 (0) | 2023.07.04 |
---|---|
[Spring] 스프링 입문 - 회원 관리 예제(2) (2) | 2022.02.17 |
[Spring] 스프링 입문 - 스프링 웹 개발 기초 (0) | 2022.02.16 |
[Spring] 스프링 입문 - 프로젝트 환경설정(2) (0) | 2021.12.23 |
[Spring] 스프링 입문 - 프로젝트 환경설정(1) (0) | 2021.12.23 |