aidaboat-1-openproject
작성 목적
- rest api 개발 운영 서비스 신규 플젝
- 수행 중 만나는 결정사항들을 기록함.
요구사항
기술적
- spring boot, cloud인프라 운영환경 (
뭘쓸까) - cicd
- msa(스럽게, 모듈은 분리하여 DDD지향 하나 서버는 한대만
사용자수가 초반에 크지 않으니) - gitlab
- jdk 21
업무적
- 별도 작성
- 중개와 중계
seller
,buyer
사이에서3자
가..- 중개 :
seller
-buyer
계약을 도와주고 수수료받음. ex) 공인중개사. - 중계 :
seller
에게 물건사서buyer
에게 물건팜. 계약의 당사자가 됨.
- https://www.joongang.co.kr/article/2811365#home
개발환경
- openjdk 21
- intellij idea (>= 2024.3 )
- spring boot (>= 3.2)
- gradle (>= 8.0)
- 로컬 : windows,mac, 개발,운영: linux
- gitlab remote repository : private. (커맨드 툴: sourcetree, git bash)
- cicd : 구성 하는대로 업뎃 (jenkins standalone? gitlabCI?)
- mariadb
- 모듈방식
- 작은서비스겠으나 DDD지향함
- 모듈별 기능 배포 용이하게끔
- 예)
- 유저:8081
- 기계정보(제품):8082
- 주문:…
- 결제:…
- 계약:…
- admin 등등
- jira free plan
- 100이메일 noti/일 제한
- site url(xxxx.atlassian.net/… )변경 안됨
- 그외 여러가지 기능제한 있겠으나, 써보면서 느껴보는걸로
- 120일 액티베이션 모니터링한다함, 안그러면 deactivate 됨. 맞는번역인지 확실치 않음,
100일간 마늘먹듯이 매일 들어가야하나?- 모니터링 기준은 로그인 완료, 페이지 클릭 로그들
- jira free plan doc
개발&운영 서버 환경
- docker on linux
- 그외 tbd
이 장에서의 수행 범위
- new project (intellij idea)
- create remote repo (gitlab)
- jira 프로젝트 생성 (aidaboat.atlassian.net)
- 본 문서 쓰면서 업뎃
- application.yml 로컬개발운영config 나눔
new project
intellij
gitlab
- create project만 해줌
push, clone, gradle 시험
gitlab push
1
2
3
4
5
$ git init
Initialized empty Git repository in C:/.../aidaboat24/.git/
$ git remote add origin https://gitlab.com/gonnichiwa/aidaboat.git
$ git add .
$ git commit -m "initial commit"
sourcetree add
전체 날리고 clone, gradlew 시험
1
2
3
$ git clone https://gitlab.com/gonnichiwa/aidaboat24.git
$ cd aidaboat24
$ gradlew build
user 모듈 생성
- 로그인 api를 담당
- (intellij)new - module
- spring-starter-web만 추가
- 그외 더 필요한것들
ctrl
+shift
+a
,edit starters
띄워 추가 - core모듈 따로 빼서 통합 고민중
- 좀더 진행하고 해도 무방해보임
config setting
- application.yml, application-local.yml, application-dev.yml, application-prod.yml
- 운영 config정보는 운영서버에 숨겨놓고 외부에서 쓰고 싶다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.aidaboat.user;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class UserApplication {
private static final String APP_CONFIG_LOCATION = "spring.config.location="
+ "classpath:application.yml"
+ ",optional:file:./config/application-prod.yml"; // TODO: CD 작업시 배포 테스트
public static void main(String[] args){
new SpringApplicationBuilder(UserApplication.class)
.properties(APP_CONFIG_LOCATION)
.build()
.run(args);
}
}
- UserApplication.java
- 메인을 application.yml로 둠
- 운영 config파일은 운영서버 내 특정 경로 config/application.yml 로 읽어들이도록
optional:
줘서 로컬에서 빌드 시 해당 (운영config) 파일 없어도 구동되도록application.yml
에 active profile을prod
로 놓고 돌리면 당연히 안돌겠지…
- spring boot의 .yml 참조 우선순위는
- 문서와 같다
- https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-loading-yaml
https://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/boot-features-profiles.html
- 본
UserApplication.java
에서는- optional:file:./config/application-prod.yml
- -Dspring.profiles.active=dev
- classpath:application.yml
- 순으로 프로파일 config 설정 함
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
package com.aidaboat.user.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Value("${spring.datasource.driver-class-name}")
private String driver;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.driverClassName(this.driver)
.url(this.url)
.username(this.username)
.password(this.password)
.build();
}
}
- DataSourceConfig.java
application-{profiles}.yml
의 k,v 를 UserApplication.java 실행 시점에 DI함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server:
port: 8081
spring:
profiles:
active: local
# 본 파일 경로에 application-common.yml 만들어서 프로파일마다 그룹으로 함께 참조하도록 지정할 수 있음.
# group:
# local:
# - common
# dev:
# - common
# prod:
# - common
- application.yml
- local,dev,prod 포함하는 common config 역할
- 위
spring.profiles.active: local
설정으로 놔도 command line설정 이 우선됨, commandline 설정은 intellij에서 설정 창으로 가능함. - intellij 설정 :
ctrl
+shift
+a
,edit configuration
,active profiles
1
2
3
4
5
6
7
8
9
10
#내 PC
#server:
# port: 8082
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/dbname
username: ....
password: ....
- application-local.yml
- 이외
application-dev.yml
,application-prod.yml
도 함께 생성해줌.
This post is licensed under CC BY 4.0 by the author.