개요
•
각 스테이지에 필요한 방패 서버를 구성하고 주어진 미션을 달성하면 다음 스테이지로 넘어갑니다.
•
총 3개 스테이지가 있습니다. 스테이지 2까지 통과했다면 스테이지 1, 2에 대한 코드를, 스테이지 3까지 통과했다면 스테이지 1, 2, 3에 대한 모든 코드를 보내주세요.
•
recruit@stibee.com으로 코드를 보내주세요. 작성된 코드를 압축해 파일로 보내주시거나 github에 게시 후 github URL을 보내주세요.
서버 정보
창 서버
•
주소: http://attack.stibee.kr:8090
방패 서버
•
주소: 이메일로 별도 안내
•
계정: ubuntu
•
인증 키: 이메일로 별도 안내
•
포트: http 8090을 열고 방어
상세 내용
스테이지 1
1.
서버가 시작되면 창 서버로 스테이지 1 미션을 시작할 준비가 됐다고 알립니다.
[예시]
POST {창 서버}/stage?id=gildong@stibee.com&level=1
//id는 서류 제출 시 사용한 이메일 주소를 사용한다.
//id는 미션 시도에 대한 구분 값으로, 동일한 id로 동시에 미션을 진행할 수 없다.
//id는 방패 서버에서 임의로 설정하되, 미션수행이 성공 또는 실패로 끝나면 동일한 id로 다시 시도해도 된다.
JavaScript
복사
2.
200 OK 응답을 받았다면, 창 서버에서 방패 서버로 공격을 시작합니다.
•
창 서버는 미션 시작 준비를 알린 IP에 대해 공격을 시도합니다.
3.
창 서버에서 방패 서버로 공격 내용의 예시는 다음과 같습니다. 공격 내용은 임의의 문자와 길이로 요청됩니다.
[예시]
POST {방패 서버}/stage1
abcdef
GraphQL
복사
4.
방패 서버는 요청받은 콘텐츠를 읽어서 다음과 같이 응답을 주어야 합니다.
[예시]
200 OK
bcdefg
//요청받은 각 문자의 아스키 값에 +1을 더한 값을 응답으로 내린다.
//a+1 = b
//c+1 = d
JavaScript
복사
5.
30초내에 모든 요청에 대한 정답을 응답하면 미션 성공!
6.
미션에 대한 결과가 다음과 같이 창 서버가 방패 서버로 전달됩니다.
[예시]
POST {방패 서버}/stage/result
Content-Type: application/json
{
"id": "gildong@stibee.com", //요청 시 사용한 id 값
"level": 1, //도전한 스테이지 레벨
"success": true, //스테이지 성공 또는 실패
"want": 1000, //원하는 정답 수
"actual": 1000, //실제 정답 수
"elapsedTime": 1 //경과 시간 초 단위
}
JavaScript
복사
스테이지 2
1.
서버가 시작되면 창 서버로 스테이지 2 미션을 시작할 준비가 되었다고 알립니다.
[예시]
POST {창 서버}/stage?id=gildong@stibee.com&level=2
JavaScript
복사
2.
200 OK 응답을 받았다면, 창 서버에서 방패 서버로 공격을 시작합니다.
3.
창 서버에서 방패 서버로 공격 내용의 예시는 다음과 같습니다. 공격 내용은 임의의 문자와 길이로 요청됩니다.
[예시]
POST {방패 서버}/stage2
abcdef
bcdefg
cdefgh
......
//요청에 대한 개행은 '\n' 이다
JavaScript
복사
4.
방패 서버는 요청받은 콘텐츠를 읽어서 아래와 같이 응답을 주어야 합니다.
[예시]
200 OK
bcdefg
cdefgh
defghi
......
//요청받은 각 문자의 아스키 값에 +1을 더한 값을 응답으로 내린다.
//a+1 = b
//c+1 = d
JavaScript
복사
5.
120초내에 모든 요청에 대한 정답을 응답하면 미션 성공!
6.
미션에 대한 결과가 다음과 같이 창 서버가 방패 서버로 전달됩니다.
[예시]
POST {방패 서버}/stage/result
Content-Type: application/json
{
"id": "gildong@stibee.com", //요청 시 사용한 id 값
"level": 2, //도전한 스테이지 레벨
"success": true, //스테이지 성공 또는 실패
"want": 1000, //원하는 정답 수
"actual": 1000, //실제 정답 수
"elapsedTime": 1 //경과 시간 초 단위
}
JavaScript
복사
스테이지3
1.
서버가 시작되면 창 서버로 스테이지 3 미션을 시작할 준비가 되었다고 알립니다.
[예시]
POST {창 서버}/stage?id=gildong@stibee.com&level=3
JavaScript
복사
2.
200 OK 응답을 받았다면, 창 서버에서 방패 서버로 공격을 시작합니다.
3.
창 서버에서 방패 서버로 공격 내용의 예시는 다음과 같습니다. 공격 내용은 임의의 문자와 길이로 요청됩니다.
[예시]
POST {방패 서버}/stage3
abcdefabcdefabcdefabcdefabcdefabcdef
bcdefgbcdefgbcdefgbcdefgbcdefgbcdefg
cdefghcdefghcdefghcdefghcdefghcdefgh
......
//요청에 대한 개행은 '\n' 이다
JavaScript
복사
4.
방패 서버는 요청받은 콘텐츠를 읽어서 아래와 같이 응답을 주어야 합니다.
[예시]
200 OK
bcdefgbcdefgbcdefgbcdefgbcdefgbcdefg
cdefghcdefghcdefghcdefghcdefghcdefgh
defghidefghidefghidefghidefghidefghi
......
//요청받은 각 문자의 아스키 값에 +1을 더한 값을 응답으로 내린다.
//a+1 = b
//c+1 = d
JavaScript
복사
5.
10초내에 모든 요청에 대한 정답을 응답하면 미션 성공!
6.
미션에 대한 결과과 다음과 같이 창 서버가 방패 서버로 전달됩니다.
[예시]
POST {방패 서버}/stage/result
Content-Type: application/json
{
"id": "gildong@stibee.com", //요청 시 사용한 id 값
"level": 3, //도전한 스테이지 레벨
"success": true, //미션 성공 또는 실패
"want": 1000, //원하는 정답 수
"actual": 1000, //실제 정답 수
"elapsedTime": 1 //경과 시간 초 단위
}
JavaScript
복사
7.
구현에 따라 OOM(Out Of Memory)이 발생할 수 있으니 이를 해결 해야 합니다. (해결 방식에 대한 제한은 없습니다.)