κ³Όμ μ λν μꡬμ¬ν λ° APIμμΈ, μ μΆ λ°©λ², νκ° λ°©λ²μ λν μλ΄κ° λμμμΌλ κΌ μ λ ν΄μ£ΌμκΈΈ λ°λλλ€.
- κ³Όμ μλ΄ κ°μ
- κ³Όμ μ£Όμ μ¬ν
- κ³Όμ μ μΆ λ°©μ
- κ³Όμ μ±μ λ°©μ
- ν©κ²©μ μ λ° λ°©μ
- κ³Όμ ꡬν μλ΄
6-1. μλΉμ€ μ€λͺ
6-2. Model μ€λͺ
6-3. μꡬ μ¬ν
6-4. κ³΅ν΅ API Response μλ΄
6-5. APIλ³ μμΈ μ€λͺ - κ³Όμ νκ° 1λ² μλ리μ€
- κΈ°ν λ¬Έμ μ¬ν
Prography 9κΈ° Spring Partμ μ§μν΄μ£Όμ λͺ¨λ λΆλ€κ» μ§μ¬μΌλ‘ κ°μ¬λ립λλ€.
Spring Partμμ μ§νλλ κ³Όμ λ, μ¬λ¬λΆλ€κ»μ Prographyμμ νλ‘μ νΈλ₯Ό ꡬν/μ΄μ ν μ μλ μ΅μνμ κΈ°μ€μ 보기 μν¨μ
λλ€.
κ³Όμ μ λν νκ°λ, μ ν΄μ§ μλ리μ€μ μν μλμ±μ μ ν΅ν΄ μ§νλ©λλ€.
νκ°μ μ§νλλ μλ리μ€λ μ΄ 5λ¨κ³λ‘ μ΄λ£¨μ΄μ§λ©°, κ°λ°μ μ°Έκ³ λ₯Ό νμ€ μ μλλ‘ μ²«λ²μ§Έ μλ리μ€μ λν΄μλ§ κ³΅κ°νμ¬ μ§νν©λλ€.
κ³Όμ λ ν΄λΉ λ ν¬μ§ν 리λ₯Ό forkν΄μ μ§νν΄μ£Όμκ³ , Prography 9κΈ° λͺ¨μ§ κΈ°κ°μ΄ μ’
λ£λλ μμ (2024λ
2μ19μΌ) κΉμ§ κ°λ₯ν Privateλ‘ μ μ§νμλ, κ·Έ μ΄ν Public μ νμ 무κ΄ν©λλ€.
κ³Όμ λ JavaμΈμ΄μ λν΄μ μ§νλ μ½λλ§ μΈμ λλ μ μνμκΈΈ λ°λλλ€.
μ£Όμ μ¬νμ μ§ν€μ§ μμ κ²½μ°, μλ μ±μ μ λν΄ μ€ν¨νκ±°λ μ€λ΅μ²λ¦¬ λ μ μμ΅λλ€. κΌ νμΈ λΆνλ립λλ€.
- κ³Όμ λ JavaμΈμ΄μ λν΄μ μ§νλ μ½λλ§ μΈμ λλ μ μνμκΈΈ λ°λλλ€.
- JDK 17μ μ΄μ©ν΄μ ꡬννμ μΌ ν©λλ€.
- Request λ° Responseμ λν΄μ "κ³Όμ ꡬν μλ΄"μμ μ 곡νλ λ°μ λ³μλͺ λ±μ΄ μ ννκ² μΌμΉν΄μΌ ν©λλ€.
- portλ 8080μΌλ‘ μ€μ ν΄μΌ ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€λ H2 Databaseλ₯Ό μ΄μ©ν©λλ€.
- JPAλ₯Ό νμ©νλ©°, ddl-auto μμ±μ create λ₯Ό μ¬μ©ν©λλ€.
- κ° Entityμ λν deleteλ soft-delete/hard-delete μ λν΄ μμ λ‘κ² κ°λ°ν©λλ€.
κ³Όμ μλ£μΌμ(2024λ
2μ3μΌ(ν μμΌ)μμ )κΉμ§ μλ λ©μΌλ‘ μ μ‘ν΄μ£Όμ
μΌ ν©λλ€.
λ©μΌ μ μ‘μ μλ λ
Έμ
λ§ν¬λ₯Ό μ°Έκ³ νμ¬, λ³ΈμΈμ νλ‘μ νΈλ₯Ό jarνμΌλ‘ λΉλ ν κ΅¬κΈ λλΌμ΄λΈμ μ
λ‘λ ν λ§ν¬λ₯Ό μ
λ ₯ν΄μ£ΌμΈμ.
κ΅¬κΈ λλΌμ΄λΈ μ
λ‘λ λ°©λ² : https://www.notion.so/prography-admin/Google-Drive-ef7eca6451434af58d0b3fcd0867291c?pvs=4
2024λ
2μ 3μΌ μμ μ λ겨μ μμ λ λ©μΌμ λν΄μλ νκ°λμ§ μμΌλ©°, κ³Όμ μ ν λΆν©κ²©μΌλ‘ μ²λ¦¬λλ κΌ μκ°μ λ§μΆ°μ μ μΆνμκΈΈ λ°λλλ€.
λν, λ€λ₯Έ partμμλ λμΌν λ©μΌμ£Όμλ‘ κ³Όμ λ₯Ό μ μΆνμ¬ νΌλλ μ μμΌλ, λ©μΌμ λͺ©μ κΌ μ ν΄μ§ κ·κ²©μΌλ‘ μμ±νμ¬ μ μΆνμκΈΈ λ°λλλ€.
- λ©μΌ μ£Όμ : [email protected]
- λ©μΌ μ λͺ© : [Prography9κΈ°] Spring-μ΄λ¦-νΈλν°λ²νΈλ·μ리
ex. [Prography9κΈ°] Spring-λ¬Έλ²μ°-6809 - νμΌ μ λͺ© : spring-μ΄λ¦-νΈλν°λ²νΈ
ex. spring-λ¬Έλ²μ°-01029356809
κ³Όμ μ λν μ±μ μ λ³λ κ°λ°λμ΄ μλ μλν μ±μ μ½λλ₯Ό ν΅ν΄ μ±μ λ©λλ€.
μ¬λ¬λΆμ΄ μ μΆν΄μ£Όμ jarνμΌμ dockerλ‘ λΉλνμ¬, μμ²μ 보λ΄κ³ κΈ°λνλ μλ΅κ°μ΄ μ€λμ§λ₯Ό νλ¨νμ¬ μ§νλ©λλ€.
λλ¬Έμ, Request λ° Responseμ λν΄μ "κ³Όμ ꡬν μλ΄"μμ μ 곡νλ λ°μ λ³μλͺ
λ±μ΄ μ ννκ² μΌμΉν΄μΌ ν©λλ€.
μμμ μλ΄λλ¦° κ³Όμ μ±μ λ°©μμ ν΅ν΄, κ°μΈλ³ κ³Όμ μ μκ° κ²°μ λλ©° μ΄λ₯Ό κΈ°λ°μΌλ‘ μλ μμμ λ°λΌ ν©κ²©μλ₯Ό μ λ°ν©λλ€.
- κ³Όμ λ§μ μ
- 1λ² μΌμ΄μ€μ μΈμμ΄ λ©΄μ μ΅μμΈμμ λ§μ‘± λͺ»ν μ, κ³ λμ μμλ‘ ν©κ²©μκ° μ λ°λ©λλ€.
- 1λ² μΌμ΄μ€μ μΈμμ΄ λ€μ λ°μμ, κ³Όμ λ§μ μμ μ½λλ₯Ό νμΈνμ¬ κ°μ°μ μ λν κ²ν ν μ΅μ’ ν©κ²©μκ° μ λ°λ©λλ€.
- μ λ°λ ν©κ²©μμ λͺ¨λ μ½λλ μ¬κ²ν νλ μ½λ ꡬνμ λν νκ°λ μ§ννμ§ μκ³ , μ΄λ·°μ§(νλμ½λ©μ ν΅ν μλ΅κ° μ€μ λ±) μ¬λΆλ§ νμΈν©λλ€.
λ§μ½ μ΄λ·°μ§ μ½λκ° νμΈλ μ, λΆν©κ²© μ²λ¦¬λ©λλ€.
3λ²μΌμ΄μ€μ λν΄, κ³Όμ λ§μ μ κ°μ°μ μ΄ λΆμ¬λλ νλͺ©μ λ€μκ³Ό κ°μ΅λλ€.
- λ¬Έμν(Swagger)κ° κ΅¬νλμ΄ μλκ°.
- μ½λμ μν€ν μ² κ΅¬μ‘°κ° μ‘νμλκ°.
- μ€λ³΅ μ½λκ° μμΌλ©°, μ½λμ κ°λ μ±μ΄ μλκ°.
- ν μ€νΈ μ½λκ° μμ±λμ΄ μλκ°.
- μ½λκ° μ± μμ λ§κ² λΆλ°°λμ΄ μλκ°.
- νꡬ κ²μ μλΉμ€λ₯Ό λ§λ€μ΄ λ΄ μλ€.
- νꡬ κ²μμ μ’
λ₯λ 2κ°μ§κ° μ‘΄μ¬ν©λλ€.
- λ¨μ(SINGLE) : 1λ1λ‘ κ²μμ μ§νν©λλ€.
- 볡μ(DOUBLE) : 2λ2λ‘ κ²μμ μ§νν©λλ€.
- μ μ λ€μ λ°©μ μμ±νκ±°λ λ§λ€μ΄μ§ λ°©μ μ°Έκ°ν΄ κ²μμ μ§ν ν μ μμ΅λλ€.
- λ°©μ μ°Έκ°ν μ μ λ€μ RED, BLUE ν μ€ ν κ°μ νμ λ°°μ λ°μ΅λλ€.
- νμ λ³κ²½μ΄ κ°λ₯ν©λλ€.
μλΉμ€μμ μ¬μ©λλ λ°μ΄ν° Model μ User, Room, UserRoom 3κ°μ§ λͺ¨λΈμ΄ μμ΅λλ€.
User
- id : integer
- fakerId : integer
- name : string
- email : string
- status : string
- WAIT(λκΈ°), ACTIVE(νμ±), NON_ACTIVE(λΉνμ±)
- created_at : datetime
- updated_at : datetime
Room
- id : integer
- title : string
- host : integer
- User.id
- room_type : string
- SINGLE(λ¨μ), DOUBLE(볡μ)
- status : string
- WAIT(λκΈ°), PROGRESS(μ§νμ€), FINISH(μλ£)
- created_at : datetime
- updated_at : datetime
UserRoom
- id : integer
- room_id : integer
- user_id : integer
- team : string
- RED, BLUE
βοΈ portλ 8080μΌλ‘ μ€μ ν΄μΌ ν©λλ€.
βοΈ λ°μ΄ν°λ² μ΄μ€λ H2 Databaseλ₯Ό μ΄μ©ν©λλ€.
βοΈ JPAλ₯Ό νμ©νλ©°, ddl-auto μμ±μ create λ₯Ό μ¬μ©ν©λλ€.
βοΈ κ° Entityμ λν deleteλ soft-delete/hard-delete μ λν΄ μμ λ‘κ² κ°λ°ν©λλ€.
βοΈ μλ μ΄ 10κ°μ APIλ€μ ꡬν ν©λλ€.
κ° APIμ λν μμΈ μ€λͺ
μ νλ¨λΆμ λ³λλ‘ μλ΄λ©λλ€.
- ν¬μ€μ²΄ν¬ API
- μ΄κΈ°ν API
- μ μ μ 체 μ‘°ν API
- λ°© μμ± API
- λ°© μ 체 μ‘°ν API
- λ°© μμΈ μ‘°ν API
- λ°© μ°Έκ° API
- λ°© λκ°κΈ° API
- κ²μμμ API
- ν λ³κ²½ API
- βοΈ κ²μμ μμνκ³ 1λΆ λ€ μλμΌλ‘ μ’
λ£λ©λλ€. βοΈ
- μ€μ°¨ λ²μ 30μ΄ μ΄λ΄
- μ’ λ£λ κ²μμ λ°© μνλ 'FINISH(μλ£)' μνλ‘ λ³κ²½λ©λλ€.
- λ°©μ μμ±ν μ¬λμ host λΌκ³ λͺ μΉνκ³ , host κ° λ°©μ λκ°λ©΄ ν΄λΉ λ°©μ μ¬λΌμ§λλ€.
- RED, BLUE 2κ°μ νμ΄ μ‘΄μ¬νκ³ μλ‘ λ°/λ° μ ννκ² μΈμμ΄ λλμ΄μ§ μνμμλ§ κ²μμ μ§νν μ μμ΅λλ€.
- κ²μμ λ°©μ μΈμμ΄ λͺ¨λ μ°¬ μνμμλ§ μμ κ°λ₯ν©λλ€.
- λ¨μ 2λͺ , 볡μ 4λͺ
- λ°©μ λͺ¨λ μΈμμ΄ κ°λμ°¬ μνλΌλ©΄ μ°Έκ° ν μ μμ΅λλ€.
- λ°©μ μ°Έκ°ν μΈμμ λν ν λ°°μ λ‘μ§μ λ€μκ³Ό κ°μ΅λλ€.
- ν μͺ½ νμ μΈμμ΄ λͺ¨λ μ°¬ κ²½μ°, λ°λνμΌλ‘ λ°°μ ν©λλ€.
- μμͺ½ νμ λͺ¨λ μλ¦¬κ° μλ κ²½μ°, REDνμ λ¨Όμ λ°°μ λ©λλ€.
- μμ±νμ μ΄ν리μΌμ΄μ
μ νλμ μλ²μμ λμνλ€κ³ κ°μ ν©λλ€.
- λμμ± μ΄μμ λν΄μ κ³ λ €νμ§ μμλ λ©λλ€.
- κ° κΈ°λ₯μ λν λ¨μν μ€νΈλ₯Ό μμ±ν΄μΌ ν©λλ€.
- APIλ₯Ό κ°λ°νλ©° νμν μ μ domainμ λν μ΄κΈ°ν λ°©λ²μ "API μ€λͺ "μ μ°Έκ³ νμκΈΈ λ°λλλ€.
- ApiResponse λ μλ ν΄λμ€λ₯Ό νμ©ν΄μ£Όμλ©΄ λ©λλ€.
- μμ²μ΄ μ±κ³΅νμ λ, code = 200, message = "API μμ²μ΄ μ±κ³΅νμ΅λλ€." λ₯Ό λ°νν©λλ€.
- μλͺ»λ API μμ²μ code = 201, message = "λΆκ°λ₯ν μμ²μ λλ€." λ₯Ό λ°νν©λλ€.
- κ·Έ μΈ μλ² μλ¬κ° λ°μνλ μΌμ΄μ€λ code = 500, message = "μλ¬κ° λ°μνμ΅λλ€." λ₯Ό λ°νν©λλ€.
public class ApiResponse<T> {
private Integer code;
private String message;
private T result;
}
- μλ²μ μνλ₯Ό 체ν¬νλ APIμ λλ€.
- λͺ¨λ μλ리μ€μ λν΄ μ΅μ΄ 1ν νΈμΆλ©λλ€.
API λͺ μΈ
GET /health
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- seedμ quantityλ₯Ό bodyμ λ΄μμ μμ²ν©λλ€.
- κΈ°μ‘΄μ μλ λͺ¨λ νμ μ 보 λ° λ°© μ 보λ₯Ό μμ ν©λλ€. (μ¦, λͺ¨λ tableμ λͺ¨λ λ°μ΄ν°λ₯Ό μμ ν©λλ€.)
- μ΄ν bodyλ‘ μ λ¬λ°μ seedμ quantityμ 보λ₯Ό ν΅ν΄ μλ APIλ₯Ό νΈμΆνμ¬ μλΉμ€μ νμν νμ μ 보λ₯Ό μ μ₯ν©λλ€.
- fakerapiμ μλ΅ κ²°κ³Όλ‘ λ΄λ €μ€λ λ°μ΄ν°λ₯Ό μλ κ·μΉμ λ°λΌ μΈν
ν©λλ€.
- μλ΅ κ°μ idνλλ fakerIdλ‘ μ μ₯ν©λλ€.
- μλ΅ κ°μ id(fakerId)λ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νμ¬ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
- username νλλ nameμΌλ‘ μ μ₯ν©λλ€.
- email νλλ κ·Έλλ‘ μ μ₯ν©λλ€.
- uuid, firstname, lastname, password, ip, macAddress, website, image νλλ μ¬μ©νμ§ μμ΅λλ€.
- νμ μν(status)λ μλ΅ κ°μ id(fakerId)λ₯Ό κΈ°λ°νμ¬ μλ κ·μΉμ λ°λΌ μ μ₯ν©λλ€.
- μλ΅ κ°μ id(fakerId) κ°μ΄ 30 μ΄νμ νμμ νμ±(ACTIVE) μνλ‘ μΈν ν©λλ€.
- μλ΅ κ°μ id(fakerId) κ°μ΄ 31 μ΄μ, 60 μ΄νμ νμμ λκΈ°(WAIT) μνλ‘ μΈν ν©λλ€.
- μλ΅ κ°μ id(fakerId) κ°μ΄ 61 μ΄μμΈ νμμ λΉνμ±(NON_ACTIVE) μνλ‘ μΈν ν©λλ€.
- λ°μ΄ν°κ° μ μ₯λλ μμ μ λ°λΌ createdAtκ³Ό updatedAtμ μ μ₯ν©λλ€.
API λͺ μΈ
POST /init
body
{
"seed" : int,
"quantity" : int,
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- νμ΄μ§ μ²λ¦¬λ₯Ό μν size, page κ°μ RequestParameterλ‘ λ°μ΅λλ€.
- λͺ¨λ νμ μ 보λ₯Ό μλ΅ν©λλ€.
- id κΈ°μ€ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν΄μ λ°νν©λλ€.
API λͺ μΈ
GET /user?size={size}&page={page}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€.",
"result" : {
"totalElements" : int,
"totalPages" : int,
"userList" : [
{
"id" : int,
"fakerId" : int,
"name" : string,
"email" : string,
"status" : string, // WAIT(λκΈ°), ACTIVE(νμ±), NON_ACTIVE(λΉνμ±)
"createdAt" : string, // yyyy-MM-dd HH:mm:ss ννλ‘ λ°νν©λλ€.
"updatedAt" : string // yyyy-MM-dd HH:mm:ss ννλ‘ λ°νν©λλ€.
}, ...
]
}
}
- userId, roomType, title μ 보λ bodyμ λ΄μμ μμ²ν©λλ€.
- λ°©μ μμ±νλ €κ³ νλ user(userId)μ μνκ° νμ±(ACTIVE)μνμΌ λλ§, λ°©μ μμ±ν μ μμ΅λλ€. λ§μ½ νμ±μνκ° μλλλ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- λ°©μ μμ±νλ €κ³ νλ user(userId)κ° νμ¬ μ°Έμ¬ν λ°©μ΄ μλ€λ©΄, λ°©μ μμ±ν μ μμ΅λλ€. λ§μ½ μ°Έμ¬νκ³ μλ λ°©μ΄ μμλλ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- λ°©μ μ΄κΈ°μ λκΈ°(WAIT) μνλ‘ μμ±λ©λλ€.
- λ°μ΄ν°κ° μ μ₯λλ μμ μ λ°λΌ createdAtκ³Ό updatedAtμ μ μ₯ν©λλ€.
API λͺ μΈ
POST /room
body
{
"userId" : int,
"roomType" : String,
"title" : String
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- νμ΄μ§ μ²λ¦¬λ₯Ό μν size, page κ°μ RequestParameterλ‘ λ°μ΅λλ€.
- λͺ¨λ λ°©μ λν λ°μ΄ν°λ₯Ό λ°νν©λλ€.
- id κΈ°μ€ μ€λ¦μ°¨μμΌλ‘ λ°μ΄ν°λ₯Ό λ°νν©λλ€.
API λͺ μΈ
GET /room?size={size}&page={page}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€.",
"result" : {
"totelElements" : int,
"totalPages" : int,
"roomList" : [
{
"id" : int,
"title" : string,
"hostId" : int,
"roomType" : string, // SINGLE(λ¨μ), DOUBLE(볡μ)
"status" : string, // WAIT(λκΈ°), PROGRESS(μ§νμ€), FINISH(μλ£)
}, ...
]
}
}
- roomIdλ₯Ό λ°μ λ°©μ λν μμΈ μ‘°νλ₯Ό ν©λλ€.
- createdAt, updatedAtμ ν¨κ» λ°νν©λλ€.
- μ‘΄μ¬νμ§ μλ idμ λν μμ²μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
API λͺ μΈ
GET /room/{roomId}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€.",
"result" : {
"id" : int,
"title" : string,
"hostId" : int,
"roomType" : string, // SINGLE(λ¨μ), DOUBLE(볡μ)
"status" : string, // WAIT(λκΈ°), PROGRESS(μ§νμ€), FINISH(μλ£)
"createdAt" : string, // yyyy-MM-dd HH:mm:ss ννλ‘ λ°νν©λλ€.
"updatedAt" : string // yyyy-MM-dd HH:mm:ss ννλ‘ λ°νν©λλ€.
}
}
- λκΈ°(WAIT) μνμΈ λ°©μλ§ μ°Έκ°κ° κ°λ₯ν©λλ€. λ§μ½ λκΈ°μνκ° μλ λ°©μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ μ (userId)κ° νμ±(ACTIVE) μνμΌ λλ§, λ°©μ μ°Έκ°ν μ μμ΅λλ€. λ§μ½ νμ±μνκ° μλλΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ μ (userId)κ° νμ¬ μ°Έμ¬ν λ°©μ΄ μμλλ§, λ°©μ μ°Έκ°ν μ μμ΅λλ€. λ§μ½ μ°Έμ¬ν λ°©μ΄ μλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ°Έκ°νκ³ μ νλ λ°©(roomId)μ μ μμ΄ λ―Έλ¬μΌ λλ§, μ°Έκ°κ° κ°λ₯ν©λλ€. λ§μ½ λ°©μ μΈμμ΄ κ°λ μ°Όλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ‘΄μ¬νμ§ μλ idμ λν μμ²μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
API λͺ μΈ
POST /room/attention/{roomId}
body
{
"userId" : int
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- μ μ (userId)κ° νμ¬ ν΄λΉ λ°©(roomId)μ μ°Έκ°ν μνμΌ λλ§, λκ°κΈ°κ° κ°λ₯ν©λλ€. λ§μ½ μ°Έκ°ν μνκ° μλλΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ΄λ―Έ μμ(PROGRESS) μνμΈ λ°©μ΄κ±°λ λλ(FINISH) μνμ λ°©μ λκ° μ μμ΅λλ€. λ§μ½ κ·Έλ¬ν μνλΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- νΈμ€νΈκ° λ°©μ λκ°κ² λλ©΄ λ°©μ μλ λͺ¨λ μ¬λλ ν΄λΉ λ°©μμ λκ°κ² λ©λλ€.
- ν΄λΉ λ°©μ λλ(FINISH) μνκ° λ©λλ€.
- μ‘΄μ¬νμ§ μλ idμ λν μμ²μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
API λͺ μΈ
POST /room/out/{roomId}
body
{
"userId" : int
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- νΈμ€νΈμΈ μ μ λ§ κ²μμ μμν μ μμ΅λλ€. λ§μ½ νΈμ€νΈκ° μλλΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- λ°© μ μμ΄ λ°©μ νμ μ λ§κ² λͺ¨λ κ½ μ°¬ μνμμλ§ κ²μμ μμν μ μμ΅λλ€. λ§μ½ κ·Έλ μ§ μλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- νμ¬ λ°©μ μνκ° λκΈ°(WAIT) μνμΌ λλ§ μμν μ μμ΅λλ€. λ§μ½ κ·Έλ μ§ μλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- λ°©μ μνλ₯Ό μ§νμ€(PROGRESS) μνλ‘ λ³κ²½ν©λλ€.
- κ²μμμμ΄ λ λ°©μ 1λΆ λ€ μ’ λ£(FINISH) μνλ‘ λ³κ²½λ©λλ€.
- μ‘΄μ¬νμ§ μλ idμ λν μμ²μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
API λͺ μΈ
PUT /room/start/{roomId}
body
{
"userId" : int
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
- μ μ (userId)κ° νμ¬ ν΄λΉ λ°©(roomId)μ μ°Έκ°ν μνμμλ§ ν λ³κ²½μ΄ κ°λ₯ν©λλ€. λ§μ½ κ·Έλ μ§ μλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ μ (userId)κ° νμ¬ μν ν κΈ°μ€ λ°λ νμΌλ‘ λ³κ²½λ©λλ€. (RED -> BLUE / BLUE -> RED)
- λ³κ²½λλ €λ νμ μΈμμ΄ μ΄λ―Έ ν΄λΉ λ°© μ μμ μ λ°κ³Ό κ°λ€λ©΄ νμ΄ λ³κ²½λμ§ μκ³ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- νμ¬ λ°©μ μνκ° λκΈ°(WAIT) μνμΌ λλ§ νμ λ³κ²½ν μ μμ΅λλ€. λ§μ½ κ·Έλ μ§ μλ€λ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
- μ‘΄μ¬νμ§ μλ idμ λν μμ²μ΄λΌλ©΄ 201 μλ΅μ λ°νν©λλ€. (κ³΅ν΅ API Response μλ΄ μ°Έκ³ )
API λͺ μΈ
PUT /team/{roomId}
body
{
"userId" : int
}
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
κ³Όμ μ λν νκ°λ μμμ μλ΄λλ¦° κ²κ³Ό κ°μ΄ μ΄ 5κ°μ μλ리μ€λ‘ μ§νλλ©°, κ°λ°μ μ°Έκ³ λ₯Ό νκΈ° μν΄ 1λ² μλ리μ€μ λν΄μλ§ κ³΅κ°λ©λλ€.
λ€λ§, ν¬μ€μ²΄ν¬ APIλ λͺ¨λ μλλ¦¬μ€ μμμ νΈμΆλ©λλ€.
Request
curl -X GET http://localhost:8080/health
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
Request
curl -X GET http://localhost:8080/user?size=100&page=0
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€.",
"result" : {
"totalElements" : 0,
"totalPages" : 0,
"userList" : []
}
}
Request
curl -X POST http://localhost:8080/init -d '{"seed":123, "quantity":10}'
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€."
}
Request
curl -X GET http://localhost:8080/user?size=10&page=0
Response
{
"code" : 200,
"message" : "API μμ²μ΄ μ±κ³΅νμ΅λλ€.",
"result" : {
"totalElements" : 10,
"totalPages" : 0,
"userList" : [
{
"id": 1,
"fakerId": 1,
"name": "jungran.gwon",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 2,
"fakerId": 2,
"name": "myungho.lim",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 3,
"fakerId": 3,
"name": "jiwoo.ko",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 4,
"fakerId": 4,
"name": "minseok.moon",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 5,
"fakerId": 5,
"name": "yunyoung01",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 6,
"fakerId": 6,
"name": "qheo",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 7,
"fakerId": 7,
"name": "myungho.han",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 8,
"fakerId": 8,
"name": "naree.gwon",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 9,
"fakerId": 9,
"name": "jo.hyunjun",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
},
{
"id": 10,
"fakerId": 10,
"name": "kwak.jumyoung",
"email": "[email protected]",
"status": "ACTIVE",
"createdAt": "2024-01-14 02:22:45",
"updatedAt": "2024-01-14 02:22:45"
}
]
}
}
μλ΄λμ΄μλ λ΄μ© μ΄μΈμ λ¬Έμμ¬νμ issueλ₯Ό ν΅ν΄ λ±λ‘ν΄μ£ΌμΈμ.
Prography 9κΈ° λͺ¨μ§κ³Ό κ΄λ ¨λ λ΄μ©μ μλ νμ΄μ§λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
νλ‘κ·ΈλΌνΌ 9κΈ° λͺ¨μ§ μμΈνμ΄μ§
2024λ , ν¨κ» νλν μ¬λ¬λΆλ€μ μν΄μ 맀λμ λͺ¨λκ° μ΅μ μ λ€νκ² μ΅λλ€.
Prograhy.
[email protected]
Homepage : https://prography.org/
Instagram: https://www.instagram.com/prography_official