목록IT 일기 (상반기) (398)
겉바속촉
점프투스프링부트 2-09 목표 : 서비스 만들기 이제 질문 목록의 제목 링크를 누르면 질문 상세 화면이 보이게 할 것이다. 하지만 기능을 추가하기 전에 잠시 생각할 것이 있다. 우리는 QuestionController에서 QuestionRepository를 직접 사용하여 질문 목록 데이터를 조회했다. 하지만 대부분의 규모있는 스프링부트 프로젝트는 컨트롤러에서 리포지터리를 직접 호출하지 않고 중간에 서비스(Service)를 두어 데이터를 처리한다. 서비스는 스프링에서 데이터 처리를 위해 작성하는 클래스이다. 1. 서비스가 필요한 이유 서비스가 필요한 이유는 무엇일까? - 모듈화 예를들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로..
점프투스프링부트 2-08 목표 : 루트 URL 만들기 루트 URL은 http://localhost:8080 처럼 도메인명과 포트 뒤에 아무것도 붙이지 않은 URL을 말한다. 우리는 아직 루트 URL에 대한 매핑을 만들지 않았기 때문에 브라우저에서 루트 URL에 접속하면 다음과 같은 404 페이지가 나타난다. 이번에는 루트 URL 호출시 404 페이지 대신 질문 목록을 출력하도록 해보자. 다음과 같이 MainContrller를 수정하자. root 메서드를 추가하고 / URL을 매핑했다. 리턴 문자열 redirect:/question/list는 /question/list URL로 페이지를 리다이렉트 하라는 명령어이다. 스프링부트는 리다이렉트 또는 포워딩을 다음과 같이 할 수 있다. redirect: - UR..
점프투스프링부트 2-07 목표 : SBB의 핵심 기능인 질문 목록을 구현 우리가 원하는 질문 목록은 다음 주소에 접속할 때 동작해야 한다. 로컬 서버를 실행하고 웹 브라우저에서 http://localhost:8181/question/list에 접속해 보자. 아마 다음과 같은 404 오류페이지가 나타날 것이다. 1. 404 오류 해결하기 404 오류를 해결하려면 /question/list URL에 대한 매핑이 있는 컨트롤러가 필요하다. QuestionController.java 파일을 다음과 같이 신규 작성하자. [파일명:/sbb/src/main/java/com/mysite/sbb/question/QuestionController.java] package com.mysite.sbb.question; imp..
점프투스프링부트 Error 패키지 생성하고 파일들 옮겨주면서 import 경로가 꼬이기 시작했다... 그러면서 서버가 재기동이 되지 않기 시작해따...😢😢😢 every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property 라는 문구를 보여주기 시작했고 그때부터 열심히 구글링을 한 결과 해당 클래스의 @Id 어노테이션 항목을 봐야함을 알게되었다 기존에는 import org.springframework.data.annotation.Id; 라고 되어 있었으나 다음과 같이 고쳐주어야 함 import jakarta.persistence.Id; 그럼 재기동 깨끗하게 잘된다 근데 왜인지 찾아보니 스프링부트 버전 문제인 ..
점프투스프링부트 2-06 목표 : 도메인 별로 분류 하나의 패키지 안에 모든 자바파일을 넣고 관리하는 것은 바람직하지 않으므로 SBB는 도메인별로 패키지를 나누어 자바파일을 관리할 예정. 도메인은 "질문", "답변" "사용자" 처럼 굵직한 요구사항 또는 문제 영역을 대표하는 말이다. 따라서 SBB 프로젝트의 도메인은 다음과 같이 구성할수 있다. question - 질문 (com.mysite.sbb.question) answer - 답변 (com.mysite.sbb.answer) user - 사용자 (com.mysite.sbb.user) 이와 같은 기준으로 패키지를 생성하고 패키지에 맞도록 해당 파일들을 이동해 보자. 끄으으읕 ^_________^ 파일들이 깔끔해진 느낌!
점프투스프링부트 2-05 목표 : JPA를 활용한 데이터 처리 1. 리포지터리 엔티티만으로는 데이터베이스에 데이터를 저장하거나 조회 할 수 없다. 데이터 처리를 위해서는 실제 데이터베이스와 연동하는 JPA 리포지터리가 필요하다. 리포지터리는 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들(예: findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 리포지터리이다. 다음과 같이 QuestionRepository 인터페이스를 생성하자. [파일명:/sbb/src/main/java/com..
점프투스프링부트 2-04 목표 : 엔티티 이해하기 엔티티 👉 데이터베이스 테이블과 매핑되는 자바 클래스를 말한다. SBB는 질문과 답변을 할 수 있는 게시판 서비스이다. 따라서 SBB에는 질문과 답변에 해당하는 엔티티가 있어야 한다. 엔티티는 모델 또는 도메인 모델이라고 부르기도 한다. 여기서는 이것들을 구분하지 않고 테이블과 매핑되는 클래스를 엔티티라 지칭하겠다. 1. 엔티티의 속성 구상하기 그렇다면 질문과 답변 엔티티에는 어떤 속성들이 필요한지 먼저 생각해 보자. 질문(Question) 엔티티에는 최소한 다음과 같은 속성이 필요하다. 속성명 설명 id 질문의 고유 번호 subject 질문의 제목 content 질문의 내용 create_date 질문을 작성한 일시 답변(Answer) 엔티티에는 최소한 ..
점프투스프링부트 2-03 목표 : JPA 알기 만들어나갈 SBB는 질문 답변 게시판이기 때문에 질문이나 답변을 작성하면 데이터가 생성됨. 그러므로 데이터를 저장하거나 조회하거나 수정하는 등의 기능을 구현해야 한다. 웹 서비스는 데이터를 처리할 때 대부분 데이터베이스를 사용한다. 그런데 데이터베이스를 사용하려면 SQL 쿼리(query)라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요. 이때 ORM(object relational mapping)을 이용하면 자바 문법만으로도 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다. 1. ORM ORM = Object-Relational Mapping의 약자 SQL 쿼리와..
점프투스프링부트 2-02 목표 : 스프링부트 게시판(SBB)을 만들면서 스프링부트의 기능을 하나씩 알아가기 URL 매핑 이제 본격적으로 SBB 프로그램을 만들어 보자. 목표 : 브라우저에서 http://localhost:8080/sbb 페이지를 요청했을 때 "안녕하세요 sbb에 오신것을 환영합니다."라는 문자열을 출력하도록 만들어 보자. STS의 Boot Dashboard의 시작 버튼을 눌러 로컬서버를 먼저 구동하자. 그리고 그냥 한번 브라우저에서 http://localhost:8080/sbb 페이지를 요청해 보면 다음과 같이 에러메세지창이 뜹니다. 아마 위처럼 "Not found (404)" 라는 오류가 발생할 것이다. 여기서 404는 HTTP 오류코드 중 하나이다. 404 오류는 브라우저가 요청한 페..