본문으로 바로가기
728x90
반응형
728x170

데이터 입력 문제를 해결하니 또 다른 문제가 발생했다.

 

무한정의 데이터를 받으면 서버부하는 물론이고, 공격을 받았을 때의 서버 상태를 생각해보니 제한을 걸어야 했었다.

 

아무래도 회사일이다 보니 이런 부분은 나 혼자 독단적으로 결정하는 게 아니기 때문에 타 부서와의 조율이 필요했다.

그렇게 해서 나온 값은 64KB였다. 64KB이상이면 데이터를 받지않고, 내부에서 따로 관리하는 log파일에만 표시하기로 했다. 

 

원래는 이렇게 하려 했었으나 아래와 같이 하면 어떤 값을 보냈었는지 조회할 수 없기 때문에 

// body값 가져오는 함수.
func bodycheck(w http.ResponseWriter, r *http.Request) ([]byte, int) {
	getlength := r.ContentLength
	savebody := make([]byte, getlength)
	// r.Body.Read(savebody)
	savebody, _ = ioutil.ReadAll(r.Body)
	defer r.Body.Close()
	leng := len(savebody)
    
    	if leng == 82567 {
		err := errors.New("입력한 Data의 용량이 64KB 이상입니다")
		senddingToPanic(err)
	}
    
	log.Println("[DEBUG]", string(savebody))
	log.Println("[DEBUG] len: ", leng)
	return savebody, leng
}

보냈던 값까지 조회해주기 위해 다른 함수 쪽에 적어 주었다.

func proc(inputjson *Input, w http.ResponseWriter, in string, leng int, gubun int) {
	log.Println("[DEBUG] input=", in)
	log.Println("[DEBUG] len=", leng)
    
	if leng == 82567 {
		err := errors.New("입력한 Data의 용량이 64KB 이상입니다")
		senddingToPanic(err)
	}
.....
}

그 후 내부적으로 테스트 후 개발 서버에 배포하여 테스트를 하니 결과는 성공적이였다.

그 후 퇴근을 하고, 집에 가는 길에 사내 메신저로 나에게 날아온 문자.

2021/01/12 08:11:47 [DEBUG] len= 1783071
2021/01/12 08:11:47 2021-11-18 06:08:10
2021/01/12 08:11:47 [DEBUG] 입력시간 :  2021-11-18 06:08:10 +0000 UTC
2021/01/12 08:11:47 [DEBUG] 현재 시간 :  2021-01-12 08:11:47.163864036 +0000 UTC
2021/01/12 08:11:47 [DEBUG] 파일 생성 시간 :  2021-11-18 06:08:10 +0000 UTC

데이터가 잘 들어가니 집에가서 확인보라는 것이였다.

 

이걸 보자마자 순간 내 뇌리를 스쳐지나간 코드....

 

 

if leng == 82567 

.........................

 

그래서 부리나케 집으로 달려가서 코드를 수정 해주었다!

func proc(inputjson *Input, w http.ResponseWriter, in string, leng int, gubun int) {
	log.Println("[DEBUG] input=", in)
	log.Println("[DEBUG] len=", leng)
    
	if leng >= 82567 {
		err := errors.New("입력한 Data의 용량이 64KB 이상입니다")
		senddingToPanic(err)
	}
.....
}

 

테스팅 했을 때 저 값과 같을 때, 적을 때만 테스트하고, 어따 정신을 두었는지 저거보다 더 클 때 상황을 테스팅 하지 못했다... 좀 더 신경써서 테스팅 해야겠다는 생각이 든 하루였다.

728x90
반응형
그리드형

댓글을 달아 주세요