전체 글
-
java 프로그래머스 2018 카카오 블라인드 1차 셔틀버스 풀이 | Map, Queue 활용PS 2024. 5. 31. 14:52
https://school.programmers.co.kr/learn/courses/30/lessons/17678 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr # 문제 풀이 전 생각했던 것들1. 매개변수로 주어지는 시간들이 문자열로 주어지기 때문에 :을 기준으로 split하고 모두 분(minute)으로 변환하는 메소드가 필요하다고 생각했다. 그리고 반환형이 다시 시간형이기 때문에 분으로 환산한 시간을 00:00 형식으로 변환하는 메소드도 만들어줘야겠다고 생각했다. 2. 셔틀의 최대 개수가 10개고, 셔틀 별 정원의 수가 45명이니 사이즈가 작다고 생각했다..
-
Github Actions에서 발생하는 detached HEAD 문제 해결하기Project 2023. 12. 9. 19:37
현재상황 현 프로젝트에서 develop 브랜치에 머지하기 위해서는 반드시 PR을 통해 머지해야한다. 따라서 Github Actions의 Java CI with Gradle 작업을 활용하여 CI를 다음과 같이 자동화시켰다. name: Java CI with Gradle on: push: branches: [ "develop" ] pull_request: branches: [ "develop" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest permissions: write-all steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 - name:..
-
[배포자동화구축] 2-2. Github Repository와 배포서버, 운영서버를 연동하기Project 2023. 11. 15. 10:18
이전시간에는 배포서버에 젠킨스를 설치하여 기본설정을 완료했다. 우린 배포서버와 운영서버가 분리되어있는 구성이기 때문에 깃헙레포 배포서버와 배포서버 운영서버 간의 연동이 필요하다. 따라서 이번에는 각 서버들을 연동하고 젠킨스에 빌드를 자동으로 실행해줄 pipeline을 구성해볼 것이다. 1. Github 레포에서 배포서버 연동하기 1-1 github Repository 설정에서 Webhooks 추가하기 레파지토리 설정에 있는 Webhooks 메뉴로 들어가 신규 webhook을 추가한다. Webhooks는 특정 이벤트가 발생할 경우 지정한 url로 레파지토리의 정보, 브랜치 정보 등을 POST로 보내는 역할을 담당한다. 우리는 push 이벤트가 발생 할 경우 jenkins 서버로 요청을 보내도록 설정할 것이..
-
[배포자동화구축] 2-1. AWS EC2에 jenkins 설치하여 배포서버 구축하기Project 2023. 10. 14. 02:57
현재 진행하고 있는 배포전략은 위와 같다. 이전 게시글에서 Github Actions를 구축했고 github이 보내는 webhook요청으로 jar파일을 만들고 운영서버로 전송하는 배포서버를 구축해야 한다. 이번 단계에서는 AWS EC2에 인스턴스를 생성하여 jenkins를 설치하고 설정하는 과정까지만 수행하고, 다음 단계에서 jenkins pipeline 구축을 진행할 것이다. 진행하며 OS나 버전이 맞지 않으면 자잘한 오류가 발생할 수 있으므로 처음부터 아래 내용과 동일하게 설정하는 것을 권장드린다. (아니면 나중에 가서 인스턴스를 삭제하고 또다시 만들어야 할 수도 있다..) 1. AWS EC2에 배포서버 생성하기 1-1 리전을 서울로 맞추고 '인스턴스 시작'으로 인스턴스 생성하기 1-2 인스턴스 이름..
-
[배포자동화구축] 1. Github Actions로 CI 구축하기Project 2023. 10. 13. 23:20
배포자동화 구축의 첫 단계로 빌드 자동화를 통해 안전한 코드들이 머지될 수 있도록 하는 CI를 Github Actions로 구현해 볼 것이다. 1. 먼저, 배포할 레파지토리의 Actions탭으로 들어가 New workflow를 생성한다 2. 빌드도구에 맞는 workflow를 선택한다. 나는 gradle로 빌드해야 해서 Java with Gradle로 선택했다 클릭하면 레파지토리에 .github 패키지 아래에 생성될 gradle.yml 파일을 작성하는 편집기가 생성된다. 3. Gradle.yml 파일 작성 name: Java CI with Gradle on: push: branches: [ "develop" ]// develop 브랜치에서 push 이벤트가 나거나 pull_request: branches:..
-
[배포자동화구축] 0. 배포전략 세우기Project 2023. 10. 13. 21:39
기존에는 완성된 Spring boot앱을 AWS에 올려놓기만 했었는데 이번 프로젝트에서는 배포 브랜치에 푸시되면 자동으로 서버에 배포되는 자동화 라인을 구축해보고자 한다. 먼저 어떤 식으로 구성할지 배포 전략을 세워야 하는데, 배포 전략에 앞서 CI/CD 개념을 복기해 보자. CI (Continuous Integration - 지속적 통합): 코드 변경으로 인한 문제를 조기에 발견하고 해결하여 품질을 향상할 수 있도록 코드 변경사항을 지속적으로 통합시킨다는 개념이다 개발자가 코드를 작성하고 변경사항을 버전 관리 시스템에 푸시하면, CI 서버가 이를 감지하고 자동으로 빌드 및 테스트를 수행한다 CD (Continuous Deployment - 지속적 배포): 코드 변경 사항이 테스트를 통과하면 자동으로 프..
-
leetcode top interview 150 | Clone Graph | BFSPS 2023. 9. 15. 09:24
Question 주어진 그래프를 클론한 그래프를 리턴. 그래프는 무방향으로 연결되어있고 노드마다 value와 주변 인접 노드들을 List에 넣어 가지고 있다. 인접노드들을 노드의 순서대로 담아 리턴해야한다. Accepted Codeimport java.util.*; class Solution { public Node cloneGraph(Node node) { if(node == null) return null; Queue queue = new LinkedList(); queue.add(node); Map map = new HashMap(); map.put(node, new Node(node.val, new ArrayList())); while(!queue.isEmpty()){ Node visit = qu..
-
leetcode top interview 150 | Kth Largest Element in an Array | PriorityQueuePS 2023. 9. 12. 09:52
Question 정수배열이 주어질때 k번째로 큰 수를 리턴 Accepted Code - Sorting import java.util.*; class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); int answer = 0; int idx = nums.length - 1; while(k-- > 0){ answer = nums[idx--]; } return answer; } } 정렬을 한번 수행하고 k를 감소시켜가며 배열의 끝에 있는 값을 저장한다. 시간복잡도는 Arrays.sort()로 O(n log n)이 소요된다. Arrays.sort는 이전엔 퀵소트 방식을 사용했지만 Java 7이상부터는 병합정렬과 선택정렬을 ..