Search

API Manual & App Config

user, product, stress 총 3 개의 어플리케이션이 있습니다. 제공된 binary는 x86기반 EC2의 Amazon Linux 2023 에서 빌드하고 동작을 확인하였습니다. go version은 go1.22.2 linux/amd64 입니다. 어플리케이션 실행 시 바인딩되는 포트는 TCP/8080 입니다. 모든 어플리케이션은 access log를 stdout, stderr로 출력합니다. 모든 어플리케이션은 변조 방지를 위해 Request 요청에 requestid, uuid 쿼리스트링이 추가됩니다. 정상적인 요청에 대해 Request 및 Response를 변조하여 불이익을 받지 않도록 합니다. 채점 시 사용되는 응답시간 및 코드는 모두 클라이언트 도착 기준입니다.

User App

최소한의 가용성을 위해 5초 이하의 응답시간을 보장하고자 하며, 0.2초 이하의 응답시간을 서비스 수준 목표로 설정
/v1/user POST 요청 시 email 주소의 포맷이 xxxx@xxxx.xxxx 가 아닌 경우 403 에러가 발생하도록 구성
이는 어플리케이션 로직으로 구현되어 있지 않습니다.
- 정상 요청 email 예제: gildong@example.org
- 비정상 요청 email 예제(1): gildong (도메인 누락)
- 비정상 요청 email 예제(2): gildong@example (도메인 형식 오류)
이메일 정규식 : ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
path
method
request
response_code
/v1/user
POST
{ "requestid":"999999999999", "uuid":"7c5a3c6a-758f-4bc5-9bdf-3e573a0ad729", "username":"dbdump500001", "email":"dbdump500001@example.org", "status_message":"I’m happy", }
201
/v1/user
GET
?email=dbdump500001@example.org &requestid=999999999999 &uuid=7c5a3c6a-758f-4bc5-9bdf-3e573a0ad729
200
/healthcheck
GET
200

ENV (RDS)

MYSQL_USER : db 접근 권한을 가지는 유저의 이름
MYSQL_PASSWORD : db 접근 권한을 가지는 유저의 암호
MYSQL_HOST : db 읽기/쓰기가 가능한 주소 (IP or DNS 이며 엔진명 삽입금지)
MYSQL_PORT : db 읽기/쓰기가 가능한 주소의 포트번호
MYSQL_DBNAME : 논리적인 데이터베이스 이름 (dev)

Database Table

CREATE TABLE user ( id VARCHAR(255) NOT NULL, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, status_message VARCHAR(255) NOT NULL, PRIMARY KEY (userid), UNIQUE KEY uk_username (username) );
SQL
복사

Product App

최소한의 가용성을 위해 5초 이하의 응답시간을 보장하고자 하며, 0.2초 이하의 응답시간을 서비스 수준 목표로 설정
(제품 생성 (POST 요청) 이후 해당 제품에 대한 정보는 변경 X 동일한 id에 대한 요청이 빈번하게 발생)
path
method
request
response_code
/v1/product
POST
{ "requestid":"999999999999", "uuid":"7c5a3c6a-758f-4bc5-9bdf-3e573a0ad729", "id":"dbdump500001", "name":"dbdump500001", "price":1234, }
201
/v1/product
GET
?id=dbdump50001 &requestid=999999999999 &uuid=7c5a3c6a-758f-4bc5-9bdf-3e573a0ad729
200
/healthcheck
GET
200

ENV (DynamoDB)

TABLE_NAME : DynamoDB 테이블 이름 - required
TABLE_INDEX_NAME : DynamoDB 테이블 내 인덱스 이름

Stress App

최소한의 가용성을 위해 5초 이하의 응답시간을 보장하고자 하며, 1초 이하의 응답시간을 서비스 수준 목표로 설정
path
method
request
response_code
/v1/stress
POST
{ "requestid":"999999999999", "uuid":"7c5a3c6a-758f-4bc5-9bdf-3e573a0ad729", "length": 256 }
201
/healthcheck
GET
200