전체 글
-
[Cloud Design Patterns] Asynchronous Request-Reply pattern 비동기 요청/응답 패턴 (feat. HTTP 폴링, 웹소켓)📖 개발 공부 2023. 8. 29. 01:54
최신 애플리케이션 개발에서 클라이언트 애플리케이션이 비즈니스 로직을 제공하기 위해 원격 API에 의존한다. 대부분의 경우 클라이언트 애플리케이션에 대한 API는 100ms 이하로 신속하게 응답하도록 설계되었다. 다음과 같은 요인들이 응답 대기 시간에 영향 줄 수 있다. 애플리케이션 호스팅 스택 보안 구성 요소 클라이언트와 백엔드 시스템의 위치 네트워크 인프라 현재 부하 요청 페이로드 크기 큐 처리 길이 백엔드에서 요청을 처리하는 시간 이미지를 검수하는 웹 애플리케이션의 시나리오를 상상해보자. 이미지 검수하는 과정은 과정은 몇 초에서 몇 분이 걸릴 수 있다. API는 보통 100ms 이하로 응답이 설계되었다고 했는데, 위의 그림에서는 최대 몇분까지 걸릴 수 있는 구조이다. 서버에서는 다음과 같이 이미지 검..
-
What's Wrong with Layers? (계층형 아키텍처의 문제점)📖 개발 공부 2023. 8. 23. 00:30
계층형 아키텍처 계층형 아키텍처는 견고한 아키텍처 패턴이다. 계층을 잘 이해한다면 web과 persistance 계층에 독립적으로 도메인 로직을 작성할 수 있다. 도메인 로직에 영향을 주지 않고 웹 계층이나 영속성 계층의 기술을 변경할 수 있다. 계층형 아키텍처의 문제점 하지만 현재에 이르러서는 계층형 아키텍처 때문에 문제가 생기는 곳이 많아졌다. 계층화된 아키텍처에는 나쁜 습관이 들어 시간이 지남에 따라 소프트웨어를 변경하기가 점점 더 어려워지는 열린 측면들이 있다. 어떤 이유들이 있는지 알아보자. 1. It promotes Database-Driven Design 기존 계층 구조의 기초는 데이터베이스이다. 웹 계층은 도메인 계층에 따라 달라지며, 도메인 계층은 지속성 계층과 데이터베이스에 종속된다. ..
-
[Go] Go로 초간단 웹서버 만들어보기📖 개발 공부/go 2023. 8. 19. 14:31
나는 Go 언어를 처음 접한다. 요번에 사이드 프로젝트할 때 새로운 언어를 도전해보고 싶어서 핫한 Go 언어로 해보려고 한다. Go 언어의 특성, 문법, 라이브러리를 차근차근 살펴보면서 사이드 프로젝트를 만들어볼 계획이다! 많관부~ Go의 첫번째 글로, 단 몇 줄로 Go 간단 웹서버를 만들어보는 실습을 해보자! 컴파일러는 패키지 이름이 main 인 것부터 찾아낸다. main 패키지 안에서 main() 함수가 go 프로그램의 시작이 된다. 간단 웹서버를 본격적으로 만들어보기 전에, “hello world!”를 출력하는 간단한 프로그램을 짜보자. // hello.go package main import ( "fmt" ) func main() { fmt.Println("hello world!") } 여기서 잠..
-
Redis vs Memcached📖 개발 공부 2023. 8. 18. 00:52
현재 다니고 있는 회사 프로젝트에서 redis와 memcached 모두 사용하고 있다. 둘의 차이점을 대략 알고 있었지만(멀티스레드, 싱글스레드 차이 / 다양한 데이터타입 제공 여부 정도?), 한번 명확히 짚고 가고 싶어서 AWS 공식 문서 그대로 정리를 해보았다. Redis vs. Memcached | AWS Redis and Memcached are popular, open-source, in-memory data stores. Although they are both easy to use and offer high performance, there are important differences to consider when choosing an engine. Memcached is designed ..
-
[Redis] 안정성과 가용성을 위한 클러스터📖 개발 공부/redis 2023. 8. 16. 22:12
목차 1. Redis Cluster 소개 2. 데이터 분산과 key 관리 3. 성능과 가용성 4. 클러스터의 제약사항 Redis Cluster 여러 노드에 자동적인 데이터 분산할 수 있다. 일부 노드의 실패나 통신 단절에도 계속 작동하는 가용성을 제공한다. 고성능을 보장하면서 선형 확장성을 제공한다. Redis Cluster 특징 full-mesh 구조로 통신한다. → 각 노드가 모든 노드와 연결이 되어있는 구조. cluster bus라는 추가 채널(port)을 사용한다. 보통 16379를 클러스터 버스로 사용한다. gossip protocol을 사용한다. 중복된 정보도 주고받을 것이다. (하나의 정보를 여럿 주고받을 것임) → gossip protocol로 통신이 개수를 줄인다. hash slot을 사..
-
Cache / Caching 전략 / Cache Expiration, Eviction📖 개발 공부 2023. 8. 14. 09:00
Cache Cache: 성능 향상을 위해 값을 복사해놓는 임시 기억 장치이다. Cache에 복사본을 저장해놓고 읽음으로써 속도가 느린 장치로의 접근 횟수를 줄인다. Cache의 데이터는 원본이 아니며 언제든 사라질 수 있다. Cache UseCase 웹브라우저 캐시 외부 서버에 대한 캐시 DB에 대한 캐시 이는 네트워크 지연을 감소 / 서버 리소스 사용(api call을 줄임) 감소 / 병목현상을 감소할 수 있다. DB가 스케일 아웃될 때 DB가 병목현상이 된다. 늘어나는 트래픽을 받아줄 수 없을 때 캐시로 인해 DB에 요청하는 트래픽을 줄일 수 있다. Cache 관련 개념들 Cache Hit: 캐시에 접근하여 데이터가 존재 Cache Miss: 캐시에 접근했으나 데이터가 존재하지 않음 Eviction ..
-
[HTTP] HTTP 메서드📖 개발 공부 2023. 8. 9. 00:35
인프런의 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 보면서 정리한 내용입니다. URI의 가장 중요한 설계 기준 → 리소스 식별 API URI 고민 리소스의 의미? 회원을 등록 하고 수정 하는 게 리소스가 아니다. 회원 이라는 개념 자체가 바로 리소스다. 즉, 회원에 대한 동작은 모두 배제하고, 회원이라는 리소스만 식별하면 된다. → 회원 리소스를 URI에 매핑 [참고] 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장(member→members) 리소스와 행위를 분리 가장 중요한 것은 리소스를 식별하는 것 리소스: 회원 행위: 조회, 등록, 삭제, 변경 → HTTP 메서드 HTTP 메서드 종류 (주요 메서드) GET: 리소스 조회 POST: 요청 데이터 처리, 주로 등록에 사용 PUT: ..
-
[Redis] Redis의 Data Type 공부 (Strings, Lists, Sets, Hashes, Sorted Sets, Bitmaps, HyperLogLog)📖 개발 공부/redis 2023. 8. 6. 16:47
목차 1. Strings 타입 2. Lists 타입 3. Sets 타입 4. Hashes 타입 5. Sorted Sets 타입 6. Bitmaps 타입 7. HyperLogLog 타입 Strings 타입 가장 기본적인 데이터 타입이다. 바이트 배열로 저장된다. (binary-safe: 모든 문자를 표현할 수 있다.) 바이너리로 변환할 수 있는 모든 데이터를 저장 가능하다. (ex) JPG과 같은 파일 등) 최대 크기: 512MB Redis 하나의 아이템의 최대 value 크기는(key도) 512MB이다. 즉, 이론적으로는 512MB 키에 512MB 데이터를 만들 수 있다. Strings 주요 명령어 명령어 기능 예제 SET 특정 키의 문자열 값을 저장한다. SET say hello GET 특정 키의 문자..