Back-End/Spring

[Spring MVC2][로그인 처리] - 회원가입 처리

얄루몬 2022. 5. 13. 12:48

💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://inf.run/vQHp

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com


[회원 관리 객체 생성 & 컨트롤러 생성]

  • 본래는 회원 도메인과 회원 레포지토리는 인터페이스로 만드는 것이 좋다.

[Member]

package hello.login.domain.member;

import lombok.Data;

import javax.validation.constraints.NotEmpty;

@Data
public class Member {

    private Long id;

    @NotEmpty
    private String loginId; //로그인 ID
    @NotEmpty
    private String name;//사용자 이름
    @NotEmpty
    private String password;
}

[MemberRepository]

package hello.login.domain.member;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.*;

//원래는 인터페이스로 관리하는게 좋음
@Slf4j
@Repository
public class MemberRepository {
    private static Map<Long, Member> store = new HashMap<>(); //static 사용
    private static long sequence = 0L;

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

    public Member findById(Long id){
        return store.get(id);
    }

    public Optional<Member> findByLoginId(String loginId){
//        List<Member> all = findAll();
//        for(Member m : all){
//            if(m.getLoginId().equals(loginId)){
//                return Optional.of(m);
//            }
//        }
//        return Optional.empty();

        //람다로 축약.
        return findAll().stream()
                .filter(m ->m.getLoginId().equals(loginId))
                .findFirst();
    }

    public List<Member> findAll(){
        return new ArrayList<>(store.values());
    }

    public void clearStore(){
        store.clear();
    }
}

 

[람다와 스트림]

  • 람다
    • 함수를 간단하게 표현한 것이다.
  • 스트림
    • 데이터 소스를 표준화된 방법으로 다루기 위함
  • 요즘은 람다와 스트림을 통해서 표현하는 것이 가능해야 한다니 열심히 ~ 연습해보자!

[회원 컨트롤러]

package hello.login.web.member;



import hello.login.domain.member.Member;
import hello.login.domain.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;

@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {
    private final MemberRepository memberRepository;

    @GetMapping("/add")
    public String addForm(@ModelAttribute("member") Member member){
        return "members/addMemberForm";
    }

    @PostMapping("/add")
    public String save(@Valid @ModelAttribute Member member, BindingResult result){
        if(result.hasErrors()){
            return "members/addMemberForm";
        }
        memberRepository.save(member);
        return "redirect:/";
    }
}

 

 

[검증 애노테이션 @NotNull @NotEmpty @NotBlank]

  • @NotNull
    • Null 허용 X
    • "" 허용 O
    • " " 허용 O
  • @NotEmpty
    • Null 허용 X
    • "" 허용 X
    • " " 허용 O
  • @NotBlank
    • Null 허용 X
    • "" 허용 X
    • " " 허용 X