[Elastic Search] Elastic Search란? Elastic Search의 개념 및 장단점

1. Elastic Search란? Apache Lucene에 구축되어 배포된 검색 및 분석 엔진이다. 현재 검색엔진을 넘어 보안, 로그분석, Full-text 분석 등 다양한 영역에서 사용되며, Kibana, Logstash, Beats들과 함께 사용된다. 오픈 소스 프로젝트로 활발히 개발되고 있으며, 유닉스, 자바의 기초지식 필요하다. Apache Lucene의 한계를 보완하기 위한 새로운 검색엔진 프로젝트로 시작되었고 Logstash, Kibana와 함께 사용되어 ELK Stack (ES, Logstash, Kibana)라고 불렸으나 2013년 Logstash, Kibana 프로젝트 정식 흡수되었다. 2. Elastic Stack이란? ES, Logstash, Kibana를 묶은 ELK 서비스이다. 5.0.0 버전부터 Beats를 포함하며 Elastic Stack 이란 이름으로 서비스가 제공되고 있다. 서버로부터 모든 유형의 데이터를 가져와 실시간 검색, 분석, 시각화를 도와주는 Elastic 오픈 소스 서비스 제품이다. ...

December 8, 2023 · Jun Kang

[WEB] SSR(Server Side Rendering) 과 CSR(Client Side Rendering)의 개념 및 차이

1. SSR (Server Side Rendering) 서버에서 렌더링 준비를 마친 상태로 클라이언트에 자원을 전달한다. 1-1. SSR 작동 방식 유저가 웹사이트 자원을 요청 서버에서 “렌더링 가능한” HTML 파일 생성 (리소스 체크, 컴파일 후 완성된 HTML 콘텐츠 생성) 브라우저는 즉시 HTML 렌더링, 사이트 조작 불가 상태 클라이언트가 자바스크립트를 다운받는다. 다운로드하여지고 있는 사이 콘텐츠는 볼 수 있지만 조작은 불가, 이 기간 동안 유저의 액션을 기억 브라우저가 자바스크립트 프레임워크를 실행 자바스크립트가 컴파일된 후 기억하고 있던 유저 액션을 실행시킨다. 서버에서 렌더링 가능한 상태로 이미 전달되기에 자바스크립트를 받는 동안 특정 자원을 볼 수 있다. 1-2. SSR 장점 초기 페이지의 로딩속도가 빠르다. 서버에서 컴파일되어 클라이언트로 넘어오기에 클롤러 대응에 용이하여 SEO 친화적이다. 클라이언트 하드웨어 및 소프트웨어 성능에 영향을 덜 받는다. 1-3. SSR 선택 기준 네트워크가 느릴 때 (페이지마다 나눠서 불러오기 때문) 검색엔진 최적화가 필요할 때 최초 로딩이 빨라야 할 때 메인 스크립트가 크고 로딩이 느릴 때 웹사이트 상호작용이 별로 없을 때 2. CSR (Client Side Rendering) 렌더링이 클라이언트에서 일어난다. 서버에선 HTML과 JS를 보내고, 클라이언트에서 렌더링을 시작한다. 모든 로직, 데이터, 템플릿, 라우팅은 클라이언트에서 실행된다. 자바스크립트 번들 크기의 영향을 많이 받기에 코드 분할을 고려해야 하며, 적시 적소에 필요한 기능만을 제공해야 한다. ...

November 28, 2023 · Jun Kang

[네트워크] REST, RESTful API의 개념 및 설계 가이드

1. REST란? REST란 Representational State Transfer의 약자로 자원을 이름으로 구분하여 자원의 상태를 주고받는 것을 의미한다. HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 행위를 적용한다. 1-1. REST 구성요소 자원(Resource) : HTTP URI - 서버는 고유한 리소스 식별자로 각 리소스를 식별 행위(Verb) : HTTP Method (GET, POST, PUT, DELETE) 내용(Representations) : HTTP Message Pay Load - 하나의 자원은 JSON,XML, TEST, RSS 등 여러 형태의 Representaion으로 나타내어질 수 있다. 1-2. REST의 특징 Stateless (무상태성) - 서버가 이전의 모든 요청과 독립적으로 클라이언트 요청을 완료함을 의미 Cacheable(캐쉬 가능성) - 일부 응답을 저장하는 프로세스인 캐싱을 지원함을 의미 Layered System (계층화) - 클라이언트는 REST API Server만 호출하지만, 클라이언트 요청을 이행하기 위해 함께 작동하는 비즈니스 로직(보안, 암호화 등)을 여러 계층으로 실행될 수 있도록 유연하게 설계 가능함을 의미 Uniform Interface (균일한 인터페이스) - 서버가 표준 형식으로 정보를 전송함을 의미 1-3. 장점 HTTP 프로토콜을 그대로 사용하기에 별도 인프라를 구축할 필요가 없음 HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능 API의 의도를 쉽고 명확하게 파악 가능 클라이언트, 서버를 완전히 분리하기에 각 부분이 독립적으로 발전 가능 사용되는 기술과 독립적이기에 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 작성이 가능 1-4. 단점 표준이 존재하지 않아 정의가 필요함 HTTP Method 형태가 제한적 2. RESTful API란? REST 아키텍쳐를 따르는 API를 RESTful API (Representaional state transfer API)라고 하며 REST 아키텍처를 구현하는 웹서비스를 RESTful 웹 서비스라고 한다. REST는 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어 졌으며, 대규모의 고성능 통신을 안정적으로 지원할 수 있고 쉽게 구현 및 수정할 수 있어 파악에 용이하고 여러 시스템에서 사용이 가능하다. ...

November 21, 2023 · Jun Kang

[Spring] 순환참조란? The dependencies of some of the beans in the application context form a cycle

1. 순환참조란? 순환참조는 맞물린 의존성 주입 (DI) 상태에서 어떤 빈을 먼저 생성할지 결정하지 못해서 생기에 발생한다. BeanA에서 BeanB를 참조(BeanA->BeanB) 일 경우 스프링은 BeanB를 먼저 생성 후 BeanA를 생성하기에, BeanB에서 다시 BeanA를 참조할 경우 (BeanA->BeanB->BeanA) 순환 참조가 발생하게된다. 2. 의존성 주입 의존성 주입의 3가지 상황 (생성자 주입방식, 필드 주입방식, Setter주입)에서 순환참조가 발생할수 있다. 다음 포스트 각각의 상세 내용을 확인할 수 있고, 이번 포스트에서는 각각의 경우에 순환참조가 발생하면 어떤 차이점이 있는지 확인해 보자. ...

November 17, 2023 · Jun Kang

[PostgreSQL] 함수(Function)의 정의 및 상세 사용법 (다양한 예제)

1. PostgreSQL Function이란? SQL 함수는 임의의 SQL문들을 실행하고 마지막 쿼리의 결과를 반환한다. 단순한 형태의 함수는 마지막 쿼리의 첫 번째 row가 리턴된다. (order by 를 사용하지 않는 경우 다중 row의 첫 번째 행은 별도 정의되지 않기에 결과 row가 매번 다를 수 있다.) 마지막 쿼리가 row를 하나도 반환하지 않을 경우 null이 리턴된다. SQL 함수는 함수의 리턴 유형을 특정 타입의 집합 (SET)으로 선언하거나, 테이블로 선언하여 반환할 수 있다. 이 경우에는 마지막 쿼리의 모든 ROW가 리턴된다. SQL함수의 body는 세미콜론(;)으로 구분된 SQL구문의 집합이어야만 한다. 마지막 구문 뒤의 세미콜론(;)은 생략하여도된다. 함수가 void를 리턴하는 것으로 선언되지 않았다면, 마지막 구문은 반환절이 존재하는 select, insert, update, delete 여야만 한다. 모든 종류의 SQL 언어의 명령 모음은 패키징 되어 함수로 정의될 수 있다. select쿼리 외에도 insert, update, delete, merge 등의 데이터 수정쿼리 및 기타 SQL을 포함할 수 있지만, 트랜잭션 제어 명령( ex. commit, savepoint) 및 vacutaion 등의 일부 유틸리티 명령은 사용할 수 없다. SQL이 작동은 하지만 특정 값을 리턴하지 않는 SQL 함수를 정의하고 싶다면, void를 리턴하는 것으로 정의할 수 있다. ▶ 1-1. Function 간단 예시 다음은 emp 테이블에서 음수의 salary를 삭제하는 함수이다. ...

November 15, 2023 · Jun Kang