
@Component, @Controller, @Service, @Repository의 차이점●특징@Component : 공용 컴포넌트(일반 빈)@Controller : 웹 계층(HTTP 요청 처리)@Service : 서비스 계층(비즈니스 로직)@Repository :

리버스 프록시와 포워드 프록시의 차이점●프록시(Proxy)'대리'라는 의미를 갖고 있으며 서버와 서버사이의 중계기 역할을 함프록시를 사용하는 이유는 보안상의 이유로 직접 통신할 수 없는 두 점사이에서 대리로 통신을 수행하여 보안성, 성능, 안정성을 향상 시키기 위해프록

private 메서드에 @Transactional 선언하면 트랜잭션이 동작하는지?●결론기본적으로 @Transactional, @Cacheable, @Async 등의 애너테이션은 런타임에 동작하는 Spring AOP를 기반으로 동작합니다. Spring AOP가 제공하는

Connection Timeout, Socket Timeout, Read Timeout의 차이점은 무엇인가?●Connection Timeout클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃TCP 소켓 통신에서 클라이언트

서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점●서버 사이드 렌더링(SSR)서버측에서 렌더링 하는 방식클라이어트가 서버에 컨텐츠를 요청하면, 서버는 페이지에 필요한 데이터를 즉시 얻어와 모두 삽입하고, CSS까지 모두 적용해 렌더링 준비를 마친 HTML과 JS

자료구조 스택●스택(Stack) 후입선출이(LIFO)라는 개념을 가진 선형 자료구조스택 자료구조에서 삭제(pop)는 가장 최상단(top)에서만 이루어지며 비어있는 스택에서 값을 추출하려고 시도하는 경우를 스택 언더플로우라고 하며, 스택이 넘치는 경우를 스택 오버플로우라

WAS와 웹 서버의 차이점●WAS(Web Application Server)서블릿 컨테이너 기능을 제공하고, 동적 컨텐츠를 생성하거나, 애플리케이션 로직을 실행하는 데 특화대표적인 WAS로는 Tomcat●웹 서버정적 컨텐츠(HTML, CSS, JS, 이미지 등)를 제공

HTTPS란?●HTTP(Hypertext Transfer Protocol)웹에서 클라이언트와 서버 간 통신을 위한 통신 규약HTTP는 암호화되지 않는 평문 데이터를 전송하기 때문에 제 3자가 정보를 조회할 수 있다는 위험이 있으며, 이를 해결하기 위해 HTTPS가 나

DB Replication란?●DB Replication란?데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(Source) 서버와 복제(Repli

SOLID 원칙●SOLID 원칙객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞 글자를 따서 만들어졌으며, 객체지향설계의 핵심 중 하나의 의존성을 관리의존성을 잘 관리하기 위해서는 SOLID 원칙을 준수●단일 책임 원칙(Single Responsibilty Princ

다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은?●다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은?다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우에는 세션 불일치 문제가 발생할 수 있음서버 A

동시성과 병렬성●동시성 동시성이란 이름처럼 실제로 여러 작업을 동시에 수행하는 것이 아니라, 논리적으로 동시에 실행되는 것처럼 보이게 만드는 개념단일 코어를 기준으로 시간 분할을 통해 여러 스레드를 번갈아 가며 작업을 수행함으로써, 마치 동시에 여러 작업이 처리되는

REST란?●REST란? REST(Representational State Transfer) 는 자원의 표혀을 이요하여 상태를 주고받는 것을 의미여기서 자원이란 소프트웨어가 관리하는 모든 것을 의미하며 자원의 표현은 자원을 나타내기 위한 이름을 의미서버가 관리하는 주

ACID란?●ACID란? 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미●원자성트랜잭션 내부 연산들이 부분적으로

스케일 업과 스케일 아웃의 차이점●스케일 업과 스케일 아웃의 차이점스케일 업1.기존의 서버를 더욱 높은 사양으로 업그레이드하는 것을 의미(예를 들어, AWS에서 EC2 t2.micro에서 t2.small로 업그레이드하는 방식이 스케일 업임)2.특정 서버를 무한정 업그레

HTTP/1.1과 HTTP/2.0●HTTP/1.1HTTP는 웹상에서 클라이언트와 서버 간 통신을 위한 프로토콜HTTP/1.0의 경우에는 한 개의 요청과 응답마다 TCP 커넥션을 생성하여 사용되었고, 이러한 방식은 매 요청마다 연결을 생성하는 오버헤드가 발생HTTP/1.

관계형 데이터베이스와 비 관계형 데이터베이스의 차이점●관계형 데이터베이스고정된 로우와 컬럼으로 구성된 테이블에 데이터를 저장하며, SQL을 사용하여 여러 테이블에 존재하는 데이터와 관계에 따라서 조인하여 합칠 수도 있음관계형 데이터베이스는 데이터를 중복 없이 한 번만

캐시 스탬피드 현상●캐시 스탬피드 현상대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다고 가정하면, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수

시스템 간 비동기 연동 방식●시스템 간 비동기 연동 방식분리된 시스템 간의 비동기 연동은 시스템 간의 결합도를 낮출 수 있으며, 호출된 시스템의 응답을 기다리지 않으므로 더욱 빨리 사용자의 요청에 응답할 수 있다는 장점비동기 연동 방식으로 메시징 시스템 활용, 데이터베

CAP 정리●CAP 정리CAP 정리는 분산 데이터베이스 시스템이 CAP 중 2개의 속성만을 제공할 수 있다는 이론이며 CAP 정리에 따르자면, 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 등 3가지

교착 상태란?●교착 상태란?두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어 결과적으로 아무것도 완료되지 못하는 상태예시 : 프로세스가 자원 A를 가지고 자원 B를 필요로 하며, B 프로세스는 자원 B를 가지고 자원 A가 필요할 때 두 개의 프로세스는

방어적 복사란?●방어적 복사란?원본과의 참조를 끊은 복사본을 만들어 사용하는 방식이며, 원본의 변경에 의한 예상치 못한 사이드 이펙트를 방지하여 안전한 코드를 만들 수 있음방어적 복사는 2가지 시점이 존재하며, 생성자의 인자로 받은 객체의 복사본을 만들어 내부 필드를

해시 충돌이란?●해시 충돌이란?해시(Hash) 자료 구조는 키값 쌍으로 이루어진 데이터 구조로 키를 이용해 값을 O(1) 시간 복잡도로 찾을 수 있음해시 자료 구조는 키를 해시 함수에 넣어서 나오는 결과를 기반으로 값을 관리하며, 해시 함수는 다른 키를 사용해도 같은

디스크 접근 시간이란?●디스크 접근 시간이란?일반적으로 단일-헤드 디스크 시스템에서 특정 데이터 블록(하나 이상의 섹터로 이루어짐)을 읽거나 쓰기 위해서는 헤드를 데이터가 존재하는 트랙으로 이동시키는 과정, 원하는 데이터가 저장된 섹터가 헤드 아래로 회전되어 올 때까지

URI, URL, URN의 차이점●URI, URL, URN의 차이점URI (Uniform Resource Identifier) : 인터넷에서 자원을 식별하기 위한 문자열이며 URI는 URL과 URN을 포함하는 상위 개념이며 즉, 특정 자원을 식별하기 위한 포괄적인 방법

CPU 스케줄링이란?●CPU 스케줄링이란?CPU 스케줄링은 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것을 의미CPU 스케줄링이 없다면, 반드시 실행되어야 할 프로세스들이 실행되지 못할 수 있으며, 당장 급하지 않은 프로세스가 실행되는 등 무질

시스템 콜이란?●시스템 콜이란?운영체제는 사용자가 실행하는 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지해 자원을 보호프로그램이 CPU, 메모리, 하드 디스크에 마음대로 접근하고 조작할 수 있다면, 자원이 무질서하게 관리 될 수 있으며 한 프로그램의 실수가 전체

JVM에서 GC 대상 객체를 판단하는 기준은 무엇인가?●JVM에서 GC 대상 객체를 판단하는 기준은 무엇인가?GC(Garbage Collection)는 자바의 메모리 관리 방법의 하나이며, JVM의 힙 영역에서 동적으로 할당했던 메모리 중에서 필요 없어진 객체를 주기적

테스트 주도 개발이란?●테스트 주도 개발이란?테스트 주도 개발(Test Driven Development) 은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스이며 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성하며 그 이후에는 테스트 케이스를

대칭키 및 비대칭키 암호화 방식●대칭키 및 비대칭키 암호화 방식평문을 암호화하고 복호화하는 경우 키를 사용할 수 있으며, 암복호화에 사용하는 키가 동일한 경우 대칭키 암호화(Symmetric Key Cryptography) 라고 하며, 암복호화에 사용하는 키가 서로 다

클래스풀 IP 주소 체계●클래스풀 IP 주소 체계클래스풀 주소 체계(Classful Addressing) 은 IP 주소를 규격화된 크기별로 구분시키는 방식IP 주소를 클래스(A,B,C 등)별로 규격화(유형화)시켜, 쉽게 식별할 수 있도록 함IPv4 주소는 4바이트(32

함수형 프로그래밍이란?●함수형 프로그래밍이란?함수형 프로그래밍(Functional Programming) 은 객체지향 패러다임과 마찬가지로 하나의 프로그래밍 패러다임이며 객체지향 프로그래밍은 움직이는 부분을 캡슐화하여 코드의 이해를 도우며, 함수형 프로그래밍은 움직이는

연결 리스트란?●연결 리스트란?연결 리스트(Linked List)는 리스트 내의 요소(노드)들을 포인터로 연결하여 관리하는 선형 자료구조이며 각 노드는 데이터와 다음 요소에 대한 포인터를 가지고 있으며 이때, 첫 번째 노드를 HEAD, 마지막 노드를 TAIL 이라고 하

NAT 기능을 사용하는 이유?●NAT 기능을 사용하는 이유?IP 주소는 공인 IP 주소(Public IP Address) 와 사설 IP 주소(Private IP Address) 가 존재하며 공인 IP 주소는 고유하며, 사설 IP 주소는 고유하지 않고 특정 사설 네트워크

CSRF 공격이란?●CSRF 공격이란?사이트 간 요청 위조(Cross-site Request Forgery, CSRF) 공격은 사용자가 자신의 의지와 상관없이 공격자가 의도한 행위를 특정 웹사이트에 요청하도록 하는 것을 의미예를 들면, 특정 사용자가 매일메일 서비스에서

트랜잭셔널 아웃박스 패턴이란?●트랜잭셔널 아웃박스 패턴이란?트랜잭셔널 아웃박스 패턴(Transactional Outbox Pattern) 은 분산 시스템에서 단일 작업에 데이터베이스 쓰기 작업과 메시지 혹은 이벤트 발행이 모두 포함된 경우 발생하는 이중 쓰기 문제를 해

JWT 특징과 주의 사항●JWT 특징과 주의 사항JWT(Json Web Token) 은 통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용되며, JWT는 토큰 자체에 정보가 포함되어 있는 클레임 기반 토큰일반적인 애플리케이션에서 JWT는 주로 인증과 인가

단일 장애 지점(SPOF)이란 무엇인가?●단일 장애 지점(SPOF)이란 무엇인가?단일 장애 지점(Single Point of Failure, SPOF) 이란 전체 시스템에서 제대로 동작하지 않는 경우, 전체 시스템이 중단되는 특정 구성 요소를 의미하며, 서버와 네트워크

정적 IP 주소 할당 방식과 동적 IP 주소 할당 방식의 차이점●정적 IP 주소 할당 방식과 동적 IP 주소 할당 방식의 차이점네트워크에서 호스트에게 IP를 할당하는 방식은 크게 정적 할당 방식과 동적 할당 방식이 존재정적 할당 방식은 호스트에게 IP를 할당할 때 수동

전략 패턴이란?●전략 패턴이란?전략 패턴(Strategy Pattern) 은 객체의 행위를 동적으로 변경하고 싶은 경우, 코드를 직접 수정하는 것이 아닌 추상화된 전략의 구현만을 바꿔 객체의 행위를 변경하는 디자인 패턴이며 자바 언어의 요소와 함께 설명하면, 객체의 행

스프링 트랜잭션 AOP 동작 흐름●스프링 트랜잭션 AOP 동작 흐름@Transactional어노테이션을 사용한 선언적 트랜잭션 관리(Declarative Transaction Management)의 전체 흐름에는 크게 3가지 요소가 등장하며 트랜잭션 매니저, 트랜잭션

의존성 주입이란?●의존성 주입이란?A 객체가 어떤 작업을 수행하기 위해 B 객체를 필요로 하는 경우에 두 객체 사이에 의존성이 존재한다고 표현하며 이때, A 객체가 아닌 외부의 C 객체가 B를 생성한 뒤에 이를 전달해서 의존성을 해결하는 방법을 의존성 주입(Depend

코드 커버리지란?●코드 커버리지란?테스트 케이스들이 프로덕션 코드를 실행한 정도를 나타낸 것을 코드 커버리지(Code Coverage) 라고 함코드 커버리지는 측정하는 기준에 따라서 크게 구문 커버리지(Statement Coverage), 조건 커버리지(Conditio

CI/CD 파이프라인이란?●CI/CD 파이프라인이란?개발자가 작성한 작은 코드 변경을 코드 베이스에 통합하며 변경한 부분이 통합되면, 자동으로 새로운 시스템을 빌드하고 현재 시스템에 존재하는 모든 테스트를 실행하고 만약 이전에 동작했던 어떤 부분이 망가졌다면, 개발자는

CQRS 패턴이란?●CQRS 패턴이란?시스템은 크게 상태 변경과 조회 기능을 제공하며 주문 취소, 결제 기능은 상태 변경에 해당되며, 주문서 조회, 사용자 조회 등이 조회에 해당명령 쿼리 책임 분리 패턴(Command Query Responsibility Segrega

Graceful Shutdown의 필요성●Graceful Shutdown의 필요성우아한 종료(Graceful Shutdown) 란 애플리케이션이 종료될 때 바로 종료하는 것이 아니라, 현재 처리하고 있는 작업을 마무리하고 리소스를 정리한 이후 종료하는 방식을 의미서버

분산 환경에서 Redis를 활용한 잠금은 어떻게 구현할 수 있을까?●분산 환경에서 Redis를 활용한 잠금은 어떻게 구현할 수 있을까?Redis의 SET 명령어를 사용해서 분산 잠금을 구현할 수 있으며 가령, 1대 이상의 서버가 특정 Key에 대해서 SET 명령어에 N

무중단 배포가 무엇인가?●무중단 배포가 무엇인가?무중단 배포(Zero-Downtime Deployment) 는 서비스에 다운 타임이 발생하지 않으면서, 새로운 버전의 애플리케이션을 서버에 배포하는 것을 의미하며, 무중단 배포 패턴에는 대표적으로 순차적으로 배포하는 롤링

테스트 더블이란?●테스트 더블이란?테스트 코드에서 실제 의존성을 사용하기 어려운 경우, 테스트 더블(Test Double) 을 사용할 수 있으며, 테스트 더블은 의존성을 시뮬레이션하지만, 테스트에 더욱 적합하게 사용할 수 있도록 만들며 실제 의존성을 포함하는 테스트는

자바에서 클래스 정보는 어떻게 알아낼 수 있을까?●자바에서 클래스 정보는 어떻게 알아낼 수 있을까?자바에서 클래스 정보를 가져오기 위해서 Reflection API를 사용할 수 있으며, reflection 패키지에서 제공하는 클래스를 사용하면, JVM에 로딩되어 있는

연속 메모리 할당 기법이란?●연속 메모리 할당 기법이란?연속 메모리 할당 기법(Continuous Memory Allocation) 은 운영체제가 프로세스에 연속적인 메모리 공간을 할당하는 방법을 의미하며, 연속 메모리 할당 기법을 사용하면, 하나의 프로세스는 메모리

DNS란 무엇인가?●DNS란 무엇인가?IP 주소는 변환될 수 있으며, 기억하기 어렵기 때문에 대부분의 웹 서비스는 도메인 주소를 사용하며, DNS(Domain Name System) 는 도메인 주소에 대응되는 원격 호스트 IP 주소를 관리하고 질의할 수 있는 시스템 혹

동시성 문제 중 경쟁 상태를 해결하려면 무엇이 보장되어야 할까?●동시성 문제 중 경쟁 상태를 해결하려면 무엇이 보장되어야 할까?경쟁 상태(Race Condition) : 두 개 이상의 스레드가 공유 자원에 동시에 접근할 때 스레드 간의 실행 순서에 따라 결과가 달라지는

스프링 트랜잭션 전파 속성이란?●스프링 트랜잭션 전파 속성이란?스프링에서 트랜잭션 전파(Transaction Propagation) : 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 기능이며 가령, @Transac

CDN이란 무엇인가?●CDN이란 무엇인가?콘텐츠 전송 네트워크(Content Delivery Network, CDN) 은 전 세계에 분산된 서버 네트워크며, 사용자와 물리적으로 가까운 위치에서 정적 콘텐츠(혹은 동적 콘텐츠)를 제공하여 서버 과부하를 방지하고 통신 지연

시간 복잡도와 공간 복잡도의 차이점?●시간 복잡도와 공간 복잡도의 차이점?하나의 문제를 해결하는 여러 알고리즘이 존재할 수 있으며 그리고, 개발자는 성능을 평가하여 하나를 결정해야 하며 이때, 코드가 실행될 때 걸리는 정확한 시간을 측정하는 방법으로 속도를 비교할 수

Micrometer가 무엇인가?●Micrometer가 무엇인가?Micrometer는 벤더 중립적인 메트릭 계측 라이브러리로, 애플리케이션에서 발생하는 다양한 지표(예: CPU 사용량, 메모리 소비, HTTP 요청 및 커스텀 이벤트)를 수집하며, 이 라이브러리는 Prom

try-with-resources가 무엇일까?●try-with-resources가 무엇일까?커넥션, 입출력 스트림과 같은 자원을 사용한 후에는 자원을 해제해서 성능 문제, 메모리 누수 등을 방지해야 하며, try-with-resources는 이러한 자원을 자동으로 해제

네트워크에서 회선 교환 방식과 패킷 교환 방식은 어떤 차이점이 있을까?●네트워크에서 회선 교환 방식과 패킷 교환 방식은 어떤 차이점이 있을까?네트워크에서 회선 교환 방식(Circuit Switching) 이란 특정 사용자를 위한 회선의 경로를 미리 설정하고 이 경로를

String 객체는 가변일까, 불변일까?●String 객체는 가변일까, 불변일까?String 객체는 불변(Immutable) 입니다. String 클래스는 내부적으로 final 키워드가 선언된 byte\[] 필드를 사용해서 문자열을 저장하기 때문이며, 또한, Strin

Infrastructure as Code(IaC) 무엇인가?●Infrastructure as Code(IaC) 무엇인가?코드형 인프라(Infrastructure as Code, IaC) 는 수동 프로세스 대신 코드를 통해 인프라를 프로비저닝하고 관리하는 방법이며, 기존

OneToOne 연관관계에서 Lazy Loading을 설정할 때 주의할 점은 무엇일까?●OneToOne 연관관계에서 Lazy Loading을 설정할 때 주의할 점은 무엇일까?양방향 @OneToOne일 때 연관관계의 주인이 아닌 엔티티를 조회할 경우 Lazy Loadin

자바에서 Object 타입인 value를 String으로 타입 캐스팅하는 것과 String.valueOf()를 사용하는 것의 차이점은 무엇일까?●자바에서 Object 타입인 value를 String으로 타입 캐스팅하는 것과 String.valueOf()를 사용하는 것의

자료구조 트라이란?●자료구조 트라이란?자료구조 트라이(Trie) 는 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료 구조이며, 트라이는 문자열을 탐색할 때 단순히 비교하는 것에 비해서 효율적으로 찾을 수 있지만, 각 정점이 자식에 대한 링크를 모두 가지고

자바에서 제네릭의 공변, 반공변, 무공변에 대해 설명●자바에서 제네릭의 공변, 반공변, 무공변에 대해 설명자바에서 제네릭(Generic) 은 기본적으로 무공변(Invariant) 이며, 무공변이란 타입 S, T가 있을 때 서로 관계가 없다는 것을 의미하며 S와 T가 서

Keep Alive란?●Keep Alive란?Keep Alive는 네트워크 또는 시스템에서 커넥션을 지속해서 유지하기 위해 사용되는 기술이나 설정을 의미HTTP 프로토콜에서 Keep-Alive는 하나의 TCP 커넥션으로 여러 개의 HTTP 요청과 응답을 주고받을 수 있

멀티 태스킹 시스템의 한계●멀티 태스킹 시스템의 한계멀티 태스킹 시스템을 사용하더라도 아래와 같은 문제점이 남아 있음하나의 프로세스가 동시에 여러 작업을 수행하지 못함1.여러 프로세스를 생성하여 문제를 해결할 수는 있으나, 프로세스가 많아지면 관리와 자원 소모 측면에서

JCF 자료구조의 초기 용량을 지정하면 좋은 점?●JCF 자료구조의 초기 용량을 지정하면 좋은 점?JCF에서 ArrayList를 기준으로 설명하면, ArrayList의 기본 용량(capacity)은 10이며, 용량이 가득 차면 기존 크기의 1.5배(oldCapacity

낙관적 락과 비관적 락●낙관적 락과 비관적 락낙관적 락과 비관적 락은 데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법입니다. 데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할 때 사용낙관적 락(Optimistic

RDB에서 페이징 쿼리의 필요성●RDB에서 페이징 쿼리의 필요성페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용되며, 데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스

멀티 쓰레딩이란?●멀티 쓰레딩이란?멀티쓰레딩은 여러 프로세스가 동시에 실행되는 멀티 태스킹과 달리 하나의 프로세스 내에서 여러 작업을 여러 쓰레드를 통해 동시에 실행할 수 있도록 하는 방식●멀티 쓰레딩의 주요 특징경량화된 실행 단위1.낮은 오버헤드 : 스레드는 같은 프

PRG 패턴이란?●PRG 패턴이란?PRG 패턴 은 Post/Redirect/Get 패턴의 약자로, 웹 애플리케이션에서 폼 제출 후 페이지 새로 고침이나 브라우저 뒤로 가기 등의 문제를 방지하기 위해 사용하는 디자인 패턴이며, 일반적으로 멱등성이 보장되지 않는 POST

GC 알고리즘은 어떤 것이 있나?●GC 알고리즘은 어떤 것이 있나?Serial GC는 JDK에 도입된 최초의 가바지 컬렉터이며, 단일 스레드로 동작하는 가장 단순한 형태이며, 작은 힙 메모리와 단일 CPU 환경에 적합하며 Stop-The-World 시간이 가장 길게 발

페이지 교체 알고리즘●페이지 교체 알고리즘가상 메모리 관리 기법(Virtual Memory Management) 은 프로그램의 일부만을 메모리에 적재하여 실제 사용 가능한 물리 메모리 양보다 큰 프로세스를 실행할 수 있도록 하는 기법이며, 가상 메모리 관리 기법 중 하

열 기반 DB와 행 기반 DB의 차이점●열 기반 DB와 행 기반 DB의 차이점행 기반 데이터베이스(Row-oriented Database) 는 데이터를 행 단위로 관리하는 DBMS이며, 행 단위 읽기 맟 쓰기 연산에 최적화PostgreSQL, MySQL이 대표적인 행

이진 트리란?●이진 트리란?트리(Tree) 는 방향이 존재하는 그래프의 일종으로 부모 정점 밑에 여러 자식 정점이 연결되고, 자식 정점 각각에 다시 자식 정점이 연결되는 재귀적 형태의 자료구조이며, 그 중에서 각 정점이 최대 2개의 자식 정점을 가지는 트리를 이진 트리

객체 지향 프로그래밍이란?●객체 지향 프로그래밍이란?객체 지향 프로그래밍(OOP, Object-Oriented Programming) 은 상태(필드)와 행위(메서드)를 가진 객체를 중심으로 프로그램을 설계하는 프로그래밍 패러다임이며, 객체에 역할과 책임을 부여하고, 이

널 오브젝트 패턴이란?●널 오브젝트 패턴이란?널 오브젝트 패턴(Null Object Pattern) 이란 객체가 존재하지 않을 때, 널을 전달하는 것이 아닌 아무 일도 하지 않는 객체를 전달하는 기법이러한 유형의 코드가 여러 곳에서 계속 반복해서 등장하게 된다면 코드를

서버리스란?●서버리스란?서버리스(Serverless) 란 클라우드 업체에서 직접 인프라를 관리하고 동적으로 크기를 조정하면서 유지 관리하는 방식을 의미하며 만약, AWS EC2를 사용해도 OS 관리 및 보안, 파일 시스템 관리는 직접 해야 했는데요. 서버리스에서는 클라

JPA Fetch Join과 페이징을 함께 사용할 때 주의점●JPA Fetch Join과 페이징을 함께 사용할 때 주의점~ToMany 관계에서 Fetch Join과 페이징을 함께 사용하면 OutOfMemoryError가 발생할 수 있다는 점을 주의해야 하며 예를 들어서

Gradle이란?●Gradle이란?Gradle은 Java, Kotlin, Scala 등 JVM에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구이며, 기존의 Ant와 Maven의 단점을 보완하여 증분 빌드, 빌드 캐시, 데몬 프로세스를 활용해 빌드 속도를 최적화하고

ThreadLocal란?●ThreadLocal란?ThreadLocal은 Java에서 각 스레드마다 독립적인 변수를 저장할 수 있도록 도와주는 클래스 보통 여러 스레드가 공유 자원을 사용하면 동시성 문제가 발생할 수 있는데, ThreadLocal을 사용하면 스레드별로 데

어떤 예외가 발생하면 트랜잭션을 롤백할까?●어떤 예외가 발생하면 트랜잭션을 롤백할까?예외 종류에 따른 트랜잭션 롤백은 개발 환경에 따라 다르게 동작●Spring 트랜잭션 예외 처리 동작Checked Exception 기본적으로 Checked Exception이 발생하더

논리 삭제와 물리 삭제의 차이점●논리 삭제와 물리 삭제의 차이점데이터베이스에서 데이터를 삭제하는 방법은 크게 물리 삭제(Hard Delete) 와 논리 삭제(Soft Delete) 가 존재 물리 삭제 : DELETE 명령어를 통해 직접 데이터를 삭제하는 방식논리 삭제

템플릿 메서드 패턴이란●템플릿 메서드 패턴이란템플릿 메서드 패턴(Template Method Pattern) 은 기능의 뼈대와 구현을 분리하는 행위 디자인 패턴이며, 실행 단계의 절차를 결정하는 상위 클래스와 실행 단계를 구현하는 하위 클래스로 구성템플릿 메서드 패턴

NoSQL 데이터베이스의 유형●NoSQL 데이터베이스의 유형NoSQL 데이터베이스의 유형은 키-값, 문서 지향, 열 지향, 그래프, 시계열이 있음키-값 데이터베이스(Key-value Database) 는 키를 고유한 식별자로 사용하는 키-값 쌍의 형태로 데이터를 저장하

테스트 격리란 무엇인가?●테스트 격리란 무엇인가?테스트 격리(Test Isolation) 는 각 테스트가 서로 독립적으로 실행되도록 보장하는 것을 말하며, 어떤 테스트가 실행되더라도 다른 테스트의 결과나 상태에 영향을 주거나 받지 않아야 한다는 의미테스트 격리가 중요한

SQL 인젝션이란?●SQL 인젝션이란?SQL 인젝션(SQL Injection) 은 웹 애플리케이션에서 사용자의 입력값이 SQL 쿼리에 안전하게 처리되지 않을 때 발생하는 보안 취약점이며 공격자는 이 취약점을 이용해 쿼리를 조작하여 인증을 우회하거나, 데이터를 조작하거나

최종적 일관성이란 무엇인가?●최종적 일관성이란 무엇인가?최종적 일관성(Eventual Consistency) 이란 분산 시스템에서 고가용성을 유지하기 위해서 사용하는 일관성 모델이며, 데이터가 수정되면, 그 변경 내용은 비동기적으로 다른 노드에 전파되기 때문에 일시적으

NOT IN 쿼리를 사용할 때 발생할 수 있는 문제와 최적화 방법●NOT IN 쿼리를 사용할 때 발생할 수 있는 문제와 최적화 방법NOT IN을 사용한 쿼리는 직관적이고 사용하기 쉽지만, 대규모 데이터셋에서 심각한 성능 저하를 일으킬 수 있음●문제점NOT IN은 부정

Statement와 PreparedStatement의 차이점●Statement와 PreparedStatement의 차이점JDBC에서 Statement와 PreparedStatement는 모두 SQL 실행을 담당하지만, 사용 방식과 성능, 보안 측면에서 차이가 존재Sta

이벤트 소싱이란?●이벤트 소싱이란?이벤트 소싱(Event Sourcing) 은 데이터의 최종 상태를 저장하는 대신, 상태를 변경시킨 이벤트들의 이력을 저장하는 방식을 의미하며 예를 들어, 체스 프로그램을 개발할 때 체스판의 상태를 데이터베이스에 저장하는 방법은 크게 두

참조 지역성의 원리●참조 지역성의 원리참조 지역성의 원리(Locality of reference) 는 CPU가 메모리에 접근할 때 주된 경향을 바탕으로 만들어진 원리며, 주로 캐시 메모리의 적중률을 높여 CPU의 메모리 접근 횟수를 줄이는 데 이용되며, 참조 지역성의

Spring에서 객체를 Bean으로 관리하는 이유●Spring에서 객체를 Bean으로 관리하는 이유Bean으로 객체를 관리하는 이유는 애플리케이션의 설계, 확장성, 유지보수 측면에서 많은 이점을 제공●의존성 관리 자동화빈으로 등록된 객체들은 Spring 컨테이너(Bea

명령어 파이프라이닝●명령어 파이프라이닝명령어 파이프라이닝(instruction pipelining) : CPU가 여러 명령어를 동시에 처리하기 위해 각 명령어를 여러 단계로 분할하고, 각 단계를 다른 명령어와 겹쳐서 실행하는 방법이며, 전통적인 CPU는 한 번에 하나의

쿠키와 세션의 차이●쿠키와 세션의 차이쿠키와 세션은 HTTP의 무상태(stateless) 특성을 보완하여 사용자 상태를 유지하는 메커니즘데이터 저장 위치쿠키 : 클라이언트 측 브라우저에 저장 세션 : 서버 측에 저장 세션은 서버에 데이터를 저장하고 세션 ID만 쿠키를

왜 코루틴을 사용한 작업 처리가 기존 스레드 방식보다 가벼울까?●메모리 사용량 차이스레드 : 각 스레드는 자체 스택 메모리를 필요로 하며, JVM에서 기본적으로 약 1MB의 스택 크기를 할당하며, 이 메모리는 스레드가 생성될 때 예약되며 스레드가 종료될 때까지 유지코루

싱글턴 패턴이란?●싱글턴 패턴이란?싱글턴 패턴(Singleton Pattern) : 생성자를 여러 차례 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미하며, 객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환●싱글턴 패턴 장

레이어드 아키텍처란?●레이어드 아키텍처란?레이어드 아키텍처(Layered Architecture) 란 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미하며, 여기서 관심사란 유사한 책임들을 의미함 예를 들어, 데이터베이스 접근과 관련된 책임들을

헬스체크란?●헬스체크란?헬스체크(Health Check) 는 현재 서버의 상태가 정상인지 파악하는 것을 의미하며, API 엔드포인트를 호출하거나 특정 포트로 TCP 연결을 시도하는 방식을 사용할 수 있으며, 스프링 액추에이터(Spring Actuator)를 활용하여 헬

OSIV(Open Session In View)●헬스체크란?OSIV(open session in view) 는 영속성 컨텍스트를 뷰까지 열어둔다는 의미이며, 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지될 수 있어, 뷰에서도 지연 로딩을 사용할 수 있으며, O