◆ 작업 환경
- 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를 포함한 미정