Login Service 적용하기

최준호·2022년 3월 26일
0

jayeon-msa

목록 보기
5/8
post-thumbnail

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

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글