본문 바로가기

전체 글

(178)
[Tip] Github README에 내가 작성한 블로그 최신 글 가져오기 나의 Github README에 블로그 최근 글 작성하기 1. 자신을 소개하는 README.md에 블로그 글 목록이 들어갈 자리에 다음 코드 넣기 2. README.md가 위치하는 Repository에 .github 폴더를 만들고, 그 안에다가 또 workflows 라는 폴더 만들기 3. blog-post-workflow.yml 라는 파일에 아래 코드 붙여넣기 name: Latest blog post workflow on: schedule: # Run workflow automatically - cron: '0 * * * *' # Runs every hour, on the hour workflow_dispatch: # Run workflow manually (without waiting for the c..
[Spring] 스프링 부트의 예외 처리 방식 스프링 부트의 예외 처리 방식 웹 서비스 애플리케이션에서는 외부에서 들어오는 요청에 담긴 데이터를 처리하는 경우가 많다. 그 과정에서 예외가 발생하면 예외를 복구해서 정상으로 처리하기보다는 요청을 보낸 클라이언트에 어떤 문제가 발생했는지 전달하는 경우가 많다. 예외가 발생했을 때 클라이언트에 오류 메시지를 전달하려면 각 레이어에서 발생한 예외를 엔드포인트 레벨인 컨트롤러로 전달해야 한다. 이렇게 전달받은 예외를 스프링 부트에서 처리하는 방식으로 크게 두 가지가 있다. (Rest)ControllerAdvice와 @ExceptionHandler를 통해 모든 컨트롤러의 예외를 처리 ExceptionHandler를 통해 특정 컨트롤러의 예외를 처리 @RestControllerAdvice @RestControll..
[Java] Java에서 예외 처리 예외와 에러 프로그래밍에서 예외(Exception)란 입력 값의 처리가 불가능하거나 참조된 값이 잘못된 경우 등 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미합니다. 예외는 개발자가 직접 처리할 수 있으므로 미리 코드 설계를 통해 처리할 수 있습니다. 에러(Error)란 예외와 비슷한 의미지만 엄연히 다른 용어로, 에러는 주로 자바의 가상머신(JVM)에서 발생시킵니다. 따라서 예외와 달리 애플리케이션에서 처리할 수 있는 것이 없습니다. 대표적인 예로 메모리 부족(OutOfMemory), 스택 오버플로(StackOverFlow)가 있습니다. 이러한 에러는 발생 시점에 처리하는 것이 아니라 미리 애플리케이션의 코드를 살펴보면서 문제가 발생하지 않도록 예방해서 원천적으로 차단해야 합니다. 예외 클래스 ..
[Java] Compile Time과 Runtime의 차이 자바에서는 컴파일 타임과 런타임은 각각 프로그램의 실행의 두 단계를 나타냅니다. 컴파일 타임(Compile Time) 컴파일 타임은 사람이 작성한 소스 코드가 컴퓨터가 이해할 수 있는 기계어로 번역되는 단계입니다. 자바의 컴파일러는 이 단계에서 문법적 에러를 확인합니다. (e.g., missing semicolons, typos, incorrect syntax) 만약 어떤 문제도 발생하지 않으면, 자바 컴파일러(e.g., javac)는 bytecode를 생성합니다. bytecode는 기계어는 아니지만, JVM(Java Virtual Machine)에 의해 해석될 수 있습니다. 또한 아래와 같은 일들이 수행됩니다. 데이터 유형 호환성 확인 클래스 및 방법이 올바르게 선언되었는지 확인 런타임(Runtime)..
[이분 탐색] 프로그래머스 Level 3 입국심사 Java 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 times를 오름차순 정렬한다. 가장 큰 시간(times의 마지막 인덱스)에다가 n을 곱해서 가장 오래 걸리는 경우의 시간을 구한다. 즉, 모든 사람이 가장 오래 걸리는 시간의 입국심사대를 가는 상황이다. 시작 시간(start)과 가장 오래 걸리는 시간(end)을 반으로 나눈 값을 mid라는 변수에 저장한다. times 배열을 순회하며 mid 변수를 times 배열의 요소로 나누어서 c..
[DataStructure] 우선순위 큐(Priority Queue)와 힙(Heap)의 차이 Queue Java의 Queue 인터페이스는 FIFO(First In First Out) 방식의 순차적 자료 구조를 구현 즉, 먼저 추가된 요소가 먼저 제거됨. Queue 인터페이스는 LinkedList, PriorityQueue, ArrayBlockingQueue 등 다양한 클래스에서 구현 Queue 인터페이스는 큐에 요소를 추가, 제거, 검사하는 여러 메서드를 제공하며, 다음은 가장 일반적으로 사용되는 메서드들이다. add(element): 요소를 큐의 맨 뒤에 추가, 큐가 가득 차 있으면 예외를 발생 offer(element): 요소를 큐의 맨 뒤에 추가, 큐가 가득 차 있으면 false를 반환 remove(): 큐의 앞에서 요소를 제거하고 반환, 큐가 비어 있으면 예외를 발생 poll(): 큐의 ..
[DataStructure] Stack과 Queue ADT(Abstract Data Type) vs DS(Data structure) 'ADT'는 추상 자료형을 의미하며 개념적으로 어떤 동작이 있는지만 정의하고, 구현에 대해서는 다루지 않는다. 'DS'는 자료구조로, 'ADT'에서 정의된 동작을 실제로 구현한 것 Stack과 Queue는 'ADT'를 실제로 구현한 자료 구조이다. 스택(Stack)과 큐(Queue) 스택은 'Last-In-First-Out' 형태로 데이터를 저장하는 구조 데이터를 삽입하는 'push', 데이터를 뽑아내고 삭제하는 'pop', 가장 마지막에 들어온 요소를 추출하는 'peek'과 같은 동작이 있다. Queue는 'First-In-First-Out' 형태로 데이터를 저장하는 구조이며, 데이터를 삽입하는 'enqueue', 추출하..
[Spring] 유효성 검사와 Hibernate Validator 유효성 검사(validation) 애플리케이션의 비즈니스 로직이 올바르게 동작하는지 검증하는 작업을 유효성 검사라고 한다. 유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정이 있다. 특히 자바에서 가장 신경 써야 하는 것 중 하나로 NullPointException이 있다. Bean Validation 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산돼 있어 관리하기가 어렵다. 그리고 검증 로직에 의외로 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 검증해야 할 값이 많다면 검증하는 코드가 길어진다. 이러한 문제로 코드가 복잡해지고 가독성이 떨어지는 문제가 있다. 이 같은 문제를 해결하기 위해 자바 진영에서는 2009년..