일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GoF
- logging
- esbuild
- AI
- golang
- Infra
- blank import
- 디자인패턴
- go
- GIT
- context7
- 오블완
- 통합 로깅 시스템
- goland
- database/sql
- AWS
- elasticsearch
- MSA
- go-sql-driver
- 티스토리챌린지
- 캡슐화
- sqs fifo queue
- 구조체
- 관측 가능성
- RDS
- Intellij
- typescript
- Kubernetes
- javascript
- replication lag
- Today
- Total
목록Information Technology (327)
Fall in IT.

안녕하세요. 오늘은 AWS의 S3, CloudFront, Lambda, Lambda@Edge 기술을 활용하여 이미지 리사이징(작게..)하는 방법에 대해서 알아보도록 하겠습니다. (아래 내용에서는 이미지 리사이징을 위한 코드에 대한 설명은 하지 않고 AWS 서비스를 활용하는 방법을 중심으로 설명합니다.) 목적 다양한 사이즈의 이미지를 클라이언트가 사용할 수 있도록 한다. (썸네일 이미지에 큰 사이지의 이미지를 사용할 필요는 없다. 상황에 따라 그에 맞는 이미지를 사용할 수 있도록 한다.) 요구사항 하나의 이미지를 사용하여 다양한 사이즈의 이미지를 만들어낸다. querystring을 사용하여 이미지 사이즈를 다양하게 요청이 가능하다. s 사이즈 설정 s=100x100 (width, height) q 비율 설..
안녕하세요. 오늘은 GraphQL 보안과 성능 개선 방법에 대해서 알아보겠습니다. GraphQL 보안과 성능 개선 방법 타임아웃 설정 데이터 개수 제한 쿼리 깊이 제한 쿼리 복잡도 제한 Filed Collection GraphQL로 서버를 만들경우 클라이언트쪽 구현에 더 많은 자유도와 유연성을 부여할 수 있습니다. 여러개의 데이터를 조회할때도 한번의 쿼리로 조회(UnderFetching 해결)가 가능하고, 원하는 필드만 조회할 수 있습니다. (OverFetching 해결) 그러나, 자유도가 높은 만큼 한번의 쿼리에 너무 많은 데이터를 요청하여 문제가 발생할 수 있습니다. 한번에 너무 많은 데이터를 요청할 경우 서버 성능이 떨어질 뿐만 아니라 서비스가 다운 될 수 있습니다. 이런 경우를 대비해서 Graph..

안녕하세요. 오늘은 네트워크 기본 지식 몇 가지(?)에 대해서 알아보겠습니다. 알아볼 내용 IP Address IPv4 / IPv6 Router Public / Private IP Address NAT Port forwarding Dynamic / Static IP Address IP Address 란? 다른 사람에게 전화를 하기 위해서는 전화번호가 필요한 것 처럼 컴퓨터 간의 통신을 하기 위해서는 주소가 필요한데 이를 IP 주소라고 한다. IPv4와 IPv6 란? 컴퓨터 간의 통신을 하기위해 필요한 IP주소는 두 가지 버전이 있는데 IPv4와 IPv6가 있다. IPv4는 32비트의 형태로 구성된 IP 주소이다. 약 42억개의 주소를 가질 수 있는데 인터넷에 연결되는 기기의 수가 기하급수적으로 늘어나면서..
안녕하세요. 오늘은 입력받은 문자열에 중복된 문자가 존재하는지 확인하는 알고리즘을 작성해보겠습니다. (아래 알고리즘은 Golang 언어를 사용하므로 언어에 따라 다를 수 있습니다) 사전지식 문자열 집한인 문자열을 순회할 수 있는가? 한글과 영문 모두 문자열 순회할 수 있는가? (index 순회를 할 경우 구분 필요, range로 순회할 경우 rune타입으로 변환하여 순회하기 때문에 상관없다) rune 타입에 대하여 알고 있는가? (rune은 유니코드를 표현하는 타입으로 int32 타입의 별칭과 같다) 유니코드 인코딩에서 한글은 3byte를 사용하고 영어는 1byte를 사용한다. 유니코드와 아스키코드의 개념 문제 문자열이 주어졌을때 이 문자열에 같은 문자가 중복되어 존재하는지 확인하라 자료구조를 사용하지 ..

안녕하세요. 오늘은 데이터베이스 테이블간의 식별관계와 비식별관계에 대해서 간단하게 알아보겠습니다. 테이블간의 관계 설정 예를들어, 데이터베이스에서 유저테이블과 주문테이블간의 관계는 1대N 관계이다. 왜냐하면 한명의 유저는 여러번 주문을 할 수 있기 때문이다. 이때 두 테이블 간의 관계를 정의해야하는데 비식별관계로 정의할수도 있고, 식별관계로 정의할수도 있다. 식별관계 부모 테이블(=참조되는 테이블)의 기본키를 자식 테이블(=참조하는 테이블)의 기본키로 이용하는 방법을 말한다. 위의 예에서는 유저테이블이 부모테이블이 되고 자식 테이블이 주문테이블이 된다. 비식별관계 부모 테이블(=참조되는 테이블)의 기본키를 자식 테이블(=참조하는 테이블)의 외래키로 이용하는 방법을 말한다. 식별관계와 비식별관계의 차이점 ..
안녕하세요. 오늘은 Golang에서 Singleton Pattern을 구현하는 방법에 대해서 간단하게 알아보겠습니다. Singleton Pattern이란? 이 패턴은 인스턴스가 하나만 존재해야 하는 경우 사용된다. (예를들어서, DB 인스턴스나 Logger와 같은 인스턴스가 이에 해당할 수 있다.) 구현 방법 1. Mutex를 사용하는 방법 var lock = &sync.Mutex{} type single struct { } var singleInstance *single func GetInstance() *single { if singleInstance == nil { lock.Lock() defer lock.Unlock() if singleInstance == nil { fmt.Println("[Mu..
안녕하세요. 오늘은 Go 1.18 버전에서 추가 된 generic을 사용해보도록 하겠습니다. Generic에 대한 개념은 여기서 확인해주시기 바랍니다. Generic 사용 전 (source code) interface를 사용하여 스택을 구현한 경우 package main import "fmt" type stack struct { data []interface{} } type Stack interface { Push(data interface{}) Pop() interface{} Get() []interface{} } func New() Stack { return &stack{ data: []interface{}{}, } } func (s *stack) Push(data interface{}) { fmt...
안녕하세요. 오늘은 Go에서 Slice에서 중복을 제거하는 방법에 대해서 알아보겠습니다. Go에서는 Map을 사용해서 Slice의 아이템 중복을 제거할 수 있습니다. Slice의 아이템을 순회하면서 map에 존재하지 않다면 삽입, 존재한다면 pass 하는 방식을 이용합니다. (이때, map의 값으로 빈구조체(struct{})를 넣는 이유는 빈구조체의 경우 메모리를 차지하지 않기 때문입니다.) 샘플 코드 func deleteDuplicateItem(arr []string) []string { ret := []string{} m := make(map[string]struct{}) for _, val := range arr { if _, ok := m[val]; !ok { m[val] = struct{}{} ..

안녕하세요, 오늘은 HTML 태그 중 A tag의 download 속성을 사용해 파일을 다운로드할때 발생하는 문제에 대해서 알아보겠습니다. 상황 AWS에 업로드된 파일의 URL을 a tag의 download 속성을 이용하여 다운로드 하고자 한다. 그런데, AWS의 올라간 파일명과 다르게 다운로드 되도록하고자 한다. a tag의 download 속성을 사용하여 filename을 명시해주었다. 다운로드 문제 a tag의 download 속성에 설정한 filename이 적용되지 않았다. 원인 확인해보니 a tag의 download 속성은 두 가지 조건이 충족되어야했다. Same Origin URL (동일 출처) blob, data schemes 에서만 작동 해결방안 http header에 Content-D..

Service Object 란? 파드에 접근할 수 있는 정책을 정의하는 개념. 서비스는 기본적으로 자신의 클러스터 IP를 가지고 있고 이 서비스를 파드에 연결하면 서비스의 아이피로 파드에 접근이 가능하다. 파드에도 자신의 클러스터 IP를 가지고 있다. 그렇다면 왜 서비스를 통해서 파드에 접근해야할까? 그 이유는, 파드라는 존재는 언제든지 죽을 수 있고 재생성될 수 있다. 파드의 아이피는 가변적이라 재생성되면 변한다. 그렇기 때문에 파드의 아이피는 신뢰성이 떨어지고 서비스 오브젝트는 지우지 않는 한 삭제되지 않는다. 따라서, 특정 파드에 일관된 아이피를 통한 접근을 가능하게 하기 때문에 서비스를 사용한다. Service의 특징 고정된 IP 사용 가능 파드를 다양한 방식으로 외부에 노출 가능 트래픽 분산 가..