DB 만들기에서 진행했던 내용에 docker-compose.yml에
networks:
default:
external:
name: msa
내용만 추가해서 새로 생성한 뒤에 schema와 table을 차례대로 생성했다.
CREATE TABLE `users` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` varchar(10) NOT NULL,
`NAME` varchar(20) NOT NULL,
`PW` varchar(150) NOT NULL,
`ADDRESS1` varchar(10) DEFAULT NULL,
`ADDRESS2` varchar(50) DEFAULT NULL,
`ADDRESS3` varchar(50) DEFAULT NULL,
`TEL` varchar(20) DEFAULT NULL,
`CREATED_AT` varchar(45) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `USER_ID_UNIQUE` (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka:8761/eureka
token:
expiration_time: 86400000 #ms단위
secret: 비밀번호 키
spring:
jpa:
hibernate:
ddl-auto: none
show-sql: true
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://maria:3306/스키마
username: db 아이디
password: db 비밀번호
설정 값을 다음과 같이 수정해주었다.
그리고 파일도 login-prod
로 profile이 작동하도록 파일을 하나 더 생성했다.
FROM openjdk:11-ea-27-jdk-slim
VOLUME /tmp
# jar파일 복사
COPY build/libs/login-service-1.0.jar login.jar
ENTRYPOINT ["java","-jar","login.jar"]
우리가 환경변수에서 지정해야할 부분은 Config Server와 Profile 이름이다.
version: '3.7'
services:
login:
image: "ililil9482/login:1.0"
container_name: login
environment:
- spring.cloud.config.uri=http://config:8888
- spring.cloud.config.profile=prod
networks:
default:
external:
name: msa
여기서 중요한 포인트는 따로 port나 expose를 통해 컨테이너끼리 연결을 하지 않아도 된다는 점이다. 그 이유는 Eureka에 서버를 등록해서 eureka가 gateway로 요청이 들어왔을 때 해당 서버로 연결해주는 기능을 하고 있기 때문에 따로 port나 expose를 통해서 연결할 필요 없이 service 이름으로만 연결된다는 점을 이해하고 넘어가자!
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'main', credentialsId: '8e8302f1-6b98-4bfe-9981-2e027e49089b', url: 'https://github.com/juno-choi/jayeon-login.git'
}
}
stage('Clean') {
steps {
sh 'cd /var/jenkins_home/workspace/login'
sh 'chmod +x gradlew'
sh './gradlew clean'
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
stage('HUB Push') {
steps {
sh 'docker build -t ililil9482/login:1.0 .'
sh 'docker push ililil9482/login:1.0'
}
}
stage('Down') {
steps {
sshPublisher(publishers: [
sshPublisherDesc(configName: 'publisher',
transfers: [
sshTransfer(cleanRemote: false,
excludes: '',
execCommand: 'cd /msa/login && sudo docker-compose down',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '',
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: '')
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: false)
])
}
}
stage('Up') {
steps {
sshPublisher(publishers: [
sshPublisherDesc(configName: 'publisher',
transfers: [
sshTransfer(cleanRemote: false,
excludes: '',
execCommand: 'cd /msa/login && sudo docker-compose up -d',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '',
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: '')
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: false)
])
}
}
}
}
정상적으로 login-service가 등록이 되었다. 이제 요청을 해보자!
포스트맨에서 지정된 url로 회원가입을 요청했고 정상적으로 실행되었다.
그 후에 db에도 우리가 생각한 로직대로 정상적으로 로그인처리가 되었다.
정상적으로 로그인 처리되었으며 token을 발급하여 반환하는 로직을 확인할 수 있다.
당장 kafka까지 필요하지 않아서 서비스 자체에서 db로 insert를 날리고 있지만 order service를 개발하면서 kafka로 변경하는 작업을 진행해야겠다.
maria db의 데이터가 컨테이너를 내렸다 올려도 그대로 살아있어야 하는데 데이터가 날라가는 현상이 있었다. 다른 mariadb는 /var/lib/mysql
아래에 데이터가 저장되어서 해당 경로로 볼륨을 잡았다고 했기에 나도 그렇게 했다. 근데 데이터가 볼륨 폴더 안에 아무것도 저장되지 않았다. 그래서 찾아본 결과
내 데이터베이스는 왜 인지는 아직 모르겠으나 /config/databases
아래로 잡혀있는 것이였다 ㅜㅜ 그래서 해당 경로로 볼륨을 잡아서 실행해주니 컨테이너가 내렸다 올라와도 정상적으로 실행되었다!