Programming 85

외부 결제 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

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 및 전처리기, 쿼..

CS study - 운영체제 - 2

프로세스와 스레드 프로세스(process) 는 컴퓨터에서 실행되고 있는 프로그램의 인스턴스를 말하며 CPU 스케줄링의 대상이 되는 작업(task), 데이터, 메모리등을 포함합니다. 각 프로세스는 운영체제로부터 독립적으로 실행되지만 운영체제로부터 자원을 할당받아 사용합니다. 스레드(thread) 는 프로세스 내 작업의 흐름, 실행되는 작은 실행 단위입니다. 하나의 프로세스는 여러개의 스레드를 가질 수 있으며, 각각 스레드는 프로세스 내에서 병렬적으로 실행됩니다. 스레드는 프로세스 내에서 같은 메모리 공간을 공유하므로 데이터와 자원을 공유합니다. 3-1 프로세스와 컴파일 과정 프로세스는 프로그램으로부터 인스턴스화된 것을 말합니다. 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번..

CS study - 운영체제 - 1

3장 운영체제 - 1 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스로 한정된 메모리나 시스템 자원을 효율적으로 분배하는 역할을 하며 유사한것으로 소프트웨어를 추가설치 할 수 없는 펌웨어(firmware)가 있습니다. 1-1 운영체제의 역할과 구조 CPU 스케줄링과 프로세스 관리 : CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리합니다. 메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼만큼 할당하는지 관리합니다. 디스크 파일 관리 : 디스크 파일을 어떤방법으로 보관할지 관리합니다. I/O 디바이스 관리 : 입출력 기기들의 데이터를 주고 받는 것을 관리합니다. 운영체제의 구조 GUI : 사용자가 전자장치와 상호 작용할 수 있도록하는 사용자 인터페이스의 형태,..

CS study - 자료구조 - 1

자료구조 효율적으로 데이터를 관리하고 수정, 삭제, 탐색, 저장할 수 있는 데이터 집합 1. 복잡도 1-1 시간 복잡도 시간 복잡도란 ‘문제를 해결하는 데 걸리는 시간과 입력의 함수 관계’를 가리킵니다. 어떠한 알고리즘의 로직이 ‘얼마나 오랜 시간’이 걸리는지를 나타내는 데 쓰입니다. public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String a = scanner.next(); System.out.println(a + "In"); } } 시간복잡도에는 평균과 최악의 시간복잡도를 고려하면서 씁니다. 자료 구조의 평균 시간 복잡도자료구조 접근 탐색 삽입 삭제 배열 O(1)..

Kotlin - 코틀린에 대해 (2)

목차 코틀린의 언어적인 장치를 스프링이 지원하는 법 스코프 함수(Scope functions) 환경 변수를 호출하는 코드가 있다고 예시를 들어 보겠습니다. @SpringBootConfiguration class config... @Bean fun dataSource(enviroment: Enviroment): DataSource { val builder = EmbeddedDatabaseBuilder() builder.setType(type) ... builder.setScriptEncoding(encoding) return builder.build() } 자바에서는 빌더패턴을 사용한 코드가 자주 사용되어집니다. 하지만 코틀린에서는 조금 더 간결한 문법으로 코드의 가독성을 높이는 몇가지 방법이 있습니다. ..

Programming/Kotlin 2023.03.04

Kotlin - 코틀린에 대해 (1)

개요 코틀린에 대해 공부하고자 찾아보다가 당근마켓에서 올라온 https://youtu.be/RBQOlv0aRl4 이라는 영상을 보고 해당 발표내용을 간단하게 정리해보았습니다. 발표내용을 그냥 보기보다 예제로 올려주신 코드를 간략히 추리며 포인트들만 정리해보고 공부해보았습니다. 코틀린의 철학 1. 간결성 데이터 보관을 목적으로 사용하는 클래스가 필요할 때는 data class 를 정의한다. 이 data class는 property에 대한 getter, setter, equals, hashCode, toString등 같은 메소드를 컴파일 시점에 자동으로 생성해준다. data class Person( val id:UUID, val name: String, val address: Address ) 표준 라이브러..

Programming/Kotlin 2023.03.02