분류 전체보기
-
동일한 로직을 여러 번 적용하기 위해서는 반복문을 적용할 수 있는데 이 반복문은 재귀의 형태로 변경이 가능하다. 그런데 일반적으로 사람들은 반복문에 상대적으로 익숙하기 때문에 굳이 당장 손이 가지않는 재귀를 사용하려 하지 않는다. 하지만 알고리즘에서 재귀는 선택이 아닌 필수이다.!이번 포스트에서는 반복문과 재귀를 비교해보고 최종적으로 왜 재귀를 써야하는지 살펴보자. 반복문 vs 재귀 반복문과 재귀 함수의 비교일반적으로 반복문과 재귀 함수는 다음과 같이 비교할 수 있다. 재귀 함수반복문종료 조건기본 파트에서 return반복문 종료 조건수행 시간메서드 호출 비용으로 상대적으로 느림상대적으로 빠름메모리stack 메모리 점유로 상대적으로 많이 사용상대적으로 적게 사용작성 난이도이해하면 사람의 표현기계적 반복제어..
[재귀]03. 반복문 vs 재귀동일한 로직을 여러 번 적용하기 위해서는 반복문을 적용할 수 있는데 이 반복문은 재귀의 형태로 변경이 가능하다. 그런데 일반적으로 사람들은 반복문에 상대적으로 익숙하기 때문에 굳이 당장 손이 가지않는 재귀를 사용하려 하지 않는다. 하지만 알고리즘에서 재귀는 선택이 아닌 필수이다.!이번 포스트에서는 반복문과 재귀를 비교해보고 최종적으로 왜 재귀를 써야하는지 살펴보자. 반복문 vs 재귀 반복문과 재귀 함수의 비교일반적으로 반복문과 재귀 함수는 다음과 같이 비교할 수 있다. 재귀 함수반복문종료 조건기본 파트에서 return반복문 종료 조건수행 시간메서드 호출 비용으로 상대적으로 느림상대적으로 빠름메모리stack 메모리 점유로 상대적으로 많이 사용상대적으로 적게 사용작성 난이도이해하면 사람의 표현기계적 반복제어..
2024.12.05 -
이번 포스트에서는 재귀 함수가 어떻게 호출되면서 동작하는지 살펴보자. 재귀함수 동작이 처음에 와닿지 않는 경우가 많은데 재귀를 이해하기 위해서는 메모리에서 함수들이 어떻게 동작하는지 손으로 스택을 직접 그려가면서 공부하는 방법이 제일 좋다. 함수의 호출과 메모리 함수들을 호출되면서 stack 영역에 해당 함수만을 위한 메모리 공간을 확보하고 함수의 동작을 처리한다. 함수에서 또 다른 함수를 호출하는 경우 기존 함수의 메모리 공간 위에 새로운 함수를 위한 메모리 공간을 쌓게(stack)된다. 이때 기존의 메모리는 동작을 일시 정지하는 pending 상태가 되고 맨 위의 메모리 공간만 활성화 상태가 된다. 그리고 메서드가 return 되면 점유하고 있던 메모리 공간을 반환하고 기존에 pending 되어있던..
[재귀]02. 재귀 함수와 호출 트리이번 포스트에서는 재귀 함수가 어떻게 호출되면서 동작하는지 살펴보자. 재귀함수 동작이 처음에 와닿지 않는 경우가 많은데 재귀를 이해하기 위해서는 메모리에서 함수들이 어떻게 동작하는지 손으로 스택을 직접 그려가면서 공부하는 방법이 제일 좋다. 함수의 호출과 메모리 함수들을 호출되면서 stack 영역에 해당 함수만을 위한 메모리 공간을 확보하고 함수의 동작을 처리한다. 함수에서 또 다른 함수를 호출하는 경우 기존 함수의 메모리 공간 위에 새로운 함수를 위한 메모리 공간을 쌓게(stack)된다. 이때 기존의 메모리는 동작을 일시 정지하는 pending 상태가 되고 맨 위의 메모리 공간만 활성화 상태가 된다. 그리고 메서드가 return 되면 점유하고 있던 메모리 공간을 반환하고 기존에 pending 되어있던..
2024.12.04 -
이번 포스트에서는 Spring AI의 기본 컨셉에 대해 살펴보자. AI 내용이니까 기본 내용은 AI에게 요약시키고 필요한 부분만 첨언해본다.ㅎ Spring AI의 개요 개요Spring AI는 애플리케이션에 인공지능을 쉽게 통합할 수 있도록 설계된 모듈형 프레임워크이다. 이를 통해 애플리케이션 개발의 용이성을 높이고 기업 데이터 및 API와 다양한 AI 모델을 효율적으로 연결하는데 중점을 둔다. 이 프로젝트는 LangChain이나 LlamaIndex등 유명한 Python 프로젝트에서 영감을 얻었지만 이들을 직접 자바로 포팅한 것은 아니고 추후 생성형 AI의 활용이 다양한 언어에서 활발히 될 것이라는 믿음 하에서 진행되었다고 한다. Spring AI는 엔터프라이즈 애플리케이션의 데이터와 API를 생성형 ..
[Spring-AI] 01. 기본 컨셉이번 포스트에서는 Spring AI의 기본 컨셉에 대해 살펴보자. AI 내용이니까 기본 내용은 AI에게 요약시키고 필요한 부분만 첨언해본다.ㅎ Spring AI의 개요 개요Spring AI는 애플리케이션에 인공지능을 쉽게 통합할 수 있도록 설계된 모듈형 프레임워크이다. 이를 통해 애플리케이션 개발의 용이성을 높이고 기업 데이터 및 API와 다양한 AI 모델을 효율적으로 연결하는데 중점을 둔다. 이 프로젝트는 LangChain이나 LlamaIndex등 유명한 Python 프로젝트에서 영감을 얻었지만 이들을 직접 자바로 포팅한 것은 아니고 추후 생성형 AI의 활용이 다양한 언어에서 활발히 될 것이라는 믿음 하에서 진행되었다고 한다. Spring AI는 엔터프라이즈 애플리케이션의 데이터와 API를 생성형 ..
2024.12.04 -
이번 포스트에서는 재귀가 왜 필요한지와 기본적인 재귀의 흐름에 대해서 살펴보자. 재귀함수 재귀란?재귀(再歸, recursion )란 러시아의 전통인형 마요르카 처럼 내 안에 또 다른 나 즉 모양이나 동작은 동일하지만 크기만 작은 나를 찾아가는 과정이다. 우리는 수학 시간에도 재귀의 성격을 잘 배운적이 있다. 1부터 n까지의 곱을 구하는 펙토리얼 연산이 그 예이다.n! = 1 * 2 * 3 * ... * (n-2) * (n-1) * n 여기서 맨 마지막의 *n을 제외하면 나머지는 (n-1)! 이 된다. 즉 크기만 1작아진 펙토리얼이다.이렇게 하나의 문제 내에 크기는 다르지만 동일한 성격의 다른 문제를 하나 이상 포함하고 있는 것을 재귀적 구조라고 한다. 이런 재귀를 프로그래밍 함수에 적용한 것을 재귀 함수..
[재귀]01. 재귀 함수이번 포스트에서는 재귀가 왜 필요한지와 기본적인 재귀의 흐름에 대해서 살펴보자. 재귀함수 재귀란?재귀(再歸, recursion )란 러시아의 전통인형 마요르카 처럼 내 안에 또 다른 나 즉 모양이나 동작은 동일하지만 크기만 작은 나를 찾아가는 과정이다. 우리는 수학 시간에도 재귀의 성격을 잘 배운적이 있다. 1부터 n까지의 곱을 구하는 펙토리얼 연산이 그 예이다.n! = 1 * 2 * 3 * ... * (n-2) * (n-1) * n 여기서 맨 마지막의 *n을 제외하면 나머지는 (n-1)! 이 된다. 즉 크기만 1작아진 펙토리얼이다.이렇게 하나의 문제 내에 크기는 다르지만 동일한 성격의 다른 문제를 하나 이상 포함하고 있는 것을 재귀적 구조라고 한다. 이런 재귀를 프로그래밍 함수에 적용한 것을 재귀 함수..
2024.12.03 -
이전 포스트에서 auth-token을 이용한 인증 처리에 대해서 살펴보았다. 이번 포스트에서는 refresh token이라는 개념에 대해서 살펴보자. jwt auth token의 문제점과 보완 jwt auth token의 문제점JWT는 세션을 사용할 수 없는 REST 환경에서 세션 처럼 인증 정보를 유지하기 위해서 사용된다. 세션의 경우는 사용자의 활동에 따라서 유효 기간이 연장되지만 토큰의 경우는 만들어진 시점에 이미 유통 기한이 정해져있다. 토큰은 유효기간이 자체적으로 연장되지는 않는다. 따라서 장기간 사용해야 하는 경우는 번거로움이 발생할 수 있다.그럼 대안으로는 유효기간을 길~~게 가져갈 수 있다. 하지만 이때의 문제는 해커에 의한 토큰 탈취이다. 요청때마다 클라이언트에서 서버로 전송되는 이 토..
[JWT] Refresh 토큰 개념이전 포스트에서 auth-token을 이용한 인증 처리에 대해서 살펴보았다. 이번 포스트에서는 refresh token이라는 개념에 대해서 살펴보자. jwt auth token의 문제점과 보완 jwt auth token의 문제점JWT는 세션을 사용할 수 없는 REST 환경에서 세션 처럼 인증 정보를 유지하기 위해서 사용된다. 세션의 경우는 사용자의 활동에 따라서 유효 기간이 연장되지만 토큰의 경우는 만들어진 시점에 이미 유통 기한이 정해져있다. 토큰은 유효기간이 자체적으로 연장되지는 않는다. 따라서 장기간 사용해야 하는 경우는 번거로움이 발생할 수 있다.그럼 대안으로는 유효기간을 길~~게 가져갈 수 있다. 하지만 이때의 문제는 해커에 의한 토큰 탈취이다. 요청때마다 클라이언트에서 서버로 전송되는 이 토..
2024.12.02 -
이번 포스트에서는 Deque 자료구조에 대해서 살펴보자. Deque 기본 특성흔히 Deck으로 알려진 Deque는 Double ended Queue의 약자로 Queue인데 양쪽이 모두 뚤린 구조이다. 따라서 앞/뒤로 자료를 넣고 뺄 수 있는 기능을 갖는다.이에따라 기본적으로 제공되는 메서드들이 방향성을 갖는다.(물론 그렇지 않은 표현도 다 제공한다. 예를 들어 offer와 offerLast는 동일하다.) First Element(Head)Last Element(Tail)문제 발생 시예외 발생특정 값 반환예외 발생특정 값 반환insertaddFirstofferFirstaddLastofferLastremoveremoveFirstpollFirstremoveLastpollLastexaminegetFirstpee..
[자료구조]Deque이번 포스트에서는 Deque 자료구조에 대해서 살펴보자. Deque 기본 특성흔히 Deck으로 알려진 Deque는 Double ended Queue의 약자로 Queue인데 양쪽이 모두 뚤린 구조이다. 따라서 앞/뒤로 자료를 넣고 뺄 수 있는 기능을 갖는다.이에따라 기본적으로 제공되는 메서드들이 방향성을 갖는다.(물론 그렇지 않은 표현도 다 제공한다. 예를 들어 offer와 offerLast는 동일하다.) First Element(Head)Last Element(Tail)문제 발생 시예외 발생특정 값 반환예외 발생특정 값 반환insertaddFirstofferFirstaddLastofferLastremoveremoveFirstpollFirstremoveLastpollLastexaminegetFirstpee..
2024.12.02 -
이번 시간에는 JWT를 Spring Security에서 사용하기 위해 필요한 내용들을 작성해보자. 필터 작성 Spring의 FilterSpring Security는 전반적으로 Filter 기반으로 동작하기 때문에 적절한 Filter를 구성해서 JWT를 사용하는 것이 가장 권장된다.Spring에서 Filter를 만들 때는 통상 OncePerRequestFilter를 상속받아서 구현한다. OncePerRequestFilter는 forward나 include를 포함하는 요청 처리 과정에서 딱 1번만 처리되는 것이 보장되는 필터이다. 이 클래스에는 doFilterInternal과 shouldNotFilter메서드가 제공되므로 필요한 기능을 여기에 제공하면 된다.@RequiredArgsConstructor..
[JWT]JWT를 위한 Spring Security 설정이번 시간에는 JWT를 Spring Security에서 사용하기 위해 필요한 내용들을 작성해보자. 필터 작성 Spring의 FilterSpring Security는 전반적으로 Filter 기반으로 동작하기 때문에 적절한 Filter를 구성해서 JWT를 사용하는 것이 가장 권장된다.Spring에서 Filter를 만들 때는 통상 OncePerRequestFilter를 상속받아서 구현한다. OncePerRequestFilter는 forward나 include를 포함하는 요청 처리 과정에서 딱 1번만 처리되는 것이 보장되는 필터이다. 이 클래스에는 doFilterInternal과 shouldNotFilter메서드가 제공되므로 필요한 기능을 여기에 제공하면 된다.@RequiredArgsConstructor..
2024.12.02 -
입출력 관련 예제 풀어보기 BJ_B3_10952_A+B_5더보기마지막 입력 처리에 신경쓸 것https://www.acmicpc.net/problem/10952 BJ_B2_10953_A+B_6더보기,를 delimiter로 사용https://www.acmicpc.net/problem/10953 BJ_B3_11022_A+B_8더보기출력문 포멧https://www.acmicpc.net/problem/11022 BJ_B2_11721_열개씩끊어출력하기더보기출력문 포멧https://www.acmicpc.net/problem/11721
[입출력]예제 풀어보기입출력 관련 예제 풀어보기 BJ_B3_10952_A+B_5더보기마지막 입력 처리에 신경쓸 것https://www.acmicpc.net/problem/10952 BJ_B2_10953_A+B_6더보기,를 delimiter로 사용https://www.acmicpc.net/problem/10953 BJ_B3_11022_A+B_8더보기출력문 포멧https://www.acmicpc.net/problem/11022 BJ_B2_11721_열개씩끊어출력하기더보기출력문 포멧https://www.acmicpc.net/problem/11721
2024.12.01