FrameWork 13

블로그 화면 구성(feat. Thymeleaf)

Thymeleaf (타임리프)타임리프는 템플릿 엔진이다. 그럼 템플릿 엔진이란? 스프링 서버에서 데이터를 받아 우리가 보는 웹페이지, HTML상에 그 데이터를 넣어 보여주는 도구이다. 따라서 HTML과 함께 템플릿 엔진을 위한 문법을 살짝 섞어서 사용해야 한다.타임리프 표현식표현식설명${...}변수의 값 표현식#{...}속성 파일 값 표현식@{...}URL 표현식*{...}선택한 변수의 표현식. th:object에서 선택한 객체에 접근 타임리프 문법표현식설명예제th:text텍스트를 표현th:text=${person.name}th:each컬렉션을 반복할 때 사용th:each="person:${persons}"th:if조건이 true인 때만 표시th:if="${person.age}>=20"th:unless조..

블로그 기획하고 API 만들기 - 블로그 글 조회(개별 글), 삭제, 수정

블로그 글 전체 목록을 조회하는 API를 만들었으니, 이제는 글 하나의 상세 정보를 조회하는 api를 구현해보자.  블로그 글 조회 API 구현서비스 메서드 코드 작성 1. BlogService.java에 글 하나를 조회하는 메서드인 findById()메서드를 추가한다. 이 메서드는 DB에 저장되어 있는 ID를 이용하여 글을 조회한다. /** 메서드: DB에 저장된 ID를 사용하여 개별 글을 조회하는 메서드* param: Long id (DB의 번호)* return: Article 엔티티 반환, 없으면 IllegalAccessException 예외 발생* */public Article findById(long id) { return blogRepository.findById(id) ..

블로그 기획하고 API 만들기 - 블로그 글 목록 조회

글 추가하는 API를 만들었다. 이제는 추가한 글을 조회할 수 있는 API를 만들어보자.서비스 메서드 코드 작성 BlogService.java 파일에 db에 저장되어 있는 글을 모두 가져오는 findAll()메서드 추가/** 메서드: DB에 저장된 모든 글들을 조회하는 메서드**/public List findAll(){ return blogRepository.findAll();} /api/articles GET요청이 오면 글 목록을 조회할 findAllArticles() 메서드를 작성해보자.1. 응답을 위한 DTO 작성, DTO디렉터리에 ArticleReponse.java 파일 생성@Getterpublic class ArticleResponse { // 제목 private final St..

블로그 기획하고 API 만들기 - 블로그 글 추가

API, REST APIAPI란?네트워크에서 API는 프로그램 간에 상호작용을 위한 매개체를 말한다.식당을 비유로 들어보자.우리는 식당에 가면 주방으로 바로 가는 것이 아닌, 점원에게 주문을 요청하고, 점원은 주방에 가서 요리를 만들어달라고 요청한다. 그리고 요리가 완료되면 우리에게 음식이 서빙된다.손님(주문자, 주문 요청) -> 점원 (주방에 요리 요청) -> 주방(요리를 만들어서 다시 점원에게 전달) -> 점원(손님에게 요청에 맞는 요리를 서빙)여기서 손님은 클라이언트, 주방을 서버라고 생각하고, 점원을 API라고 생각하면 된다.웹 사이트에서도 마찬가지이다.사용자는 웹 사이트의 주소를 입력해서 '네이버 웹페이지 보여줘'라고 요청을 API에게 보낸다.API는 사용자의 요청을 받아서 서버로 들고 간다.서..

DBMS/ ORM/ 스프링 데이터 JPA 조회, 삭제, 추가 메서드, 쿼리 메서드 사용

DBMS(Database Management System)DBMS란?데이터베이스를 관리하기 위한 소프트웨어를 DBMS라고 한다.DB는 많은 사람들이 공유할 수 있어야 하므로 동시 접근을 할 수 있어야 한다.DBMS는 이런 요구사항을 만족하면서도 효율적으로 데이터베이스를 관리하고 운영한다.우리가 흔히 알고 있는 Oracle, MySQL 등도 DBMS이다.관계형, 객체=관계형, 도큐먼트형, 비관계형 등으로 분류되며 가장 많이 사용하는 DBMS는 관계형이다. 관계형 DBMS(RDBMS = Relational database management system)관계형 모델을 기반으로 하며 테이블 형태로 이루어진 데이터 저장소이다. 행과 열로 이루어져있다.회원 테이블이 있다고 가정하면 각 행은 고유의 키(id)를 가..

MockMvc를 사용하여 컨트롤러를 테스트하는 코드 작성해보기

이제 제대로 테스트 코드를 작성해보자. 1. TestController클래스의 이름에 클릭을 한 다음, ctrl + enter를 눌러서 [Create Test]를 누른다. 2. 테스트를 생성하면, 자동으로 test/java/패키지 아래에 테스트 파일이 생성된다.  3. 아래 코드 작성package me.jinsoyeong.springbootdeveloper;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.an..

스프링부트 3 테스트 코드 알아보기 (feat. JUnit, AssertJ)

테스트 코드란?테스트 코드는 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다.테스트 코드는 test 디렉토리에서 작업한다. (이전 글에 이미 디렉토리를 생성했다.)테스트 코드에도 다양한 패턴이 있는데, 그중 책에서 사용할 패턴은 given-when-then 패턴이다.given-when-then 패턴given: 테스트 실행을 준비하는 단계when: 테스트를 진행하는 단계then: 테스트 결과를 검증하는 단계 스프링부트 3에서 테스트 진행하기스프링 부트는 애플리케이션을 테스트하기 위한 도구와 애너테이션을 제공한다. 이전 글을 보면 나는 이미 spring-boot-starter-test 스타터에 테스트를 위한 도구를 사용하도록 설정해두었다.JUnit: 자바 프로..

스프링부트3 구조 이해하기 (feat. 디렉토리 구성, 의존성 추가, 계층별 구현, 요청-응답 과정)

웹 브라우저의 요청이 있으면, 이 요청을 **Controller클래스에서 받아 분기 처리를 하여 '어떤 요청'인지 확인하고 **Service 클래스에서 받은 요청에 맞는 작업을 실행하게 한다.(Service클래스의 메서드 호출)**Service 클래스에서는 Controller가 지정한 요청에 맞는 작업을 실행한다. 이를 위해 DB에서 데이터를 가져와야 하므로, 받은 요청에 맞는 데이터를 가져오기 위해 **Repository클래스의 메서드를 호출한다.**Repository메서드는 데이터베이스를 위한 클래스로, Member클래스로 구현한 클래스를 MemberRepository 클래스가 실제 테이블과 연결한다.Controller: 프레젠테이션 계층Serivce: 비즈니스 계층Repository: 퍼시스턴스 계..

생성한 스프링부트3 프로젝트 코드 뜯어보기

앞서 스프링부트3 프로젝트를 만들었었다.https://to-mypage.tistory.com/53  gradle 및 스프링 부트3 프로젝트 생성인텔리제이 설치 먼저 인텔리제이를 설치했다. 설치 방법은 여기를 참고바란다.https://to-mypage.tistory.com/51  gradle 프로젝트 생성 1. New Project 클릭 ➡️ Build system을 Gradle로 설정 ➡️ 'download JDK...to-mypage.tistory.com 이제 여기의 코드를 찬찬히 살펴보려고 한다. @SpringBootApplication 어노테이션의 의미package me.jinsoyeong.springbootdeveloper;import org.springframework.boot.SpringApp..

스프링부트3 기능 살펴보기 (feat. 어노테이션, 스프링부트 스타터)

예제 클래스 만들기(TestController.class)사용자가 url을 통해 /test GET요청을 하면, "Hello, world!"문자열을 반환하는 코드이다.서버를 재실행해주고, http://localhost:8080/test 로 접속해본다.  http://localhost:8080/testlocalhost: 현재 사용 중인 컴퓨터8080: 포트번호/test: @Getmapping 어노테이션으로 메서드와 매핑할 때 스프링 부트에서 설정한 경로  springboot starter 스프링부트 스타터 스프링부트 스타터는 의존성이 모여있는 그룹이다.스타터는 spring-boot-starter-{작업유형} 이라는 명명규칙이 있다.자주 사용하는 스타터spring-boot-starter-web: spring ..