추석 전까지 김영한 jpa 기본, 다른 스프링, 스프링 부트 강의 듣고 추석때 할인하면 그 때 인프런 강의 사기.
====
https://youtube.com/watch?v=YSsl5-q2BR4&list=PLlTylS8uB2fBOi6uzvMpojFrNe7sRmlzU&index=25
스프링 프레임 워크
의존성 주입 (DI)
관점 지향 프로그래밍 (AOP)
하이버네이트: 자바 orm 프레임워크. jpa 구현체
마이바티스:
스프링 부트
spring boot makes it easy to create stand-alone, production-grade Spring based App that you can just run
ㄴ 공식 사이트 설명
간단하게 개발 가능.
스프링은 기능 많지만, 사용 설정 시간 오래 걸림
스프링 부트는 자동 설정(autoconfig) 기능.
springboot-starter: 자동 호환 버전 관리. 신경쓸 필요 없음
모니터링 기능
====
<1>
백엔드 기준이기 때문에 타임리프는 잘 사용x
웹사이트는 거의 사용x, 백단에서 돌아가는 api 어떻게 만들것인지에 대해 다룰것.
인프런 강의에서는 gradle 사용하는데 여기서는 maven
요즘은 gradle 점점 쓰이지만 실무에서는 아직 maven 많이 쓰인다고 함.
pom.xml -> maven
<2>
빌드 관리 툴
ㄴ 자바 대표적: ant, maven, gradle
프로젝트 외부 라이브러리 쉽게 참조할 수 있게 pom.xml
maven 사용 이유
자동으로 라이브러리 관리, 업데이트
pom.xml 파일 활용해 빌드 및 관리
안드로이드는 gradle
넘김
<3>
디자인 패턴
GoF 디자인 패턴
목적에 따른 분류
생성, 구조, 행동 3가지로 분류
넘김
<4>
REST API
API란?
REST란? 자원 이름으로 구분해 자원의 상태를 교환
서버와 클라의 통신 방식
REST 특징
...
REST API
확장성, 재사용성
URI에는 행위 X
<5>
pom.xml 파일 다루기
maven 프로젝트 생성 시 생성
관련 태그
라이브러리 설명
<6>
mvc 패턴
model, view, controller
model - db와 연동 위한 dao와 do로 구성
<7>
hello world
controller 사용자로부터 입력에 대한 응답으로 머델, 뷰를 업데이트 하는 로직 포함
==> 김영한 강의에서는 타임리프 사용했기 때문에 html 폼을 리턴했음. 그냥 @Controller
리턴값에 자동으로 html 붙음.
@RestController 사용하면 그냥 문자열 리턴.
<8>
get api
서버에 있는 리소스 가져오기 위해 사용
요즘은 RequestMapping안쓰고 다 @GetMapping 씀
@PathVariable - :3000/review/1
@RequestParam - :3000/review?name=kim&age=20
DTO 사용
<9>
마리아 db
비밀번호 bluesun
포트번호 mysql이랑 겹쳐서(3306) 3307로 바꿈.
mysql은 gui 워크밴치. 마리아 db는 heidiSQL.
<10>
post api
리소스 추가(전달) 위해 사용
dto 사용도 가능 @RequestBody MemberDto memberDto
<11>
swagger
협업 위한 라이브러리
api 리스트 문서화, 테스트
어노테이션들 몇가지
pom.xml에 디펜던시 추가해야 함.
<12>
PUT, DELETE API
ResponseEntity - Httpstatus.ACCEPTED(202)
<13>
lombok
반복 도와주는 annotation
Getter, Setter ..
생성자 생성 어노테이션
@NoArgsConstructor : 파라미터 없는 생성자
@AllArgsConstructor : 모든 필드값 파라미터로 갖는 생성자
@EqualsAndHashCode
equals, hashCode 메소드 자동 생성
equals: 두 객체 내용 같은지 동등성(equality) 비교 연산자
hashCode: 두 객체가 같은 내용인지 동일성(identity) 비교 연산자
@Data
Getter, Setter, RequiredArgsController, ToString 다 포함.
그냥 하나씩 꺼내서 쓰자
<14>
db 관련 내용
Entity (Domain)
db 테이블을 하나의 엔티티라 생각해도 무방
실제 db 테이블과 1:1 매핑
이 클래스의 필드는 각 테이블 내부 컬럼을 의미
Repository
엔티티에 의해 생성된 db에 접근하는 메소드를 사용하기 위한 인터페이스
서비스와 db 연결하는 역할
db에 적용하고자 하는 crud 정의하는 영역
DAO (Data Access Object)
db에 접근하는 객체
리포지토리 활용해 코드 작성
DTO (Data Tranfer Object) == VO (Value Object)
계층간 데이터 교환 위한 객체 (클라에서 컨트롤러, 컨트롤러에서 서비스)
엔티티랑 다른점은 db의 컬럼과는 좀 독립적.
<15>
orm과 jpa
orm
앱 객체와 관계형 db의 데이터 자동으로 매핑
대표적으로 jpa, 하이버네이트 등.
장점
sql 쿼리 아닌 직관적 코드
jpa
orm 관련 인터페이스 모음
java 표준 orm
orm이 큰 개념이면 jpa는 구체화시킨 스펙
Hibernate
orm 프레임워크 중 하나
jpa의 실제 구현체. 현재 jpa 구현체 중 가장 많이 사용됨.
Spring Data JPA
스프링 프레임워크에서 jpa 쉽게 사용 위해 지원하는 라이브러리
하이버네이트에서 자주 사용된는 기능 쉽게 사용가능하도록.
loose coupling (느슨한 결합도)
서비스에서 인터페이스와 구현 클래스 나눈 구조.
각 객체간 의존성 줄여줌.
ProductService, ProductServiceImpl
바로 클래스에서 구현해 작성하면 db 바군다거나 등등 할때마다 바꿔야 함.
인터페이스로 가져다 쓰자
데이터의 변환 - 데이터와 엔티티는 어느 계층에서 작업해야 하는가?
이론적: 서비스에서. but 간단하다면 컨트롤러에서?
<16>
Logback
Log4J 기반 로깅 라이브러리
로그에 특정 레벨 설정 가능
(trace -> debug -> info -> warn -> error)
slf4j
{}
[INFO ][http-nio-8080-exec-7] s.t.t.c.ProductController [getProduct] Response :: productId = idid, productName = name1, productPrice = 10000, productStock = 10, Response Time = 14ms
<17>
유효성 검사 (validation)
데이터 검증
@Valid
<18>
예외 처리 (exception)
@ControllerAdvice : 모든 컨트롤러에서 발생할 수 있는 예외 처리
@ExceptionHandler : 특정 컨트롤러 예외 처리
ㄴ 예외 처리 사항 발생 시 해당 핸들러로 처리하겠다고 명시하는 어노테이션
@ExceptionHandler(처리할 클래스)
<20>
RestTemplate
http 통신 기능 쉽게 사용할 수 있도록 설계된 템플릿
http 서버와 통신 단순화
다시보기..