일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Crawling
- JavaScript
- axios
- openapi3
- Flyway
- cheerio
- MSA
- preventdefault
- Spring Batch
- gradle
- SpringRESTDocs
- vuejs
- Spring REST Docs
- Spring Security
- T-OTP
- AuthenticatoinProvide
- UsernamePasswordAuthenticationFilter
- SpringBoot
- Pender
- stopPropogation
- vue
- tasklet
- SWAGGER
- 리액트
- OpenStack
- Filter
- MFA
- Reduxpender
- REACT
- cloud native
- Today
- Total
목록IT 기술/[JAVA] Spring Boot (29)
Miracle Morning, LHWN
API (Application Programming Interface) : 대부분 Server-Side (Back-end) 에서 제공되며, 데이터의 조작 (CRUD) 를 하기 위한 기술이다. # API 문서를 왜 만들어야 할까? '제공자' ↔ '사용자' 사용방법 공유/협의 API 버전 및 변경사항 관리 # 현업에서 운영하는 API 문서화 File (Word, Excel...) Wiki (Web) 그 외 # 기존 방식의 단점 버전 변경 등 수정에 취약 API 와 문서 상태가 다를 수 있음 (버전, 오류 등) 검증되지 못한 문서 Spring REST(Representational State Transfer) Docs RESTful 서비스에 대한 정확하고 읽기 쉬운 문서를 생성하도록 돕는 것이 목적이다. 테스..
# 이번에는 API 형태로 Flyway 를 사용해보고, 데이터의 신뢰성을 위해 실행될 때마다 (1) 초기화 Clean - (2) Migrate 의 순서로 수행할 것이다. 이때 Clean 하는 작업을 따로 Class 로 분리하여 Configuration annotation 을 지정한다. # 먼저 API 형태로 Flyway 를 사용하기 위해 데이터베이스 정보를 설정한다. // FlywayConfig.java package com.springJPAPractice.springJPAPractice.Configs; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; im..
# gradle Project 를 생성해서 Flyway 를 사용해본다. # 우선 프로젝트에 SQL 주소, user 정보 등을 설정하고 ddl-auto 가 어떤 방식으로 반영될지를 설정해준다. // /main/resources/application.properties spring.datasource.url=jdbc:mysql://localhost:3306/db_example spring.datasource.username=sa spring.datasource.password=password spring.jpa.hibernate.ddl-auto=none # 그리고 flyway 가 데이터베이스에 접근할 때 사용하는 정보를 명시해주어야 하는데 여기에서는 REAL 환경과 TEST 환경을 분리하여 작성했다. (RE..
DDL (Data Definition Language) 데이터 정의 언어이다. 컴퓨터 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터의 데이터를 정의하는 컴퓨터 언어 또는 컴퓨터 언어 요소이다. CREATE : 새로운 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저를 만든다. DROP : 이미 존재하는 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저를 제거한다. ALTER : 이미 존재하는 데이터베이스 개체에 대한 변경, RENAME 의 역할을 한다. TRUNCATE : 관계 (테이블) 에서 데이터를 돌이킬 수 없는 제거이다. ddl-auto Spring Boot 는 ddl-auto 라는 이름으로 DDL 모드 (DB 초기화 전략) 를 정의한다. JPA 데이터베이스는 Embe..
# Hibernate 와 Spring Data JPA 의 차이 Hibernate : JPA 의 구현체 Spring Data JPA = 사용하기 편한 모듈 JPQL 대소문자 구분 엔티티 이름 (테이블명이 아닌 그 테이블에 엔티티로서 설정한 명칭 review) 별칭 필수 # 기본 문법 String jpql = "select c from review c"; List result = em.createQuery(jpql, Review.class).getResultList(); # TypedQuery : Type 의 validation 이 추가 public static void typedQuery(EntityManager em) { String jpql = "SELECT b FROM review b"; TypedQ..
JPA (Java Persistence API) Java 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스로, "프레임워크를 통해 데이터베이스에 쉽게 접근할 수 있는 통로"이다. 인터페이스이기 때문에 구현체로 JPA 를 구현하기 위한 라이브러리가 있다. Hibernate ✅ Eclipse Link ✅ Data Nucleus OpenJPA ✅ TopLink Essentials Hibernate JPA 의 구현체이다. HQL 이라는 강력한 쿼리 언어를 포함한다. 객체 지향적이며, 객체를 통한 데이터 바인딩으로 쉽게 데이터를 다룬다. # 장점 객체 지향적이라 객체에 집중하여 개발이 가능하다. 유지보수 및 생산성이 좋다. 데이터베이스 교체에 용이하다. # 단점 초기에 진입 장벽이 존재한다...
JPA 에서 제공하는 메서드를 통해 페이징 처리를 해본다. 우선 /companyList 페이지로 이동하면 companyList.html 페이지로 이동할 수 있도록 Controller 에 등록해준다. Pageable 를 생성해서 Service 에 만들어놓은 getCompanyPage 메서드에 넘겨준다. 그러면 Service 에서는 이를 받아서 페이징을 하면서데이터를 조회한다. 이때 page 는 0 부터 시작하기 때문에 1, 2, 3.... 을 누르면 -1 처리를 해서 0, 1, 2... 로 page 값을 가공한다. 그리고 page 를 pageRequest 로 만들어준다. 이때, 한 페이지의 데이터 수, 정렬기준 등등을 설정할 수 있다. 이후 JPA 의 findall 메서드를 이용해 자동으로 페이징 처리된 ..
AppInitializer 에서 사용했던 save 대신 saveAll 메서드를 사용해볼 것이다. 그러기 위해서는 Name 과 Nation 만 가지고 있는 Company Constructor 를 만들어줄 것인데, 이러한 생성자를 만들 때에는 "인자가 없는 생성자" 를 먼저 만들어주어야 한다. 이렇게 Name 과 Nation 로 생성자를 만들어놓으면, Name 과 Nation 만 넣어줘도 새로운 객체를 만들어준다. Company.java package com.springPractice.carInfo.domain; import lombok.Data; import javax.persistence.*; import java.util.Date; @Entity @Table(name="company") @Data pu..
DB 에 테이블 생성이 확인되면 Car 에 대한 클래스를 정의해준다. 이때 (1) @Table annotation 을 통해 어느 테이블과 매핑할지 설정한다. (2) 식별자는 DB 에게 위임하기 위해 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 설정한다. (3) 제조사 하나에 여러 자동차가 있을 수 있기 때문에 Company 요소에 @ManyToOne annotation 을 설정한다. (4) 승객수는 0명 일수도 있으니까 int 가 아닌 Wrapper class 인 Integer 로 설정한다. (5) 모든 getter/setter 를 직접 설정해주기 번거로우니 lombok 을 사용하여 @Data annotation 을 설정한다. Car.java packa..
차이에 앞서 Wrapper 클래스에 대해 알아본다. Wrapper Class Java 는 데이터를 클래스와 객체 외에 기초 타입을 가진다. 따라서 Java 는 (1) 기본형 타입(Primitive 자료형) 과 (2) 객체 참조(클래스) 로 두 가지 타입의 관리 데이터를 가진다. 경우에 따라 기본형 타입을 객↔체로 사용하는 경우가 있으며, 이러한 경우 기본형 타입 값을 객체로 표현해야 한다. 이때 Wrapper 클래스를 사용하는데, 특정 기본형 타입으로 나타낸다. 가령, Integer 클래스는 간단한 정수 값을 나타내며 객체는 하나의 int 값을 저장할 수 있다. Integer a = new Integer(10); Double b = new Double("4.57"); int Primitive 자료형으로 ..