전체 글

생각 정리하기
· DevOps/AWS
사이드 프로젝트를 AWS에 올리고 운영환경까지 배포한 뒤로, 매달 청구서를 열어보는 일이 습관처럼 생겼다. 개발환경을 먼저 구축하고 운영환경을 그대로 복제해서 만든 구조였기 때문에 어디가 중복인지는 어렴풋이 알고 있었지만, 선뜻 손대지는 못하고 있었다. 이번에 Claude Code에 예약 작업을 걸어두고 그 검토 결과를 따라가 봤는데 생각하지 못한 방향의 제안이 나와서, 적용 과정과 결과를 정리해보고자 한다. Claude Code 예약 작업운영환경 배포 이후 상황에 따라 지속적으로 개선해보고자, Claude Code에 매월 1일과 15일 오전 10시에 도는 예약 작업을 만들어뒀다. 예약 작업은 모두 한 번 쯤 써보았을 것이라 예상되는데, 단순히 프롬프트를 저장했다가 일정한 주기나 정해진 시간에 실행하는 ..
· AI
오랜만에 자격증을 하나 따야겠다는 생각이 들었다. 결론부터 언급하자면, AWS SAP-C02를 응시했고, 합격했다.응시하기 전엔 막상 시작하려니 해설이 붙은 덤프를 사는게 돈이 아깝다는 생각이 들었다. 무엇보다 AI를 활용하고 싶었다. 특히 Remote Control이 최근 들어 쓰기 쉬워졌기 때문에, 출퇴근 시간처럼 이동시간을 모바일 세션으로 적극적으로 활용할 수 있을 것 같았다. 애플리케이션을 따로 만들 생각은 없었고, 놀고 있는 Claude Code와 Codex를 굴려 로컬 환경에서 공부하는 방법을 만들고 싶었다. 그렇게 AI로 공부해야겠다는 생각이 들었고, SKILL을 만들어봐야겠다는 생각이 들었다.그러던 중 적절한 레퍼런스를 발견했다. tutor-skills는 문서나 코드베이스를 학습 자료로 바..
· DevOps/AWS
AWS의 컨테이너 서비스인 ECS를 시작하기 위한 클러스터 유형으로는 서버리스인 Fargate 유형과 EC2 유형이 있다. EC2 유형은 인스턴스를 직접 관리하는 만큼 관리 포인트가 늘어나지만, 그만큼 비용 부담이 더 적다. EC2 유형의 큰 특징 중 하나는 네트워크 모드이고, 또 다른 하나는 Capacity Provider, 혹은 용량 공급자이다. 클러스터 오토스케일링과 서비스 오토스케일링Capacity Provider를 이해하기 위해 오토스케일링에 대해 이해할 필요가 있다. 흔히 말하는 Auto Scaling Group (ASG)는 컴퓨팅 리소스인 EC2 인스턴스에 대한 오토스케일링 그룹이지만, 컨테이너 기반인 ECS에서 사용되는 오토스케일링은 클러스터 오토스케일링과 서비스 오토스케일링이 있다. 클러..
· DevOps/CICD
Java/Spring Boot 애플리케이션의 CI/CD를 GitHub Actions로 구축한다면 매우 유용한 action이 있다. 문제 상황Java/Spring Boot 애플리케이션의 CI 파이프라인을 GitHub Actions로 구축할 때 gradle build를 통해 전체 테스트를 진행했다. Actions CI 스크립트는 아래와 같았다.name: Java CI with Gradle and MySQLon: pull_request: branches: - main - 'feat/**' - 'refactor/**' - 'fix/**'permissions: contents: read checks: write pull-requests: writejobs: bui..
오랜만에 예전에 하던 프로젝트를 새 노트북에 풀 받아 작업을 해봤는데 빌드와 테스트가 되지 않는 문제가 생겼다. 역시 프로젝트 절반은 세팅이라 그런지, 새로운 디바이스로 오랜만에 해보려니 마치 세팅도 처음부터 하는 기분이었다.. 문제 상황나는 IntelliJ IDE를 사용하고 있다. IntelliJ에서 Gradle을 사용한 애플리케이션을 실행시키거나 빌드, 테스트를 할 때 사용할 툴을 IntelliJ IDEA와 Gradle 중 선택할 수 있다. 해당 설정은 `File` → `Settings` → `Build, Execution, Deployment` → `Build Tools` → `Gradle`에서 할 수 있다. IntelliJ IDEA는 IDE용 최적화가 되어 실행 속도가 빠를 순 있지만, 모든 설정..
· DevOps/AWS
클러스터 인프라를 서버리스로 AWS에 일임하는 것이 아니라, 사용자가 직접 EC2 인스턴스로 구성해서 컨테이너 오케스트레이션 서비스만 ECS를 사용한 방식도 가능하다. 장단점은 명확하게 사용자가 직접 클러스터 내용과 EC2 오토스케일링을 구성해야하지만, 비용을 효율적으로 관리할 수 있다. EC2 시작 유형의 ECS 개요ECS Fargate는 AWS가 자체적으로 인프라 클러스터를 담당하기에, 사용자가 신경써야 할 부분은 컨테이너에 관한 configuration이다. 반면 EC2 시작 유형의 ECS는 컨테이너가 배포될 인프라 클러스터를 EC2 인스턴스로 사용자가 관리해야한다. ECS 서비스가 태스크를 실행하면, 실행되는 태스크 컨테이너를 실제로 올릴 컴퓨터인 EC2 인스턴스 풀을 관리한다는 의미이다.Farg..
Spring Boot를 이용한 간단한 투두리스트 프로젝트를 진행하며 투두 아이템이 소속되는 목표 도메인을 만들고 있었다. JPA EntityDB ORM으로 JPA를 사용했고, 엔티티이자 도메인 클래스는 아래와 같다.@Entity@Table(name = "goal")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getterpublic class Goal extends BaseEntity { private static final GoalStatus DEFAULT_STATUS = "IN PROGRESS"; private static final PrivacyType DEFAULT_PRIVACY_TYPE = "PRIVATE"; private static final..
간단한 트러블 슈팅이다. 문제 상황새 프로젝트를 만들어 항상 해왔던 것처럼 컨트롤러에 API 엔드포인트를 만들어 실행했더니 전에는 발생하지 않던 문제가 발생했다. 예외 발생java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not available via reflection.Ensure that the compiler uses the '-parameters' flag.스택은 자주 쓰던 것과는 다른 점이 없었는데 이러한 예외가 발생했다. 원인파악된 원인을 간략하게 나타내자면, `@PathVariable`이나 `@RequestParam`등의 애너테이션을 사..
· DevOps/AWS
AWS의 컨테이너 서비스를 통해서 AWS는 서버, 인프라, OS, 컨테이너 런타임 등의 환경을 제공하고, 사용자는 컨테이너 config와 애플리케이션 등에 책임을 가져가며 컨테이너 애플리케이션을 위한 인프라 서비스를 제공받을 수 있다. Elastic Container Service컨테이너 애플리케이션이 필수가 된 요즘 쿠버네티스가 컨테이너 오케스트레이션 플랫폼으로 많은 선택을 받고 있다. AWS에서도 이를 지원하는 Elastic Kubernetes Service(EKS)가 있지만, 완전 관리형 컨테이너 오케스트레이션 서비스인 Elastic Container Service(ECS)도 존재한다. ECS를 사용하면 후에 컨테이너 오케스트레이션 플랫폼을 교체할 때 마이그레이션이 힘들 수도 있겠지만, AWS E..
· DevOps/AWS
Elastic Container Registry일관되고 가벼운 컨테이너 런타임 실행환경을 위해 빌드된 이미지들을 저장하는 곳이 컨테이너 이미지 레지스트리이다. 대표적으로 컨테이너 플랫폼으로는 도커가 있고, 도커 이미지의 레지스트리로 도커 허브가 있다. 도커 이미지와 같은 컨테이너 표준 OCI 이미지의 저장소를 관리형 서비스로 제공하는 것이 AWS ECR이다.퍼블릭 레지스트리나 ECR 모두 기본적인 레지스트리 기능을 제공한다. 외부에서 pull 할 수 있는 이미지들을 모아놓을 수 있는 허브로서의 기능성이다. ECR은 이외에도 추가적인 기능을 제공한다. Lifecycle PolicyECR 내의 오래된 이미지들을 자동으로 삭제할 수 있는 정책을 정할 수 있다. ECR은 보관된 이미지 용량만큼 비용이 부과되기..
인재이
그냥 흔한 개발 블로그