[스프링부트 입문] 시리즈 #03 회원 관리 페이지 만들기

2023. 9. 1. 18:00·Back/Spring(Springboot)

스프링부트 입문 시리즈

#01 프로젝트 생성하기

#02 정적페이지 만들고 화면 띄우기 

#03 회원 관리 페이지 만들기 👈

#04 회원 리포지토리 테스트 케이스


회원관리 페이지는 다음과 같은 순서로 만든다

 

 

 

비즈니스 요구사항 정리

데이터: 회원ID, 이름

기능: 회원 등록, 조회

DB: 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)

 

스프링의 전반적인 구조를 이해하기 위해 단순한 비즈니스를 구현할 것이다

 

 

일반적인 웹 어플리케이션 구조

 

 

컨트롤러: 웹 MVC의 컨트롤러 역할

서비스: 핵심 비즈니스 로직 구현

리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리

도메인: 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

 

 

개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용한다

아직 데이터 저장소가 선정되지 않았기 때문에, 우선 인터페이스 구현 클래스를 변경할 수 있도록 설계했다

 

 

 

회원 도메인과 리포지토리 만들기

 

도메인 만들기

scr/main/java/yeon.hello_spring에서 마우스 우클릭 후

New - Package로 패키지를 생성한다

 

 

domain이라는 패키지 생성하고

 

 

domain - 우클릭 New - Class로 Member 클래스를 만든다

 

 

Alt + Shift + S를 누르면 다음과 같은 창이 뜬다

Generate Getters and Setter로

Getter/Setter 메소드 만들어준다

 

 

Member.java

package yeon.hello_spring.domain;

public class Member {
	
	private Long id;
	private String 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;
	}	
	
}

 

리포지토리 만들기

scr/main/java/yeon.hello_spring에서 마우스 우클릭 후

New - Package로 repository 패키지를 생성한다

 

패키지에서 우클릭 후 Interface를 만든다

 

MemberRepository.java

package yeon.hello_spring.repository;

import java.util.List;
import java.util.Optional;

import yeon.hello_spring.domain.Member;

public interface MemberRepository {
	
	Member save(Member member);
	
	Optional<Member> findById(Long id);
	Optional<Member> findByName(String name);
	
	List<Member> findAll();
}

 

MemberRepository 인터페이스에 정의해놓은 기능들은 구현체를 만들어 거기서 구현할 것이다

repository 패키지에서 우클릭 후에 MemoryMemberRepository 클래스를 만든다

 

클래스를 만들면 implements MemberRepository를 해 준 다음 

Alt + Shift + S를 누르고 Override/Implement Methods를 클릭한다

 

 

OK를 클릭하면 다음과 같이 자동으로 메소드가 생성된다

 

 

save()를 저장할 공간이 필요하다 Map을 사용해서 저장공간을 만들고

sequence는 순서(번호)를 저장

실무에서는  동시성 문제가 있을 수 있어서 공유되는 변수일 때는 ConcurrentHashMap을 써야된다고 한다

하지만 여기서는 예제이기 때문에 단순하게 HashMap을 사용했다

private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;

 

처음에 우리는 Member에 id와 name을 만들었다

name은 사용자가 직접 입력하는 값이고

id는 시스템이 정해준다

 

따라서 다음과 같이 id는 ++sequence를 통해 번호를 정해주고

store.put()을 통해 id를 Map에 저장한다

 

@Override
public Member save(Member member) {
	member.setId(++sequence);
	store.put(member.getId(), member);
	return member;   
}

 

findeById()는 회원을 찾는 기능인데

store.get(id)로 id를 받아오면 된다

 

@Override
public Optional<Member> findById(Long id) {		
	return store.get(id);
}

 

그치만 위에 코드처럼 작성하면 빨간줄로 에러가 뜨는 것을 확인 할 수 있는데

id 값이 null 값일 수도 있기 때문이다

그럴때는 Optional을 사용해 감싸주면 된다

 

	@Override
	public Optional<Member> findById(Long id) {		
		return Optional.ofNullable(store.get(id));
	}

 

findByName과 findAll은 다음과 같이 작성해주면 기능 구현은 모두 끝난다

 

@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());
}

 


스프링부트 입문 시리즈

#01 프로젝트 생성하기

#02 정적페이지 만들고 화면 띄우기 

#03 회원 관리 페이지 만들기 👈

#04 회원 리포지토리 테스트 케이스


 

저작자표시

'Back > Spring(Springboot)' 카테고리의 다른 글

[스프링부트 입문] 시리즈 #05 회원 서비스 개발 + 테스트  (0) 2023.09.05
[스프링부트 입문] 시리즈 #04 회원 리포지토리 만들기 + 테스트  (0) 2023.09.04
[스프링부트 입문] 시리즈 #02 정적페이지 만들고 화면 띄우기  (0) 2023.08.31
[스프링부트 입문] 시리즈 #01 프로젝트 생성하기  (0) 2023.08.30
[Spring] 빌드 관리 도구 : Maven과 Gradle의 차이  (0) 2023.08.23
'Back/Spring(Springboot)' 카테고리의 다른 글
  • [스프링부트 입문] 시리즈 #05 회원 서비스 개발 + 테스트
  • [스프링부트 입문] 시리즈 #04 회원 리포지토리 만들기 + 테스트
  • [스프링부트 입문] 시리즈 #02 정적페이지 만들고 화면 띄우기
  • [스프링부트 입문] 시리즈 #01 프로젝트 생성하기
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    csrvsssr
    Java
    과학기술인 번호 발급
    SSR
    java의 정석
    Spring
    과학기술인등록번호 조회
    과학기술인 등록번호 발급
    csr과ssr의 차이
    sql강의
    SQL강의 추천
    백엔드
    프론트엔드
    자바스크립트set
    강의 후기
    과학기술인번호 조회
    스프링부트
    React
    Next.js
    강의후기
    Next.js 필요성
    데이터베이스 강의
    springboot
    React Next.js
    서블릿
    과학기술인 등록
    javascript
    인프런
    김영한
    중복제거
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[스프링부트 입문] 시리즈 #03 회원 관리 페이지 만들기
상단으로

티스토리툴바