스프링 JAVA의 웹 프레임워크이다. Java 언어를 기반으로 사용한다. Java로 다양한 어플리케이ㅐ션을 만들기 위한 프로그래밍 틀이다. Java의 활용도가 높아지면서 JSP, MyBatis, JPA등의 기술이 생겨났다. Spring은 앞서 말한 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임워크이다. 프레임워크(FrameWork) 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조이며, 개발에 있어 하나의 뼈대 역할을 한다. 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 커넥션 등의 기능들을 위해 뼈대를 제공한다. 구체적인 설계와 구현을 재사용이 가능하게끔 상호 협력하는 클래스와 인터페이스의 집합이다. 라이브러리(Library) 라이브러리는 주로 소프트웨어를 개발..
에러 원인 Mybatis 사용 시 Where절에 있는 ${id}가 문자가 아닌 컬럼으로 인식되어 에러가 발생했다. ${id}를 "${id}"로 바꿔주었더니 해결되었다. 별 것 아닌 실수를 줄이는 연습을 많이 해야할 것 같다.
Spring 회원 가입 구현 도중 중복 체크 버튼을 눌렸을 때 ajax로 호출한 URL에서 boolean 타입으로 return을 하는 과정에서 에러가 발생한 것 같다. JSP $('#btn').on('click',function(){ let email = $('input[name=email]').val(); //이메일 올바르게 쓰지 않았을 때 바로 리턴 if(!email.includes('@')) return $('#idcheck').text('올바른 이메일을 입력 해 주세요'); //ajax로 email보내기 -> dao로 보낼 예정 $.ajax({ url : 'emailCheck', data : {'email' : email}, // 입력한 email data dataType : 'text', // ..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 답변 개수 표시하기 question_list.html 템플릿에 코드를 추가하자. (... 생략 ...) (... 생략 ...) th:if="${#lists.size(question.answerList) > 0}"로 답변이 있는지 조사하고 th:text="${#lists.size(question.answerList)}"로 답변 개수를 표시했다. #list.size(이터러블객체)는 이터러블 객체의 사이즈를 반환하는 타임리프의 유틸리티이다.
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 오류 메시지 공통 템플릿 오류 메시지를 표시하는 공통 템플릿을 작성하자 파일 경로 : /practice/src/main/resources/templates/form_errors.html 출력할 오류 메세지 부분에 th:fragment="formErrorsFragment" 속성을 추가했다 필요한 템플릿에 적용하기 question_form.html 질문등록 제목 내용 타임리프의 th:replace 속성을 사용하면 공통 템플릿을 템플릿 내에 삽입할수 있다. div 엘리먼트를 form_errors.html 파일의 th:fragment 속성명이 formErrorsFragmen..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전입니다. 질문 상세 링크 추가하기 question_list.html을 다음과 같이 수정하자 제목 작성일시 타임리프에서 링크의 주소는 th:href속성을 사용한다. URL 주소를 나타낼 때 반드시 @{URL}형식을 지켜야 한다. 문자열과 자바 객체의 값을 더할 때는 반드시 | | 기호로 좌우를 감싸주어야 한다. 타임리프는 문자열을 연결할 때 | 문자를 사용한다 질문 상세 구현하기 Question 데이터를 조회하기 위해 QuestionService를 수정하자 (... 생략 ...) import java.util.Optional; import com.example.board.Data..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전입니다. 서비스가 필요한 이유 여태까지 QuestionController에서 QuestionRepository를 직접 사용하여 질문 목록 데이터를 조회했다. 하지만 대부분의 규모있는 스프링부트 프로젝트는 컨트롤러에서 리포지터리를 직접 호출하지 않는다. 중간에 서비스(Service)를 두어 데이터를 처리한다. 서비스는 스프링에서 데이터 처리를 위해 작성하는 클래스이다. 서비스는 왜 필요할까? 모듈화 예를들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로 만들어 두면 컨트롤러에서는 해당 서비스를 호출하여 사..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전입니다. 데이터 조회하여 템플릿에 전달하기 질문 목록을 조회하기 위해서는 Question 리포지터리를 사용해야 한다. Question 리포지터리로 조회한 질문 목록은 Model 클래스를 사용하여 템플릿에 전달할수 있다. package com.example.board.Question; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping..