괴발개발 성장기
반응형

전체 글 220

[golang] context 역할 및 종류

# 배경 API를 만들다 보면 처음부터 끝까지 ctx echo.Context를 사용한다. 그래서 context가 궁금했다. 그리고 PT 실무에서도 설명을 해주셨다. # Context 애플리케이션 전체 => 코드 전체 request에서 response의 맥락을 가지고 있다. # Context의 역할 정보를 담는다 => service에서 사용 , 로그에 남길 애플리케이션 전반에 공통적인 정보(Ex) 서버 정보, Request ID 종료 사인을 보낸다 => context가 취소될 경우 디비 세션이 만료되어 디비처리가 중단된다. # 종류 1) context.Background() , context.TODO() 특별한 기능이 없이 초기화 용로로 사용 내부적으로 둘은 똑같다 두가지만 혼자 context 생성 가능 ..

Study/Go 언어 2022.10.12

[golang] 고루틴 주의 사항

# 주의 사항 1) wg.Add(1) 위치가 중요하다 고루틴을 실행하기 전에 wg.Add(1) 를 실행야한다. waitGroup의 초기화를 로직 처리 전에 해줘야 타이밍 이슈를 피할 수 있다. 동시성 이슈가 있어서 add는 고루틴 실행 전에 한꺼번에 초기화를 해주는 것이 좋다. # 문제 발생 고루틴 안에서 add하고 done한다. func BadExWaitGroup() { fmt.Println("나쁜 예시 시작") size := 10 var wg sync.WaitGroup for i := 0; i < size; i++ { go func() { wg.Add(1) fmt.Printf("진행 중 %d \n", i) wg.Done() }() } wg.Wait() fmt.Println("나쁜 예시 끝") } 결과..

Study/Go 언어 2022.10.11

[golang] 고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법

# 배경 고루틴이 끝나지도 않았는데 main 함수가 종료가 된다. # 해결방법 main은 고루틴이 끝났는지 알 수 없다. 그래서 WaitGroup 사용해야한다. # 예시 func Add() { sum := 1 + 2 fmt.Printf("합계 : %d \n", sum) } func GoroutineSolution() { fmt.Println("Goroutine 시작") var wg sync.WaitGroup wg.Add(1) go func() { Add() wg.Done() }() wg.Wait() fmt.Println("Goroutine 끝") } wg.Add(1) 해서 wg가 1이라고 생각하자. 고루틴이 다 끝나면 wg.Done()를 한다. 이건 -1이라고 생각하면 된다. wg.Wait() 는 0이 ..

Study/Go 언어 2022.10.10

[golang] 고루틴(goroutine) 기본 문법

# 고루틴이란? 경량화된 쓰레드(Thread) 일반적으로 OS 스레드 1개와 언어 쓰레드 1개를 사용한다. (1:1) 하지만 고언어는 OS 스레드 하나에 여러개의 고루틴을 사용한다. 즉 여러개의 스레드를 사용한다는 뜻이다. # 특징 메모리를 조금 사용한다. 그래서 성능이 더 좋다. 스레드를 바꾸는 것보다 컨텍스트(context) 스위칭이 더 빠르다. 고언어는 내부에 있는 Go 스케줄러 관리 해준다. 그래서 고루틴이 메모리를 적게 사용하다가 메모리가 더 필요하면 Go 스케줄러가 메모리를 더 할당해 준다. main도 고루틴이다. 고루틴은 메인과 함께 시작하고 끝난다. 메인 루틴이 종료되면 프로그램도 종료된다 Ex) 메인루틴, A고루틴, B고루틴 3개가 돌고 있는데 메인루틴이 종료되면 다른 고루틴들도 바로 종..

Study/Go 언어 2022.10.09

[golang] 채널(channel) blocking 해결 방법

2022.10.06 - [Study/Go 언어] - [golang] 채널(channel)에서 주의할 점 [golang] 채널(channel)에서 주의할 점 2022.10.05 - [Study/Go 언어] - [golang] 채널(channel) 기본 문법 [golang] 채널(channel) 기본 문법 # 채널이란? 값을 전달하는 통로이다. 고루틴에서 고루틴으로 서로 값을 주고 받을 때 많이 사용한다. # 채.. pink1016.tistory.com # 해결 방법 close를 해주면 된다. 값이 빠져나간 곳에 데이터 타입의 기본값이 들어간다. 예를 들어서 int는 0, string은 ""이 들어간다. ch := make(chan int, 3) ch

Study/Go 언어 2022.10.07

[golang] 채널(channel)에서 주의할 점

2022.10.05 - [Study/Go 언어] - [golang] 채널(channel) 기본 문법 [golang] 채널(channel) 기본 문법 # 채널이란? 값을 전달하는 통로이다. 고루틴에서 고루틴으로 서로 값을 주고 받을 때 많이 사용한다. # 채널 생성 방법 ch := make(chan 데이터타입, 사이즈) 예시 ch := make(chan int, 3) int 타입의 채널 pink1016.tistory.com # 주의할 점 1) 채널이 꽉 찼을 경우 예를 들어보자 ch := make(chan int, 3) ch

Study/Go 언어 2022.10.06

[Git] connect to host github.com port 22: Operation timed out 해결 방안

# 배경 git pull 를 하려고 하는 에러 메시지가 떴다. 그래서 github 가서 ssh 키를 다시 등록을 했는데도 해결이 되지 않았다. # 원인 카페나 제3의 장소에서 사용할 때 보안때문에 발생하는 문제 같다. # 에러 메시지 ssh: connect to host github.com port 22: Operation timed out fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. # 해결 방안 1) 터미널에서 명령어를 친다 vim ~/.ssh/config 2) i를 누른다 3) 아래 내용을 친다 Host github.com..

Study/GIT 2022.10.03
반응형