[StringBoot] 공통템플릿 (13)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 이전 챕터에서 질문 등록과 답변 등록시 오류가 발생하면 다음과 같이 오류를 표시했다. 앞으로 추가적으로 만들 템플릿들에도 위와 같이 오류를 표시하는 부분이 필요하다. 이렇게 반복적으로 사용하는 문장은 공통 템플릿으로 만들고 필요한 부분에 삽입하여 쓸 수 있다면 편리하지 않을까? 이번 장에서는 위의 오류 메시지를 출력하는 부분을 공통 템플릿으로 작성하고 필요한 곳에 삽입하여 사용할 수 있도록 해보자. 오류 메시지 공통 템플릿 오류 메시지를 표시하는 공통 템플릿을 다음과 같이 작성하자. /src/main/resources/templates/form_errors.html 출력할 오류메시지 부분에 ..
[StringBoot] 질문 등록과 폼 (12)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 질문 등록 질문 등록을 하려면 먼저 "질문 등록하기" 버튼을 만들어야 한다. 다음처럼 질문 목록 하단에 버튼을 생성하자. question_list.html 번호 제목 작성일시 질문 등록하기 링크 엘리먼트( ... )이지만 부트스트랩의 btn btn-primary 클래스를 적용하면 버튼으로 보인다. 이제 "질문 등록하기" 버튼을 누르면 /question/create URL이 호출될 것이다. URL 매핑 그리고 컨트롤러에 /question/create에 해당되는 URL 매핑을 추가하자. package com.gosari.repick_project.question; import lombok.Req..
[StringBoot] 템플릿상속 (11)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 HTML에 익숙한 독자라면 눈치겠지만, 지금까지 작성한 질문 목록, 질문 상세 템플릿은 표준 HTML 구조가 아니다. 어떤 웹 브라우저를 사용하더라도 웹 페이지가 동일하게 보이고 정상적으로 작동 하게 하려면 반드시 웹 표준을 지키는 HTML 문서를 작성해야 한다. 표준 HTML 구조 표준 HTML 문서의 구조는 다음과 같아야 한다. [표준 HTML 구조의 예] (... 생략 ...) 표준 HTML 문서의 구조는 위의 예처럼 html, head, body 엘리먼트가 있어야 하며, CSS 파일은 head 엘리먼트 안에 링크 되어야 한다. 또한 head 엘리먼트 안에는 meta, title 엘리먼..
[StringBoot] 부트스트랩 (10)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 부트스트랩(Bootstrap)은 디자이너의 도움 없이도 개발자 혼자서 상당히 괜찮은 수준의 웹 페이지를 만들수 있게 도와주는 프레임워크이다. 부트스트랩은 트위터(Twitter)를 개발하면서 만들어졌고 현재 지속적으로 관리되고 있는 오픈소스 프로젝트이다. 부트스트랩을 적용하여 SBB 서비스를 이쁘게 만들어 보자. 부트스트랩 설치 우선 다음 URL에서 부트스트랩을 다운로드 하자. 부트스트랩 다운로드 - https://getbootstrap.com/docs/5.1/getting-started/download/ 점프 투 스프링부트부트스트랩 주의사항 부트스트랩은 3.x, 4.x, 5.x 등의 버전이 ..
[StringBoot] 스태틱 디렉터리와 스타일시트 (9)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 지금까지 질문 목록 화면과 질문 상세 화면을 만들었다. 하지만 좀 더 그럴싸한 화면을 만들기 위해서는 화면에 디자인을 적용해야 한다. 디자인을 적용하기 위해서는 스타일시트(stylesheet, CSS파일)를 사용해야 한다. 스태틱(static) 디렉터리 스타일시트 파일은 스프링부트의 스태틱 디렉터리에 저장해야 한다. 스타일시트 스타일시트 파일은 스태틱 디렉터리에 저장해야 한다. 스타일시트 파일(style.css)을 다음과 같이 작성하자. textarea{ width: 100%; } input[type=submit]{ margin-top: 10px; } /*질문상세화면 css*/ style.c..
[StringBoot] 답변등록 (8)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 질문 상세 링크 추 답변 등록 버튼 만들기 질문 상세 템플릿에 답변 저장을 위한 form, textarea, input 엘리먼트를 다음과 같이 추가하자. 버튼을 누르면 전송되는 form의 action은 타임리프의 "th:action" 속성으로 생성한다. 버튼을 누르면 POST 방식으로 /answer/create/ URL이 호출(submit)될 것이다. 하지만 아직 /answer/create/ URL에 대한 매핑이 없으므로 버튼을 누르면 다음과 같은 404 페이지가 나타난다. 이 오류를 해결하려면 답변 컨트롤러를 만들고 해당 URL에 대한 매핑을 처리해야 한다. 답변 컨트롤러 만들기 앞에서 질..
[StringBoot] 질문상세 (7)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 질문 상세 링크 추가하기 먼저 질문 목록의 제목을 클릭했을때 상세화면이 호출되도록 제목에 링크를 추가하자. 질문 목록 템플릿을 다음과 같이 수정하자. src/main/resources/templates/question_list.html 제목 작성일시 제목을 엘리먼트의 텍스트로 출력하던 것에서 링크로 변경했다. 타임리프에서 링크의 주소는 th:href 속성을 사용한다. 타임리프에서 th:href 처럼 URL 주소를 나타낼때는 반드시 @{ 문자와 } 문자 사이에 입력해야 한다. 그리고 URL 주소는 문자열 /question/detail/과 ${question.id} 값이 조합되어 /questio..
[StringBoot] 서비스 (6)
·
Follow Work/SpringbootBoard
참고 링크 : https://wikidocs.net/book/7601 오라클DB와 intelliJ로 작업하였습니다 우리는 QuestionController에서 QuestionRepository를 직접 사용하여 질문 목록 데이터를 조회했다. 하지만 대부분의 규모있는 스프링부트 프로젝트는 컨트롤러에서 리포지터리를 직접 호출하지 않고 중간에 서비스(Service)를 두어 데이터를 처리한다. 서비스는 스프링에서 데이터 처리를 위해 작성하는 클래스이다. 서비스(Service)가 필요한 이유 모듈화 예를들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로 만들어 두면 컨트롤러에서는 해당 서비스를 호출하여 사용하면 된다. 하지만 서비스로 만들지..