보조기억장치전원이 꺼져도 사라지지 않는 비휘발성(non-volatile) 저장장치데이터를 안전하게 보관하고 CPU가 필요로 하는 정보를 조금이라도 빠른 성능으로 메모리에게 전달하는 것이 목표종류HDD: 자기적인 방식으로 데이터 읽고 쓰는 저장장치플래시 메모리: 전기적 방식으로 데이터 읽고 쓰는 반도체 기반 저장장치ex) USB, SSDRAIDRedundant Array of Independent Disks데이터의 안전성 혹은 성능을 확보하기 위해 여러 개의 독립적인 보조기억장치를 마치 하나의 보조기억장치처럼 사용하는 기술HDD, SSD 혼합 사용도 가능은 하지만 병목 발생할 수 있어 권장하지 않음RAID 레벨ex) RAID0, RAID1, RAID2, RAID3, RAID4, RAID5, RAID6, R..
메모리RAM, Random Access Memory메인 메모리(주기억장치)현재 실행 중인 프로그램을 구성하는 데이터와 명령어를 저장하는 부품주소: 데이터 저장 위치휘발성: 전원이 공급되지 않을 때 저장하고 있는 정보가 지워지는 특성RAM의 용량은 컴퓨터에 큰 영향을 끼침. 클 수록 보조기억장치의 데이터를 많이 가져와 미리 저장할 수 있어 많은 프로그램 동시 실행 시 유리특정 번지의 데이터에 직접 (directly) 접근할 수 있음. ↔ 순차 접근 (sequential access)RAM의 종류DRAM: 시간이 지나면 저장된 데이터가 점차 사라지는 RAM (Dynamic RAM)SRAM: 시간이 지나도 저장된 데이터가 사라지지 않는 RAM (Static RAM). 휘발성은 여전히 있음. 전원 차단 시 내용..
CPUCentral Processing Unit명령어의 실행 주체정보를 읽어들이고 해석하고 실행하는 부품구성요소산술논리연산장치 ALU: 사칙연산, 논리연산 등의 연산 수행. 일종의 계산기.제어장치 CU: 명령어를 해속해 제어 신호라는 전기 신호를 내보내는 장치레지스터: CPU 내부의 작은 임시 저장장치. 여러개 존재. 각기 다른 이름과 역할 가지고있음. 레지스터CPU 안에 있는 작은 임시 저장장치대표적인 레지스터 종류프로그램 카운터 : 메모리에서 다음으로 읽어들일 명령어의 주소를 저장 (= 명령어 포인터)명령어 레지스터: 메모리에서 방금 읽어 들인 명령어를 저장범용 레지스터: 다양하고 일반적인 상황에서 자유롭게 사용플래그 레지스터: 연산의 결과 혹은 CPU 상태에 대한 부가정보인 플래그 값을 저장스택 포..
문자 인코딩문자 집합을 컴퓨터가 이해하는 0과 1로 이루어진 문자 코드로 변환하는 과정아스키코드 ASCII초창기 컴퓨터에서 사용하던 문자 집합 중 하나알파벳, 아라비아숫자, 일부 특수문자 포함한글 표기할 수 없음 EUC-KRKS X 1001, KS X 1003 문자 집합 기반의 인코딩 방식아스키 문자는 1바이트, 한글 글자는 2바이트 크기의 코드 부여네자리 16진수로 표현2,350개의 한글 표현 가능 → 모든 한글 조합을 표현할 순 없음 16진수 유니코드EUC-KR에 비해 훨씬 많은 언어, 특수문자, 화살표, 이모티콘까지 코드로 표현 가능한 통일된 문자 집합대부분의 언어를 지원하여 현대 가장 많이 사용되는 표준 문자 집합EUC-KR과는 다르게 글자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 UTF-8..
컴퓨터의 핵심 부품 컴퓨터가 이해하는 정보데이터: 숫자, 문자, 이미지, 동영상 등 정적인 정보명령어: 수행할 동작과 수행할 대상으로 이루어져있음비트CPU가 이해할 수 있는 0과 1을 나타내는 가장 작은 단위N비트는 2^N개의 정보를 표현할 수 있음바이트8비트를 묶은 단위.2^8 = 256단위이전 단위단위이전 단위1 Byte8 Bit 1 kB1,000 Byte1 kiB1,024 바이트1 MB1,000 kB1 MiB1,024 kiB1 GB1,000 MB1 GiB1,024 MiB1 TB1,000 GB1 TiB1,024 GiB 명령어연산 코드 (opcode): 명령어가 수행할 동작ex) MOVE, STORE, LOAD(FETCH), PUSH, POP, …오퍼랜드 (operand): 동작에 사용될 데이터 또..
애플리케이션 컨텍스트 (Application Context)스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당제어의 역전 (Inversion of Control): 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고있음을 의미스프링 컨테이너를 IoC 컨테이너라고도 함애플리케이션 컨텍스트는 그 자체로 IoC와 DI를 위한 빈팩토리이면서 그 이상의 기능을 가졌음ApplicationContext와 BeanFactory의 관계둘 다 스프링에서 제공하는 인터페이스.ApplicationContext는 BeanFactory 인터페이스를 상속받음public interface ApplicationContext extends ListableBeanF..
고성능 웹 서비스를 설계할 때, 캐시는 빠른 응답성과 트래픽 분산을 위한 핵심 구성 요소입니다. 하지만 캐시가 무효화되었을 때 동시에 수많은 요청이 DB로 몰려 과부하가 발생하는 상황, 즉 캐시 스탬피드(Cache Stampede) 는 실시간 서비스에서 빈번히 발생할 수 있는 장애 요인입니다.이번 글에서는 캐시 스탬피드가 무엇인지, 어떻게 발생하는지, 그리고 이를 방지하기 위한 실습 중심의 접근으로 Redisson 기반 분산락(Distributed Lock) 을 적용하는 과정을 소개합니다.캐시 스탬피드(Cache Stampede)란? 캐시 스탬피드는 짧은 TTL(캐시 유효 시간) 이 만료되어 캐시가 삭제된 순간, 동시에 수많은 요청이 몰리면서 모두 DB 조회를 시도하여 DB에 심각한 부하를 주는 현상입니..
“자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크” 애플리케이션 프레임워크특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크스프링은 자연스럽게 애플리케이션의 전 영역을 지원하는 종합적인 애플리케이션 프레임워크가 되었음경량급불필요하게 무겁지 않다는 의미과거 EJB 시절 무거운 WAS 서버가 필요했던 것과 달리, 스프링은 가장 단순한 서버환경인 Tomcat, Jetty 등에서도 완벽하게 동작함. 그만큼 개발 과정도 단순해짐자바 엔터프라이즈 개발을 편하게엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서 비즈니스 로직을 빠르게 ..
DI를 의식하면서 설계하면 객체지향 설계를 잘할 수 있다DI를 적용하려면 최소한 두 개 이상의, 의존관계를 가지고 서로 협력해서 일하는 오브젝트가 필요하다의존 오브젝트는 자유롭게 확장될 수 있다는 점을 항상 염두에 둬야 한다 DI를 적용 시 가능하면 인터페이스를 사용하게 해야 하는 이유다형성을 얻기 위해. 하나의 인터페이스를 통해 여러 개의 구현을 바꿔가면서 사용할 수 있게 하는 것이 DI가 추구하는 목적인터페이스 분리 원칙을 통해 클라이언트와 의존 오브젝트 사이의 관계를 명확하게 해줄 수 있다인터페이스는 하나의 오브젝트가 여러 개를 구현할 수 있으므로, 하나의 오브젝트를 바라보는 창이 여러 가지일 수 있다. 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)오..
스프링은 트랜잭션, 메일 전송, OXM 등 다양한 서비스 추상화 기능을 제공한다.분야추상화 인터페이스설명대표 구현체트랜잭션PlatformTransactionManager선언적/프로그래밍 방식 트랜잭션 관리DataSourceTransactionManager, JpaTransactionManager, ChainedTransactionManager 등메일 전송MailSender (JavaMailSender)이메일 전송 기능 추상화JavaMailSenderImplOXM (XML 매핑)Marshaller, Unmarshaller객체 ↔ XML 변환Jaxb2Marshaller, CastorMarshaller, XStreamMarshaller, XmlBeansMarshaller데이터 액세스DataSource, Jdb..
- Total
- Today
- Yesterday
- Infra
- index
- java
- CS
- JUnit
- kubernetes
- Container
- docker
- springboot
- MySQL
- 카프카
- 대규모 데이터 처리
- 스프링
- 쿠버네티스
- k8s
- php
- 라라벨
- 샤딩
- AOP
- mongoDB
- devops
- laravel
- kafka
- 분산처리
- phpUnit
- NoSQL
- 캐시
- 몽고디비
- Spring
- database
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |