Posts
Dev Joon
Cancel

[Spring] PSA(Portable Service Abstraction) 개념 정리

개요 Spring의 세 가지 핵심 기술 중 하나인 PSA(Portable Service Abstraction)에 대해 정리했습니다. PSA란? PSA는 Spring에서 특정 기술에 종속되지 않고, 일관된 인터페이스를 통해 다양한 기술을 동일한 방식으로 사용할 수 있도록 추상화한 개념입니다. 즉, 개발자가 특정 기술에 직접 의존하지 않고, Spr...

[알고리즘] 그래프(graph) 개념과 구현 방법(인접 행렬, 인접 리스트)

그래프란? 그래프는 정점(node 또는 vertex)과 간선(edge)로 이루어진 자료구조이다. 사실 트리는 그래프의 일종이다. 하지만, 그래프는 트리와 달리 정점마다 간선이 존재하지 않을 수도 있으며, 루트 노드와 부모 노드, 자식 노드 개념이 존재하지 않는다. 위의 그림은 정점이 3개이고, 간선이 3개인 그래프이다. 그래프의 활용? 그...

[Java] List에서 배열로 변환하는 toArray() 매개변수로 빈 배열을 넘기는 이유

개요 List에서 배열(Array)로 변환할 때 사용하는 메서드인 toArray()의 매개변수로 빈 배열을 넘기는 이유에 대해 정리했습니다. List에서 Array로 변환하기 아래와 같이 List가 있다고 가정하겠습니다. List<String> list = new ArrayList<>(); list.add("hello");...

[Spring] AOP 개념 정리

개요 스프링 프레임워크의 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을 이용해서 컨테이너로 주기적으로 실행했습니다. 개발 배경 취업 스터디를 운영하며 아래와 같은 두 가지 규칙을 정했습니다....