Back-End 108

Chapter 04. 머스테치로 화면 구성하기 (2)

4.2 기본 페이지 만들기 먼저 스프링 부트 프로젝트에서 머스테치를 편하게 사용할 수 있도록 머스테치 스타터 의존성을 build.gradle에 등록 compile('org.springframework.boot:spring-boot-starter-mustache') 머스테치 : 스프링 부트에서 공식 지원하는 템플릿 엔진이다. 머스테치 파일 위치는 기본적으로 위의 위치에 둔다. -> 스프링 부트에서 자동으로 로딩함. 첫 페이지를 담당할 index.mustache를 templates 폴더를 생성해 넣어두기 index.mustache 스프링 부트로 시작하는 웹 서비스 이 머스테치에 URL을 매핑. URL 매핑은 당연하게 Controller에서 진행 -> web 패키지 안에 IndexController를 생성함 ..

Chapter 04. 머스테치로 화면 구성하기 (1)

4.1 서버 템플릿 엔진과 머스테치 소개 템플릿 엔진이란, 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 이야기. JSP, Freemarker -> 서버 템플릿 엔지니어 React, 뷰의 View 파일들 -> 클라이언트 템플릿 엔지니어 둘 모두 결과적으로 지정된 템플릿과 데이터를 이용하여 HTML을 생성하는 템플릿 엔진이지만 차이가 있음 ex) 자바스크립트에서 JSP나 Freemarker처럼 자바 코드를 사용할 순 없나요? $(document).ready(function(){ if(a=="1"){ } }); 이 코드는 if문과 관계없이 무조건 test를 콘솔에 출력함 -> 그 이유는 프론트엔드의 자바스크립트가 작동하는 영역과 JSP가 작동하는 영역이 다르기 때문인데 JSP를 ..

Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (5)

3.5 JPA Auditing으로 생성시간/수정시간 자동화하기 보통 엔티티에는 해당 데이터의 생성시간과 수정시간을 포함 언제 만들어졌는지, 언제 수정되었는지 등은 유지보수에 있어 굉장히 중요한 정보이기 때문 그렇다 보니 매번 DB에 삽입하기 전, 갱신하기 전에 날짜 데이터를 등록/수정하는 코드가 여기저기 들어가게 됨 // 생성일 추가 코드 예제 public void savePosts(){ ... posts.setCreateDate(new LocalDate()); postsRepository.save(posts); ... } 이런 단순하고 반복적인 코드가 모든 테이블과 서비스 메소드에 포함되어야 한다고 생각하면 어마어마하게 귀찮고 코드가 지저분해짐 -> 해결책으로 JPA Auditing을 사용 LocalD..

Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (4)

3.4 등록/수정/조회 API 만들기 API를 만들기 위해 총 3개의 클래스가 필요 Request 데이터를 받을 Dto API 요청을 받을 Controller 트랙잭션, 도메인 기능 간의 순서를 보장하는 Service (1) Web Layer 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역 이 외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역을 야기 (2) Service Layer @Service에 사용되는 서비스 영역 일반적으로 Controller와 Dao의 중간 영역에서 사용 @Transactional이 사용되어야 하는 영역 (3) Repository Layer Da..

인텔리제이 버전 낮추기 (ver 7.1 -> ver 4.10.2)

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책으로 공부하기 위해서 버전을 4.10.2로 낮추어 진행하는 것이 편하다 gradle -> wrapper -> gradle-wapper.properties 클릭 distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 이 코드로 최신 버전으로 되어있는 것을 확인할 수 있음 터미널을 열어 다음과 같이 입력해 준다 ./gradlew wrapper --gradle-version 4.10.2 성공적으로 버전을 다운시킨 것을 확인할 수 있다

Back-End/Issues 2022.03.12

Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (3)

3.3 Spring Data JPA 테스트 코드 작성하기 1. test 디렉토리에 domain.posts 패키지를 생성하고, 테스트 클래스는 PostsRepositoryTest란 이름으로 생성 PostsRepositoryTest에서는 다음과 같이 save, findAll 기능을 테스트한다. package com.jojoldu.book.springboot.domain.posts; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.conte..

Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (2)

3.2 프로젝트에 Spring Data JPA 적용하기 1. build.gradle에 다음과 같은 의존성들을 등록( dependencies에 ) implementation('org.springframework.boot:spring-boot-starter-data-jpa') /* spring-boot-starter-data-jpa -> 스프링 부트용 Spring Data JPA 추상화 라이브러리 -> 스프링 부트 버전에 맞춰 자동으로 JPA관련 라이브러리들의 버전을 관리 */ implementation('com.h2database:k2') /* h2 -> 인메모리 관계형 데이터 베이스 -> 별도의 설치 없이 프로젝트 의존성만으로 관리할 수 있음. -> 메모리에서 실행되기 때문에 애플리케이션을 재시작할 때마..

Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (1)

3.0 JPA (자바 표준 ORM) 어떻게 하면 관계형 데이터베이스를 이용하는 프로젝트에서 객체지향 프로그래밍을 할 수 있을까? JPA라는 자바 표준 Object Relational Mapping 기술을 사용하자! 3.1 JPA 소개 배경 객체를 관계형 데이터 베이스에서 관리하는 것이 중요 현대의 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소 (Oracle, MySQL, MSSQL 등을 쓰지 않는 애플리케이션은 거의 없음) SQL : 관계형 데이터베이스가 SQL만 인식할 수 있음 - 각 테이블마다 기본적인 CRUD(Create, Read, Update, Delete) SQL을 매번 생성해야 함. 패러다임 불일치 문제 -> 관계형 데이터베이스 : 어떻게 데이터를 저장할지 vs 객체지향 프로그..