오늘의 기록

    [Java] Map - Value 값으로 정렬

    Map map = new HashMap(); map.put("math", 100); map.put("english", 80); map.put("history", 90); List keySetList = new ArrayList(map.keySet()); System.out.println("before"); for (String key : keySetList) { System.out.println(key + ": " + map.get(key)); } Collections.sort(keySetList, (o1, o2) -> map.get(o1).compareTo(map.get(o2))); System.out.println("after"); for (String key : keySetList) { System..

    이얌 AWS 클라우드 아키텍처 - Jenkins, CodeDeploy Blue Green 배포, Auto-Scaling, Load-Balancer

    이얌 AWS 클라우드 아키텍처 - Jenkins, CodeDeploy Blue Green 배포, Auto-Scaling, Load-Balancer

    https://easy-yum.com 작년에 개발했던 서비스이다. 서버를 AWS를 사용하고 있었는데 기존 아키텍처가 불안정해서 안정성과 가용성을 높여서 새롭게 아키텍처를 설계했다. 이후에, 또 비슷한 설계를 대비해 블로그에 기록을 해놓는다. AWS 배포 아키텍처 구조도 깃허브 Webhook을 통한 젠킨스 빌드 후 CodeDeploy를 통한 블루/그린 배포 이 때, Auto Scaling 형태로 배포해 가용성을 높였다. IAM IAM 사용자 루트 계정 MFA 적용: Google OTP 사용. 각자의 iam을 사용하는 것을 권장(han, park, song, ...): 누가 어떤 작업을 했는지 추적할 수 있음. easy-yum-jenkins-user 사용자 추가 jenkins에서 S3와 CodeDeploy에..

    [Spring] AWS Parameter Store를 사용해 변수 불러오기

    [Spring] AWS Parameter Store를 사용해 변수 불러오기

    깃허브와 같은 원격 저장소에 프로젝트를 올리는 경우 코드에 데이터베이스 암호 등 민감한 정보가 담기면 위험하다. 따라서 민감한 정보가 담긴 변수를 암호화하거나, 다른 공간에 저장해놓고 불러오는 방식을 사용할 수 있다. 여기서는 AWS Parameter Store에 변수를 저장하고, 이를 Spring에서 불러오는 방법을 소개하겠다. AWS 설정 Parameter Store에 변수 저장 AWS 관리 콘솔에서 System Manager -> Parameter Store를 클릭한다. 다음과 같은 화면이 나오면, '파라미터 생성' 버튼을 클릭한다. 이제 원하는 파라미터를 생성한다. 파라미터 이름은 /aaa/bbb/password로 3계층으로 생성했다. 이 형식을 꼭 지킬 필요는 없지만, 꼭 다르게 이름을 설정해야..

    [Spring] 개발, 운영 환경 별 profile 설정

    [Spring] 개발, 운영 환경 별 profile 설정

    환경에 따라 다른 설정 개발을 하다보면 테스트를 위한 '개발' 환경과 실제 서비스 배포를 위한 '운영' 환경에 따라 설정해줘야하는 값이 다를 수 있다. 예를 들어, DB 정보나 포트 정보 등이 환경에 따라 다른 경우가 많다. 각 환경에 따라 매번 설정 값을 변경하는 것이 번거롭기 때문에, profile 설정을 통해 간단하게 환경에 맞는 정보를 가져올 수 있다. 현재 스프링 설정 파일 (application.yml)이 다음과 같다고 하자. spring: datasource: url: jdbc:mysql://localohost:3306/test # 테스트 DB # url: jdbc:mysql://localohost:3306/prod # 운영 DB username: admin password: 1234 dri..

    [Ubuntu] Ubuntu에서 rc.local 없을 때, 생성하는 방법

    [Ubuntu] Ubuntu에서 rc.local 없을 때, 생성하는 방법

    rc.local rc.local은 linux가 새롭게 부팅될 때마다 실행될 명령들을 모아놓은 파일이다. 처음 ubuntu를 켰을 때, rc.local이 없다면 이를 추가하고 활성화시켜야 한다. rc.local 활성화 방법 1. 먼저, rc.local이 진짜 없는지 확인 cd /etc find *rc.local* etc 폴더에 들어간 후에 rc.local 파일을 찾아보자. 만약에 파일이 보이면, 다음 내용은 보지 않아도 된다. 만약에 아무런 파일을 찾을 수 없다면, 아래를 따라해보자. 2. rc.local 파일 생성 sudo vi /etc/rc.local 그리고 다음과 같이 기본 세팅 값만 넣고 저장하자. #! /bin/sh exit 0 3. 실행 권한 설정 sudo chmod +x /etc/rc.loca..

    [EC2] 프리티어(t2.micro)에서 Jenkins 용량 초과 문제

    [EC2] 프리티어(t2.micro)에서 Jenkins 용량 초과 문제

    프리티어, 젠킨스 용량 초과 문제 AWS EC2 프리티어 유형인 t2.micro는 RAM이 1GB이다. 이는 젠킨스를 돌리기에 매우 부족하다. 따라서 t2.micro에서 아무 설정을 하지 않고 젠킨스를 돌리면 서버가 먹통이 되고 만다. 그러나 인스턴스 유형을 업그레이드 하자니 비용이 부담된다면 SSD의 일정 부분을 swap 용량으로 할당하는 방법을 고려해보자. 쉽게 말해, RAM 용량이 가득 차서 더 이상 활용할 공간이 없을 때, swap 공간에 데이터를 기록해서 RAM 사양을 키운듯한 효과를 낼 수 있다. swap 공간을 사용하면 RAM 급의 속도는 아니더라도 젠킨스 서버 하나 정도는 충분히 돌릴 수 있는 속도와 용량을 제공받을 수 있다. 유의할 점으로 swap 공간은 무한정 설정할 수 있는 것이 아니..

    [Ubuntu] Jenkins 설치

    [Ubuntu] Jenkins 설치

    Jenkins Jenkins는 Java로 빌드 된 오픈 소스 CI (Continuous Integration) 및 CD (Continuous Delivery) 도구이며, Jenkins는 기본적으로 소프트웨어 프로젝트를 빌드, 테스트 및 배포하기 위해서 사용한다. 또한 DevOps 개발 도구의 가장 기본적인 도구이다. Jenkins 설치 방법 1. apt-get 업데이트 apt-get update 2. JDK 설치 JDK 8 이상의 원하는 버전을 설치한다. sudo apt-get install openjdk-11-jdk 3. Jenkins 저장소 Key 다운로드 wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add ..

    [Linux] 한국 시간대(KST) 설정

    기본적으로 Linux는 UTC 시간대를 따르고 있는 경우가 많아서 이를 한국 시간대(KST)로 변경하는 작업이 해보겠다. Linux 환경에서 date 명령을 입력하면 현재 시간을 알 수 있다. UTC로 설정되어 있는 것을 볼 수 있다. ubuntu@ip-172-31-4-153:~$ date 2Fri Dec 10 20:13:38 UTC 2021 tzselect를 통해 시간대를 변경할 수 있다. 안내하는 절차에 따라 Asia -> Korea(South) 시간대로 설정한다. ubuntu@ip-172-31-4-153:~$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent..