분류 전체보기 24

15장. 댓글 컨트롤러와 서비스 만들기

15.1 댓글 REST API의 개요REST 컨트롤러: 댓글 REST API를 위한 컨트롤러로 서비스와 협업, 클라이언트 요청을 받아 응답하며 뷰(view)가 아닌 데이터 반환서비스: REST 컨트롤러와 리파지터리 사이에서 비즈니스 로직, 즉 처리 흐름을 담당하며 예외 상황이 발생했을 때 @Transactional로 변경된 데이터 롤백DTO: 사용자에게 보여 줄 댓글 정보를 담은 것, 단순히 클라이언트와 서버 간에 댓글 JSON 데이터 전송엔티티: DB 데이터를 담는 자바 객체로 엔티티를 기반으로 테이블 생성, 리파지터리가 DB 속 데이터를 조회하거나 전달할 때 사용리파지터리: 엔티티를 관리하는 인터페이스로 데이터 CRUD 등의 기능 제공, 서비스로부터 댓글 CRUD 등의 명령을 받아 DB에 보내고 응답..

14장. 댓글 엔티티와 리파지터리 만들기

14.1 댓글 기능의 개요하나의 게시글에 수많은 댓글이 달림 → one-to-many, 일대다(1:n) 관계 댓글 입장에서는 여러 댓글이 하나의 게시글에 달림→ many-to-one, 다대일(n:1) 관계 article 테이블idcontenttitle11111가가가가22222나나나나33333다다다다4댓글 고당신의 인생 영화는?5댓글 고고당신의 소울 푸드는?6댓글 고고고당신의 취미는? comment 테이블idbodynicknamearticle_id1굿 윌 헌팅Park42아이 엠 샘Kim43쇼생크 탈출Choi44치킨Park55샤브샤브Kim56초밥Choi57조깅Park68유튜브 시청kim69독서Choi6 article 테이블과 comment 테이블이 id를 기준으로 관계를 맺고 있음두 테이블 모두 자신을 대표..

13장. 테스트 코드 작성하기

13.1 테스트란테스트: 프로그램의 품질을 검증하는 것, 의도대로 프로그램이 잘 동작하는지 확인하는 과정 테스트 코드 작성예상 데이터 작성하기실제 데이터 획득하기예상 데이터와 실제 데이터 비교해 검증하기작성한 코드가 테스트를 통과하면 지속적인 리팩터링, 실패하면 디버깅 테스트 코드는 다양한 경우를 대비해 작성 (테스트 케이스)테스트 케이스는 성공할 경우 뿐 아니라 실패할 경우도 고려하여 세부적으로 작성 테스트 주도 개발(TDD, Test Driven Development): 일단 테스트 코드를 만든 후 이를 통과하는 최소한의 코드부터 시작해 점진적으로 코드를 개선 및 확장해 나가는 개발 방식  13.2 테스트 코드 작성하기테스트 코드 기본 틀 만들기service > ArticleService 열기테스트하..

12장. 서비스 계층과 트랜잭션

12.1 서비스와 트랜잭션의 개념서비스: 컨트롤러와 리파지터리 사이에 위치하는 계층, 서버의 핵심 기능(비즈니스 로직)을 처리하는 순서를 총괄트랜잭션: 쪼갤 수 없는 업무 처리의 최소 단위, 성공해야 하는 일련의 과정롤백: 트랜잭션이 실패로 돌아갈 경우 진행 초기 단계로 돌리는 것  12.2 서비스 계층 만들기ArticleApiController.java 모두 주석 처리 후, 서비스 계층을 추가하여 컨트롤러, 서비스, 리파지터리의 역할 분업 api/ArticleApiController.java에 서비스 객체 주입 public class ArticleApiController { @Autowired private ArticleService articleService;}  ArticleServie ..

5장. 게시글 읽기: Read

5.1 데이터 조회 과정DB에 저장된 데이터를 웹 페이지에 출력하는 과정사용자가 데이터를 조회해 달라고 웹 페이지에서 URL 요청을 보냄서버의 컨트롤러가 요청을 받아 해당 URL에서 찾으려는 데이터 정보를 리파지터리에 전달리파지터리는 정보를 가지고 DB에 데이터 조회를 요청DB는 해당 데이터를 찾아 엔티티로 반환반환된 엔티티는 모델을 통해 뷰 템플릿으로 전달됨최종적으로 결과 뷰 페이지가 완성되어 사용자의 화면에 출력됨 5.2 단일 데이터 조회하기URL 요청받기DB에 저장한 데이터를 웹 페이지에서 보려면 해당 출력 페이지에 접속해야 함URL 요청이 필요 게시글 n번 id를 조회할 때 localhost:8080/articles/n 에 접속하는 식으로 URL 요청을 받을 예정 아직 요청을 받아 줄 컨트롤러가 ..

4장. 롬복과 리팩터링

4.1 롬복이란롬복: 코드를 간소화해주는 라이브러리롬복을 사용하면 필수 코드를 간편하게 작성할 수 있음 로깅: 프로그램의 수행 과정을 기록으로 남기는 것리팩터링: 코드의 기능에는 변함이 없이 코드의 구조 또는 성능을 개선하는 작업  4.2 롬복을 활용해 리팩터링하기롬복 설치하기1. firstproject > src 아래에 build.gradle 파일명 앞에 코끼리 아이콘이 존재함을 볼 수 있음이 파일에 롬복 추가 → 더블 클릭하여 코드 열기 2. dependencies {} 블록에 아래의 코드 추가compileOnly 'org.prjectlombok:lombok'annotationProcessor 'org.projectlombok:lombok' 3.  편집기에 나타난 코끼리 모양의 새로고침 아이콘 클릭(..

3장. 게시판 만들고 새 그 작성하기: Create

3.1 폼 데이터란폼 데이터: HTML 요소인 태그에 실려 전송되는 데이터  태그는 웹 브라우저에서 서버로 데이터를 전송할 때 사용어디로(where), 어떻게(how) 보낼지를 적어서 보냄  태그에 실어서 보낸 데이터는 서버의 컨트롤러가 DTO(Data Transfer Object) 객체에 담아 받음DTO로 받은 데이터는 최종적으로 데이터베이스에 저장됨  3.2 폼 데이터를 DTO로 받기입력 폼 만들기1. src > main > resources > templates 디렉터리에서 articles 디렉터리 생성 후 new.mustache 뷰 페이지 생성 2. 코드 작성{{>layouts/header}} Submit{{>layouts/footer}}  컨트롤러 만들기1. src > ma..

2장. MVC 패턴 이해와 실습

2.1 뷰 템플릿과 MVC 패턴뷰 템플릿화면을 담당하는 기술, 웹 페이지(View)를 하나의 틀(Template)로 만들고 여기에 변수를 삽입해 서로 다른 페이지로 보여줌1장에서 스프링 부트 프로젝트를 만들 때 추가한 Mustache 도구가 뷰 템플릿을 만드는 도구임 MVC 패턴화면을 담당하는 뷰 템플릿을 '뷰'라고도 부름컨트롤러(Controller)는 클라이언트의 요청에 따라 서버에서 처리하는 역할모델(Model)은 데이터를 관리하는 역할 웹 페이지를 화면에 보여주고(View), 클라이언트의 요청을 받아 처리하고(Controller), 데이터를 관리하는(Model) 역할을 나누는 기법을 MVC 패턴(Model-View-Controller Pattern)이라고 함  2.2 MVC 패턴을 활용해 뷰 템플릿..

1장. 스프링 부트 시작하기

1.1 스프링 부트란자바 웹 프로그램을 쉽고 빠르게 만들기 위한 도구 1.2 스프링 부트 개발 환경 설정하기개발 환경 설정 과정1. JDK (자바 코드의 번역과 실행을 담당하는 자바 개발 도구) 2. IDE (ex. 이클립스, 인텔리제이) 설치3. 스프링 부트 프로젝트 만들기  JDK 설치하기1. cmd에 java -version으로 설치되어 있는지 확인2. OpenJDK 설치 https://adoptium.net/temurin/releases 에 접속하여 다운로드Windows/x64/JDK/17 - LTS3. install4. JDK 잘 설치되었는지 1. 과정으로 확인  IDE 설치하기https://www.jetbrains.com/ko-kr/idea/download 에 접속하여 다운로드 (인텔리제이) ..

섹션8. AOP

AOP가 필요한 상황모든 메소드의 호출 시간을 측정하고 싶다면?공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService 회원 조회 시간 측정 추가package hello.hellospring.service;import hello.hellospring.domain.Member;import hello.hellospring.repository.MemberRepository;import hello.hellospring.repository.MemoryMemberRepository;import org.springframework.beans.factory.annotation.Autowired;i..