728x90
반응형

서버 개발 19

[시스템 설계] 시스템 규모 확장

수평적 vs 수직적수직적 규모 확장 (스케일 업)스케일업이란 서버의 자원을 고사양 자원으로 업그레이드 하거나 추가하는 행위를 말한다.주로 CPU, RAM 메모리, 디스크 등을 추가한다. 수직적 확장의 단점:자원을 추가하는 것에는 한계가 있다. (무한히 증설하는 것은 불가능하다)장애 Failover나 서비스 다중화의 방안이 없다.만약 서버 장애가 발생한다면 모든 서비스의 중단이 발생한다. 수평적 규모 확장 (스케일 아웃)스케일 아웃이란 클러스터의 성능을 개선하기 위해 더 많은 서버를 추가하는 행위를 말한다.  수평적 확장에 필요한 것들로드밸런서로드밸런서란 부하분산집합에 속한 서버들의 트래픽을 고르게 분산하는 역할을 한다.로드밸런서는 보통 사설 주소를 통해 내부 서버들과 통신한다.여러대의 서버중 한대의 서버..

DBMS - (1) 버퍼 메모리

버퍼 매니저란DBMS내의 버퍼 메모리 영역을 관리하는 주체 DBMS의 기억장치하드디스크데이터를 영구적으로 저장하는 매개체비용이 저렴하고 빠르지도 느리지도 않은 성능메모리일부 데이터를 메모리에 올려 디스크 접근을 줄여 성능을 향상시킴성능이 좋은 대신 비용이 비쌈  버퍼의 종류 데이터 캐시데이터의 일부를 메모리에 유지SELECT시 데이터를 빠르게 응답로그 버퍼갱신 쿼리를 받으면 갱신처리를 먼저 로그버퍼에 보냄이후 디스크에 변경을 수행워킹 메모리정렬과 해시에 사용되는 작업 영역정렬 - GroupBy, OrderBy, Window 함수 등해시 - Join 연산  메모리 트레이드오프메모리 데이터에는 영속성이 없음: 휘발성 - 장애가 발생하면 부정합을 초래데이터 캐시디스크에 저장된 데이터를 캐싱한 것이니 다시 조회..

서버 개발/MySQL 2024.10.10

[스프링 클라우드] 서비스 디스커버리

서비스 디스커버리란?마이크로 서비스 아키텍처(MSA)를 다루다 보면 특정 인스턴스에 접근해야 하거나,현재 서비스 가능한 인스턴스의 갯수를 알아야 하는 경우가 종종 생긴다.특히 MSA를 운영하다 보면 인스턴스 추가나 인스턴스가 교체되는 상황이 빈번하게 발생한다.이때 인스턴스의 정보를 빠르게 파악할수 있도록,서비스의 각 인스턴스 목록 및 ip리스트와 같은 메타데이터를 관리하는 것이 서비스 디스커버리다. 서비스 디스커버리의 종류유레카유레카는 넷플릭스에서 만든 서비스 디스커버리 패키지이다.스프링 클라우드에서 기본적으로 제공하는 컴포넌트이다.spring-cloud-starter-eureka-server 스타터를 통해 사용한다. 아파치 주키퍼주키퍼는 주로 하둡 스파크와 같은 빅데이터 시스템에 활용되는 분산 코디네이..

스프링 프레임워크 - (4) 데이터 바인딩

데이터 바인딩 외부에서 입력된 값을 통해 자바 객체의 Property, 즉 멤버변수에 설정하는 과정을 데이터 바인딩이라고 한다. DataBinder 이러한 프로세스는 웹 통신에서 데이터를 주고받을 때 자주 일어난다. HTTP요청이 들어오면 해당 요청은 Json으로 되어있고, Json으로 들어온 요청을 애플리케이션에서 사용할 Java객체로 변환해야 한다. 이 때 하나하나 매핑해서 사용할 수도 있지만, DataBinder를 사용하면, 형변환 등 여러가지를 편리하게 해준다. request라는 HTTP요청이 도착했을 때, DataObject로 변환시켜주는 예제이다. DataObject obj = new DataObject(); ServletRequestDataBinder dataBinder = new Servl..

스프링 프레임워크 - (3) AOP

AOP 배경 소프트웨어를 개발하다 보면, 로깅이나 예외처리와 같은 비지니스로직이 아닌 코드를 반복하게 된다. 이러한 로직은 중요한 부분이지만, 실제 비지니스 로직과는 거리가 먼 것이 대부분이다. 여러 다른 부분의 코드에 사용될 수 있지만, 반복적이다. 유지보수를 할 때도, 여러곳에 분산되어 있으면 관리가 어렵게 된다. 이를 해결하기 위해 나온 개념이 Aspect Oriented Programming, 즉 관점지향 프로그래밍이다. 횡단관심사 (Cross-Cutting Concern) 여러 모듈에 걸쳐 공통적이고 반복적인 처리 로직을 일컷는 말이다. AOP는 이러한 횡단관심사들을 한데 모아 관리하는 것에 관심이 있다. 횡단관심사의 대표적인 예들은 다음과 같다: 보안 로깅 트랜잭션 모니터링 캐시 예외 AOP의..

스프링 프레임워크 - (2) 스프링 빈 (Bean)

빈 스코프 스프링의 DI컨테이너가 관리하는 Bean의 생존기간을 의미한다. 스프링에서 설정할 수 있는 Bean의 스코프는 다음과 같다: singleton 디폴트값이다. 하나의 인스턴스가 생성되고, 이후에는 해당 인스턴스를 공유하게 된다. prototype DI에 Bean에대한 요청이 들어올때 마다 Bean을 생성한다. 멀티스레드 환경에서 사용되는 Bean에 많이 쓰인다. request HTTP 요청이 들어올 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. session HTTP 세션이 생성될 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. global session 글로벌 HTTP세션이 생성될 때 Bean을 생성한다. 포틀릿 웹에서만 쓰인다. application 서블릿 컨텍스트가 만들어질 때 Bea..

스프링 프레임워크 - (1) 의존성 주입 (DI)

DI의 생성 배경 생성자에서 모든 의존성이 있는 클래스들을 초기화 하면 클래스들 간의 결합도가 높아진다. 하지만 비지니스 로직을 구현하다 보면, 다양한 컴포넌트들을 조합하게 되고, 이를 효율적으로 분리해야 협업이나 외주개발이 용이하게 되는데, (컴포넌트가 실제로 구현될 때 까지 시간이 걸릴 수 있음) 이를 Dummy클래스로 대체하는 방법이 있다. 따라서 결합도를 낮추려면, 생성자에서 구현하는 것 보다, 생성자에서 인자로 받는것이 더 효율적일 것이다. 이렇게 하면 Interface에 명시된 메소드명만을 사용하게 되고, 실제 Impl의 구현체는 쉽게 수정할 수 있게 된다. 하지만 생성자에서 직접 주입을 받는 경우에도, 각 컴포넌트를 개발자가 직접 주입해주어야 하기 때문에, 로직적인 변경이 필요할 경우 큰 수..

MySQL - (7) JOIN

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN JOIN Join이란 두개의 테이블을 합쳐 어떠한 결과물을 내는 작업입니다. 이때, 대개의 경우 컬럼명이 같은 컬럼을 기준으로 Join을 수행합니다. SQL에서 지원하는 Join의 종류는 다음과 같습니다. NATURAL JOIN INNER JOIN LEFT/RIGHT JOIN SELF JOIN 이번 포스팅에서는 NATURAL JOIN과 FULL JOIN, 그리고 INNER JOIN에 대해서 알아보겠습니다. 데이터 준비 JOIN을 하려면 (SELF JOIN을 제외하면) 테이블이 두개 이상 필요합니다. 먼저 Customer테이블 이외에 Orders테이블을 생성해주겠습..

서버 개발/MySQL 2019.08.10

MySQL - (6) 조건분기

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN 조건분기 모든 프로그래밍 언어에는 조건분기가 존재합니다. SQL에서 조건분기는 여러가지 방법이 있습니다. WHERE문 사용 UNION 사용 CASE 사용 WHERE문은 손쉽게 사용할 수 있다는 장점이 있지만, 구문이 매우 길어질 수 있습니다. UNION은 기본적으로 여러개의 SELECT문을 사용한다는 전제가 깔려있기 때문에 효율적이지 않습니다. 따라서, 이번 포스팅에서는 CASE문을 사용한 조건분기를 알아보도록 하겠습니다. CASE CASE식의 기본 문법은 다음과 같습니다. CASE WHEN 조건 THEN 식 WHEN 조건 THEN 식 ... ELSE 식 END ..

서버 개발/MySQL 2019.08.10

MySQL - (5) 데이터 갱신

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN 데이터 갱신 소프트웨어 개발을 하다보면 CRUD라는 말을 종종 듣게 됩니다. 이는 Create, Read, Update, Delete가 됩니다. SQL에서는 이가 곧 Insert, Select, Update, Delete가 됩니다. 이 중 Select를 제외하면 모두 데이터를 새로 주입하거나, 즉 갱신하려는 테이블 자체에 영향을 주는 트랜잭션 입니다. INSERT INSERT문의 기본적인 문법은 다음과 같습니다. INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...) 참고로 위에서 컬럼명은 테이블이 정의된 컬럼 순서와 ..

서버 개발/MySQL 2019.08.10
728x90
반응형