📖오늘 공부한 내용
점프 투 스프링부트(QnA서비스)
2-01. ~ 2-11.까지 흐름
- 프로젝트 생성
- 설정 세팅
- 메인 페이지 만들기
(메인 컨트롤러 생성→url매핑(/sbb2))
- DB 연결.(MariaDB)
- QnA서비스의 엔티티 구상(qestion, answer)
- 리포지터리 생성(데이터베이스 테이블에 접근하는 메서드들 사용하기 위해.)
- DB와 잘 연결되었는지 테스트코드를 통해 확인. 데이터 조회, 생성, 수정, 삭제 기능(기본적으로 제공하지 않는 메서드를 이용할 경우 리포지터리의 인터페이스 변경 필요.)
- DB세션만료로 오류 발생시
@Transactional
애너테이션 사용.
- 도메인 별로 패키지 정리(분류)
- 질문 목록 페이지 만들기(QuestionController생성→url매핑(/question/list)→question_list.html생성)
- 타임리프 템플릿 엔진 사용을 위한 설치
- Controller에서 Model 클래스를 사용해 템플릿에서도 쓸 수 있게 함.
@RequiredArgsConstructor
는 롬복이 제공하는 애너테이션으로 final이 붙은 속성을 포함하는 생성자를 자동으로 생성하는 역할.→final이 붙은 QuestionRepository를 위해 QuestionController에 붙여줌.
- 타임리프 사용 시 th에 요류가 뜬다면 사진처럼 체크 표시 해제.
- root로 들어올 시 리다이렉트 이용하여 /question/list로 이동.(```return "redirect:/question/list"`)
- 컨트롤러에서 리포지터리를 직접 호출X, 중간에 서비스를 두어 데이터 처리 해야함.→ QuestionService생성.
Controller -> Service -> Repository
구조로 데이터 처리
- 질문 상세 페이지 만들기(질문 목록 클릭시 상세화면 호출되도록 html코드 수정 → url매핑(/question/detail/{id})→question_detail.html생성)
- 답변 등록 버튼 만들기(답변 등록 버튼 question_detail.html에 만들고 버튼 누르면
/answer/create/${question.id}
으로 가도록 함. → AnswerController생성 → url매핑(/answer/create/{id} → 등록한 답변 저장을 위해 AnswerService생성 → 답변 저장O, 질문 상세 페이지에 답변 표시하기 위해 question_detail.html 수정.)
❓궁금한 내용
질문1. detail url 매핑할 때는 왜 value값을 지정해주는지?@GetMapping(value = "/question/detail/{id}")
→ value를 생략해 줘도 된다고 함. 그럼 안쓴거는 다 생략한건지 아니면 value를 쓰는 기준이 있는데 생략해서 구분이 안가는 건지.
질문2. Model의 의미가 템플릿에서 사용할 수 있도록 해주는 것이 끝인가?
질문3. Bean의 의미와 역할?
질문4. Get, Post 둘 다 해주는 이유?
질문5. Optional은 언제 사용?