전체 글 95

외부 결제 API에서 문제가 생겼을 때 에러 핸들링은 어떻게 할까?

문제 정의외부 결제 대행 서비스(PG)를 하는 업체에 API를 사용해 결제를 진행하는 로직이 있다고 가정하겠습니다. 해당 PG사에 요청을 보냈는데 커넥션, timeout 혹은 이 외의 예외가 발생해 이에 대한 에러 핸들링이 필요한 상황이라고 가정할 때 어떻게 해야 우아하게 외부 API에 대한 처리를 할 수 있을까요? 가설 1 : 외부 API 에 커넥션 문제가 발생했을 때API 서버의 상황을 알 수 없지만, 연결 자체에 문제가 생겼을 경우, 결제 처리 자체가 시도하지 못했으므로, 중복결제가 발생할 확률은 없다고 가정할 수 있습니다. 이런 경우 재시도 로직을 생각해봐야합니다. 먼저 재시도 로직 처리를 위해 각각 거래에 대한 유니크 ID값과 함께 거래 상태를 데이터베이스등에 저장합니다. 그리고 배치와 스케줄러..

Programming 2024.08.12

DNS 와 DNS Cache 에 대해 알아보자

개요 최근 회사에서 내부망과 외부망으로 분리하는 작업을 진행하면서 DNS Cache 때문에 내부망에서 HTTP 요청이 정상적으로 동작하지 않던 이슈가 있었다. 이를 해결하기 위해 서버 전용LAN선을 재연결하거나, 컴퓨터를 재시동하거나, 네트워크를 지웠다 다시 설치하는 등 여러 시도를 했지만 결국 해결한 방법은 DNS Cache를 초기화함으로써 해결할 수 있었고, 오늘 경험했던 DNS Cache가 뭔지 제대로 알기 위해 정리하기로 했다. DNS ? 먼저 DNS(Domain Name System) 으로 명칭에서도 직관적으로 알 수 있듯 사람이 읽을 수 있는 도메인 이름을 IP주소로 변환하는 시스템을 의미하며 보통 www.example.com 이라는 도메인 이름을 ex) 192.168.1.1 처럼 바꿔주는 기..

Programming 2023.10.12

Redis Study - 레디스의 정보 처리

Redis의 특징 Key & Value 데이터베이스로 분류되는 NoSQL이며, 2009년 개발되어 2015년에 상용SW로 개발 키밸류 DB이면서 대표적인 In-Memory 데이터 처리 및 저장기술을 제공하기 때문에 상대적으로 빠른 Read/Write 가능 String, Set, Sorted Set, Hash, List, HyperLogLogs 등 유형의 데이터 저장 가능 Dump 파일과 AOF(Append Of File) 방식으로 메모리 상의 데이터를 디스크에 저장할 수 있습니다. Master & Slave Replication 기능을 통해 데이터의 분산, 복제 기능을 제공하며 Query Off Loading 기능을 통해 Master는 Read/Write 를 수행하고 Slave는 Read 만 수행할 수 ..

Study/Redis 2023.08.19

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 1. 사용자 수에 따른 규모 확장성

단일 서버 사용자는 도메인으로 웹사이트에 접속한다. 이 때 DNS에 질의 한다. DNS 조회 결과로 IP 주소가 반환된다. 해당 IP주소로 HTTP 요청이 전달된다. 요청을 받은 웹 서버에서 HTML, JSON형태의 응답등을 반환한다. 데이터베이스 사용자가 늘면 서버를 여러개 두어야 한다. 하나는 요청 트래픽 처리용, 하나는 데이터베이스용이다. 각각을 분리하면 독립적으로 확장해 나갈 수 있다. 데이터베이스는 용도에 따라 선택해야 한다. 다음과 같은 경우 NoSQL 을 고려하자 아주 낮은 응답 지연시간(latency) 요구 데이터가 비정형(unstructured) 인 경우 데이터(JSON, YAML, XML등)를 직렬화(serialize) 하거나 역직렬화(deserialize) 할 수 있기만 하면 됨 아주..

주니어 개발자를 위한 TPO for TDD 세미나 후기

개요 TPO for TDD 세미나를 듣고와서 내용을 정리하고, 느낀점을 포스팅해봤습니다. 여기서 TPO란 Time(시간), Place(장소), Occasion(상황)에 따른 TDD 적용 이라는 의미 같습니다. 전체적인 맥락에서 강사님이 말씀하시는 TDD 가 유연하게 필요에 따라 적용되어야 한다는 점과 특히 강조하시는 테스트의 중요성에 대해서 인상깊게 들었습니다. 개발 방법론의 진화 테스트 주도 개발(이하 TDD)이라는 방법론이 나오기 이전에 개발 방법론은 필요에 따라 진화해 왔다고 한다. 대략적인 진화도를 보자면, 구조적 → 정보공학 → 객체지향 → CBD → Agile 방법론과 더불어 프로그램을 다룰 수 있는 운영체제와 환경도 진화해 왔다. 단일 OS → 하이퍼바이저(가상 OS) → 컨테이너 → 오케스..

Living 2023.08.18

Redis Study - 레디스란

Redis 스터디 NoSQL & Redis | 주종면 - 교보문고 NoSQL & Redis | ㆍ 도서 특징 ⑴ Redis의 주요 구조와 기술들을 도형 그림을 통해 체계적인 설명과 원리 위주로 학습합니다. ⑵ 각 장에서 소개하는 기술들에 대해 실습이 가능하도록 구성되어 있습 product.kyobobook.co.kr 해당 책을 바탕으로 매주 1챕터씩 진행하는 스터디를 하기로 했습니다. Redis를 위 책과 함께 공식 문서를 바탕으로 공부하면서 정리한 내용을 포스팅 하겠습니다. NoSQL Key - Value : 간단한 키와 연결된 값을 저장하는 방식으로 빠른 읽기와 쓰기, 높은 확장성Amazon DynamoDB : AWS에서 제공하는 키 - 밸류 저장소, 자동 확장 기능을 제공하여 대규모 처리가능, 빠른..

Study/Redis 2023.07.29

Real MySQL - 엔진 2

메모리 할당 및 사용 구조 MySQL 메모리 사용 및 할당 구조 MySQL 에서 메모리는 크게 두가지로 구분된다. 글로벌 메모리 영역과 로컬 메모리 영역으로 구분되며 글로벌 메모리 영역의 모든 메모리는 MySQL서버가 시작되면서 운영체제로부터 할당된다. 글로벌 메모리 영역 일반적으로 하나의 메모리 공간만 할당되며 필요에 따라 2개 이상의 메모리 공간이 할당받을 수 있지만 클라이언트의 수와 무관하며 생성된 글로벌 영역은 모든 스레드에 의해 공유된다. 글로벌 메모리 영역에 종류는 테이블 캐시 InnoDB 버퍼 풀 InnoDB 어댑티브 해시 인덱스 InnoDB 리두 로그 버퍼 로컬 메모리 영역 세션 메모리 영역이라고도 표현하며 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모리 영역이다. 클라이언트 커넥션..

인프런 - 인프콘 다시 노려보기

안녕하세요 이번 인프콘2023은 꼭 가고싶어서 진짜 진짜 가고싶다고 빌었는데,, 결국 추첨에 떨어졌습니다.. 작년에 이어 두 번째 탈락.. 면접,서류 탈락보다 더 상실감이 크네요.. 근데 인프랩에서 이번에 SNS에 올리면 추첨을 통해 다시 한번 기회를 줄 지도?! 몰라서 이렇게 글을 써 봅니다. 이벤트 내용은 이러합니다. 인프콘행사 시간표 를 보고 내가 원하는 세션을 담아 나만의 시간표를 만들면 됩니다. 그리고 이 시간표를 공유하면 25명을 다시 추첨한다고 해요... 잔인한 인프랩... 이번에라도 됐으면 좋겠습니다!

Programming 2023.07.19

Real MySQL - 엔진 1

개요 최근 Database에 대해 잘 모른다는 생각이 들어 Real MySQL 책으로 MySQL에 대해 공부하기로 했습니다. 현업에서 많이 쓰이며, 제가 다니는 회사에서도 많이 쓰는 RDBMS 이지만, 사실 아무것도 모르고 썼던걸 책을 보면서 많이 느꼈습니다. 이번에 정리한 내용을 포스팅하면서 공부해보는 걸로.. MySQL Engine 먼저 MySQL 의 엔진에 대해 알아보겠습니다. 엔진에는 MySQL 엔진, 스토리지 엔진이 있으며 두가지를 합쳐 MySQL, MySQL 서버라고 표현합니다. MySQL 엔진 사람의 머리 역할을 담당하며, 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 처리를 담당하며, 클라이언트의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL Parser 및 전처리기, 쿼..