[간단정리] JDK Dynamic Proxy vs CGLib Proxy
·
개발메모/간단정리
개요 Java/Spring 환경에서 사용되는 프록시 중 JDK Dynamic Proxy와 CGLib Proxy에 대한 기초 지식과 차이를 알아보자. 프록시(Proxy)가 뭘까? 프록시(proxy)는 대리 또는 대리인이라는 뜻을 가졌다. 업무를 하며 프록시라는 용어를 처음 접했을 때는 뜻을 모르는 상태여서, 뭔가 단어 자체가 어렵게만 느껴졌었다. ex) Proxy Server, Proxy Pattern, HA-Proxy 등.. 지금은 어느정도 단어의 뜻과 일치하게, '무언가 대신하는 ~' 느낌으로 이해하기 시작하면서 조금 더 쉽게 프록시와 관련된 내용에 대해 어렵게만 느껴졌던 부분이 해소됐다. 해당 포스팅에서는 Java에서 프록시 패턴이 적용되어, 우리가 알게 모르게 사용하고 있던 JDK Dynamic P..
Java - String(문자열) .isEmpty() vs .isBlank() 차이점
·
JAVA/기타
Java에서 String(문자열) 데이터를 다루다보면, 해당 데이터가 존재하는지 공백인지 체크하는 경우가 자주 있습니다. Java에서는 공백 문자열 체크를 위한 기본 메서드가 여러가지 존재하는데, 그 중 String 클래스 멤버 메서드인 .isEmpty()와 .isBlank() 각각 특징 및 차이점이 무엇인지 확인해보겠습니다. .isEmpty() // String.java public final class String { public boolean isEmpty() { return value.length == 0; } } isEmpty()는 해당 문자열 객체의 길이를 체크하여 boolean 값을 리턴한다. 문자열의 길이가 0인 경우, true 리턴 Java 6 이후 버전에서 사용 가능하다. .isBlan..
Springboot에서 CircuitBreaker 설명 및 사용법
·
JAVA/기타
CircuitBreaker(서킷브레이커)란? Fault Tolerance(=장애 허용 시스템)에서 사용되는 대표적인 패턴으로써 서비스에서 타 서비스 호출 시 에러, 응답지연, 무응답, 일시적인 네트워크 문제 등을 요청이 무작위로 실패하는 경우에 Circuit을 오픈하여 메세지가 다른 서비스로 전파되지 못하도록 막고 미리 정의해놓은 Fallback Response를 보내어 서비스 장애가 전파되지 않도록 하는 패턴 (대표적으로 MSA 환경에서 사용) 서킷브레이커 종류 Netflix Hystrix https://github.com/Netflix/Hystrix 넷플릭스에서 만든 라이브러리로 MSA 환경에서 분산된 서비스간 통신이 원활하지 않은 경우에 각 서비스가 장애 내성과 지연 내성을 갖게하도록 도와주는 라이..
[간단정리] Spring - Filter, Interceptor, AOP 특징 및 차이
·
개발메모/간단정리
개요 웹 개발을 하다 보면 실제 비즈니스 로직이 호출되기 이전, 이후에 공통적으로 처리해야 할 기능들이 존재하는데, 대표적인 예로 로깅, 인증/인가, 인코딩 변환 등이 있다. 공통적인 기능의 코드를 모든 Controller, Service 레이어에서 작성하게 되면 코드의 중복이 발생하게 되고, 공통 기능 수정이 필요한 경우 중복으로 작성된 모든 코드들을 수정해야하는 번거로움이 생길 수 있다.(수정간에 빠뜨리고 수정하지 않는 코드 또한 생길 수 있음) 따라서, 공통 기능을 모아서 Spring에서 처리 할 수 있는 방법으로 이번 간단정리의 주제인 3가지가 주로 언급된다. 1. Filter 2. Interceptor 3. AOP 3가지 방법은 약간의 차이점이 존재한다. 실행 순서 Filter와 Intercep..
[간단정리] MSA란?(등장배경, 특징, 장단점)
·
개발메모/간단정리
개요 MSA란 무엇인지 알아보자 MSA MircroService Architecture의 줄임말 마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 *서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. *서비스 지향 아키텍처(Service Oriented Architecture(SOA)) 애플리케이션 구성요소가 통신프로토콜을 통해 다른 구성요소에 서비스를 제공하는 아키텍처 접근 방식 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론 여기서 '서비스'는 기능의 독립적 단위 MSA 등장배경 Monolithic A..
[간단정리] JAVA - 추상클래스, 인터페이스 특징 및 차이점 확실히 기억하기
·
개발메모/간단정리
개요 추상 클래스(Abstract Class)와 인터페이스(Interface)의 특징 및 차이점 알아보기 요약 추상 클래스, 인터페이스 공통/차이 정리 표 구분 추상 클래스 인터페이스 공통점 객체 생성 객체를 생성(인스턴스화)할 수 없다. 추상 메서드 추상 메서드를 포함한다. 기능적 목적 상속받는 클래스에서는 추상 메서드를 반드시 재정의하여 구현해야 한다. 차이점 개념적 목적 상속 받아서 기능을 확장시키는데 목적 구현 객체의 동일한 실행 기능을 보장하기 위한 목적 클래스 클래스다.(abstract class) 클래스가 아니다.(interface) 일반 메서드 일반 메서드 정의가 가능 일반 메서드 정의 불가능 (Java8 이후 static, default 메서드 정의 가능) 멤버 변수 클래스와 동일하게 변..
[간단정리] JAVA - 제네릭(Generic)이란?
·
개발메모/간단정리
개요 제네릭(Generic)에 대해 알아보기 제네릭(Generic)? 자바 제네릭은 generic 타입 및 메소드를 정의하고 사용 할 수 있는 언어적 특성입니다. List list = new ArrayList(); Map map = new HashMap(); 위와같이 꺽쇠()안에 클래스 타입이 명시된 패턴을 자주 발견할 수 있다. 이걸 제네릭(Generic) 이라고 부르며, 제네릭 파라미터는 꺽쇠안에 포함하여 전달한다. 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다. 타입에 대해 유연성과 안정성을 확보한다. 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술 제네릭 사용 이유? 타입을 유연하게 처리하며, 잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에 검출..
[간단정리] 트랜잭션 격리수준(Isolation Level)
·
개발메모/간단정리
개요 트랜잭션 및 트랜잭션 격리수준에 대해 알아보기 요약 트랜잭션 격리 수준 0-LEVEL: READ UNCOMMITTED: 트랜잭션내에서 커밋하지 않은 데이터에 다른 트랜잭션의 접근이 가능 1-LEVEL: READ COMMITTED: 트랜잭션내에서 커밋된 데이터만 다른 트랜잭션이 읽는 것을 허용 2-LEVEL: REPEATABLE READ: 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 결과는 동일 3-LEVEL: SERIALIZABLE: 가장 엄격한 격리 수준으로 완벽한 읽기 일관성 모드 제공 부정합 문제 DIRTY READ: 한 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있게 되는 현상 NON-REPEATABLE READ: 동일한 SELECT 쿼리를 ..
[간단정리] JAVA - Checked Exception vs Unchecked Exception
·
개발메모/간단정리
개요Checked Exception, Unchecked Excpetion 차이점 알아보기ERROR? EXCEPTION?Error(에러)에러는 시스템에 비정상적인 상황이 발생한 경우에 해당한다. ex) OutOfMemoryError, ThreadDeath, StackOverflowError 등이 에러에 해당(일반적으로 애플리케이션단에서 복구할 수 없는 상황) Error는 합리적인 응용 프로그램이 잡아내려고 해서는 안 되는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다. 이러한 오류는 대부분 비정상적인 상태입니다.https://docs.oracle.com/javase/6/docs/api/java/lang/Error.htmlException(예외)예외란 입력 값에 대한 처리가 불가능하거나, 프로..
[간단정리] DB 클러스터링, 리플리케이션이란?
·
개발메모/간단정리
개요 DB 클러스터링(Clustering), 리플리케이션(Replication)이 각각 어떤 방식으로 처리되는지 알아보자 일반적인 데이터베이스 구조 우선 일반적인 데이터베이스의 구조를 보자. 처음으로 데이터베이스를 구성하게 되면 아래와 같은 구조로 데이터베이스를 만들었을 것이다. 데이터베이스 서버와 스토리지가 하나씩 구성되어 있다. 이렇게 구성된 데이터베이스는 그림만 봐도 서버가 제대로 동작하지 않으면 먹통이 된다는 것을 알 수 있다. 이러한 문제점을 해결하기 위해 가장 먼저 떠오르는 방법은 서버를 하나 더 늘리는 것이다. 이렇게 서버를 하나가 아닌 여러개로 구성하는 것을 Clustering이라 한다. 클러스터링(Clustering) Active & Active Clustering 앞서 본 데이터베이스 ..
[간단정리] Redis(레디스)란?
·
개발메모/간단정리
개요 Redis(레디스) 간단하게 알아보기 Redis Redis(레디스)는 REmote DIctionary Server의 약자로 오픈소스(BSD licensed) DBMS입니다. In-memory(인메모리) 데이터 저장소이며, Key-Value기반의 NoSQL DBMS입니다. 보통 DB, Cache(캐시), 메시지 브로커 등의 용도로 사용합니다. For instance, using pipelining Redis running on an average Linux system can deliver even 1 million requests per second. 초당 10만 ~ 15만건의 명령을 수행할 수 있으며, 위 공식문서의 내용처럼 파이프링을 통해 리눅스시스템에서 초당 100만건의 요청도 수행이 가능하다..
[간단정리] ELK? ELK Stack이란?
·
개발메모/간단정리
개요 ELK stack 간단하게 알아보기 ELK Stack ELK 스택은 Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미하는 약어입니다. Elasticsearch라고도 불리는 ELK 스택은 사용자에게 모든 시스템과 애플리케이션에서 로그를 집계하고 이를 분석하며 애플리케이션과 인프라 모니터링 시각화를 생성하고, 빠르게 문제를 해결하며 보안 분석할 수 있는 능력을 제공합니다. Elasticsearch Elasticsearch는 Apache Lucene에 구축되어 배포된 검색 및 분석 엔진입니다. 다양한 언어를 지원하고 고성능에 스키마가 없는 JSON 문서로 Elasticsearch는 다양한 로그 분석과 검색 사용 사례에 최고의 선택이 되었습니다. ..
[간단정리] GraphQL이란? (REST api와 차이점)
·
개발메모/간단정리
개요 GraphQL 간단하게 알아보기 GraphQL GraphQL 은 API를 위한 쿼리 언어(Query Language)이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다. GraphQL은 특정한 데이터베이스나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다. 쿼리 언어(Query Language) 쿼리 언어는 정보를 얻기 위해 보내는 질의문(Query)를 만들기 위해 사용되는 컴퓨터 언어이다. 가장 잘 알려져있는 예시로는 데이터베이스 시스템에 저장된 데이터를 가져오기 위해 사용하는 SQL이 있다. GraphQL(Graph Query Language) SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데..
PHP 함수 정리
·
PHP/기초
함수 함수(Functions)라는 개념은 많은 프로그래밍 언어에서 중요합니다. 코드의 중복을 최소화하고 기능 단위로 코드를 구성함으로서 말 그대로 블록처럼 끼워맞춰 어플리케이션을 구성할 수 있도록 해줍니다. 또한 하나를 변경했을 때 다른 곳은 변경하지 않더라도 적용되기때문에 유지보수에 큰 도움을 줍니다. function 함수의 선언은 function 키워드를 사용하여 다음과 같이 할 수 있습니다. foo 라는 이름을 가진 함수가 정의되었습니다. function foo() { echo 'Hello, world'; } 이제 함수를 사용하려면 호출을하면 되는데, 대략 세 가지 방법을 소개하고자 합니다. 함수의 이름으로 호출하기 함수의 이름과 함께 소괄호를 사용하여 함수를 호출합니다. foo(); // -> H..
[간단정리] HTTP Request/Response 구조
·
개발메모/간단정리
개요 HTTP Request(요청)/Response(응답) 구조 알아보기 HTTP HyperText Transfer Protocol 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약). 즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다. 프론트앤드 서버와 클라이언트간의 통신에 사용된다. 또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다. HTTP는 TCP/IP 기반으로 되어있다. HTTP 기본적으로 request(요청)/response(응답) 구조로 되어있다. 클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조 클라이언트와 서버의 모..