1. 댓글 기능의 개요1. 댓글과 게시글의 관계하나의 게시글에 수많은 댓글이 달린다. 이러한 관계를 일대다(1:n) 관계라고 한다. 거꾸로 댓글 입장에서 여러 댓글이 하나의 게시글에 달리는 것은 다대일(n:1) 관계라고 한다. article : comment = 1 : n 관계article_id와 같이 자신을 대표하난 속성을 기본키(PK, Primary Key)라고 하고 comment 테이블에서 article_id와 같이 연관 대상을 가리키는 속성을 외래키(FK, Foreign Key)라고 한다. 2. 댓글 엔티티와 리파지터리 설계엔티티: DB 데이터를 담는 자바 객체로, 엔티티를 기반으로 테이블 생성리파지터리: 엔티티를 관리하는 인터페이스로 데이터 CRUD 등의 기능 제고 Repository: 최상의 ..
1. 테스트란?테스트(test)란?프로그램의 품질을 검증하는 것으로, 의도대로 프로그램이 잘 동작하는지 확인하는 과정이다. 테스트 도구를 이용해 반복적인 검증 절차를 자동화할 수 있어서 다양한 문제를 미리 예방하고 코드 변경 등으로 인해 발생하는 부작용도 조기에 발견할 수 있다. 테스트 도구를 활용해 코드를 검증한다는 것은 테스트 코드를 작성해서 실행한다는 뜻이다. 테스트 코드의 과정은 3단계로예상 데이터 작성하기실제 데이터 획득하기예상 데이터와 실제 데이터 비교해 검증하기작성한 코드가 테스트를 통과하면 지속적인 리팩터링으로 코드를 개선한다. 테스트를 통과하지 못하면 잘못된 부분을 찾아 고치는 디버깅(debugging)을 해야 한다. 테스트 코드는 다양한 경우를 대비해 작성한다. 이를 테스트 케이스(t..
1. 서비스와 트랜잭션의 개념서비스(service)란?컨트롤러와 리파지터리 사이에 위치하는 계층으로, 서버의 핵심 기능(비즈니스 로직)을 처리하는 순서를 총괄한다.ex) 컨트롤러 == 웨이터 / 서비스 == 주방장 / 보조 요리사 == 리파지토리 트랜잭션(transaction)이란?모두 성공해야 하는 일련의 과정(쪼갤 수 없는 업무 처리의 최소 단위)+ 롤백(rollback)트랜잭션이 실패로 돌아갈 경우 진행 초기 단계로 돌리는 것 ※ 1인 2역을 하는 REST 컨트롤러복잡한 처리 과정이 아니라서 컨트롤러 혼자 2역을 수행해도 충분한데 일반적으로 웹 서비스는 컨트롤러와 리파지터리 사이에 서비스 계층을 두어 역할 분업2. 서비스 계층 만들기1. 컨트롤러, 서비스, 리파지터리의 역할을 분업com.examp..
1. REST API의 동작 이해HTTP 요청 메시지와 응답 메시지의 구조REST: HTTP URL로 서버의 자원을 명시하고, HTTP 메서드(POST, GET, PATCH/PUT, DELETE)로 해당 자원에 대해 CRUD(생성, 조회, 수정, 삭제)하는 것을 말한다.API: 클라이너트가 서버의 자원을 요청할 수 있도록 서버에서 제공하느 인터페이스이다.2. REST API의 구현 과정REST API를 구현하려면 REST API의 주소, 즉 URL을 설계해야된다.조회 요청: /api/articles or /api/articles/{id} -> GET생성 요청: /api/articles -> POST수정 요청: /api/articles/{id} -> PATCH삭제 요청: /api/articles/{id..
1. REST API와 JSONREST API(Representation State Transfer API)는 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식이다. REST API 방식에서는 HTTP 요청에 대한 응답으로 서버의 자원을 반환한다. 서버는 클라이언트의 요청에 대한 응답으로 화면이 아님 데이터를 전송한다. 이때 사용하는 응답 데이터는 JSON(JavaScrigt Object Notation)이다.JSON 데이터는 키(key)와 값(value)으로 구성된 정렬되지 않은 속성의 집합이다.{ "name": "예술", "breeds":"말트리버", "age":"12"}※ API 이란?애플리케이션을 간편히 사용할 수 있게 하는, 미리 정해진 일종의 약속으로, ..
1. JPA 로깅 설정하기서버에서 데이터의 생성, 조회, 수정, 삭제 등을 요청하면 JPA의 리파지터리가 DB에 해당 요청을 전달한다. 요청을 받은 DB는 자신의 언어, 즉 SQL로 쿼리를 작성해 테이블 속 데이터를 관리한다. 여기서 쿼리(query)는 DB에 정보를 요청하는 구문을 말한다. 로깅이란?시스템이 작동할 때 당시의 상태와 작동 정보를 기록하는 것 JPA 로깅 설정resources > application.properties 코드 추가로깅 레벨은 7단계로 나누어진다.TRACE(레벨 1): DEBUG 레벨보다 더 상세한 정보DEBUG(레벨 2): 응용 프로그램을 디버깅하는 데 필요한 세부 정보INFO(레벨 3): 응용 프로그램의 순조로운 진행 정보WARN(레벨 4): 잠재적으로 유해한 상황 정보..
1. 데이터 삭제 과정1. 클라이언트가 HTTP 메서드로 특정 게시글의 삭제를 요청2. 삭제 요청을 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터를 찾아 삭제 (기존에 데이터가 있을 경우)3. 삭제가 완료되면 클라이언트를 결과 페이지로 리다이렉트 ※ 결과 페이지로 리다이렉트할 때 클라이언트에 삭제 완료 메시지 띄우려면 RedirectAttributes 클래스 사용2. 데이터 삭제하기1. Delete 버튼 추가하기src > main > resources > templates > articles > show.mustache 코드 추가 2. Delete 요청을 받아 데이터 삭제하기controller/AriticleController.java 코드 추가 결과 1 결과 2 3. 삭제 완료 메시지 남기기c..
1. 데이터 수정 과정1. 만들고 기조 데이터 불러오기에서 [Edit] 버튼을 클릭요청을 받은 컨트롤러는 해당 글의 id로 DB에서 데이터를 찾아 가져오기컨트롤러는 가져온 데이터를 뷰에서 사용할 수 있도록 모델을 등록모델에 등록된 데이터를 에서 보여준다. 그러면 사용자가 내용을 수정할 수 있는 상태2. 데이터를 수정해 DB에 반영한 후 결과를 볼 수 있게 로 리다이렉트하기폼데이터(수정 요청 데이터)를 DTO에 담아 컨트롤러에서 받는다.DTO를 엔티티로 변환DB에서 기존 데이터를 수정 데이터로 갱신수정 데이터를 로 리다이렉트2. 만들기1. 에 Edit 버튼 만들기src > main > resources > templates > articles > show.mustache 코드 추가 2. Edit 요청을..
1. 링크(link)와 리다이렉트(redirect)링크(link)란?미리 정해 놓은 요청을 간편히 전송하는 기능으로, 보통 페이지 이동을 위해 사용. or 태그로 작성하며 클라이언트가 링크를 통해 어느 페이지로 이동하겠다고 요청하면 서버는 결과 페이지를 응답 리다이렉트(redirect)란?클라이언트가 보낸 요청을 마친 후 계속해서 처리할 다음 요청 주소를 재지시하는 것. 이를 통해 분리된 기능을 하나의 연속적인 흐름으로 연결. 리다이렉트(재요청)를 지시받은 클라이언트는 해당 주소로 다시 요청을 보내고 서버는 이에 대한 결과를 응답2. 페이지 연결하기1. 새 글 작성 링크 만들기src > main > resources > templates > articles > index.mustache 에New Art..
1. 데이터 조회 과정1. 사용자가 데이터를 조회해 달라고 웹 페이지에서 URL 요청을 보낸다.2. 서버의 컨트롤러가 요청을 받아 해당 URL에서 찾으려는 데이터 정보를 리파지토리에 전달3. 리파지토리는 정보를 가지고 DB에 데이터 조회를 요청4. DB는 해당 데이터를 찾아 이를 엔티티로 반환5. 반환된 엔티티는 모델을 통해 뷰 템플릿으로 전달6. 최종적으로 결과 뷰 페이지가 완성돼 사용자의 화면에 출력2. 단일 데이터 조회하기1. 사용자가 입력한 데이터를 조회하려면 먼저 URL 요청을 해야한다. 2. URL에 포함된 id를 show() 메서드의 매개변수로 받는데, 이때 매개변수 앞에 @PathVariable 어노테이션을 붙인다. 그래야 URL의 id를 가져올 수 있다. 3. 리파지터리에서 DB에 저장된..
