유데미 부트캠프

유데미 스타터스 취업 부트캠프 2기 - 백엔드(java, 자바) 13주차 학습 일지

미소여우 2023. 1. 8. 20:24
728x90

최종 평가

월요일에 공지대로 최종 평가를 보았다. 내용은 중간평가랑 비슷한 듯 하면서도, 살짝 헷갈리는 부분들이 많았다. 어찌저찌 필요한 대로 다 구현하였고, EC2, RDS에도 다 배포를 해두었다. 스프린트를 준비하면서 AWS랑은 꽤나 친해진 거 같았다. 하나 우려되는건 특정 시간에만 이용할 수 있도록 해둔 것인데, 그 부분은 시간이 부족하여서 코드를 막 짜고 차단 잘 된것만 보고 지나갔다. 부디 잘 되길 바라며..! 이 날은 정말 딴짓도 안 하고 개발에만 집중하니 에너지가 정말 많이 날라간 기분이었다! 다들 고생 많으셨습니다!

개발

사실 이번주는 개발보단 CI/CD에 초점을 두고 공부를 하였다. 그래도 몇가지 개발한게 있다면 출석 기능 고도화 작업과 공지사항을 푸쉬를 위한 웹소켓 구현을 해두었다.

우리 출석 기능의 문제점으로는 윈도우 컴 같은 경우 GPS 기능이 정확하지 않다는 것이다. 아마 최신 노트북이면 또 달라질 수 있을거 같은데, 여하간에 기지국의 위치로 잡히는 문제인듯 하다. 카카오나 네이버 같은 대기업은 IP 주소 타게팅 기술이 있는 듯 한데, 우리가 그 수준까지 도달할 순 없다고 판단하였다. 그래서 대체제로 내가 재학한 학교와 같이 출석 코드로도 출석을 할 수 있게 하는 방법을 고안해 봤다. GPS가 원활하지 않으면 관리자가 제공하는 출결 코드를 통해 출석을 할 수 있는 것이다. 이것의 번거로운 점은 칠판 같은 곳에 적어주어야 하는 부분인데, 우리 학교의 경우에는 조교 같은 담당자가 해주었다. 번거로울 수도 있지만 이 부분은 교육장의 관리자가 어느 정도 신경써주어야하는 부분이라 생각한다. 모든 부분을 자동화하면 편하겠지만,, 결국 사람 사는 세상, 사람의 케어는 필요하다 느낀다.

두 번째는 푸쉬 기능을 위한 웹소켓이다. 출석 안내나 공지사항을 사이트 이용 도중에 알람으로 알려주면 좋지 않을까 해서 구현한 부분이다. 사실 안드로이느나 애플처럼 스마트폰이면 잠금 화면에서도 안내를 받으면 정말 좋을거 같지만..! 웹 브라우저에선 어렵지 않을까 한다. 그래도 최대한 사용자가 편의를 느낄 수 있도록 많은 노력을 한 점이 우리의 프로젝트 칭찬점이라 생각한다.

멘토링

이번에도 멘토링을 통해 많은 것을 배웠다. 이번주에 CI/CD를 공부하면서 가장 궁금했던 점은 아래의 내용과 같다.


안녕하세요 OO님!
CI/CD 배포 공부를 하다 궁금한 점이 생겼습니다!
배포를 하는 방식이 되게 다양하던데 제가 추려본건 다음과 같았습니다.
  1. Github Actions에서 빌드 파일 생성 후 S3에 업로드 -> CodeDeploy로 EC2에 배포
  2. Github Webhook을 통해 Jenkins에서 빌드 후 -> EC2에 배포
  3. Github Actions에서 빌드 후 냅다 EC2로 바로 보내기
이 세가지 방식과 함께 고민되는 것은 .gitignore 처리한 application-secret.yml입니다.
1번의 경우에는 github secrets에 secret.yml 내용을 집어넣고 actions에서 echo >> 해서 집어넣어 빌드해봤더니 잘 됐습니다. 근데 제가 AWS iam 권한이 한정적이라 code deploy 실습하기 불편해서 Jenkins를 도입해봤습니다.2번의 경우에는 젠킨스 파이프라인에서 ./gradlew bootJar로 넘겨서 EC2에 scp로 넘기긴 했는데, 생각해보니 ./gradlew build한게 아니라 secret값들이 들어가지 않은채 넘어가서 실행이 실패하는 것입니다.3번의 경우에는 1번처럼 진행 후 생긴 빌드 파일을 바로 EC2에 scp로 보내서 간단하긴 했습니다만, 이렇게 해도 되는지 의문이라 추가해보았습니다..! OO님께선 어떤 방식으로 사용하시는지 의견을 구하고 싶습니다!추가적으로 제 gitignore처리한 application-secret의 설정 파일 내용은 다음과 같습니다! (좀 줄였는데, redis도 있습니다) 프로필마다 설정값이 다르게 돌아가도록 했습니다. 이러면 설정값들을 관리하기가 번거롭다는 느낌이 들면서.. 더 좋은 방법을 모르겠어서 프로필 관리하는 방법에 대해서도 구하고 싶습니다! ㅎㅎ찾아보니 spring cloud config가 있던데, 비용이 든다하여 비용이 드는 방법은 일단 빼보고자 합니다!
긴 글 읽어주셔서 감사합니다!
spring:
  config:
    activate:
      on-profile: dev

  datasource:
    url: 로컬용_DB_URL
    username: ㅁㄴㅇㄹ
    password: ㅁㄴㅇㄹ

---

spring:
  config:
    activate:
      on-profile: prod

  datasource:
    url: RDS_DB_URL
    username: ㅁㄴㅇㄹ
    password: ㅁㄴㅇㄹ
Jenkins 파이프라인 허..허접하지만 다음과 같습니다!
pipeline {
   agent any
   stages {
       stage('Github') {
           steps {
               git branch: 'main', url: 'https://github.com/somefood/action_test.git'
           }
       }
       stage('Build') {
           steps {
               dir('.') {
                   sh "./gradlew bootJar"
               }
           }
       }
       stage('Deploy') {
           steps {
               dir('build/libs') {
                   sshagent(credentials: ['hsge-key']) {
                        sh 'scp -o StrictHostKeyChecking=no fianl_exam-0.0.1-SNAPSHOT.jar ubuntu@192.168.0.6:/home/ubuntu'
                        sh 'ssh -o StrictHostKeyChecking=no ubuntu@192.168.0.6 "sh run.sh" &'
                   }
               }
           }
       }
   }
}

슬랙 DM에서 꽤나 장문의 글이어서 읽기 번거로우셨을텐데 친절하게 봐주셔서 감사했다! 어찌됐건 큰 고민은 SECRET 정보들을 어떻게 할까였다. 추천하는 방식으론 레포지토리를 private으로 하고 쓰는 것이다..! private로 쓰면 보일 일도 없기 때문인 것이다. 나는 지금까지 public 레포지토리기도 했고, 비밀 정보를 업로드 해도 될까? 고민했던 것인데, 멘토님들도 다 이렇게 쓴다고 하셨다. 길게 고민했던 부분이  허무하리만큼 한 방에 해결되는 거 같아 묵은 체증이 내려갔다. 월요일에 빠르게 private라 바꾸고 프로퍼티즈들을 싸악 정리해서 사용하여야 겠다. 이렇게 하면 CI/CD에 좀 더 한 걸음 나아가지 않을까 싶다.

이 외에도 DB 인덱스에 관련해서 많은 조언들을 주셨다. 왜 필요한지 어쩔 땐 필요없는지, 정말 고려할 부분들이 많음을 느꼈다. 개인적으로 DB도 열심히 공부할 것인데, 얇은 책으로는 찍먹을 좀 해봤으니 두꺼운 책을 구매해서 더 심도있게 공부해봐야할 거 같다.

이번주는 최종평가나 CI/CD로 SQL 공부를 못한게 아쉬웠다. 그래도 멘토님의 조언을 구했으니 이를 토대로 얼른 빠르게 해볼 수 있을거 같다! 화이팅!!


* 유데미 바로가기 : https://bit.ly/3SFlXDy * 유데미 STARTERS 취업 부트캠프 공식 블로그 보러가기 : https://blog.naver.com/udemy-wjtb 본 후기는 유데미-웅진씽크빅 취업 부트캠프 2기 - 프론트엔드&백엔드 과정 학습 일지 리뷰로 작성되었습니다.

728x90