전체 글

· TIL
배포 알못인 나는 AWS와 k8s는 막연하게 배포할 때 사용하는 기술들이라고만 알고 있었다. 최근 CI/CD에 대해 공부하면서 이들에 대해서도 알아야 할 필요성이 생겼고, 그 둘의 특징과 차이점을 정리해보았다. 구분AWSK8s (Kubernetes)분류클라우드 인프라 서비스 (IaaS)컨테이너 오케스트레이션 플랫폼 (PaaS)제공 역할서버, 네트워크, 스토리지 등 물리적 인프라 자원 제공.컨테이너화된 애플리케이션의 배포, 확장, 관리, 자동화를 담당위치애플리케이션이 실행될 바탕그 바탕 위에서 컨테이너를 관리하는 운영 체제/관리 시스템관계K8s는 AWS 위에서 실행될 수 있다 (EKS 서비스 등)AWS는 K8s에 실행 환경과 자원을 제공하는 하위 인프라 이 둘의 관계를 비유하자면 다음과 같다. AWS는 ..
· TIL
구현하기 바빠서 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다. 무중단배포라고 하면 일단 하나의 서버에 서비스가 중단되지 않고 계속 실행되고 배포되는 상태라고 막연히 알고 있었다. 그러나 개념을 잘못 알고 있었던 것을 최근에서야 깨닫게 되었다. 그래서 무중단배포란.. 기본 개념 / 필요성 하나의 서버가 아닌, 여러 대의 서버와 로드 밸런서를 이용하여 서비스를 계속 운영하면서 새 버전을 배포하는 기술이다. 구 버전 서버가 작동 중인 상태에서 신 버전 서버를 배포하고, 모든 준비가 완료되면 트래픽을 전환하여 서비스 중단(다운타임)을 방지하는 것을 목적으로 한다. 서비스가 중단되는 시간(다운타임) 없이 새로운 버전의 애플리케이션을 배포하는 전략무중단 배포는 하나의 서버가 아니라, 최소 두..
· Error 정리
최근에 Swagger를 붙여서 API 문서화를 할 일이 있었다. 예전에도 별 일 없이 한 번에 잘 되었기에 이번에도 바로 되겠거니 했지만.. http://localhost:8080/swagger-ui/index.html 페이지에 들어가자마자 500 상태코드와 함께 "Failed to load API definition" 이라는 에러를 만나게 되었다. 프로젝트 환경은 다음과 같다. 버전Java21Spring Boot3.5.6BuildGradleorg.springdoc:springdoc-openapi-starter-webmvc-ui2.8.9 에러 메시지는 다음과 같다. NoSuchMethodError 라는 에러 타입이 나오는데, 이 오류는 Spring Boot 3.x.x 환경에서 springdoc-op..
· TIL
@Transactional을 사용할 때, 일반적으로 두 가지 정도를 임포트 할 수 있다.바로 jakarta.transaction.Transactional와 org.springframework.transaction.annotation.Transactional이다. 두 @Transactional 어노테이션은 모두 트랜잭션 처리를 위해 사용되지만, 그 표준과 제공하는 기능에 큰 차이가 있다. 본 포스팅에서는 두 어노테이션의 차이와 역할을 알아보고자 한다. 일반적으로 트랜잭션은 데이터베이스에서 여러 작업을 하나의 묶음으로 처리하는 것을 의미한다. 이 묶음 안의 작업들은 모두 성공하거나(Commit), 아니면 모두 실패하고 되돌려져야(Rollback) 한다는 특성을 가지고 있다. jakarta.transactio..
· TIL
Layered Architecture Layered Architecture(계층형 아키텍처)는 소프트웨어 디자인 패턴 중 가장 일반적이고 주로 쓰이는 방식 중 하나이다. 말 그대로 소프트웨어 시스템의 구성 요소들을 수직적인 계층(Layer)으로 나누어 구조화한 형태인데, 각 Layer(계층)가 특정한 역할/책임만 담당하도록 분리하는 것이 핵심이다. (관심사를 분리하기 위해서이다.) 또 다른 핵심적인 원칙은 상위 계층은 바로 아래 계층에만 의존하며, 아래 계층은 절대 위 계층에 대해 몰라야 한다는 점이다. (아래 방향으로만 의존한다.) 이러한 원칙에 의해 각 계층은 자신의 역할에만 집중할 수 있고, 코드 변경 시에도 다른 계층에 미치는 영향을 최소화할 수 있다. 일반적인 Layered Architectur..
· Project
앱스토어에 앱을 배포한 이후, 테스트를 해보는 중에 해변별 기상 정보들을 불러오는 부분에서 필요 이상으로 시간이 오래 걸리기에 이를 해결하기로 하였다. 문제점 저번에도 꽤 걸렸었지만 이번에는 엄청 오래 걸린다.. 대략 13.30 s 정도..?현재 도시에 있는 해변 별로 기상청 API를 3가지 정도(해양 정보, 파주기, 수온) 불러오고 있는데 이를 순차적으로 불러오다보니 속도가 저하되는 것으로 의심하고 있다. 아마 말로만 듣던 순차적 API 호출로 인한 성능 저하로 의심되는데.. 이를 확인하기 위해 로그를 출력해보았다. 4번 도시에는 3개의 해변이 등록되어 있고, 각 해변 당 BeachForecast, WaterTemp, WavePeriod 기상청 API를 호출하고 있는데 이들 모두를 불러오는데 걸린..
· TIL
구현하기 바빠서 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다 토스트 가게에 3명의 사람이 각각 햄치즈 토스트, 불갈비 토스트, 햄 토스트를 주문했다.토스트 가게 사장님은 어떻게 해야 가장 효율적으로 빠른 시간 내에 3개의 토스트를 제조할 수 있을까?하나씩 토스트를 완성하고 나서 손님에게 서빙한 다음, 그 다음 토스트를 만들기 시작하지는 않을 것이다.대신 식빵 6개를 동시에 불판 위에 올려두고, 각각의 토핑을 동시에 올려서 가장 먼저 완성되는 순서대로 손님들에게 내어줄 것이다. 이것이 바로 우리가 일상에서 자연스럽게 사용하는 '병렬 처리'의 개념이다. 서로 독립적인 작업들을 동시에 진행함으로써 전체 작업 시간을 획기적으로 단축시키는 것이다. 최근 우리 팀에서 개발한 해변 정보 조회 A..
· TIL
구현하기 바빠서 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다 Spring Boot에서 스케줄링을 구현하는 주요 방식들에 대해 정리해보자. Spring Boot에서 스케줄링을 구현하는 방법은 여러 가지가 있지만, 실제로 가장 많이 사용되는 것은 @Scheduled 어노테이션과 Quartz Scheduler다. @Scheduled Spring Boot에서 흔히 쓰이는 Scheduled 어노테이션이다. Spring Boot에 내장되어 별도 의존성이 불필요하고, 간단한 설정으로 인해 스케줄링 시 가장 자주 쓰인다. 그러나 크론식 표현이나 fixedRate이라는 설정을 보면 동적으로 스케줄링이 불가하다는 점을 알 수 있다. @Component public class ScheduledTa..
빵판 AKA 브레드보드
BreadBoard's devlog