Login Service 적용하기

12811 단어 jayeonjayeon

📘DB 만들기

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

🔨Config 수정

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이 작동하도록 파일을 하나 더 생성했다.

🐋Dockerfile 작성하기

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"]

🐋docker-compose.yml 작성하기

우리가 환경변수에서 지정해야할 부분은 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 이름으로만 연결된다는 점을 이해하고 넘어가자!

🤵‍♂️jenkins 파이프라인 작성하기

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아래로 잡혀있는 것이였다 ㅜㅜ 그래서 해당 경로로 볼륨을 잡아서 실행해주니 컨테이너가 내렸다 올라와도 정상적으로 실행되었다!

좋은 웹페이지 즐겨찾기