전체 글

전체 글

    Kubernetes, GitHub Actions, ArgoCD를 사용한 자동화 CI/CD 파이프라인 구축기

    Kubernetes, GitHub Actions, ArgoCD를 사용한 자동화 CI/CD 파이프라인 구축기

    Summary 졸업과제 프로젝트를 진행하면서 Kubernetes를 사용해 CI/CD 파이프라인을 구축했던 과정을 정리한 글이다. 쿠버네티스를 어떻게 구축했는지, 어떤 서비스를 구축했는지를 볼 수 있다. main branch로의 merge 한번으로 테스트, 애플리케이션 빌드, 도커 이미지 빌드, 배포를 진행할 수 있는 파이프라인을 볼 수 있다. 추가로 그 과정에서 필요한 Secret Key들에 관한 관리 방법까지 다뤘다. 개발자는 main branch로 pull request 및 merge를 수행한다. Github Actions의 workflow가 트리거되면서 애플리케이션의 테스트 및 빌드가 수행된다. 빌드가 완료되면 docker image를 빌드하고 docker hub repository에 push가 일..

    옵저버 패턴 (Observer Pattern)

    옵저버 패턴 (Observer Pattern)

    옵저버 패턴 (Observer Pattern) 객체의 상태 변화을 감지하고 연결된 다른 객체의 상태를 쉽게 변경할 수 있도록 한다. 일대다 의존 관계를 구성해서 하나의 객체가 상태를 변경하면 모든 의존 객체에게 자동으로 알림이 전송되고 업데이트 하는 패턴이다. 주로 사용하는 곳 알림, 이벤트 기능이 필요한 대부분의 기능에서 해당 패턴을 사용한다. Android의 Event Listener 브라우저의 Event Handler Java Swing 라이브러리(GUI) 이외에도 GUI 프로그래밍을 하거나 메시지 발송과 같은 기능을 사용한다면 옵저버 패턴이 빠질 수 없다. 용어 정리 Subject : 상태 변경을 알려주는 객체 (발행인) Observer : 상태 변경에 대한 알림을 받는 객체 (구독자) 헷갈리는 ..

    전략 패턴 (Strategy Pattern)

    전략 패턴 (Strategy Pattern)

    전략 패턴 (Strategy Pattern) 객체들이 할 수 있는 행위에 대해 전략 클래스를 생성하고, 유사한 클래스를 캡슐화하는 인터페이스를 정의한다. 객체의 행위를 동적으로 수정하고 싶은 경우, 직접 행위를 수정하지 않고 전략을 바뀌주기만 함으로써 행동을 유연하게 확장할 수 있다. 즉, 일련의 알고리즘을 정의하고 각각을 캡슐화하고, 상호 교환 가능하게 만든다. 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있게 된다. 샘플 오리 프로그램 Duck을 상속받는 RedheadDuck과 MallardDuck이 존재한다. 이들은 Duck에 속하는 객체로서 공통된 quack, swim 메서드를 수행하고, display 메서드는 오버라이딩해서 각자에 맞게 사용한다. 요구사항 추가..

    [Java] Lambda 특징과 활용

    [Java] Lambda 특징과 활용

    람다란? (lambda) 익명 메서드에 이름이 없다. 람다는 메서드에 이름이 필요없기 때문에 익명 함수로 분류되며, 익명 함수는 모두 일급 객체로 취급된다. 함수 특정 클래스에 종속되지 않기 때문에 함수라고 부를 수 있다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 이는 일급 객체의 특징과도 같다. 일급 객체로 취급되기 때문에 Stream API의 매개변수로 전달이 가능하다. 간결성 익명 클래스처럼 판에 박힌 코드를 구현할 필요가 없다. 따라서 불필요한 코드를 줄이고 가독성을 높일 수 있다. 람다의 장점과 단점 장점 코드의 간결성 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을..

    [Mac] 인텔리제이 코딩이 빨라지는 단축키 모음 (IntelliJ ShortCut)

    [Mac] 인텔리제이 코딩이 빨라지는 단축키 모음 (IntelliJ ShortCut)

    Mac 전용 인텔리제이 단축키 커맨드, 옵션 키 때문에 윈도우와 다른게 몇 가지 있습니다. Command + F : 현재 파일에서 찾기 Shift + Command + F : 현재 프로젝트 전체를 대상으로 찾기 Command + R : 현재 파일에서 찾아 바꾸기 Shift + Command + R : 현재 프로젝트 전체를 대상으로 찾아 바꾸기 Control + R : 가장 최근에 실행했던 파일 실행(Test, Application ...) Shift + Control + R : 현재 커서가 위치한 파일 실행 (Test, Application ...) (Fn + ) Option + F7 : (임의의 클래스명, 메서드명, 변수명에 커서를 놓고) 해당 코드를 사용하는 위치 확인 (Fn + ) Shift + F..

    함수형 프로그래밍과 Java #1

    함수형 프로그래밍 왜 Java8부터 함수형 프로그래밍을 지원하게 되었을까? 왜 Spring5 부터 WebFlux를 필두로 리액티브 프로그래밍을 지원하는 것일까? Java 8 이후로 나타난 '람다', 'Stream API' 등을 깊게 이해하기 위해서는 이들이 왜 생겨났는지를 알면 매우 좋을 것이라고 생각했다. 객체지향의 정수라고 할 수 있는 Java가 람다를 도입하고 함수형 프로그래밍을 지원한다는건 다른 언어들도 점차 함수형으로 바뀔 것을 의미한다고 생각한다. 나중에 개발 전반적으로 함수형 패러다임이 도입되었을 때 잘 사용하려면 미리 배워놓는게 중요하다. 함수형 패러다임의 중요한 포인트는 언어가 점점 발달하고 하드웨어의 스펙이 받쳐주면서 자바의 가비지 컬렉션처럼 메모리 관리를 추상화해주는 언어가 발달하게 ..

    2022 카카오 Tech 인턴십 지원 후기 (Server)

    2022 카카오 Tech 인턴십 지원 후기 (Server)

    모든 과정을 진행하며 항상 가졌던 마음가짐은 '좋은 경험이라 생각하고 부담 갖지 말자'는 마인드였다. 부담 없이 가벼운 마음으로 준비했지만 절대 대충 준비하지는 않았다..! 이번 인턴십 선발 과정은 다음과 같다. 서류 이번 인턴십은 서류를 작성해서 제출하면 모두에게 코딩 테스트 기회를 주었고, 코딩테스트가 마무리된 후 코테 점수와 서류를 합산해 면접자를 뽑는 방식이었다. 서류에는 프로젝트 경험, 자기소개서를 적어서 제출했다. 자기소개서는 경험에 대한 설명을 중심으로 적었다. 읽는 분들이 내가 어떤 걸 해왔는지 빠르게 파악할 수 있도록, '어떤 경험을 했고 무엇을 느꼈는지, 사용한 기술에 대해선 왜 사용했는지'를 간결하게 적으려고 노력했다. 주 프로젝트로는 이전에 속해있었던 동아리 홈페이지를 만들었던 경험..

    Kubeadm 으로 K8s 설치하기 with 자동화 스크립트

    Kubeadm 으로 K8s 설치하기 with 자동화 스크립트

    새로운 클러스터를 생성할 때마다 쿠버네티스를 처음부터 구축하는건 상당히 귀찮다. 중간에 설정이 꼬여서 서버를 날리고 새로 구축하는 경우가 종종 있는데 .. 그럴 때마다 공식문서나 블로그를 참고해 처음부터 설치하려니 시간이 정말 아까웠다. 그래서 그냥 스크립트로 만들어서 반 자동화 설치 루틴을 만들었다. 테스트 완료 Linux 서버 Ubuntu 18.04 LTS Ubuntu 20.04 LTS 직접 만든 스크립트 입니다. 피드백은 감사히 받고 적극 반영 하겠습니다! GitHub - hyun98/kubernetes-install-helper: This project can speed up Kubernetes installation time Maybe.. This project can speed up Kuber..

    [백준 2250] 트리의 높이와 너비 (C++)

    [백준 2250] 트리의 높이와 너비 (C++)

    2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 이진 트리의 특성을 활용하는 문제 *주의 사항* 1. 트리의 루트 노드의 번호는 1이 아닐 수 있다. 2. 노드의 열의 위치는 이진 트리의 특성을 통해 결정된다. dfs를 통해 트리를 탐색하며 각 노드별 왼쪽 자식 노드 수의 합, 오른쪽 자식 노드 수의 합을 구한다. (1)과정을 통해서 각 노드별 자식 노드의 수를 알 수 있다. 자식 노드의 개수 + 1(현재 노드) 값이 N과 같으면 루트 노드임을 알 수 있다. 각 노드별 좌, 우 노드 수를 구..

    [백준 17135] 캐슬 디펜스 (C++)

    17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 오랜만에 풀어본 백준! 백트래킹을 사용한 완전탐색 문제였다. 주의해야할 궁수의 공격 특징은 다음과 같다. 모든 궁수는 동시에 공격하며 같은 대상을 공격할 수 있다. (같은 적이 여러 궁수에게 공격당할 수 있다.) 적과의 거리가 D이하이면 공격한다. 가장 가까운 적을 공격한다. (가장 가까운 적이 어렷일 시 가장 왼쪽의 적을 공격한다.) 1번과 3번 특징 때문에 궁수의 위치에 따라서 잡을 수 있는 적의 수가 달라질 수 있다는 것을 눈치채야 한다. 궁수가 적절히 배치되어 적을 ..