Backend 39

Zookeeper

분산 시스템에서 정보를 공유할 때, 클러스터에 있는 서버들의 상태 체크, 동기화를 위한 락(lock)처리를 해결할 수 있는 시스템을 코디네이션 시스템이라고 하는데 대표적인 것이 바로 Apache Kafka이다. 가장 일반적인 용도로 클러스터 내의 각 서버들의 설정 정보를 저장하는 저장소로 쓸 수 있다. Watch 기능을 이용하면 설정 정보가 저장될 경우, 각 서버로 알려서 바로 반영할 수 있다. 글로벌 락 - 분산 서버가 공유자원을 접근하려 할 때 동시에 하나의 작업만 발생해야한다고 하자. 그 작업에 lock을 걸고 작업을 할 수 있도록 해준다. Kafka나 HBase 등에 쓰인다.

Backend/Kafka 2021.04.13

Kafka

배경 링크드인 웹사이트에서 생성되는 로그를 처리하여 웹사이트 활동을 추적하는 것을 목적으로 개발되었다. 대량의 로그를 분석하여 사용자가 웹에서 하는 활동을 모니터링하고 서비스 개선에 활용하는 것이다. 필요한 조건을 모두 만족하는 기술이 없었기에 여러 조건을 고려하여 만들었다. Pub/Sub model을 구현한 분산 메시징 시스템 - 메시지 생산자인 프로듀서를 Publisher, 메시지 소비자인 컨슈머를 Subscriber라고 한다. - Publiser가 Subscriber에게 직접 메시지를 보내는 것이 아니라 Broker를 통해 전달한다. - Publisher는 누가 그 메시지를 수신하는지 알 수 없고 브로커에 있는 토픽이라고 불리는 카테고리 안에 메시지를 등록한다. - 여러 Subscriber가 같은 ..

Backend/Kafka 2021.04.13

Spring Cloud

- 분산 시스템에서 공통적인 패턴(구성 관리, 서비스 검색, 지능형 라우터 등)을 모아 신속하게 구출할 수 있는 도구를 Spring Library로 제공한다. 따라서, 개발자는 분산 시스템에서 필요한 부분들에 대한 부담을 덜고 충실하게 서비스의 기능을 구현하는 것에 충실할 수 있다. - 특정 벤더(AWS, Cloud Foundry 등)에 종속적이지 않다. - 보통, Spring config, Rabbit MQ, Eureka, Zuul을 활용하여 이상적인 마이크로 서비스를 만든다.

Scale up, Scale In, Auto Sacle

Scale up(Vertical Scaling) 서버 자체의 spec을 높여 성능을 향상시키는 방법 서버 자체의 갱신이 빈번하여 정합성 유지가 어려운 경우 효과적 Scale out(Horizontal Scaling) 서버의 대수를 늘려 동시 처리 능력 향상 API 서버나 읽기전용 DB, 정합성 관리가 어렵지 않은 DB Engine에 사용된다. 저렴한 서버 여러 대를 사용하므로 가격에 비해 뛰어난 확장성으로 효율이 좋지만 대수가 늘어날수록 관리가 힘들어지는 부분이 있다. Auto scale 유저가 몰릴 경우나 빠져나갈 때에 대한 기준을 만들어놓고 그에 따른 sacle in, out을 자동적으로 이루어지도록 하는 것

Oracle 평균 구하기

오라클에서 AVG 함수를 사용하면 평균을 쉽게 구할 수 있다. 그러나 NULL값을 처리하지 않으면 평균 값에 오류가 생길 수 있다. 왜냐하면 AVG함수는 NULL값을 제외하고 처리하기 때문이다. 필요에 사용용도가 다르겠지만 보통 전체를 처리하는 경우가 많기 때문에 NULL값을 치환해서 사용해야한다. SELECT AVG(NVL(comm, 0)) AS avg1 , SUM(comm)/COUNT(*) AS avg2 FROM emp 두 개의 결과 값은 동일하다. NULL이 있다면 0으로 치환해줬기 때문에 AVG내에 NULL이 없기 때문에. NVL이 없으면 결과 값은 달라질 수 있다. gent.tistory.com/313 [Oracle] 오라클 평균 구하는 방법 (AVG 함수 주의점) 오라클에서 AVG 함수를 사용..

Backend/SQL 2021.03.30

Maven

아래 참조 블로그를 보고 명확하게 이해하기 위해 클론한 것입니다. Maven을 알아보기 전에 사전 지식을 알아보자. 1. 빌드(Build) Build는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다. - wiki 한 마디로 개발자가 작성한 소스코드 및 각 자원들(xml, jpg, properties)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물이다.(jar, war 등) 2. 빌드 도구(Build Tool) 프로젝트 생성, 테스트, 빌드, 배포 등의 작업을 위한 프로그램 라이브러리 추가, 버전 동기화 등의 어려움을 해소하기 위해 등장 Ant -> Maven -> Gradle의 추세 Maven 1. 정의 및 특징 자바..

Backend/Spring Boot 2021.03.29

JPA, Spring Data JPA

서사 JDBC API -> SQL Maapper(Spring JDB, Mybatis) - Spring Data JPA 순으로 추상화가 되었음 JPA(Java Persistence API) - 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 Hibernate: JPA 인터페이스 구현체 중 하나로 가장 대표적인 구현체 Spring Data JPA - ORM을 위한 자바 EE표준이며 jpa를 쉽게 사용하기 위해 Spring에서 제공하고 있는 프레임워크 - Spring Boot에서 인터페이스를 만들고 JpaRepository를 상속받아서 사용한다. - Spring-data-jpa -> Hibernate -> JPA (추상화정도) - 개발자가 JPA를 사용하면 JPA 내부에서 JDBC..

Backend/JPA 2021.03.29

Redis란 ?

Redis(Remote Dictionary System)의 정의를 살펴보면 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 이라고 redis 공식홈페이지에 나와있다. 말 그대로 오픈소스 in-memory storage로 database나 cache, message broker로 사용된다. 라인, 삼성전자, 네이버, Stackoverflow, 인스타그램 등 여러 IT 대기업에서도 사용하는 검증된 오픈소스 솔루션이다. redis.io https://engkimbs.tistory.com/869 http://qnimate.com/overview-of..

Spring Boot란?

1. Spring Boot? 일반적으로 Spring Framework를 사용하기 위해서는 많은 XML(web.xml, ServeltContext.xml 등)을 작성해야했다. 이러한 설정없이 쉽고 빠르게 Spring 기반의 애플리케이션을 만들게 하는 것이 바로 Spring Boot maven, gradle로 프로젝트 전반적인 사이클을 관리한다. (최근에는 gradle이 강세) 2. 특징 1) 라이브러리 관리의 자동화 2) 라이브러리 버전 자동 관리 3) 설정의 자동화 4) 내장 Tomcat 5) 독립적으로 실행가능한 JAR Starter로 필요 library를 간편하게 세팅하여 다운 받아서 시작할 수 있음(start.spring.io) spring.io/projects/spring-boot Spring B..

Backend/Spring Boot 2021.02.03