본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# JAVA

Spring Boot 실습 2: Repository

by iamlucia 2020. 11. 6.

 

공부 자료: 

 

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 Back-End Java Spring MVC Spring Boot 온라인 강의 백엔

www.inflearn.com

 

웹 개발 실습 #2

구현체 MemoryMemberRepository 를 생성하고
MemberRepository의 모든 메서드를 구현한다.



1. save ( ) 메서드 구현하기 : 저장 기능 구현 

1-1) 저장을 해놓아야 하는 곳 생성  : store

 

 

Map<Key,Value> 형식

 

Key값이 되는 것은 ID(Long), 값은 Member 객체다

 

HashMap과 long

 

- 실무에서는 동시성 문제가 있을 수 있어서

'store'와 같은 공유되는 변수인 경우,

ConcurrentcyMap을 사용해야 하지만

실습에서는 간단히 HashMap 사용

- long 을 사용할 때에도 동시성 문제를 고려하여

AtomicLong을 사용해야 하지만

실습에서는 단순 long 타입 사용

 

1-2) 저장되면서 시스템에서 자동으로 id를 생성해줄 수 있는 기능 구현  : seqeunce 

 

sequence 

 

0,1,2 순으로 Key값을 생성해주는 것

 

동시성  Concurrency  ?
어떤 프로그램이나 알고리즘이 순서에 상관없이 동시에 수행될 수 있는 것을 concurrent 하다고 한다.
한 프로그램 내에서 실행되는 여러 스레드가 객체를 공유하는 경우를 동시성이라고 한다.

한 user의 요청을 처리하는 데에 1초가 필요한 시스템이 있는 경우, user가 늘어남에 따라 모든 user는 자신보다 먼저 도착한 요청이 끝날 때까지 기다려야 한다.  concurrency가 여러 유저를 동시에 처리함으로써 처리량을 향상시키기 가능하다. 

 

1-3) save 함수 overriding  

 

 

member.setId(++sequence); 

 

사용자에 의해 member가 만들어질 때,

사용자가 입력한 id만 넣어져 있는 상태이므로

sequence에 의해 생성되는

0,1,2 등의 값들을 Member의 Id값으로 넣는다. 

 

store.put(member.getId(), member) 

 

Map<Key,Value>형식의 store변수에

id와 member 객체를 put 한다. = 저장 완. 

 

 

2. findbyId( ) 메서드 구현하기 : Id 조회 기능 구현 

Optional.ofNullable

 

Member.getId()로 조회할 때 null값이 반환되어도

Optional로 감싸서 반환이 가능하게 설정 

이 값은 클라이언트에서 처리할 것.

 

3.findbyName( ) 메서드 구현하기 : Name 조회 기능 구현 

 

.filter(member -> member.getName( ).equals(name)).findAny()

 

람다 함수형으로, Map에서 loop를 돌리게 된다. 

member에서 get한 name과 parameter로 들어온  name이 일치하는지 확인한다.

findAny( ) 를 통해 하나라도 찾으면 반환된다. 

하나도 없다면 Optional에 null이 포함돼서 반환된다. 

 

4. findAll( ) 메서드 구현하기 : 

ArrrayList<>(store.values());

 

store의  value는 Member! 

store.values()를 통해 member들이 쭉 반환이 된다.