인프런 스프링 무료강의 참고
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/unit/49580
스프링 웹 개발 방법 3가지 - 정적 컨텐츠, MVC와 템플릿 엔진, API
정적 컨텐츠
- 서버에서 데이터를 받아 웹 브라우저로 넘겨주는 것이 아닌, 파일 그대로 웹브라우저에 넘겨주는 방식
- 프로그램을 구현할 수는 없다.
스프링 부트는 브라우저에서 요청받은 후 Controller를 먼저 확인하고, Static을 확인한다.
MVC와 템플릿 엔진
- Model, View, Controller
view는 화면을 그리는데에만 집중
controller는 비즈니스 로직 또는 내부적인걸 처리하는데 집중
model은 화면에 표시될 정보들을 전달하는데 집중
- 서버에서 html 변형 후 웹브라우저에 넘겨주는 방식
API
- 주로 jSon(key:value로 이루어진 구조)이라는 데이터 포멧으로 Http의 Body에 문자 내용을 직접 반환
- 스프링이 요청을 받았을 때 @ResponseBody가 붙어있고 객체로 받는다면 jSon방식(key:value)으로 데이터를 만들어서 응답에 반환한다.
회원 관리 예제
- 비즈니스 요구사항 정리
- 회원 도메인과 레포지토리 만들기
- 회원 레포지토리 테스트 케이스 작성
- 회원 서비스 개발
- 회원 서비스 테스트
1. 비즈니스 요구사항 정리
- 데이터 : 회원 ID, 이름
- 기능 : 회원 등록, 조회
- 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)
일반적인 웹 애플리케이션 계층 구조
Controller : 웹 MVC의 컨트롤러 역할
Service : 핵심 비즈니스 로직 구현
Repository : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
Domain : 비즈니스 도메인 객체. ex) 회원, 주문, 쿠폰 등 DB에 저장하고 관리됨
클래스 의존관계
- 아직 데이터 저장소가 선정되지 않았으므로 인터페이스로 구현 클래스 변경 가능하도록 설계한다.
- 데이터 저장소는 여러 종류 중 고민 중인 상황으로 가정
- 개발 진행을 위해 초기 단계에서는 구현체로 가벼운 메로리 기반의 데이터 저장소를 사용
2. 회원 도메인과 레포지토리 만들기
- domain(pakage) Member(class)에
객체(고유id와 사용자name을) 선언, Getter/Setter 구현
- 회원 레포지토리(repository)의 MemberRepository(interface) 생성
Optional : 반환값이 null일 때 처리해주는 기능
- MemoryMemberRepository 클래스 만들어서 위에 인터페이스를 구현
MemberRepository를 implements하고 메서드를 임포트
가져온 값을 저장할 메모리를 생성 -> 나머지는 주석 참고
4. 회원 서비스 개발
- 클래스 위에 @Service 어노테이션
- 회원 서비스는 회원 레포지토리와 도메인을 활용하여 실제 비즈니스 로직을 작성한다.
레포지토리는 단순히 저장소에 넣었다 뺐다 하는 느낌..?
서비스 클래스는 비즈니스에 가까운 네이밍을 하는 것이 중요!
- 이제 다시 잘 돌아가는지 테스트코드 작성
멤버 컨트롤러 작성
오늘 인텔리제이 멈춤현상 때문에 구글링을 해보다가 어떤 플러그인을 깔아서 실행을 해봤더니 인텔리제이가 꺼지고 실행이 되지 않았다...
재부팅도 해보고 재설치도 해봤지만 실행은 되지않았고
몇시간동안 별에별짓을 더 해보았지만 멘탈이 나갈 때 쯤 튜터님의 도움으로 인텔리제이를 강제설정하는 방법을 배워서 다시 설치했더니 무사히 켜졌다.
잘못 사용하면 큰일날수도 있다는 말씀에 사용 방법은 기억에서 지웠다.
앞으로 뭔지 잘 모르겠는건 하지말아야징...