ZEYO 개발 환경
back-end : JAVA Spring Framework, JPA, QueryDSL, MyBatis, Maven, Gradle, MariaDB, Redis, GitLab, Jenkins
front-end : Vue.js, Nuxt, AngularJS, ES6+
1. ZEYO 서비스 배치도(AWS 기준)
2. API 서버 배포 과정 (언어 : SPRING BOOT)
API 서버 배포시 꼭 해야 할 설정들
Java 8 설치(리눅스 우분투)
1
2
3
4sudo apt-get update
sudo apt-get install java-1.8.0-openjdk-devel.x86_64
sudo /usr/sbin/alternatives --config java (환경변수 설정)
java -version로컬에서 해당 프로젝트 디렉토리 위치에 build를 수행하자
1
mvn clean package (maven)
생성한 jar 파일을 해당 리눅스 서버에 옮기고 배포하기
일단 배포 스크립트를 만들어서 해보자
1 | // deploy.sh 파일을 생성 |
3. SPRING BOOT 구조 및 파악
아키텍처
- Controller Layer : UI 에서 요청을 받고 응답을 전달 및 유효성 검사
- Service Layer : 비즈니스 로직을 구현
- Repository Layer : 데이터베이스에서 가져올 쿼리를 구현. JPA를 이용하는 경우 정해진 규칙에 따라서 메소드를 사용하거나, 만들어놓으면 적절한 쿼리를 수행할 수 있습니다.
- Domain Layer : 실제로 데이터베이스 물리 테이블과 1:1 매핑이 되어 바인딩 되어 있습니다.
- entity : JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스
- request : request 전용 DTO(Data Transfer Object)
- response : response 전용 DTO(Data Transfer Object)
4. SPRING BOOT 프로젝트 파일 구조
.1 key_store
- ZEYO 인증 방식은 JWT TOKEN 방식으로 처리하게 된다.
- JWT TOKEN 생성시 더 신뢰성 있고 안전한 방식을 위하여 비대칭키를 이용한 서명을 하게된다.
- public_key : 공개키
- server.jks : 비밀키
- 이미지와 같이 rest 프로젝트에 공개키, 비밀키이 있는데 key_store에 보관되는 2개 파일은 보관용이고 rest(Resource Server) 경우 공개키만 사용(복호화)합니다. 실질적으로 공개키 보관되고 사용하는 곳은 “application-{profile}.yml” 파일에 있습니다.
- zeyo-authorization 프로젝트 경우 server.jks(비밀키) 통해 TOKEN을 암호화 해서 zeyo-rest 프로젝트에 있는 public-key로 복호화 한다.
- 비대칭키 생성 방법 : https://syh8088.github.io/JKS
.2 mapper
- Spring MyBatis XML SQL문 정의 및 관리
.3 error.properties
- controller단에 해당 API 호출시 유효성 validation 정책에 어긋날 경우 400대 에러 response 호출 같이 에러 메세지 보낼때 사용되는 파일
.4 application-{profile}.yml
- 외부 설정 파일 (애플리케이션에서 사용하는 여러가지 설정 값들을 애플리케이션의 밖이나 안에 정의할 수 있는 기능을 말한다.)
.1 controller
- UI 에서 요청을 받고 응답을 전달 및 유효성 검사 담당
.2 model
- entity : JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스
- request : request 전용 DTO(Data Transfer Object)
- response : response 전용 DTO(Data Transfer Object)
.3 repository
- {파일명}Mapper - Spring MyBatis Interface
- {파일명}Repository - Spring JPA 에서 제공하는 Repository 라는 인터페이스를 정의해 해당 Entity 의 데이타를 사용 할 수 역활
- {파일명}RepositoryCustom, {파일명}RepositoryImpl - JAP Querydsl 담점인 Custom Repository와 JpaRepository를 상속한 Repository가 기능을 나눠서 의존성으로 받아야한다는 점, 이를 보완하기위해 Spring Data Jpa에서는 Custom Repository를 JpaRepository 상속 클래스에서 사용할 수 있도록 기능을 고안
.4 service
- 비지니스 로직 담당
5. JPA 중심 개발
현재 ZEYO REST 경우 JPA, QueryDSL(동적쿼리시), MyBatis(그외 복잡한 서브쿼리 사용시) 사용되어 있습니다.
※ JPA란? (https://blog.woniper.net/255)
JPA 구동 방식
ZEYO REST 비지니스 로직 경우 가장 핵심인 JPA 의존 및 활용하면서 개발되어져 있습니다.
이중 비즈니스 로직 경우 대부분 서비스단 에서 처리하는 하고 있습니다. : 트랜잭션 스크립트 패턴(http://martinfowler.com/eaaCatalog/transactionScript.html)
.1 기존 SQL 중심 유지보수 및 개발시
.2 JPA 이용시
Copyright 201- syh8088. 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.