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초 이하의 응답시간을 서비스 수준 목표로 설정
이는 어플리케이션 로직으로 구현되어 있지 않습니다.
- 정상 요청 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 |
