전체 글 210

TreeMap과 LinkedHashMap의 차이와 사용예제

TreeMap과 LinkedHashMap의 차이와 사용예제 TreeMap은 자바의 java.util 패키지에서 제공하는 맵(map) 기반의 자료구조입니다. 이것은 레드-블랙 트리(Red-Black Tree) 알고리즘을 기반으로 하며, 키-값 쌍을 정렬된 상태로 저장합니다. 이 정렬은 키에 따라 이루어지며, 키가 Comparable 인터페이스를 구현한 경우에는 그에 따라, 또는 별도의 Comparator 객체를 제공하여 정렬을 수행할 수 있습니다. 주요 특징 정렬: 키를 기준으로 오름차순 또는 내림차순으로 정렬합니다. 로그 시간 복잡도: 대부분의 연산 (add, remove, contains, get 등)에 O(log n)의 시간 복잡도를 가집니다. 키 중복 불가: 같은 키를 가진 여러 개의 엔트리를 저장..

깃허브 액션 (github action) 도커 CI/CD 중 직면한 문제와 고민 (MSA 하위 디렉토리)

깃허브 액션 (github action) 도커 CI/CD 중 직면한 문제와 고민 (MSA 하위 디렉토리) F_Lab 멘토링 중 aws ec2에 도커3개가 있고 깃허브 액션으로 ci/cd를 하고 있는 중에 나는 금방 끝날 줄 알았는데 생각 외로 쉽지 않았다. 우선 워크 플로우를 좀 보고 어느 정도 작성해서 돌아갈 것이라고(에러라도 발생 할 줄 알고) 생각하고 푸시를 날렸는데도 아무 반응도, 목록에도 뜨질 않았다. 흐음... 좀 당황스러웠다. 먼가 문제가 있다는 말인데 내 눈엔 코드가 완벽하진 않아도 뭐가 문제인지 전혀 모르겠었다. 물론 계속 공부하다보면 알게 될 수도 있겠지만 얼마나 걸릴지를 모르겠었다. 그래서 멘토님께 여쭤보고 수동으로 동작시킬 수 있는 방법이 있다고 검색해 보라고 하셨다. 오....알아..

좋은 개발 문화란? 고민/생각

좋은 개발 문화 고민/생각 좋은 개발 문화란 무엇일까? 딱히 정해지지는 않았겠지만 내 개인적인 생각으로는 회사마다 다를 것 같다. 좋은 개발문화는 내가 생각하는 문화는 회사에 도움 개발에 도움 인간관계에 도움 2번 3번의 우선순위는 정하기 어려울 것 같고 결국 회사 조직내에 있는 문화다 보니 1번을 위한 문화라고 생각한다. 회사가 개발팀만 있기는 어려울 것같고 여러 부서가 있을 수 있을 것 같다. 어느 곳에서 봤는데 개인에게도 좋은 개발 문화였으면 더 좋겠다. 물론 당연한 얘기지만 다 좋으면 좋겠지만 구성원 전부다와 회사에게 모두 이득이 되긴 정말 쉽지 않아 보인다. 어느정도 타협은 있어야 되고 고민도 있어야겠고 발전도 있어야 할 것 같다. 아직 취준이다 보니 개발 문화가 몸에 와 닿지는 않지만 내가 생..

빅오 표기법(Big-O notation)

빅오 표기법(Big-O notation) 빅오 표기법(Big-O notation)은 알고리즘의 성능을 분석하고 비교하기 위한 중요한 도구입니다. 이 표기법은 알고리즘의 실행 시간이 입력 데이터 크기에 대한 상한을 나타내는 방법으로 사용됩니다. 빅오 표기법은 알고리즘의 효율성을 평가하고 어떤 상황에서도 어떤 알고리즘이 다른 알고리즘보다 빠른지 또는 느린지를 이해하는 데 도움이 됩니다. 예를 들어, O(1)은 상수 시간 알고리즘을 나타내며 입력 크기에 관계없이 실행 시간이 일정합니다. O(log n)은 로그 시간 알고리즘이며 입력 크기에 따라 실행 시간이 로그 함수적으로 증가합니다. O(n)은 선형 시간 알고리즘이며 입력 크기에 비례하여 선형적으로 증가합니다. 이러한 빅오 표기법은 알고리즘의 선택과 최적화에..

자바 reflection의 동작원리와 장단점

자바 reflection의 동작원리와 장단점 자바 reflection 자바(Java)의 리플렉션(Reflection)은 런타임 시점에 클래스의 정보를 조사하거나 수정할 수 있는 Java API입니다. 리플렉션을 사용하면 런타임 중에 다음과 같은 작업을 수행할 수 있습니다. 클래스 정보 얻기: 런타임에 클래스의 메타데이터를 알아낼 수 있습니다. 객체 생성: Class 객체를 통해 새로운 인스턴스를 생성할 수 있습니다. 메서드 호출: 메서드의 이름을 문자열로 전달하여 호출할 수 있습니다. 변수 접근: 런타임에 객체의 필드에 접근하거나 수정할 수 있습니다. 주요 클래스 및 인터페이스 java.lang.Class java.lang.reflect.Method java.lang.reflect.Field java.l..

동기, 비동기, 블로킹, 논블로킹

동기 vs 비동기 & 블로킹 vs 논블록킹 동기 vs 비동기 & 블로킹 vs 논블록킹 동기(Synchronous)와 비동기(Asynchronous), 그리고 블로킹(Block)과 논블로킹(Non-Block) 개념은 소프트웨어 엔지니어링, 특히 웹 개발에서 매우 중요한 개념들입니다. 이들은 시스템 디자인과 프로그래밍에서 다양한 작업 흐름과 데이터 처리 방식을 결정하는 데 큰 영향을 미칩니다. 동기(Synchronous) vs 비동기(Asynchronous) 동기(Synchronous) 동기 방식은 하나의 작업이 완료될 때까지 다음 작업이 기다리는 방식입니다. 이로 인해 프로그램의 실행 흐름이 예측 가능하며, 디버깅이 쉽습니다. 그러나 이 방식은 리소스를 비효율적으로 사용할 수 있습니다. 예시: HTTP 요..

HTTP 상태 코드

HTTP 상태 코드 HTTP 상태 코드 HTTP 상태 코드는 HTTP 요청에 대한 서버의 응답을 나타내는 3자리 숫자입니다. 첫 번째 숫자는 응답의 종류를 나타내며, 나머지 두 숫자는 세부적인 응답 내용을 나타냅니다. HTTP 상태 코드는 크게 5가지 종류로 나눌 수 있습니다. 1xx (Informational): 요청을 받았으며 프로세스를 계속 진행합니다. 2xx (Success): 요청을 성공적으로 받았으며 인식했고 수용하였다. 3xx (Redirection): 요청 완료를 위해 추가 작업 조치가 필요하다. 4xx (Client Error): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다. 5xx (Server Error): 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다. 1xx (In..

LRU/LFU/FIFO 캐시 삭제 알고리즘

LRU/LFU/FIFO 캐시 삭제 알고리즘 LRU/LFU/FIFO 캐시 삭제 알고리즘 LRU (Least Recently Used), LFU (Least Frequently Used), FIFO (First-In-First-Out)은 캐시에서 사용되는 다양한 삭제 알고리즘입니다. 이러한 알고리즘은 캐시에서 어떤 아이템을 삭제할지를 결정하는 데 사용됩니다. 각 알고리즘의 동작 방식은 다음과 같습니다: LRU (Least Recently Used - 가장 최근에 사용되지 않은 아이템을 삭제) 이 알고리즘은 캐시에서 가장 오래된(최근에 사용되지 않은) 아이템을 삭제합니다. 가장 최근에 사용된 아이템은 캐시의 앞쪽에 위치하며, 오래된 아이템은 뒤쪽에 위치합니다. 아이템이 캐시에 추가될 때마다, 해당 아이템을 캐..

스프링 @Transactional어노테이션의 동작원리와 전파 속성들

스프링 @Transactional어노테이션의 동작원리와 전파 속성들 스프링 @Transactional어노테이션의 동작원리와 전파 속성들 스프링 @Transactional어노테이션 스프링의 @Transactional 어노테이션은 트랜잭션 관리를 선언적으로 처리할 수 있게 해줍니다. 이 어노테이션을 메소드나 클래스에 붙이면 그 범위에서 실행되는 작업은 트랜잭션으로 처리됩니다. 주요 특징 원자성(Atomicity): 어노테이션을 사용한 메소드 내의 작업은 모두 성공하거나 실패합니다. 일관성(Consistency): 트랜잭션이 성공적으로 커밋되면, 데이터는 일관된 상태를 유지합니다. 격리성(Isolation): 동시에 여러 트랜잭션이 발생하더라도 각 트랜잭션은 독립적입니다. 지속성(Durability): 트랜잭..

스프링 필터와 인터셉터 그리고 차이점

스프링 필터와 인터셉터 그리고 차이점 스프링 필터 스프링 필터 스프링 필터(Spring Filter)는 웹 애플리케이션에서 HTTP 요청이나 응답을 가로채서 추가적인 처리를 할 수 있게 해주는 구성 요소입니다. 필터는 주로 인증, 로깅, 데이터 변환, 인코딩 등 다양한 목적으로 사용됩니다. 서블릿 필터(Servlet Filter)와 마찬가지로 동작하나, 스프링의 라이프사이클과 통합되어 더 다양한 기능을 제공합니다. 필터의 주요 책임: 인증과 권한 확인: 필터를 통해 사용자의 신원을 확인하고, 특정 리소스에 대한 접근을 제어할 수 있습니다. 로깅과 모니터링: HTTP 요청이나 응답을 로깅하여 나중에 분석하거나 모니터링할 수 있습니다. 데이터 가공: 요청이나 응답의 헤더나 본문을 수정하거나 새로운 속성을 추..