[CI/CD] Docker와 Github Actions으로 CI/CD 파이프라인 구축하기
·
CI-CD
🧐 들어가기전최근에 예전에 진행했던 프로젝트를 코프링(Kotlin + Spring) 기반으로 마이그레이션하는 작업을 시작하게 되었다. 당시에는 코드가 수정될 때마다 로컬에서 빌드한 파일을 서버에 수동으로 업로드하고 실행하는 방식으로 배포를 진행했었다.하지만 이런 방식은 코드가 변경될 때마다 매번 수작업으로 빌드 파일을 옮겨야 하는 번거로움이 있었고, DB나 기타 환경 설정들도 서버에 직접 설치하고 구성해야 해서 불편함이 많았다. 그래서 이번에는 이런 불편을 줄이기 위해, Docker와 GitHub Actions를 활용해 코드 변경 시 자동으로 테스트 → 빌드 → 배포가 이루어지는 CI/CD 파이프라인을 구축해보고자 한다. 추가로, 무중단 배포까지 도전해보며 실무에 가까운 배포 환경을 경험해볼 계획이다...
[프로그래머스 알고리즘 고득점 kit] 이분탐색 징검다리 - JAVA
·
CodingTest
🧐 문제출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 [2, 14, 11, 21, 17] 지점에 놓여있을 때 바위 2개를 제거하면 출발지점, 도착지점, 바위 간의 거리가 아래와 같습니다.제거한 바위의 위치        각 바위 사이의 거리       거리의 최솟값[21, 17]                         [2, 9, 3, 11]                   2[2, 21]                           [11, 3, 3, 8]                   3[2, 11]                         ..
[MSA] MSA 환경에서 장애 전파를 막기 위한 전략 (Tracing, Circuit Breaker, Rate Limit)
·
Distributed System
🧐 들어가기전모놀리틱 아키텍처에서 벗어나 서비스 단위로 쪼개진 마이크로 서비스 아키텍처에 들어서게 되면 모놀리틱의 단점을 보완할 수 있다. 모놀리틱은 모든 기능이 하나의 application에 집중 되어 있기 때문에 하나의 기능에서 발생한 장애가 서비스 전체로 이어질 여지가 있다. 반면 MSA 환경은 서비스들 간의 독립성이 유지되기에 장애를 격리 시킬 수 있다. 하지만 과연 정말 장애를 격리시킬 수 있을까에 대한 고민을 해봐야한다. 위와 같이 클라이언트가 서비스 A를 통해서 요청과 응답을 받고 서비스 A는 client의 요청을 서비스 B로 전달해 B로부터 온 응답을 client에게 전해준다고 가정하자. 그렇다면 위에서 만약 서비스 B의 장애가 발생하면 어떻게 될까?서비스 B에 장애가 발생한다면 생기는 ..
[Kotlin + Spring] JPA Entity 캡슐화 유지하는 방법 (field vs property, lazy-loading, private set, protected set)
·
Java & Kotlin/JPA
🧐 들어가기 전코프링으로 JPA Entity를 설계하던 도중 문득 의문이 생기게 되었다. 자프링에서는 보통 엔티티의 필드를 정의할 때 private로 외부로의 필드의 노출을 막고, 롬복 어노테이션을 통해 getter나 setter를 제공하여 해당 메서드를 통해 접근할 수 있도록 하여 객체지향적인 특성을 만족시켜 주었다.그러나 Spring 공식문서를 살펴보면, 코프링의 Entity를 설계할 때는 private와 같은 접근제어자를 사용하지 않는다. 따라서 왜 private 접근제어자를 사용하지 않는지, 그렇다면 어떻게 객체지향적인 특성을 만족하면서 설계할 수 있는지에 대해 알아보고자 한다.🔸Kotlin은 Field의 개념이 아닌 Property의 개념프로그래밍에서 필드(Field)와 프로퍼티(proper..
[프로그래머스 알고리즘 고득점 kit] 동적계획법(Dynamic Programming) 정수 삼각형 - JAVA
·
CodingTest
🧐 문제💡문제위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.삼각형의 높이는 1 이상 500 이하입니다.삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.triangle : [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 프로그래머스SW개발자를 위한 평가, 교육, 채용..
[Kotlin + Spring] MSA 환경에서 토큰 기반 인증 구현하기 (RTR, JWT vs UUID, Redis)
·
Java & Kotlin/Spring
🧐 MSA 환경에서 로그인 시스템은 어떻게 구현할까?마이크로서비스 아키텍처(MSA)는 서비스 간 독립성을 유지하면서도 유기적으로 연결된 분산 시스템을 구축하는 방식이다. 하지만 여러 개의 독립적인 서비스가 존재하는 MSA 환경에서는 "사용자 인증을 어떻게 관리할 것인가?" 하는 문제가 발생한다.기존 모놀리식 아키텍처(Monolithic Architecture)에서는 단일 서버가 세션을 관리하면 되었지만, MSA 환경에서는 인증에 대해 어떻게 처리해야 할지에 대한 문제가 생긴다. 각 서비스가 개별적으로 인증을 처리해야 할까? 그렇다면 서비스마다 로그인 로직을 구현해야 할까? 아니면 중앙 집중식 인증 시스템을 구축해야 할까? 우리가 기존에 쓰는 로그인 구현 방식은 다음과 같이 크게 세 가지로 분류할 수 있..
J_hzlo
J_hzlo