항해 18일차
개인 프로젝트를 끝내고 팀 과제를 진행했다.
핵심 키워드를 정리하는 과제였고 추가로 개인 프로젝트를 하면서 중요하다고 생각한 키워드에 대해 정리하는 과제였다.
🔐 JPA?
Java Persistence API의 줄임말로 JAVA가 제공하는 API 이며 SQL을 쓰지 않고 Method를 통해 DB를 조작할 수 있다. 자바로 영구적(Persistence)으로 데이터를 저장하고 다루기 위해서 필요한 API라고 이해하면 된다. JPA는 JAVA로 데이터를 영구적으로 저장하고 다루기 위해서 여러가지 기능을 가지고 있다.
첫번째 기능은 JPA가 ORM 기술이라는 것이다. ORM은 Object Relational Mapping의 준말로 자바에서 만든 object를 데이터베이스의 테이블 형태로 변환하는 기술이다. 다시말해 우리가 JPA의 인터페이스에 따라서 object를 만들어서 데이터베이스에 보내면 자동으로 테이블로 바꿔준다.
두번째 기능은 JPA가 반복적인 CRUD(데이터 생성, 조회, 변경, 삭제)작업을 간단하게 만든다. 자바가 DB에 데이터를 요청하면 데이터를 자바가 이해할 수 있는 자바 object로 바꾸고 자바와 DB의 연결을 끊는 반복적인 과정을 JPA의 CRUD메서드를 통해서 반복하지 않고 생략할 수 있다.
🔐 Controller, Service, Repository?
-
Controller
- 클라이언트에서 받은 사이트 주소를 Mapping 시키고, 받은 정보들 Service에 전달해주는 역할
-
Service
- 클라이언트의 요구사항을 처리하주며 DB 정보가 필요할 때는 직접 DB에 접근하지 않고 Repository에게 넘겨준다.
- Repository
- DB를 직접 관리하고 CRUD작업을 수행한다.
🔐 restAPI의 put 과 patch 는 어떤 차이점이 있을까요? 어떤 경우에 사용하면 좋을까요?
- PUT 요청은 모든 리소스를 업데이트
- PATCH 요청은 일부 리소스를 업데이트한다.
- 아래와 같이 회원 정보가 있는 경우 회원명만 변경을 하는 경우 PUT,PATCH요청으로 결과를 확인할 수 있다.
{
name : "홍길동",
age : 19,
gender : "M"
}
- PUT 결과
{
name : "이순신",
age :
gender :
}
이름과, 나이, 성별을 모두 요청을 보내면 전체가 업데이트 되지만, 이름만 보내는 경우 나머지 나이,성별 값은 null값으로 변한다.
- PATCH 결과
{
name : "이순신",
age :19,
gender : "M"
}
나이, 성별의 값은 유지되고 이름 값만 업데이트 된다.
DIY Section
🔑 Q1. 객체 지향
객체 지향이란?
- 현실에 존재하는 사물을 있는 그대로 모델링하여 이들의 행위와 속성을 정의하고 절자척이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하는 것
- 장점
- 코드 재사용이 용이 => 기존에 만들어졌거나 다른사람이 만든 클래스를 재사용할 수 있고 상속을 통해 확장 가능
- 유지 보수가 편리 => 절차 지향 프로그래밍에서 코드를 수정해야할 때 하나하나 찾아 수정해야하는 반면 객체 지향 프로그래밍은 수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
- 단점
- 처리속도가 상대적으로 느림
- 객체가 많으면 용량이 커짐
- 설계시 많은 시간과 노력이 필요
🔑 Q2. 인터페이스와 프로토콜의 차이
인터페이스와 프로토콜 모두 일종의 약속이다. 하지만 차이가 존재한다.
프로토콜은 동등한 관계에서의 약속이다. 만약 데이터를 공유하고자 하는 사람이 프로토콜을 제안하지만 데이터를 받는 측에서 거부한다면 그 프로토콜은 성립할 수 없다. 반드시 당사자들이 전부 합의할 수 있는 약속을 만들어야하고 그 약속을 우리는 프로토콜이라고 한다. 우리가 사용하는 인터넷은 바로 이 수많은 프로토콜들이 모여있는 것이라 할 수 있다.
인터페이스는 상하관계가 존재하는 약속이다. 즉, 인터페이스는 특정 기능을 공유하는 사람이 정한 약속이고 그 기능을 쓰고자 하는 사람은 인터페이스를 무조건 받아들여야만 하는 입장이 되는 것이다. 기능을 공유하는 사람과 받아쓰고자 하는 사람간에 상하관계가 존재한다. JPA에서 A는 Api이고 여기서 i는 인터페이스 이기 때문에 우리는 JPA의 기능을 사용하고자 할 때 반드시 정해져 있는 인터페이스를 지켜야만 하는 것이다.
🔑 Q3. Spring MVC구조
Spring MVC란?
- 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
- 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔다.
- 간단하게 Model, View, Controller로 분리하여 개발하는 디자인 패턴이다.
- Model
- 데이터와 비즈니스 로직을 관리한다.
- 애플리케이션이 포함해야할 데이터가 무엇인지를 정의한다.
- View
- 레이아웃과 화면을 처리한다.
- 애플리케이션의 데이터를 보여주는 방식을 정의한다.
- Controller
- VIew와 Model 사이의 인터페이스 역할을 한다.
- 애플리케이션 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트하는 로직을 포함한다.
- Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달한다.
🔑 Q4. CRUD
CRUD
- 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능
- 사용자 인터페이스가 갖추어야 할 기능
- Create(생성) , Read(읽기) , Update(갱신) , Delete(삭제)
Controller : 요청 / 응답 처리
- Create(생성) , Read(읽기) , Delete(삭제)
Service : 실제 중요한 작동이 많이 일어나는 부분
- Update(갱신)
🔑 Q5. 템플릿 엔진 - Thymeleaf
- 템플릿 엔진 템플릿 엔진이란 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어(또는 소프트웨어 컴포넌트)를 말한다. 템플릿 엔진을 사용하면 사용자에게 제공되는 화면과 데이터를 분리하여 관리할 수 있다.
- 템플릿 엔진의 동작원리
-
템플릿 엔진의 종류
- 레이아웃 템플릿 엔진 vs 텍스트 템플릿 엔진
- 레이아웃 템플릿 엔진 중복되는 Include 코드를 사용하지 않고도 지정된 페이지 레이아웃에 따라 페이지 타일을 조합하여 완전한 페이지로 만들어줌
- 텍스트 템플릿 엔진 템플릿 양식에 적절한 특정 데이터를 넣어 결과 문서를 출력해줌
- 서버 사이드 템플릿 엔진 vs 클라이언트 사이드 템플릿 엔진
- 서버 사이드 템플릿 엔진 서버에서 DB 혹은 API에서 가져온 데이터를 미리 정의된 Template에 넣어 Html을 그려서 클라이언트에 전달해주는 역할을 한다. 즉, HTML 코드에서 고정적으로 사용되는 부분은 템플릿으로 만들어두고 동적으로 생성되는 부분만 템플릿 특정 장소에 끼워넣는 방식으로 동작할 수 있도록 해줌
- 클라이언트 사이드 템플릿 엔진 ****HTML형태로 코드를 작성할 수 있으며, 동적으로 DOM을 그리게 해주는 역할을 한다. 즉, 데이터를 받아서 DOM 객체에 동적으로 그려주는 프로세스를 담당함
-
템플릿 엔진의 필요성
- 많은 코드를 줄일 수 있다.
- 재사용성이 높다
- 유지보수에 용이하다.
-
Thymeleaf
Thymeleaf는 스프링부트가 지원하는 템플릿 엔진 중 하나이다.
Thymeleaf는 서버사이드 렌더링 환경에서 사용되며 spring 기반 웹 애플리케이션의 뷰 페이지에서 html, xml, javascript, css, text 처리 후 웹 브라우저에 표시할 때 이용된다.
Thymeleaf를 사용하기 위해서 의존성 라이브러리를 추가해줘야한다.
Gradle사용시 Build.gradle에 Dependencies 추가
<dependencies>
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
</dependencies>
html에 xmlns속성 추가
<html *xmlns:th*="http://www.thymeleaf.org">