일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 자바 디자인패턴
- 백준 파이썬
- MongoDB Realm
- 고 배열
- hadoop
- 백준
- http 개념
- 파이썬
- go
- 자바
- String 함수
- 몽고디비 렘
- 12761 돌다리
- 백준 12761번
- golang struct
- flask
- 하둡
- 정렬
- 자바 디자인 패턴
- 트리 순회
- 백준 12761
- 12761번 돌다리
- 우분투
- 도메인 주도 개발 시작하기
- http 완벽가이드
- 도메인 주도 개발
- 백준 사이트
- ddd
- golang
- domain driven develop
- Today
- Total
목록전체 글 (211)
개발바닥
결제 시스템에서 발생할 수 있는 가장 심각한 문제 중 하나는 고객에게 이중으로 청구되는 것이다. 그래서 결제 시스템을 설계할 때 결제에 대해서 정확히 한 번만 실행하도록 하는 것이 중요하다. 한 번만 실행시키는 방법은 다음과 같습니다. 1. 적어도 한 번은 실행된다. (Retry) 2. 최대 한 번만 실행한다. (Idempotency) Retry 와 Idempotency 하는 방법을 아래 그림을 통해 이해해봅시다. 재시도 (Retry) 네트워크 오류나 시간 초과로 인해 결제 거래를 다시 시도해야 하는 경우가 있습니다. 위 그림처럼 결제 실패시 결제 성공할 때 까지 재시도를 함으로써 재시도는 적어도 한 번에 결제를 보장합니다. 하지만, 재시도를 무한으로 하게 될 경우 계속 실패하게 된다면 서버 리소스를 잡..
슬라이스란? Golang 에서 사용하는 동적 배열이다. 동적 배열과 정적 배열의 차이점은 동적 배열은 런타임 실행 중 사이즈가 변경이 가능하고, 정적 배열은 컴파일시 코드를 기계어로 변경하면서 사이즈가 고정이 된다. 슬라이스는 Go에서 제공하는 배열을 가리키는 포인터 타입이다. 슬라이스는 append() 내장 함수를 사용하여 동적으로 요소들을 추가할 수 있다. 슬라이스 구조 type SliceHeader struct{ Data uintptr // 실제 배열을 가리키는 포인터 Len int // 요소 개수 (배열에서 사용하고 있는 개수) Cap int // 실제 배열의 길이 } 내장 함수 append() 사용 방법 및 동작 원리 슬라이스에 요소를 추가한 새로운 슬라이스를 반환 기존 슬라이스가 바뀔 수도 있..
실무에서 결제 서비스를 구현하면서 과연 현재 시스템에서 보안적으로 문제가 없는지 고민을 많이 하게 됐다. 그래서 일반적으로 결제 보안을 위해 사용하는 방법에 대해서 소개하고자 합니다. 보안 문제 해결 방법 요청 / 응답 도청 HTTPS 사용 데이터 조작 데이터 암호화 및 무결성 모니터링 사용 악의적인 공격 (MITM Attack) SSL 및 인증서 사용 데이터 손실 여러 지역에 걸친 데이터베이스 복제 및 데이터 스냅샷 생성 분산 서비스 거부 공격 (DDoS) 네트워크에서 발생하는 트래픽 양을 제한하거나 방화벽을 통해 허용되지 않는 트래픽을 차단 카드 도난 실제 카드 정보를 대체하는 임시 카드 정보인 토큰을 생성해서 사용 PCI 규정 미준수 PCI 규정 준수를 통해 카드 정보를 안전하게 보호 사기 주소 검..
구조체란? 구조체는 여러 필드를 묶어서 사용하는 타입이다. 고 언어에서는 class를 지원하지 않기 때문에 고 언어에서 만큼은 객체로 쓰인다. 프로그래밍에서 추구해야 될 방향으로 "결합도(의존성)은 낮게 응집도는 높게" 하기 위해 함수, 배열, 구조체 등을 사용한다. 여기서 구조체는 관련된 데이터들을 묶어서 응집도를 높이고 재사용성을 증가시키는 역할을 한다. 구조체 선언 type 타입명 struct{ 필드명 타입 ... 필드명 타입 } ex) type User struct{ Name string Age int } 구조체 크기 구조체는 타입이므로 변수 형태와 사이즈를 가지고 있다. 구조체 사이즈는 모든 필드에 사이즈를 더한 값이다. 여기서 주의할 사항으로 고언어 컴파일러는 메모리를 정렬해서 저장하기 때문에..
배열이란? 같은 타입의 데이터들로 이루어진 타입이다. 변수 타입은 데이터의 형태도 의미하지만 할당되는 메모리 공간 크기도 의미한다. 연속된 메모리 공간을 가지고 있다. 배열은 자료구조 중 한 종류이다. 자료구조란? 데이터들을 어떤 형태로 저장할지를 나타내는 구조를 말한다. ex) list, map, queue, stack ... 배열 변수 선언 방법 # 길이가 5인 int 타입 배열 선언 초기값은 default 값인 0으로 채워져 있다. var nums [5]int # 길이가 3인 string 타입 배열 선언 초기값은 순서에 맞게 초기화 된다. strings := [3]string{"hello","world","golang"} # 길이가 5인 float64 타입 배열 선언 초기값은 12.4, 54.1, ..
변수란? 값을 저장하는 메모리 공간을 가리키는 이름이다. 변수마다 메모리 공간을 가지고 있다. (같은 메모리 공간을 가지고 있을 수도 있고 서로 다른 메모리 공간을 가지고 있을 수 있다.) 프로그램 실행 도중에 CPU는 연산에 필요한 데이터를 "메모리"에서 가져온다. 변수는 프로그램 실행 도중에 연산에 필요한 값(데이터)를 저장하기 위해 메모리 공간을 이용한다. 변수가 왜 중요한가? 프로그램이란 결국 데이터를 연산/조작 하는 일이다. 데이터는 메모리에 있다. 음악 듣기, 유튜브 영상 보기, 게임 실행하기 등 컴퓨터 입장에서는 데이터를 조작하는 일이다. 변수는 4가지 속성 이름, 값, 주소, 타입을 가지고 있다. ex) var a int = 10 이름 : a 값 : 10 주소 : 메모리 상에 위치하는 주소..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/164668 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 유저 중 총 판매 완료한 비용이 70만원 이상이 유저를 찾기 위해 group by 와 sum() 을 사용하여 조건에 부합한 유저를 찾는다. 그리고 총 판매 비용에 대해서 오름차순 정렬해서 유저 아이디, 닉네임, 총 판매 비용을 출력하면 된다. 정답 소스 코드 SELECT U.USER_ID, U.NICKNAME, SUM(B.PRICE) TOTAL_SALES FROM USED_GOO..
https://www.acmicpc.net/problem/9081 9081번: 단어 맞추기 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알 www.acmicpc.net 문제 풀이 주어진 문자에 다음 문자를 찾는 문제이다. 다음 문자를 찾기 위해서 알파벳 간에 비교를 통해 변경할 위치를 찾는다. 변경할 위치가 i,j 라면 i는 arr[i-1] inputString[i - 1]: if j < idx: j = idx if i != 0 and j != 0: inputString[i-1], inputString[j] = inputString[j], inputS..