Golang(Go) Context 는 어떤 정보를 가지고 있을까?
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?
-
CRUD 에 썼던 DTO => OrgCUD 에 공통함수
-
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