본문 바로가기

전체 글 (15)

AWS Lambda란 ? Lambda란 ? 컨테이너 기반 서버리스 Faas 컴퓨팅 서비스 서버리스 : 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드/실행할 수 있도록 하는 클라우드 모델 BaaS (Backend as a Service) 애플리케이션에 필요한 다양한 기능들을 API로 제공해 줌으로서 서버 개발을 하지 않고도 기능을 사용할 수 있다 ex) firebase Faas (Function as a Service) 프로젝트를 함수 단위로 만들어서 컴퓨팅 자원에 함수를 등록하고 실행되는 횟수만큼 비용 지불 확장성에 대해 고민할 필요 없다. 호출된 횟수만큼 비용 지불하면 된다 함수에서 사용할 수 있는 메모리/처리 시간에 제한이 있다 이벤트를 감지해 아마존 리눅스 환경의 Micro VM을 띄우고 함수를 실행해 결과를 처리한..
Spring Batch란 ? Spring Batch에 대해 알아보기 전에 먼저 Batch란 무엇인지부터 알아보도록 하자 Batch Program 미리 정해진 작업들을 순서에 따라 일괄적으로 처리하는 것 필수 요소 대용량 데이터 자동화 견고성 : 중단되는 일 없이 수행되어야 한다 안정성/신뢰성 : 오류의 발생 위치, 시간 등을 추척할 수 있어야 한다 성능 : 다른 응용 프로그램의 수행을 방해하지 않아야 하고 지정된 시간 내에 처리 완료되어야함 Batch Scheduler / Job Scheduler Scheduler : Job을 특정 시간마다 실행하도록 도와주는 프로그램 종류 Spring Scheduler Quartz Scheduler Cron Spring Batch Spring에서 대용량 데이터를 일괄적으로 처리하는 기능 Job과 ..
NoSQL이란? NoSQL 무엇의 약자인지는 여러 의견들이 있지만, 현재 다수가 Not Only SQL란 의미로 사용하고 있다. 해석해보면 "SQL뿐만 아니라" 즉, 기존의 RDBMS가 갖고 있는 특성뿐만 아니라 다른 특성들도 부가적으로 지원한다는 의미이다 비정형 초고용량 데이터를 처리를 할 수 있는 비관계형 데이터 저장소 ACID는 제공하지 않지만, 뛰어난 확장성과 성능을 제공한다 테이블 간 관계를 정의하지 않아 Join이 불가능하다 분산형 구조를 통해 데이터를 여러 서버에 분산 저장, 상호 복제해 서버 장애가 발생했을 때에도 데이터 유실이나 서비스 중지 없는 구조의 형태를 가진다 수평적 확장(scale-out)을 쉽게 할 수 있다 데이터 중복이 발생할 수 있다 정확한 데이터 구조를 알 수 없고, 데이터가 변경/확장 ..
트랜잭션 격리 수준 (Transaction Isolation Level) Transaction Isolation Level 동시에 여러 트랜잭션이 처리될 때 트랜잭션끼리 얼마나 고립되어 있는지 나타낸 것 쉽게 말해 A트랜잭션에서 변경되거나 조회하는 데이터를 B 트랜잭션에서 볼 수 있도록 허용할지 말지를 결정하는 것이다 트랜잭션은 데이터의 정합성을 위해 원자성, 일관성, 격리성, 지속성(=ACID)를 보장한다. 이때 격리성을 완벽히 보장하면 트랜잭션을 차례대로 실행해야 해서 성능이 나빠지게 된다. 이러한 문제 때문에 ANSI 표준은 트랜잭션 격리 수준을 4단계로 나누어 정의하고 있다 낮은 Transaction Isolation Level에서 발생할 수 있는 문제들 Dirty Read 변경 후 commit/rollback 되지 않은 값을 읽어온다 Non-Repeatable Rea..
HashTable | HashMap | ConcurrentHashMap 개념 정리 Hash 임의의 길이의 값을 Hash Function을 이용해 고정된 길이의 값으로 변환하는 작업 Hash 함수 Division Method : 입력값을 테이블의 크기로 나누어 계산 (주소 = 입력 값 % 테이블의 크기) Digit Folding : key : 문자열을 ASCII 코드로 바꾸고 각각의 값을 합한 데이터를 테이블 내의 주소로 사용 Multiplication Method : h(k) = (kAmod1)xM (숫자로 된 key값 K + 0
Redis 운영 방식 : Cluster vs Sentinel 어떤 것을 선택해야 할까 ? 🤔 Redis 는 단일 인스턴스로도 운영 가능하지만 물리 머신이 가진 메모리의 한계를 초과하는 데이터를 저장하고 싶거나, failover에 대한 처리를 통해 HA를 보장하려면 Sentinel이나 Cluster 등의 운영 방식을 선택해서 사용해야 한다. 가장 많이 사용되는 운영 방식인 Sentinel과 Cluster를 알아보자 Sentinel 기능 모니터링(Monitoring) : Master/Slave 제대로 동작하는지 지속적으로 감시 자동 장애 조치(Automatic Failover) : 하단 설명 알림(Notification) : failover 되었을 때 pub/sub으로 client에게 알리거나, shell script로 이메일이나 sms를 보낼 수 있다 동작 방식 Sentinal 인스턴스 과반 수 ..
InnoDB란? InnoDB란? MySQL/MariaDB의 스토리지 엔진 특징 대용량 데이터를 처리할 때 최고의 성능을 낼 수 있도록 설계 Low Level Lock 트랜잭션(commit/rollback) 제공 Foreign Key 지원 장애 복구 가능 데이터 무결성 보장 정렬 가능 테이블은 pk를 기준으로 클러스터링 되어 저장 ACID 보장 구조 Buffer Pool 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두고, 쓰기 작업을 일괄 처리할 수 있게 버퍼링해주는 역할 아직 디스크에 기록되지 않은 변경된 데이터인 dirty page를 가지고 있다 dirty page는 주기적으로 또는 체크 포인트가 발생하면 write 스레드가 필요한 만큼의 dirty page를 디스크에 기록한다 Change Buffer 해당 ..