우리가 원하는 질문 목록은 다음 주소에 접속할 때 동작해야 한다. 로컬 서버를 실행하고 웹 브라우저에서 http://localhost:8080/question/list에 접속해 보자. 아마 다음과 같은 404 오류페이지가 나타날 것이다. 404 오류 해결하기 404 오류를 해결하려면 /question/list URL에 대한 매핑이 있는 컨트롤러가 필요하다. QuestionController.java 파일을 다음과 같이 신규 작성하자. [파일명:/sbb/src/main/java/com/mysite/sbb/question/QuestionController.java] package com.mysite.sbb.question; import org.springframework.stereotype.Controlle..
이제 본격적으로 SBB를 만들어 보자. 다음으로 만들 기능은 질문 목록이다. 하지만 그에 앞서 패키지 정리가 필요해 보인다. 지금까지 우리가 작성한 파일은 다음처럼 com.mysite.sbb 패키지 안에 모두 모여 있다. 이렇게 하나의 패키지 안에 모든 자바파일을 넣고 관리하는 것은 바람직하지 않다. SBB는 도메인별로 패키지를 나누어 자바파일을 관리해 보자. 도메인은 "질문", "답변" "사용자" 처럼 굵직한 요구사항 또는 문제 영역을 대표하는 말이다. 따라서 SBB 프로젝트의 도메인은 다음과 같이 구성할수 있다. question - 질문 (com.mysite.sbb.question) answer - 답변 (com.mysite.sbb.answer) user - 사용자 (com.mysite.sbb.use..
리포지터리 엔티티만으로는 데이터베이스에 데이터를 저장하거나 조회 할 수 없다. 데이터 처리를 위해서는 실제 데이터베이스와 연동하는 JPA 리포지터리가 필요하다. 리포지터리란? 리포지터리는 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메소드들(예: findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 리포지터리이다. 다음과 같이 QuestionRepository 인터페이스를 생성하자. [파일명:/sbb/src/main/java/com/mysite/sbb/QuestionRepository..
이제 SBB가 사용할 엔티티(Entity)을 만들어 보자. 엔티티는 데이터베이스 테이블과 매핑되는 자바 클래스를 말한다. SBB는 질문과 답변을 할 수 있는 게시판 서비스이다. 따라서 SBB에는 질문과 답변에 해당하는 엔티티가 있어야 한다. 엔티티는 모델 또는 도메인 모델이라고 부르기도 한다. 이것들을 구분하지 않고 테이블과 매핑되는 클래스를 엔티티라 지칭하겠다. 엔티티의 속성 구상하기 그렇다면 질문과 답변 엔티티에는 어떤 속성들이 필요한지 먼저 생각해 보자. 질문(Question) 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성명설명 id 질문의 고유 번호 subject 질문의 제목 content 질문의 내용 create_date 질문을 작성한 일시 마찬가지로 답변(Answer) 엔티티에는 최소한..
우리가 만들 SBB는 질문 답변 게시판이다. 질문이나 답변을 작성하면 데이터가 생성된다. 그러므로 데이터를 저장하거나 조회하거나 수정하는 등의 기능을 구현해야 한다. 웹 서비스는 데이터를 처리할 때 대부분 데이터베이스를 사용한다. 그런데 데이터베이스를 사용하려면 SQL 쿼리(query)라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요하다. 이때 ORM(object relational mapping)을 이용하면 자바 문법만으로도 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다. 이 책은 독자가 데이터베이스 개념이나 SQL 쿼리의 기초는 안다고 가정한다. 그러나 독자가 이런 기초지식이 없어도 이 책의 실습을 따라..
컨트롤러 URL 매핑을 추가하기 위해 MainController.java 파일을 다음과 같이 작성하자. [파일명:/sbb/src/main/java/com/mysite/sbb/MainController.java] package com.mysite.sbb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class MainController { @RequestMapping("/sbb") public void index() { System.out.println("index"); } } MainController 클래스에 @C..
현재 SBB 프로젝트는 HelloController.java와 HelloLombok.java 파일만 생성한 상태다. 그런데 이보다 규모를 갖춘 프로젝트를 만들고자 한다면 프로젝트 구조를 잘 이해해야 한다. 이번 장에서는 스프링부트 프로젝트의 구조와 파일들에 대해서 알아보자. 스프링부트 프로젝트의 전체 구조는 다음과 같다. src/main/java 디렉터리 src/main/java 디렉터리의 com.mysite.sbb 패키지는 자바 파일을 작성하는 공간이다. 자바 파일로는 HelloController와 같은 스프링부트의 컨트롤러, 폼과 DTO, 데이터 베이스 처리를 위한 엔티티, 서비스 파일등이 있다. SbbApplication.java 파일 모든 프로그램에는 시작을 담당하는 파일이 있다. 스프링부트 애플..
롬복 롬복(lombok)은 자바 클래스에 Getter, Setter, 생성자 등을 자동으로 만들어 주는 도구이다. SBB 프로젝트를 진행하면서 데이터를 처리하기 위한 엔티티 클래스나 DTO 클래스등을 사용해야 하는데 이때 클래스의 속성들에 대한 Getter, Setter를 만들어야 한다. 물론 Getter, Setter 메서드를 직접 만들어도 되지만 롬복(lombok)을 사용하면 좀 더 깔끔한 소스코드를 만들수 있다. 롬복 설치 롬복을 사용하려면 플러그인을 먼저 설치 해야한다. 다음의 URL에서 롬복 플러그인을 다운로드하자. https://projectlombok.org/download Download projectlombok.org 그리고 다운로드한 lombok.jar 파일을 다음과 같이 설치하자. j..