개요 스프링 프레임워크의 3대 요소 중 하나인 AOP(Aspect-Oriented Programming)에 대해 정리했습니다. AOP 개념 AOP는 핵심 비즈니스 로직과 공통 관심사를 분리해서 모듈화하는 프로그래밍 기법입니다. 여러 클래스에서 반복해서 사용하는 코드를 모듈화하고, 핵심 기능 개발에 집중할 수 있도록 도와줍니다. AOP가 필요한...
[Java] 문자열 클래스 String, StringBuffer, StringBuilder 정리
개요 Java에서 문자열을 다루기 위해 사용하는 클래스 3가지(String, StringBuffer, StringBuilder)에 대해 정리했습니다. String String 객체는 불변(Immutable) 객체입니다. Heap 메모리 영역 안에서 관리되며, String Constant Pool 또는 Heap 영역에 생성됩니다. String s...
[Spring] 의존성 주입(DI)과 제어의 역전(IoC) 개념 정리
개요 스프링 프레임워크의 3대 요소인 DI/IoC, AOP, PSA 중 DI/IoC에 대해 정리했습니다. 예제 코드는 Java로 작성했습니다. 의존성 주입(DI; Dependency Injection) 개념 이해 의존성 주입이라는 단어에는 의존성과 주입이라는 2가지 개념이 들어있습니다. 각각의 개념을 먼저 정리해봅시다. 의존성이란? 의존성이란...
선언형 프로그래밍(declarative programming)과 명령형 프로그래밍(imperative programming) 비교
TL; DR 선언형 프로그래밍은 what 에 집중 명령형 프로그래밍은 how 에 집중 간단한 예시를 통한 비교 길을 걷는 중에 누군가 “일산 이케아까지 어떻게 가야 하나요?” 라고 물었다고 해보자. 선언형과 명령형 프로그래밍이 대답한다면 다음과 같이 대답할 수 있을 것이다. 선언형(what) : “경기 고양시 덕양구 권율대로 4...
[nginx] rate limit 설정으로 인한 503 Service Unavailable 오류 해결 과정
개요 nginx를 이용해 API 요청을 백엔드로 리버스 프록싱했지만, 프론트엔드에서 백엔드로 보낸 요청의 응답으로 503 Service Unavailable오류를 반환하는 문제가 발생했습니다. 이 글에서는 해당 오류의 원인과 해결 과정을 정리했습니다. 결론부터 말하자면, 문제의 원인은 DDoS 공격을 방지하기 위해 사용했던 nginx의 rate l...
[Spring] IntelliJ java: package org.springframework.boot does not exist 오류 해결
실행 환경 OS : MacOS Catalina (10.15.7) IDE : IntelliJ 2023.1.3 (Ultimate Edition) JDK : openjdk17 Build Tool : Gradle 문제 상황 spring initializer를 이용해서 초기 프로젝트 파일을 다운 받고, IntelliJ에서 sprin...
[Java] JDA, cron, Docker를 활용한 Discord 메시지 전송 Bot 만들기
개요 Discord 채널에 정해진 시간에 메시지를 자동으로 전송하는 방법을 정리했습니다. JDA(Java Discord API) 라이브러리를 이용해서 간단한 코드를 작성하고, Docker 이미지로 패키징한 실행 파일을 cron을 이용해서 컨테이너로 주기적으로 실행했습니다. 개발 배경 취업 스터디를 운영하며 아래와 같은 두 가지 규칙을 정했습니다....
[ArgoCD] AppProject 생성 및 RBAC 설정 가이드
개요 ArgoCD는 여러 팀이 공유하여 사용하는 환경에서 애플리케이션을 효과적으로 관리할 수 있도록 Project(AppProject) 개념을 제공합니다. 이를 통해 애플리케이션을 논리적으로 구분하고, 특정 소스, 클러스터, 네임스페이스에 제한을 두는 등 다양한 관리 기능을 제공합니다. 또한, 프로젝트별 RBAC(Role-Based Access Co...
[ArgoCD] Kustomize를 사용한 Notification 템플릿 관리 및 배포
개요 Kustomize를 사용하면 Kubernetes 리소스를 효율적으로 구성하고 관리할 수 있습니다. 이 글에서는 ArgoCD Notification의 트리거와 템플릿 구성을 여러 ConfigMap 파일로 분리한 뒤, Kustomize를 이용해 하나의 ConfigMap으로 병합하고 배포하는 과정을 다룹니다. 이를 통해 복잡한 Notification...
[AWS] Route 53 계정 간 도메인 이전 및 ACM 인증서 발급 방법
개요 AWS Route 53에서 구매한 도메인을 서로 다른 AWS 계정으로 이전하는 방법과 AWS Certificate Manager(ACM)을 이용해 HTTPS 통신을 위한 인증서를 발급하는 과정을 정리했습니다. 상황 AWS 계정 A와 B가 있다고 가정합니다. 계정 A에서 Route 53을 통해 구매한 도메인의 소유권을 계정 B로 이전하...