참여 계기 슈퍼팀 코리아에서 주최한 2025 Seoulana 해커톤에 참여했다. 해커톤 기간은 2025.04.04(금) ~ 2025.04.06(일)였다. 블록체인을 조금이라도 이해하고 싶어서 참여했다. 평소에 별도의 시간을 내서 블록체인을 공부하지 않다보니 해커톤이라는 환경에 들어가서 어떻게든 블록체인을 배우게 될 것이라 생각했다. 덕분에 막연하게 ...
[알고리즘] 신장 트리와 최소 비용 신장 트리 (feat. 프림 알고리즘)
신장 트리(Spnning tree) 신장 트리는 다음과 같은 조건을 만족하는 그래프를 의미한다. 연결 그래프의 부분 그래프이며, 모든 노드를 포함한다. 모든 노드가 적어도 하나의 간선에 연결되어 있다. 사이클이 존재하지 않는다. 그래프에서 말하는 사이클이란 특정 노드에서 출발하여 다시 처음 출발했던 곳으로 되돌아 갈 수 있는 것을 ...
[nginx] response header의 Server 항목에서 nginx 버전 제거하기
개요 nginx의 응답 헤더(response header) 중 Server 항목에 nginx 버전 정보가 표시되지 않도록 설정하는 방법을 소개합니다. 문제 상황 nginx를 리버스 프록시로 사용하여 백엔드 API 요청을 처리하고 있었습니다. 우연히 클라이언트의 응답 헤더를 확인하던 중, 아래의 이미지와 같이 Server 항목에 nginx의 버전이...
[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...