본문 바로가기

프로젝트

Header 데이터 처리에 발생하는 예외에 람다 사용하기

Header 데이터 추출에서 문제

앱에서 서버로 전송하는 Header에서 추출해서 사용해야 하는 데이터가 있었다. 필수값이 아니었으며 값이 있더라도 구분자로 분리를 해야 하는 데이터였다. 그러다 보니 값이 없거나, 데이터 형식이 변경이 되어 구분자로 분리하여 인덱스로 불러오는 과정에서 NPE 또는 "Index Out Of Range"가 발생할 수 있는 상황이었다.

 

✔ 상황

S3에 데이터를 Json 형식으로 저장을 하고 있었고, 비어있는 경우 해당 필드에 Null 값을 넣는 것으로 처리하기로 되어있었다. 각 데이터에 필요한 값들을 얻기 위해 Header를 읽기 및 파싱 처리를 여러 번 해야 했다. Try Catch 문으로 여러 번 쓰는 것은 불편하다는 생각이 들어서 함수로 처리하기로 했다.

 

✔ 처리

각기 다른 동작을 함수로 처리하는 방법을 찾아봤고, 람다 문법을 사용하면 손 쉽게 구현을 할 수 있다는 것을 알게 되었다. 먼저 람다 적용을 위해 FunctionalInterface 어노테이션을 사용해 인터페이스를 하나 만들어주었다.

 

@FunctionalInterface
public interface LambdaFunction {
    Object invoke();
}

 

그리고 인터페이스를 함수로 받아 실행시켜주는 함수를 하나 만들었다. 예외가 발생할 경우 null 값을 반환하도록 처리를 했다.

public Object getHeaderProcessingExcpetion(LambdaFunction lambdaFunction){
    try {
        return lambdaFunction.invoke();
    } catch(Exception ex) {
    	return null;
    }
}

 

각 헤더를 파싱하고 호출하는 부분을 람다로 넘겨 처리하도록 했다.

 

data.put("os_version", ()->header.get("version").split(",")[2]);

결론

Header를 조회하고 파싱하는 과정을 이와 같이 처리하는 것이 좋은 방법인지는 모른다. 하지만 회사에서 구현 방향성을 이렇게 잡았으며, 그걸 해결하기 위해 람다를 사용하게 되었다. 그 과정에서 많은 중복 코드를 줄일 수 있었고 람다에 대해 한 번 더 공부하게 되는 시간을 가질 수 있었던 것 같다.