[SDK] 코딩테스트 (과제형) Lite Version

애드브릭스 팀 소개

https://iga-dev.atlassian.net/wiki/spaces/IG/pages/475070493?moved=true

1. 목표

지원 분야에 맞는 모바일 플랫폼의 관련 언어(Java, Kotlin, Objective-C, Swift)를 선택하여 아래 과제를 수행합니다. (예_ 안드로이드 지원자는 안드로이드만 수행하면 되겠습니다.)

2. 과제설명

  • 본 입사과제는 모바일 어플리케이션을 만드는 것이 아닌 "SDK 라이브러리"를 만드는 것입니다.
  • SDK 라이브러리는 모바일 어플리케이션에 "탑재(import)" 되어 동작하는 외부 라이브러리입니다.
  • 입사과제를 위해 제공되는 assignment.ad-brix.com/api/WriteEvent 서버 api와 통신을 해야 합니다.
    • "5. 웹서비스" 항목의 JSON 내용을 생성하여 위 서버 API로 전송해야 합니다.(Http Request)
    • 전송한 Http Request에 대하여 정상적인 Http Response를 수신하고 응답내용을 콘솔 로그로 출력해야 합니다.
  • SDK 라이브러리는 각 플랫폼에 따른 일반적인 형태를 가져야 합니다.
    • 안드로이드 : *.aar (혹은 *.jar)
    • 아이폰 : *.framework

3. SDK 필수 API 스펙


1. SDK에는 아래와 같은 필수 API 함수가 포함되어 있어야 합니다. (아래 예시는 C# 문법으로 작성되었습니다. 각 언어에 알맞게 자유롭게 구성하셔도 되겠습니다.)

public class IGASDK
{
   public static void WriteEvent(string eventName) {...}
}


2. 위의 함수를 담은 SDK를 사용할 고객(애드브릭스 개발팀)은 아래와 같이 함수를 호출할 예정입니다. (아래 예시는 C# 문법으로 작성되었습니다. 각 언어에 알맞게 자유롭게 구성하셔도 되겠습니다.)

IGASDK.WriteEvent("levelup");


4. 웹서비스 API 함수

  • WriteEvent : 사용자의 앱내 이벤트를 저장합니다.   


5. 웹서비스 스펙 

  • 참고 : 아래 JSON 양식에 맞추어 값이 채워 1. 전송(Req)하고 2. 결과를 수신(Res)하는 2가지가 모두 완료되어야 합니다.  
  • API Domain: assignment.ad-brix.com/api/WriteEvent
  • Protocol: HTTP
  • AddEvent 호출 스펙
    • method : POST
    • Content-Type : application/json
    • Request JSON 예시 : 

      {
        "evt": {  							//고객이 입력한 이벤트정보
      	"created_at": "20151106094112",		//본 HTTP Request를 전송한 시각을 yyyyMMddHHmmss 형태의 문자열로 변환한 값 
          "event": "levelup"                  //고객이 입력한 이벤트명
        },
        "common": {   					   
            "device_info": {					 //단말기 속성
            	"os": "4.4.4",                   //os 버전 
            	"model": "zerry_hp",             //기기 모델
            	"resolution": "1080x1920",       //현재 해상도 (가로x세로 또는 세로x가로)
            	"is_portrait": false,            //가로 인가? 세로 인가?
            	"platform": "android",           //플랫폼
            	"network": "wifi",               //현재 네트워크 상태
            	"carrier": "VODAFONE+TR",        //통신사
            	"language": "ko",                //기기에 설정된 언어
            	"country": "kr"                  //기기에 설정된 국가
          },
          "package_name": "com.myapp.packagename",   	// SDK가 탑재된 앱의 패키지 이름
          "appkey": "account@domain.com"             
        }
      }
    • JSON 상세 설명
      • evt : 고객(애드브릭스 개발팀)이 입력한 정보 (3.2에서 호출시 넘긴 정보)를 SDK에서 저장하고 이를 evt 이하에 "키,밸류" 형태로 넣어야 합니다.
      • common - device_info : 고객(애드브릭스 개발팀)이 사용하는 앱에서 해당 라이브러리를 사용하면, 라이브러리는 해당 앱이 설치된 단말기 정보를 추출할 수 있습니다. 즉, common 이하 각 정보들은 SDK에서 직접 추출하여야 합니다.  
        • SDK가 동작하는 디바이스의 기본적인 정보를 전달합니다.
          • android.os.Build 클래스 등에서 디바이스 정보를 얻을 수 있습니다.
      • package_name : SDK의 패키지 명이 아닌, SDK가 동작하는 어플리케이션의 패키지 명을 전달합니다.
      • appkey : 지원자 본인의 개인 이메일 주소를 값으로 넣어야 합니다. 


  • Response

    서버 응답 코드 200
    content-type: application/json
    
    {
    	"result" : true,       //성공시 true, 실패시 false
        "message" : "ok"       //메시지
    	"raw": "{\n  \"evt\": {  \t\t\t\t\t\t\t\n\t\"created_at\": \"20180107014112\",\t\n    \"event\": \"levelup\"                 \n  },\n  \"common\": {   \t\t\t\t\t   \n      \"device_info\": {\t\t\t\t\n      \t\"os\": \"4.4.4\",                  \n      \t\"model\": \"zerry_hp\",           \n      \t\"resolution\": \"1080x1920\",     \n      \t\"is_portrait\": false,           \n      \t\"platform\": \"android\",          \n      \t\"network\": \"wifi\",               \n      \t\"carrier\": \"VODAFONE+TR\",        \n      \t\"language\": \"ko\",               \n      \t\"country\": \"kr\"                 \n    },\n    \"package_name\": \"com.myapp.packagename\",   \n    \"appkey\": \"account@domain.com\"             \n  }\n}"
    }

    *. 위에서 Request로 전송한 JSON값을 역으로 확인하실 수 있도록 "raw"키 값에 전송하신 정보를 그대로 서버에서 리턴합니다.

결과물

  • 소스 원본 코드 (github) : github 계정이 없으신 경우 회원가입을 하시어 소스 원본을 올려주시고, url 정보를 이메일로 제출
  • SDK 파일 - AOS의 경우 jar 혹은 aar중  원하는 것으로 이메일에 첨부하여 제출, iOS의 경우 frameworks파일을 이메일에 첨부하여 제출

최종적으로 개발팀에서 체크하게될 과제의 주요 항목은 아래와 같습니다 

  1. SDK 라이브러리 파일이 aar, jar 또는 .framework 파일인가? 
  2. SDK 라이브러리 파일을 프로젝트에 설치하여 정상적으로 앱이 빌드되는가?
  3. WriteEvent 함수를 호출할 수 있는가?
  4. WriteEvent 함수를 호출시 JSON 내에 정보가 실제 SDK로 넘긴 정보 + 실제 앱이 설치된 단말기 정보로 이루어져 있는가? (하드코딩은 감점)
  5. WriteEvent 함수를 호출시 서버 응답코드가 200이며 정상 Response JSON를 수신하는가?

참고 사이트

아래 SDK 개발 사이트를 참고해서 결과물을 만들어 제출하시면 좋습니다.

(star) 직접 연동을 해보시면 과제에 대한 이해에 도움이 될 것입니다.