Spring 입문 1

◆ 작업 환경

  • JAVA 11
  • IDE : Intelli J
  • Web Framework : Spring
  • OS : Windows

◆ 참고 사항

Controller, Service, Repository 패턴

Controller, Service, Repository 패턴은 정형화 되어있음

Controller = 외부 요청을 받음

Service = 비즈니스 로직을 만듦

Repository = 데이터 저장

Test 시, given, when, then 패턴을 사용하는 것에 익숙해지자

◆ Simple Member Manage System

컴포넌트 스캔, 자동 의존관계 설정 방식 사용

Controller

HomeController

MemberController : 회원 가입 / 조회 기능 제공

MemberForm : 회원 가입 관련 Form 제공

Service

MemberService : 회원 정보 등록 / 조회

Repository

MemberRepository : Interface (회원 등록, 이름으로 조회, ID로 조회, 전체 조회)

MemoryMemberRepository

Domain

Member : 회원 ID, Name 저장

Application

SpringApplication

Templates

home.html

/members/createMemberForm.html : 회원 가입

/members/memberList.html : 회원 조회

TestCase

Repository TestCase

Service TestCase

Application TestCase

◆ 처음부터 다시 만들어본 과정 브리핑

controller, domain, repository, service 디렉토리 만듦

1. Home.html과 HomeController 작성

(@Controller, @GetMapping(“/”), @Autowired)

2. Member domain 작성

– 저장할 회원 정보 private로 멤버 생성 (Getter, Setter)

3. MemberRepository interface 작성

( save, findById, findByName, findAll )

4. 위 interface를 implements한 MemoryMemberRepository 작성

– @Override 자동 생성

– <Long, Member>를 저장할 HashMap type의 store 객체 생성

– Id는 단순 Long ++sequence로 대체

– save(Member) : 받아온 객체에 Id를 ++sequence로 부여, HashMap에 .put( , )

– findById(Id) : return Optional.ofNullable(store.get(id))

– findByName(Name) : return store.values().stream()

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

.findAny();

– findAll() : return new ArrayList<>(store.values())

– clearStore() : store.clear(); // test를 위한 store 비우기

5. MemberService 작성 (controller에서 repository의 메서드에 직접 접근 할 수 없도록 중간자 역할)

– 생성자로 memberRepository와 연결 (@Autowired)

– findByName()을 통한 중복 회원 검증 메서드 작성 (IllegalStateException)

– join(Member) : 회원가입 (중복 검증 메서드 포함)

– findMembers() : 전체 회원 조회

– findOne(Id) : 해당 Id의 회원 조회

6. MemberController 작성

– 생성자로 memberService와 연결 (@Autowired)

* 회원 가입

– @GetMapping createForm() : 회원가입 html로 이동

– html에서 사용자가 작성한 정보를 받아올 MemberForm 작성 (private String name + Getter/Setter)

– @PostMapping create(Member) : new Member – setName – join – “redirect:/”(Home 화면으로)

* 회원 조회

– @GetMapping list(Model) : service의 findMembers()를 통해 repository의 전체 회원 조회

– service의 findMembers()를 통해 List<Member>를 받아옴

– model에 addAttribute( , )를 통해 받아온 list<>를 추가

– thymeleaf의 th:each문 : for문과 유사하게 받아온 model의 list 인덱스를 반복

– 회원을 조회할 수 있는 html문 작성

◆ 이번주 IntelliJ 단축키

– Extract Variable = Crtl + Alt + V (저장 객체 자동 작성)

– Extract Method = Crtl + Alt + M (드래그를 범위 method로 작성)

– Declaration or Usage = Crtl + B (정의된 method로 이동)

– Creat Test = Ctrl + Shift + T (Test Case 자동 생성)

– 주석 처리 = Ctrl + /

– ReRun = Shift + F10

– Constructor = Alt + Insert (생성자 등 여러가지 자동 생성)

◆ 그 외 사항

포스팅 계획 – 3월 : 스프링 / 4월 : 정처기 실기(+중간) / 5월 : 스프링 / 6월 : 졸업 작품(+기말) / 7월 : 스프링 / 8월 ~ : 알고리즘과 CS를 포함한 미정

댓글 남기기