Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

Golang(Go) Context 는 어떤 정보를 가지고 있을까?

GOLANG, 20215 min read

ehco프레임워크 를 사용하면서 사용했던 내용 기록

ctx ? ctx echo.Context

Context represents the context of the current HTTP request. It holds request and response objects, path, path parameters, data and registered handler.

ctx가 필요한 이유

인터페이스? 팩토리를 통해서 의존성주입 폴더만들때 복수?사상의차이 팩토리난에 스트럭트 이름은 new로시작 쉬프투 f6 싱글톤 리시버 목객체?mock 덕타이핑 의존성을 느슨하게 mock을 자동으로 준다

단위테스트 s-r2

db를 dev에 만들고

echo 가 하는일이 request,response 를 할때 중간에 middleware가 잡아주는 역할을 한다.

e.Use의 argument로 넣은 함수가 moddleware

e.HTTPErrorHandler 에러가 발생하면 발동한다.

e.Pre 는 url 에 /가 있다면 빼주는 역할

middleware.CORS 받을 메소드를 지정한다

e.Validator validator 지정 => registernumber 등등 코드에는 RegisterValidation 함수를 넣어 커스톰 해줬다

main() config ,xormDb(db설정 셋팅) 는 1번만 설정된다

e.Use(handel.Create~) NewSession => 트랜젝션 시작 (세션을 열어준다)

echo의 context 는 결국 변수다

request 에는 많은 정보가 잇고 이것을 echo가 담아놓은것

echo 자체에 토큰을 파싱해주는 parsendToken.Claims.~

토큭 파싱한 정보를 우리 코드에 설정

CreateTokenWithExpire 처음 접근할때 memberId있는거 확인하고 토큰을 생성해 프론트로 보낸다 서버쪽 코드에서 cookie가 있는지도 확인하는 코드도 있다

routing

e.Start webserver start

Logger

middleware.ReauestId call마다 유니크한 id 를 생성한다.

JWTWithConfig => jwt 토큰 확인 setSession => echo가 token을 분석해 꺼내서 user consetx로 setXormSession으로 이름 변경

get할때는 session.Begin 을 안한다 sessioin 하면 비용 많이듬

db session 과 log session 같이 만듬

de seesion은 중간 오류시 rollback,commit log session은 끝까지 간다

context.DB(c) => 이런식으로

exp 등 고정된 key값을 echo가 자동으로 알고 분석

echo Context 안에는 User Request Response 가 있는데 자동으로 echo가 넣음

setSession에서 c.Get("user").(*jwt.Token) 으로 형변환

rawClaims 는 map으로 되어있어서 struct 로 바꿔주는 작업이 MapToStruct 를 만들어 쓰기로힘

request_id => echo기능으로 자동으로 얻음

function에서 function에서 값을 넘기려면 파라미터에 추가해서 넣어야 하는데 echo가 context에 넣어 줌으로 모든 function으로 이동이 자유롭도록 getUserClaim

serLogger c.Set context에 저장한다는 뜻

기존에 log.infln 으로 했는데

requst _id를 logger에 같이 넣고 싶어서

l := logrus.WithFields )

사용할때는 context.Log(c).Token("")

e.HideBanner

실행시 echo 메세지 지움

.bodyDump 를 하면 request ,response 정보모두 한눈에 log가 찍힘 => 이건 더 테스트

이제는 controller 대신 handler 로 이름 바꿔서 쓰다

assets => html 이나 이미지

common은 공통 func 넣을 예정

비즈니스로직은 handler

context.Log log 가져옴 context.DB 등 쉽게 가져오게 하려고 만듬

폴더 이름 org goods application reports

enum?

  1. CRUD 에 썼던 DTO => OrgCUD 에 공통함수

  2. Query =>orgQuery => get

dto를 만들지 않고 query에서는 *로 찾지 않고 필요한거 컬럼에 넣어서 해야 한다

interface적용

handerInterface RouteDefault

Org.Init() 는 crud\

internal에 entity 들어가 있음

dto service rpository 합친게 service 폴더

private public handle까지 오픈하고 싶은데.. 그럼 딴데서 사용 x internal 안에 있는 pulbic 대문자로 쓰더라도 moddleware에서는 부를 수 없다 handle 에서는 부를 수 잇다 폴더 구조의 상위에서만 부를 수 있다

service 는 형제는 못부르고 부모handel만 부를 수 있다 나머지는 다 안됨

entiyInterface

echo PathParamsBinder

4/18

var application service.ApplicationRepository
var id int64
var key int64
if err := echo.PathParamsBinder(c).Int64("id", &id).Int64("key", &key).BindError(); err != nil {
return err
}

#참고 https://mingrammer.com/translation-go-walkthrough-encoding-json-package/ https://github.com/labstack/echo/blob/master/binder_test.go

© 2024 by GwiyeomGo Tech Blog. All rights reserved.