로그인 기능을 개발하며 쿠키와 세션에 대해서 이해를 해봅시다.

로그인 요구사항

우리는 프론트 공부할려는게 아니니까 login-start로 하라고 한다.

패키지 구조는 웹과 도메인으로 나눴는데 핵심적인 역할은 도메인 컨트롤러 같은건 웹에 넣어버림

이러면 향후 웹을 다른 기술로 바꾸어도 도메인은 그대로 유지할수있어야한다.

이때 웹은 도메인에 의존하도록 도메인은 웹에다가 의존하지 않도록 만들어야지 바꿀때 편함

그니까 도메인에서 컨트롤러 호출하지말라고

회원가입

package hello.login.domain.member;

import lombok.Data;

import javax.validation.constraints.NotEmpty;

@Data
public class Member {
    private Long id;
    @NotEmpty
    private String loginId;
    @NotEmpty
    private String password;
    @NotEmpty
    private String name;
}

이걸 저장할수있는 공간이 필요하다

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<>();
    private static long sequence =0L;

    public Member save(Member member) {
        member.setId(++sequence);
        log.info("save : member ={}",member);
        store.put(member.getId(),member);
        return member;

    }

    public Member findById(Long id) {
        return store.get(id);
    }
    public List<Member> findAll(){
        return new ArrayList<>(store.values());
    }
    public Optional<Member> findByLoginId(String loginId) {
//        List<Member> members = findAll();
//        for(Member member : members){
//            if(member.getLoginId().equals(loginId)){
//                return Optional.of(member);
//            }
//        }
//        return Optional.empty();
        return findAll().stream().filter(member -> member.getLoginId().equals(loginId)).findFirst();
    }

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