괴발개발 성장기
반응형

Study 140

[개념정리] API

# API란? Application programming Interface 기능을 제어할 수 있는 인터페이스 # 예시 예를 들어서 사람이 리모컨으로 에어컨 온도를 조정할 수 있다. 이때 리모콘이 API 역할을 한다. 사람은 에어컨이 내부적으로 어떻게 작동되는지는 모른다. 사람은 리모콘으로 온도를 올라가는 기능, 온도를 내리는 기능 등을 제어 할 수 있다. 코드로 예시를 들으면 fmt.Println("나는 출력이 어떻게 되는 지 몰라") 일종의 API이다. 우리는 출력이 어떻게 되는지 모른다. fmt 라이브러리에 Println이라는 함수를 쓰면 출력이라는 기능을 사용할 수 있다. # 참조 코멘토 강의 내용 정리 나는 코멘토 강의 복습중! 다음은.... REST API에 대해서

Study/개념공부 2022.11.18

[Golang] context.WithTimeout과 context.WithDeadline

context.WithTimeout과 context.WithDeadline는 내부는 똑같다. 하지만 의미적으로 차이가 있다. 둘 다 특정 시간이 되면 취소된다. context.WithTimeout과 context.WithDeadline는 취소 함수 (WithCancel)의 리턴값이 같다. # 내부 func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) { return c, func() { c.cancel(true, Canceled) } } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time..

Study/Go 언어 2022.11.03

[MySQL] 컬럼 추가 및 컬럼 순서 지정하기

# 배경 type이라는 컬럼을 추가 하고 싶었다. 그리고 맨 뒤가 아니라 A 컬럼 옆에 넣고 싶었다. # 문법 원하는 컬럼명 옆에 놓고 싶을 때 ALTER TABLE [테이블명] ADD [추가할 컬럼명] [자료형] AFTER [앞컬럼명]; 컬럼 맨 앞에 추가 하고 싶을 때 ALTER TABLE [테이블명] ADD [추가할 컬럼명] [자료형] FIRST; # 예시 ALTER TABLE goods ADD type varchar(10) AFTER A;

Study/Mysql 2022.11.01

[golang] context.WithCancel() 사용법

# WithCanel() WithCancel(parent Context) (ctx Context, cancel CancelFunc) # context.WithCancel() 혼자 사용할 수 없다. `WithCancel()`는 parent context를 넣어줘야한다. 그래서 `Background()`가 필요하다. 새로운 context와 CancelFunc가 나온다. 호출하면 바로 context가 종료 된다. ctx := context.Background() ctx, cancel := context.WithCancel(ctx) fmt.Println(ctx.Err()) //nil cancel() // 호출하면 컨텍스트가 종료가 된다. fmt.Println(ctx.Err()) //context canceled..

Study/Go 언어 2022.10.13

[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
반응형