제네릭이란 타입을 클래스 내부가 아닌 외부에서 사용자가 결정할 수 있도록 하는 일반(Generic) 타입을 말한다.컴파일 단계에서 타입 검사를 통해 예외를 방지한다.클래스 외부에서 타입을 지정해주기 때문에 불필요한 캐스팅을 없애 성능이 향상된다. - 타입을 미리 지정하
자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작할 수 있는 기능이다. 예를 들어 클래스 이름, 메서드, 필드, 생성자 등에 대한 정보를 프로그램을 실행하면서 알아내고 이를 통해 객체를 생성하거나 메서드를 호출할 수 있다. 이 기능 때문에 개발자는 코드의

가비지 컬렉터는 JVM의 힙 영역에서 동적으로 할당했던 메모리 객체 중 더이상 사용하지 않는 객체들을 주기적으로 제거하여 메모리를 회수하는 역할을 한다. 개발자가 메모리 관리나 누수에 대해 직접 관리하지 않아도 된다.stop-the-world란 GC를 실행하기 위해 애

자바에서 동기화란 여러 스레드가 하나의 자원을 동시에 접근할 때 데이터의 일관성을 유지하고 충돌을 방지하는 기술을 말한다. 즉, 한번에 한 스레드만 특정 코드를 실행할 수 있게 하는 것이라 할 수 있다.여러 스레드가 데이터를 동시에 수정하려고하면 데이터가 꼬이는 경합

OS 레벨의 동기화 기법을 JVM 층위에서 사용할 수 있도록 구현한 것이다.자바의 모든 객체는 모니터를 가지며, 객체의 락을 활용하여 스레드 동기화를 제공한다. 모든 객체가 갖고 있으니 고유 락(intrinsic lock), 모니터처럼 동작한다고 하여 모니터 락(mo

메서드에 파라미터를 넘기는 방식에는 두 가지가 있다. Call By referenceCall By Value메서드를 호출할 때 주소 값을 넘겨주는 방법이다.pass by reference라고도 한다.참조를 직접 넘기기 때문에 메서드를 호출하는 호출자의 변수와 호출 당하

제어권: 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.결과값을 기다린다는 것: A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의
자바 스레드는 OS 스레드와 1:1로 매핑되며 OS 스케쥴러에 의해 스케쥴링 된다. 1. 생성과 등록 new Thread()를 하면 스레드 객체가 생성되고 start()를 다음과 같은 동작이 실행된다. TCB(Thread Control Block): OS는 스레드를
Daemon이란 보통 백그라운드에서 사용자 개입없이 실행되는 프로그램을 말한다. 자바에서의 스레드는 일반 사용자 스레드와 데몬 스레도로 나뉘다. 데몬 스레드는 주 스레드를 보조하는 역할을 수행하는 스레드를 말한다. 주 스레드가 종료되면 데몬 스레드도 자동으로 종료된다.
스레드 로컬(ThreadLocal) TreadLocal은 각 스레드마다 값을 따로 저장할 수 있는 자바의 클래스 중 하나이다. 스레드 로컬이 필요한 이유 멀티 스레드 환경에서 전역변수, 싱글톤 빈과 같은 공유 변수는 동일 시점에 여러 스레드가 접근하게되면 레이스 컨디

Runnable과 Thread는 자바에서 멀티 스레드를 위해 지원하는 기술이다. 자바 버전 별 지원 클래스는 다음과 같다.Java5 이전: Runnable, ThreadJava5: Callle, Future, Executor, ExecutorService, Execut
Executor, ExecutorService, ScheduledExecutorService와 Callable, Future는 자바5 부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 추가되었다. Callable 인터페이스 기존의 Runnable 인터페이스는 결과를
Fork/Join 프레임워크는 Java 7부터 도입된 병렬 처리를 위한 프레임워크다. 큰 작업을 작은 단위로 분할(fork)하고, 각각을 병렬로 처리한 후 결과를 합치는(join) 분할 정복(divide and conquer) 방식을 사용한다.Fork(분할): 하나의

프레임워크는 애플리케이션을 효율적으로 개발하기 위해 설계된 표준화된 뼈대이다. 라이브러리와 달리 제어의 역전(IoC)이 일어나서, 프레임워크가 애플리케이션의 흐름을 제어하거나 라이프사이클을 관리하기도 한다.사용자는 프레임워크가 제공하는 기반 코드를 이용해 높은 품질의
의존성이란 간단히 다른 객체나 함수를 사용하는 것을 말한다. 어떤 두 클래스가 강하게 결합된 상태가 아니어도 사용하기만해도 의존하는 것이라고 볼 수 있다. 그리고 각 모듈들이 얼마나 강하게 결합되어있는지를 결합도(coupling)라고 부른다. 일반적으로 소프트웨어에서는

위 코드는 스프링부트에서 DI 패턴을 적용한 예시 코드이다. 이 코드를 보면 DI 를 "등록" 하는것에 대해서는 이해할 수 있다. 하지만 DI 를 등록한 이 PetController 를 사용할때 PetService 를 주입해줘야 하는데, 이것은 어디서 주입할까?스프링에
객체 지향 프로그래밍 패러다임을 보완하는 기술로 메소드나 객체의 기능을 핵심 관심사(Core Concern)와 공통 관심사(Cross-cutting Concern)로 나누어 프로그래밍하는 것을 말한다. 핵심 관심사는 각 객체가 가져야 할 본래의 기능이며, 공통 관심사는
빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용가능한 소프트웨어 컴포넌트를 말한다. 스프링 컨테이너에 의해 관리된다. 컨테이너는 빈의 생명주기를 관리하고 의존성을 주입한다.기본적으로 빈은 싱글톤 스코프를 가진다. 동일한 빈 정의에 대해 스프링 컨테이너는 단일 인

우리가 일반적으로 빈(Bean)이라고 생각하는 것은, 스프링 컨테이너가 시작될 때 함께 생성되고, 스프링 컨테이너가 종료될 때까지 유지되는 것이다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프란 빈이 존재할 수 있는 범위를 뜻한다.스프링은
스프링 컨테이너 스프링 컨테이너는 애플리케이션의 객체들을 만들고 관리해주는 스프링 프레임워크의 핵심 요소이다. 스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다. 스프링 부트(Spring Boot)를 사용하기 이전에는 xml을 통해 직접적

Spring Data Spring Data는 Spring Framework의 하위 프로젝트 중 하나로, 데이터 접근 계층을 구현할 때 반복되는 코드를 줄여 생산성을 높이는 것이 목표이다. 과거에는 DB에서 데이터를 가져오기 위해 직접 SQL을 짜고, Connectio

Spring Security Spring Security는 애플리케이션에서 인증/인가 등 다양한 보안 기능을 제공하는 프레임워크이다. 사용 이유 검증된 보안 매커니즘: 보안 기능을 직접 구현하면 보안 취약점이 생길 수 있지만, Spring Security를 사용하면

자바 웹 개발을 하다보면, 공통적으로 처리해야 할 업무들이 많다.예를들어 로그인 관련(세션체크)처리, 권한체크, XSS(Cross site script)방어, pc와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코드를 모든 페이지 마다

ORM은 애플리케이션 클래스와 RDB의 테이블을 매핑한다는 뜻이며 기술적으로는 애플리케이션 테이블을 RDB 테이블에 자동으로 영속화해주는 것이다. 장점SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만

영속성 컨텍스트란 엔티티를 영구 저장하는 환경이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. em.persist()는 엔티티를 저장하는 것이지만 사실 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스
DB에서 영속적으로 저장된 데이터를 자바 객체로 매핑해 '인스턴스 형태'로 존재하는 데이터를 말한다. 데이터 베이스 테이블에 대응하는 자바 객체를 의미한다. 각 클래스 필드가 DB의 행(row)에 해당한다. spring-boot-starter-data-jpa 의존성을
참고문서연관관계를 설정하는 방법은 단방향과 양방향으로 설정할 수 있다. 단방향은 한 쪽 엔티티에만 참조를 설정하고 양방향은 양쪽 엔티티가 서로를 참조한다. 양방향인 경우에는 연관관계의 주인을 정해야하는데, 테이블에 외래 키가 있는 곳으로 정해야한다. 그래야 주인으로 설
NoSQL 보통 'NoSQL 데이터베이스'라는 용어는 일반적으로 모든 비관계형 데이터베이스를 지칭할 때 사용됩니다. 'NoSQL'이라는 용어를 'non-SQL'의 약자로 보기도 하고 'not only SQL'의 약자로 해석하기도 합니다. 어느 쪽이든 NoSQL 데이터베

Spring Framework 2.0 이상의 버전에서 지원하는 @Transactional은 선언적 데이터베이스 트랜잭션 관리 방법을 제공합니다. 메서드 레벨 또는 클래스 레벨에서 사용할 수 있으며, 해당 메서드 또는 클래스의 모든 public 메서드에 트랜잭션을 적용합

CAP 이론은 NoSQL 공부에서 자주 접하는 개념으로, 분산 시스템의 특성을 세 가지로 나누어 설명합니다. 분산 시스템은 최소 두 개 이상의 노드가 네트워크로 연결되어 하나의 컴퓨터처럼 동작하는 시스템입니다. 대부분의 NoSQL 스토리지는 분산 시스템으로 동작하며,

PACELC 이론

옵티마이저(Optimizer) 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다. 개발자가 작성한 SQL을 실행하면 DBMS에서는 옵티마이저를 기반으로 실행계획을 세워서 쿼리를 실행한다. 쿼리 실행 절차 그렇다

정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.이러한 테이블을 분해하는 정규화 단계가 정의

전체 데이터베이스에 모든 데이터를 한 테이블 혹은 데이터베이스에서 관리하기가 어려워진다. 데이터베이스 볼륨이 커지면 커질수록 데이터베이스 읽기/쓰기 성능은 감소할 것이고, 데이터베이스가 병목 지점이 될 것이다. 따라서 이를 적절히 분할할 필요가 있다. 데이터베이스를 분

쿼리 플랜 (실행계획) DBMS는 SQL을 수행할 최적의 처리 경로를 생성해 주는 핵심 엔진인 옵티마이저(Optimizer)를 가지고 있다. 이 옵티마이저는 우리가 SQL을 작성하고 실행하면 이 쿼리를 어떤 순서로 실행하겠다고 실행계획을 세우게 된다. 이 실행계획이 어
DB에서 힌트(Hint)란 쿼리 실행 계획을 만들 때, 쿼리 옵티마이저가 사용할 특별한 지시사항을 의미한다. 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. DB가 항상 최적의 실행 경로를 만들어 내기는 불가능하기 때문에 직접 최적의 실행 경로를 작성해 주는

DBMS에서 데이터에 대한 동시 접근이 발생한 경우, 일관성과 무결성을 지키기 위해 해당 데이터에 잠금을 걸 수 있다. 이 때 select 가능 여부에 따라 크게 공유 락과 배타 락으로 나누게 된다.공유 락이 걸린 데이터에 대해서는 읽기 연산(SELECT)만 실행 할수

이진 트리에서 자녀 노드를 더 가지고 싶다면? 모든 노드의 왼쪽 서브트리는 해당 노드의 값보다 작은 값을 가지고, 오른쪽 서브트리는 해당 노드의 값보다 큰 값을 가지는 트리이며 자녀 노드는 최대 2개까지 가질 수 있는 트리이다. 이때 자녀 노드를 2개 이상 가지고

B+트리의 동작 방식은 B트리와 굉장히 유사하지만 B+트리의 리프노드는 연결리스트의 형태를 띄어 선형 검색이 가능하다는 점에서 차이가 있다. 이러한 특징점 때문에 굉장히 작은 시간복잡도에 검색을 수행할 수 있다. 이전 B트리 포스팅에서 삽입 & 삭제 과정을 자세히 설명
복합 인덱스 (Composite Index) 복합 인덱스는 데이터베이스에서 여러 개의 컬럼(열)들을 조합하여 인덱스를 생성하는 것을 말한다. 단일 인덱스(Single Index)가 한 개의 컬럼에 대해 생성되는 것과는 달리, 복합 인덱스는 여러 개의 컬럼을 함께 사용하

데이터베이스 테이블의 컬럼(Column)의 카디널리티(Cardinality)는 해당 컬럼에 있는 고유(Distinct)한 값의 개수를 말한다. 예를 들어, 성별(Gender) 컬럼의 남성, 여성 2가지 값이 존재하므로 이 컬럼의 카디널리티는 2이다.높은 카디널리티 :

RDBMS에서 데이터를 일관성을 위한 동기화(Lock)을 설정하는 방법은 크게 2가지로 나뉜다. 하나는 비관적 락, 나머지 하나는 낙관적 락이다. 아래는 각각에 대한 개략적인 설명이다. 비관적 락이란 트랜잭션이 시작될 때 데이터의 행에 Shared Lock 또는 Exc

동시성 문제를 해결하기 위해서는 공유자원에 대한 접근을 직렬화(순차처리) 하는 방법이 필요하다.자바의 synchronized 키워드, ReenTrantLock, Atomic ClassJVM 레벨에서 임계 구역(critical section)을 보장단일 서버 환경에서는

프로토콜은 네트워크 통신을 위한 규칙과 약속을 의미한다. 구문(Syntax): 전송하고자 하는 데이터의 형식(Format), 부호화(Coding), 신호 레벨(Signal Level) 등을 규정의미(Semantics): 두 기기 간의 효율적이고 정확한 정보 전송을 위한