본문 바로가기

verdantjuly/Today I Learned

TIL 20240117

728x90

이번 주 목표

resmemory : posts 작성 2번 되는 문제 해결

PubArt : go 문법 및 모듈화 연습

market : java study

오늘 목표

resmemory : posts 작성 2번 되는 문제 해결

PubArt : go 문법 및 모듈화 연습

market : java study

오늘 한 것

resmemory : posts 작성 2번 되는 문제 해결

PubArt : go 문법 및 모듈화 연습

오늘 스케줄

6:00 기상, 아침 식사, 샤워

6:30 커리어톤 - 최종체크

7:00 PubArt 팀 개발

12:00 점심식사

12:30 강남으로 이동

14:00 커리어톤 출석체크

14:15 결석자 call

14:30 채용 공고 업데이트 (Android/Kotlin 5개, Spring 2개, Node.js 1개, Python 1개, React 1개)

16:00 커리어톤 회의

16:30 귀가

17:30 커리어톤 1차 체크

18:00 산책

19:00 저녁 식사, 휴식

20:00 java 학습

24:00 취침

1. 채널

go는 멀티스레드 언어이기 때문에

비동기 함수를 진행할 때 모든 과정이 끝났는지 확인할 필요가 있다. 

확인하기 위해 채널을 쓴다.

 

Bad : 데드락이 걸리는 예시

Good : 채널을 통해 비동기 함수의 종료를 확인한 예시

 

2. 멀티스레드와 비동기의 차이

멀티 스레드 - 사람 2명

비동기 - 사람 1 : 요청 보내 놓고 응답이 올 동안 다른 할게 (다른 요청)

 

3. Mutex 와 defer

Mutex 트랜잭션의 개념, Unlock 될 때까지 Read 또는 Write를 잠금

defer 함수가 다 끝나면 실행 되는 코드

 

defer 와 return을 함께 쓸 때

1. defer 함수 실행

2. return 문 결과 반환

3. defer 함수 안의 코드 실행

package cache
		
import (
	"net/http"
	"sync"
		)
		
var (
	  cachedMutex sync.RWMutex
	  cached      map[string][]byte
)
		
type Resource struct {
	Key  string // 주로 압축 유형이 정의됩니다.
	Path string
}
		
func (r *Resource) WriteWith(w http.ResponseWriter) {
    cachedMutex.Lock()
    defer func() {
        cachedMutex.Unlock()
    }() // when called function disposed
    cached["hello"] = []byte("hello world")
}

// defer : 함수가 다 끝나면 실행하는 코드 

defer func (){

}

 

4. 브로틀리 압축

br

프론트엔드 정적 리소스 (HTML, CSS, JAVASCRIPT) 를 압축하여 캐싱, 사용.

훨씬 빠르다!

 

다른 압축 방법 : gzip, deflate

 

** 정적 데이터(DB 적재되는 데이터) 정적 리소스는 다르다

 

5. http.go 예시

package main

import (
    "net/http"
)

type HTTPHandler struct {
    http.Handler
}

type Host struct {
    handler func(http.ResponseWriter, *http.Request)
}

// 호스트가 여러개면
func (HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if r.Method == http.MethodGet {
        handleGetRequest(w, r)
    } else {
        handlePostRequest(w, r)
    }
}

func handleGetRequest(w http.ResponseWriter, r *http.Request) {

}

func handlePostRequest(w http.ResponseWriter, r *http.Request) {

}

func main() {
    http.ListenAndServe(":8080", HTTPHandler{})
}

 

6. 모듈화 예시

Dart
GO


정리 

go는 멀티스레드 언어이기 때문에

비동기 함수를 진행할 때 모든 과정이 끝났는지 확인할 필요가 있다. 

확인하기 위해 채널을 쓴다. (데드락이 걸리지 않게 주의)

 

 

KPT

Keep

해 보는 것

Problem

노는 것을 좋아하는 것

Try

나는 뽀로로가 아닌 사람이다.

소감

한 해를 잘 보내기 위해 공부를 열심히 하자. 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240122  (0) 2024.01.23
TIL 20240118  (0) 2024.01.18
TIL 20240116  (0) 2024.01.16
TIL 20240115  (0) 2024.01.15
TIL 20240113  (0) 2024.01.13