본문 바로가기

JAVA의 자료구조를 톺아보자

Java Collection 톺아보기ListArrayList를 톺아보자ArrayList는 이름에 List가 들어가지만, 본질적으로는 배열 기반 자료구조이다.그래서 인덱스를 통한 조회가 빠르다.🤔 배열 공간이 꽉 찬다면?더 큰 배열을 새로 만들고, 기존 데이터를 새 배열로 복사한다.LinkedList를 톺아보자LinkedList는 prev, next 형태의 참조로 노드 객체를 연결하는 자료구조이다.배열처럼 인덱스로 바로 접근할 수 없기 때문에 조회가 느리다.🤔 중간 삽입/삭제가 빠르니 무조건 좋을까?해당 노드를 이미 알고 있다면 빠르다.하지만 index 기준으로 삽입/삭제를 한다면, 결국 해당 위치까지 찾아가야 하므로 느리다.MapHashMap을 톺아보자HashMap의 기본적인 본질은 배열 + 해시 +..

커스텀 파라미터, 그 원리와 사용방법은?

커스텀 파라미터 구현설명에 앞서, 먼저 간단한 예시 코드를 작성해본다.다음과 같은 커스텀 파라미터를 가정한다.@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CurrentUserId { } @CurrentUserId 자체는 파라미터 전용 런타임 Annotation입니다. 이는 다음 커스텀 Resolver가 처리한다. Resolver에 필요한 supportsParameter와 resolveArgument를 Override해주었다.public class CurrentUserIdArgumentResolver implements HandlerMethodArgumentResol..

프론트의 CSR과 SSR에 따른 백엔드의 대응 방식 연구

배경최근 프론트 팀원들의 컴포넌트 CSR과 SSR에 대한 열띤 논의가 있었다.그런데, CSR과 SSR은 프론트 측의 단순 UI 렌더링만 관련있을까?백엔드 api 설계는 이와 완전 무관할까? 이 게시글을 통해 프론트와 백엔드 모두 컴포넌트 및 api 설계에 도움이 되길 바란다.목표백엔드 api에 따른 프론트 컴포넌트의 csr과 ssr의 영향을 분석하고자 한다.가설이를 원활히 테스트 할 수 있도록 다음과 같이 범용적인 상품 판매 시나리오를 가정했다.결과우선 가장 직관적으로 크롬 디버깅 툴로 직접 조사해보았다.- Full SSR과 Full CSR로 SSR과 CSR을 분석하고- 백엔드 V1과 V2를 통해 백엔드 api의 영향을 분석한다.Full SSR + 백엔드 V1(단일응답)Full CSR + 백엔드 V1(단..

FastAPI 기본부터 극한까지 날먹하기 (Pydantic, Depends 심화)

Discriminated Union만약 결제 수단(카드, 계좌이체, 간편결제)에 따라 요청 구조가 다르다면?Spring에서는 @JsonTypeInfo + @JsonSubTypes를 사용해야 하고, 커스텀 디시리얼라이저를 작성해야 하는 경우도 많다. Pydantic에서는 매우 간단하게 처리 가능하다. 다음 코드를 살펴보자.from pydantic import BaseModel, Fieldfrom typing import Literal, Annotated, Unionfrom enum import Enum# 각 결제 수단별 요청 스키마class CardPaymentRequest(BaseModel): method: Literal["CARD"] = "CARD" card_number: str = Fiel..

FastAPI 기본부터 극한까지 날먹하기 (SpringBoot에서 넘어가기)

용어부터 알아보자SpringBoot와 FastAPI는 어떻게 다를까? 기본적인 구조부터 잡고 가면 편할 것 같다.JDK (Java 17/21)Python (3.11/3.12/3.13)Maven / GradlePoetry / uv / pipapplication.yml.env + pydantic-settingsTomcat (내장 서블릿 컨테이너)Uvicorn (ASGI 서버)Spring Initializr수동 구성 (or cookiecutter)./gradlew bootRunuvicorn app.main:app --reloadJAR 패키징Docker 이미지 (사실상 표준)JUnit + Mockitopytest + pytest-asyncio + httpxCheckstyle + SpotBugsRuff + myp..

FastAPI 기본부터 극한까지 날먹하기

서론일반적인 FastAPI 강의는 지양한다. 그럴거면 ChatGPT에게 물어보는게 낫다.아키텍처 구조부터 모든 한 줄마다 연구하고 최적의 방향을 서술할 것이다.환경 구축Python 버전 관리파이썬 설치 방법까지는 언급하지 않겠다. 그러나 경우에 따라 Python의 버전 관리가 필요할 수 있다.Java에서 sdkman으로 JDK 17, 21을 전환하듯, Python에서는 pyenv를 사용한다.# 설치curl https://pyenv.run | bash# ~/.bashrc 또는 ~/.zshrc에 추가export PYENV_ROOT="$HOME/.pyenv"export PATH="$PYENV_ROOT/bin:$PATH"eval "$(pyenv init -)"# Python 버전 설치 및 전환pyenv inst..

KVM Netfilter 설정

KVM Machine Netfilter 추가 설정KVM 머신이 외부와 통신을 하는 상황에서, Bridge 설정 및 포트포워딩을 완료해도 불안정한 상황이 발생하였다.이미 Host 측에서 Netfilter를 비활성화하였으나, 간헐적으로 통신이 안되는 상황이 발생하였기에 VM 측의 Netfilter를 점검했다.VM의 Bridge Netfilter 비활성화점검 결과는 다음과 같았다.$ cat /proc/sys/net/bridge/bridge-nf-call-arptables1$ cat /proc/sys/net/bridge/bridge-nf-call-iptables1$ cat /proc/sys/net/bridge/bridge-nf-call-ip6tables1값이 1이면 netfilter가 활성화 상태이다. KVM ..

KVM Hypervisor Type 1.5에서 VM 관리

KVM[HyperVisor Type1] 설치Ubuntu Server 22.04 CLI 환경KVM 지원 여부 확인grep -Eoc '(vmx|svm)' /proc/cpuinfo출력 결과가 0이 아니면 KVM을 지원한다.KVM을 지원하지 않는 경우, BIOS 설정 문제일 가능성도 높다.HP 기준 해결 방법Security > System Security > Virtualization Technology (VTx) 를 Enabled로 설정패키지 설치sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst패키지명설명qemu-kvmKVM 하이퍼바이저용 하드웨어 에뮬레이션libvirt-daemon-systemlibvirt..

DNS 네임서버 구축 및 API를 통한 자동화 관리 올인원

설계목표- 네임서버를 구축한다.- 네임서버를 API를 통해 편하게 관리한다.- API를 통해 DNS 레코드 및 Redirection을 관리한다.참고사항- 네임서버는 API를 제공하지 않는다.- 네임서버는 Redirection을 지원하지 않는다.- AI도 할 줄 모른다... 이 글 학습하면 앞으로 가능할듯목차1. DNS 조회 원리2. DNS 서버 설정 (bind9)3. DNS TLD에 공개4. NginX 기반 리다이렉트 진행 5. DNS 세팅 API 자동화 - Bind9 자동화 6. DNS 세팅 API 자동화 - Nginx 자동화 7. DNS 세팅 API 자동화 - API를 통해 DNS, Nginx 관리 자동화 8. 마치며DNS 조회 원리다음 이미지로 대체한다.중요한 것은 우리 네임서버(klr...

내부망 구성하기 (개정판)

개발서버 분리를 위해 VPN 환경에서만 접근 가능한 내부 망을 구성한다.서론과거에는 너무 엄격하게 한 나머지, DNS 쿼리를 해도 내부망에 접근 못하게 구성했다.VPN으로 접근된 트래픽을 Squid 를 통해 Proxy를 구성하고, HTTPS를 MITM시켜 구성했다.그런데 네이버, 구름 등 대기업들도 이렇게까진 하지 않더라... 이전에 정리한 게시글(https://leestana01.tistory.com/6)이 있는데, 너무 과거 회고에 가깝다.그래서 내부망 구성 방식을 보기좋게 다시 고안하고 정리한다.설계 목표- 인가되지 않은 외부인의 개발 리소스 접근을 일체 금지한다.- 내부 리소스의 모든 접근은 VPN을 이용해 접근해야한다.하단에 기술할 구성 방법은 본인이 직접 구상하여 설계한 것으로,더 좋은 실무적..

분류 전체보기

28개의 글

JAVA의 자료구조를 톺아보자

Java Collection 톺아보기ListArrayList를 톺아보자ArrayList는 이름에 List가 들어가지만, 본질적으로는 배열 기반 자료구조이다.그래서 인덱스를 통한 조회가 빠르다.🤔 배열 공간이 꽉 찬다면?더 큰 배열을 새로 만들고, 기존 데이터를 새 배열로 복사한다.LinkedList를 톺아보자LinkedList는 prev, next 형태의 참조로 노드 객체를 연결하는 자료구조이다.배열처럼 인덱스로 바로 접근할 수 없기 때문에 조회가 느리다.🤔 중간 삽입/삭제가 빠르니 무조건 좋을까?해당 노드를 이미 알고 있다면 빠르다.하지만 index 기준으로 삽입/삭제를 한다면, 결국 해당 위치까지 찾아가야 하므로 느리다.MapHashMap을 톺아보자HashMap의 기본적인 본질은 배열 + 해시 +..

커스텀 파라미터, 그 원리와 사용방법은?

커스텀 파라미터 구현설명에 앞서, 먼저 간단한 예시 코드를 작성해본다.다음과 같은 커스텀 파라미터를 가정한다.@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CurrentUserId { } @CurrentUserId 자체는 파라미터 전용 런타임 Annotation입니다. 이는 다음 커스텀 Resolver가 처리한다. Resolver에 필요한 supportsParameter와 resolveArgument를 Override해주었다.public class CurrentUserIdArgumentResolver implements HandlerMethodArgumentResol..

프론트의 CSR과 SSR에 따른 백엔드의 대응 방식 연구

배경최근 프론트 팀원들의 컴포넌트 CSR과 SSR에 대한 열띤 논의가 있었다.그런데, CSR과 SSR은 프론트 측의 단순 UI 렌더링만 관련있을까?백엔드 api 설계는 이와 완전 무관할까? 이 게시글을 통해 프론트와 백엔드 모두 컴포넌트 및 api 설계에 도움이 되길 바란다.목표백엔드 api에 따른 프론트 컴포넌트의 csr과 ssr의 영향을 분석하고자 한다.가설이를 원활히 테스트 할 수 있도록 다음과 같이 범용적인 상품 판매 시나리오를 가정했다.결과우선 가장 직관적으로 크롬 디버깅 툴로 직접 조사해보았다.- Full SSR과 Full CSR로 SSR과 CSR을 분석하고- 백엔드 V1과 V2를 통해 백엔드 api의 영향을 분석한다.Full SSR + 백엔드 V1(단일응답)Full CSR + 백엔드 V1(단..

FastAPI 기본부터 극한까지 날먹하기 (Pydantic, Depends 심화)

Discriminated Union만약 결제 수단(카드, 계좌이체, 간편결제)에 따라 요청 구조가 다르다면?Spring에서는 @JsonTypeInfo + @JsonSubTypes를 사용해야 하고, 커스텀 디시리얼라이저를 작성해야 하는 경우도 많다. Pydantic에서는 매우 간단하게 처리 가능하다. 다음 코드를 살펴보자.from pydantic import BaseModel, Fieldfrom typing import Literal, Annotated, Unionfrom enum import Enum# 각 결제 수단별 요청 스키마class CardPaymentRequest(BaseModel): method: Literal["CARD"] = "CARD" card_number: str = Fiel..

FastAPI 기본부터 극한까지 날먹하기 (SpringBoot에서 넘어가기)

용어부터 알아보자SpringBoot와 FastAPI는 어떻게 다를까? 기본적인 구조부터 잡고 가면 편할 것 같다.JDK (Java 17/21)Python (3.11/3.12/3.13)Maven / GradlePoetry / uv / pipapplication.yml.env + pydantic-settingsTomcat (내장 서블릿 컨테이너)Uvicorn (ASGI 서버)Spring Initializr수동 구성 (or cookiecutter)./gradlew bootRunuvicorn app.main:app --reloadJAR 패키징Docker 이미지 (사실상 표준)JUnit + Mockitopytest + pytest-asyncio + httpxCheckstyle + SpotBugsRuff + myp..

FastAPI 기본부터 극한까지 날먹하기

서론일반적인 FastAPI 강의는 지양한다. 그럴거면 ChatGPT에게 물어보는게 낫다.아키텍처 구조부터 모든 한 줄마다 연구하고 최적의 방향을 서술할 것이다.환경 구축Python 버전 관리파이썬 설치 방법까지는 언급하지 않겠다. 그러나 경우에 따라 Python의 버전 관리가 필요할 수 있다.Java에서 sdkman으로 JDK 17, 21을 전환하듯, Python에서는 pyenv를 사용한다.# 설치curl https://pyenv.run | bash# ~/.bashrc 또는 ~/.zshrc에 추가export PYENV_ROOT="$HOME/.pyenv"export PATH="$PYENV_ROOT/bin:$PATH"eval "$(pyenv init -)"# Python 버전 설치 및 전환pyenv inst..

KVM Netfilter 설정

KVM Machine Netfilter 추가 설정KVM 머신이 외부와 통신을 하는 상황에서, Bridge 설정 및 포트포워딩을 완료해도 불안정한 상황이 발생하였다.이미 Host 측에서 Netfilter를 비활성화하였으나, 간헐적으로 통신이 안되는 상황이 발생하였기에 VM 측의 Netfilter를 점검했다.VM의 Bridge Netfilter 비활성화점검 결과는 다음과 같았다.$ cat /proc/sys/net/bridge/bridge-nf-call-arptables1$ cat /proc/sys/net/bridge/bridge-nf-call-iptables1$ cat /proc/sys/net/bridge/bridge-nf-call-ip6tables1값이 1이면 netfilter가 활성화 상태이다. KVM ..

KVM Hypervisor Type 1.5에서 VM 관리

KVM[HyperVisor Type1] 설치Ubuntu Server 22.04 CLI 환경KVM 지원 여부 확인grep -Eoc '(vmx|svm)' /proc/cpuinfo출력 결과가 0이 아니면 KVM을 지원한다.KVM을 지원하지 않는 경우, BIOS 설정 문제일 가능성도 높다.HP 기준 해결 방법Security > System Security > Virtualization Technology (VTx) 를 Enabled로 설정패키지 설치sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst패키지명설명qemu-kvmKVM 하이퍼바이저용 하드웨어 에뮬레이션libvirt-daemon-systemlibvirt..

DNS 네임서버 구축 및 API를 통한 자동화 관리 올인원

설계목표- 네임서버를 구축한다.- 네임서버를 API를 통해 편하게 관리한다.- API를 통해 DNS 레코드 및 Redirection을 관리한다.참고사항- 네임서버는 API를 제공하지 않는다.- 네임서버는 Redirection을 지원하지 않는다.- AI도 할 줄 모른다... 이 글 학습하면 앞으로 가능할듯목차1. DNS 조회 원리2. DNS 서버 설정 (bind9)3. DNS TLD에 공개4. NginX 기반 리다이렉트 진행 5. DNS 세팅 API 자동화 - Bind9 자동화 6. DNS 세팅 API 자동화 - Nginx 자동화 7. DNS 세팅 API 자동화 - API를 통해 DNS, Nginx 관리 자동화 8. 마치며DNS 조회 원리다음 이미지로 대체한다.중요한 것은 우리 네임서버(klr...

내부망 구성하기 (개정판)

개발서버 분리를 위해 VPN 환경에서만 접근 가능한 내부 망을 구성한다.서론과거에는 너무 엄격하게 한 나머지, DNS 쿼리를 해도 내부망에 접근 못하게 구성했다.VPN으로 접근된 트래픽을 Squid 를 통해 Proxy를 구성하고, HTTPS를 MITM시켜 구성했다.그런데 네이버, 구름 등 대기업들도 이렇게까진 하지 않더라... 이전에 정리한 게시글(https://leestana01.tistory.com/6)이 있는데, 너무 과거 회고에 가깝다.그래서 내부망 구성 방식을 보기좋게 다시 고안하고 정리한다.설계 목표- 인가되지 않은 외부인의 개발 리소스 접근을 일체 금지한다.- 내부 리소스의 모든 접근은 VPN을 이용해 접근해야한다.하단에 기술할 구성 방법은 본인이 직접 구상하여 설계한 것으로,더 좋은 실무적..

NORMAL j/k: 이동 · Enter: 열기 · /: 검색 · ?: 도움말