๐Ÿฐ [Flowbit] #1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…๋ถ€ํ„ฐ ์ฒซ API๊นŒ์ง€ (Spring Boot + Docker)

bean8080๐Ÿซ›ยท2026๋…„ 4์›” 26์ผ

flowbit ๐Ÿฐโ˜˜๏ธ

๋ชฉ๋ก ๋ณด๊ธฐ
1/15
post-thumbnail

โ˜˜๏ธ 1. ์™œ flowbit์„ ๋งŒ๋“ค์—ˆ๋‚˜

๊ธฐ์กด ์ž‘์—… ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ•œ ๊ฐ€์ง€ ์•„์‰ฌ์›€์ด ์žˆ์—ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ๋Š” ๋ณด์ด๋Š”๋ฐ,
๊ทธ ์ƒํƒœ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€๋Š” ์ž˜ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

โ†’ ์ด๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ํฐ ๋ฌธ์ œ์˜€๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์ด ์ž‘์—…์ด ์–ธ์ œ ์‹œ์ž‘๋๋Š”์ง€
  • ๋ˆ„๊ฐ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€
  • ์™œ ์ค‘๊ฐ„์— ๋ฉˆ์ท„๋Š”์ง€

์ด๋Ÿฐ ์ •๋ณด๋Š” ๋กœ๊ทธ๋ฅผ ๋”ฐ๋กœ ๋’ค์ง€๊ฑฐ๋‚˜, ์•„์˜ˆ ๋‚จ์•„์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ๋งŽ์•˜๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ๋งŒ์œผ๋กœ๋Š” ์ž‘์—…์˜ ํ๋ฆ„์„ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์„๊นŒ?

๊ทธ๋ž˜์„œ ๊ตฌ์กฐ๋ฅผ ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ”๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

Task โ†’ ํ˜„์žฌ ์ƒํƒœ (์กฐํšŒ์šฉ)
TaskEvent โ†’ ์ƒํƒœ ๋ณ€ํ™” ์ด๋ ฅ (๊ธฐ๋ก์šฉ)

์ฆ‰,
์ƒํƒœ ์ค‘์‹ฌ์ด ์•„๋‹ˆ๋ผ ์ด๋ฒคํŠธ ์ค‘์‹ฌ์œผ๋กœ ํ๋ฆ„์„ ๋‚จ๊ธฐ๋Š” ๊ตฌ์กฐ

์ด ํ”„๋กœ์ ํŠธ๋Š”
์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

flowbit ๊ตฌ์กฐ

๊ฒฐ๊ตญ,

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
์ƒํƒœ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ํ๋ฆ„์„ ๋‹ค๋ฃจ๋Š” ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค


โ˜˜๏ธ 2. ์˜ค๋Š˜ ํ•œ ๊ฒƒ

์˜ค๋Š˜์€ ๋‹จ์ˆœ ์„ธํŒ…์ด ์•„๋‹ˆ๋ผ
์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„(MVP)์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ๋‹ค.

  • Spring Boot ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • Docker ๊ธฐ๋ฐ˜ PostgreSQL / Redis ๊ตฌ์„ฑ
  • GitHub ๋ ˆํฌ ์ƒ์„ฑ ๋ฐ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ
  • Task ๋„๋ฉ”์ธ ์„ค๊ณ„
  • Task ์ƒ์„ฑ API (POST /tasks)
  • Task ์กฐํšŒ API (GET /tasks, GET /tasks/{id})
  • test.http ๊ธฐ๋ฐ˜ API ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

๋‹จ์ˆœํžˆ ๋งŒ๋“ค์—ˆ๋‹ค๊ธฐ๋ณด๋‹ค
๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ํ๋ฆ„์ด ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ์ƒํƒœ๊นŒ์ง€ ๋งŒ๋“  ๊ฒƒ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.

๊ฒฐ๊ตญ ์˜ค๋Š˜์€

์ดํ›„ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋งŒ๋“  ๋‹จ๊ณ„์˜€๋‹ค


โ˜˜๏ธ 3. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…

Spring Boot + Docker๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ–ˆ๋‹ค.

๋กœ์ปฌ์— DB๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ 
Docker๋กœ PostgreSQL๊ณผ Redis๋ฅผ ์˜ฌ๋ ธ๋‹ค.

PostgreSQL โ†’ ๋ฐ์ดํ„ฐ ์ €์žฅ
Redis โ†’ ์ดํ›„ ์บ์‹ฑ/ํ™•์žฅ ๊ณ ๋ ค

docker-compose๋กœ ์ „์ฒด ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌ

๐Ÿ’ก ์„ ํƒ ์ด์œ 

ํ™˜๊ฒฝ์„ ์‰ฝ๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ 
๋กœ์ปฌ ํ™˜๊ฒฝ์„ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ 
์„ค์ • ์ž์ฒด๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

๊ฐœ๋ฐœ ํ™˜๊ฒฝ๋„ ๊ฒฐ๊ตญ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ƒํƒœ (postgres, redis)

ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ƒํƒœ (PostgreSQL, Redis)

์ดํ›„ ํ™•์žฅ๊ณผ ์„ฑ๋Šฅ ๊ฐœ์„ ๊นŒ์ง€ ๊ณ ๋ คํ•œ ๊ธฐ๋ฐ˜์„ ๋ฏธ๋ฆฌ ์žก์•„๋‘” ์…ˆ์ด๋‹ค


โ˜˜๏ธ 4. ๋„๋ฉ”์ธ ์„ค๊ณ„ (Task)

๊ฐ€์žฅ ๋จผ์ € Task ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๊ณ„ํ–ˆ๋‹ค.

@Entity
public class Task {
    private Long id;
    private String title;
    private String description;
    private TaskStatus status;
    private LocalDateTime createdAt;
}

์ด ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœ CRUD์šฉ์ด ์•„๋‹ˆ๋‹ค.

์ดํ›„ TaskEvent ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ
ํ˜„์žฌ ์ƒํƒœ ์Šค๋ƒ…์ƒท ์—ญํ• ์ด๋‹ค.


โ˜˜๏ธ 5. API ๊ตฌํ˜„

๐ŸŸข CREATE

POST /tasks

๐Ÿ”ต READ

GET /tasks
GET /tasks/{id}

๐Ÿ’ก ๊ตฌํ˜„ ํฌ์ธํŠธ

๋‹จ์ˆœ CRUD ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ
๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์ œ๋Œ€๋กœ ์ด์–ด์ง€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„

์ƒ์„ฑ โ†’ ์ €์žฅ โ†’ ์กฐํšŒ
์ด ํ๋ฆ„์ด ๋Š๊ธฐ์ง€ ์•Š๋Š”์ง€ ํ™•์ธ

PostgreSQL์— ์ €์žฅ๋œ Task ๋ฐ์ดํ„ฐ ํ™•์ธ

โ†’ ์‹ค์ œ DB์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์ƒํƒœ

GET /tasks ์š”์ฒญ ๊ฒฐ๊ณผ (Task ๋ชฉ๋ก ์กฐํšŒ JSON ์‘๋‹ต)

โ†’ ์—ฌ๋Ÿฌ Task์˜ ํ˜„์žฌ ์ƒํƒœ ์Šค๋ƒ…์ƒท์„ ๋ฐ˜ํ™˜

GET /tasks/{id} ๋‹จ๊ฑด ์กฐํšŒ ๊ฒฐ๊ณผ

โ†’ ํŠน์ • Task์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์กฐํšŒ


โ˜˜๏ธ 6. test.http๋กœ API ํ…Œ์ŠคํŠธ

Postman ๋Œ€์‹  test.http๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

POST http://localhost:8080/tasks
GET http://localhost:8080/tasks
GET http://localhost:8080/tasks/1

๐Ÿ’ก ์„ ํƒ ์ด์œ 

์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ 
์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฌธ์„œ ์—ญํ• ์„ ํ•˜๊ณ 
ํ˜‘์—… ์‹œ ๊ณต์œ ํ•˜๊ธฐ ์‰ฝ๋‹ค

๋‹จ์ˆœ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ
API ๋ช…์„ธ๋ฅผ ๊ฐ™์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.

test.http ๊ธฐ๋ฐ˜ API ํ…Œ์ŠคํŠธ ์ฝ”๋“œ (CREATE, READ ์š”์ฒญ ์ •์˜)


โ˜˜๏ธ 7. ์‚ฝ์งˆ ํฌ์ธํŠธ

์˜ค๋Š˜ ๊ฒช์€ ์ด์Šˆ๋“ค:

  • Spring Security ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ /login ํŽ˜์ด์ง€ ๋…ธ์ถœ
  • Docker ์‹คํ–‰ ์•ˆ ํ•ด์„œ DB ์—ฐ๊ฒฐ ์‹คํŒจ
  • Git ํžˆ์Šคํ† ๋ฆฌ ์ˆ˜์ •ํ•˜๋ฉด์„œ force push ๊ฒฝํ—˜
  • Controller ๋งคํ•‘ ์˜ค๋ฅ˜ (404)

๋Œ€๋ถ€๋ถ„
์ฝ”๋“œ ๋ฌธ์ œ๋ผ๊ธฐ๋ณด๋‹ค ํ™˜๊ฒฝ/์„ค์ • ๋ฌธ์ œ์˜€๋‹ค


โ˜˜๏ธ 8. ์˜ค๋Š˜ ๋ฐฐ์šด ํ•ต์‹ฌ

  • Entity์™€ API ์‘๋‹ต์€ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค
  • JPA๋Š” ํŽธํ•˜์ง€๋งŒ ๊ตฌ์กฐ ์ดํ•ด๊ฐ€ ๋” ์ค‘์š”ํ•˜๋‹ค
  • test.http๋Š” ํ…Œ์ŠคํŠธ + ๋ฌธ์„œ ์—ญํ• ์„ ๋™์‹œ์— ํ•œ๋‹ค

๊ฒฐ๊ตญ,

๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„๋ณด๋‹ค
๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ๊ฐˆ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒŒ ๋” ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋А๊ผˆ๋‹ค


โ˜˜๏ธ 9. ํ˜„์žฌ ์ƒํƒœ

CREATE โœ”๏ธ
READ โœ”๏ธ

๊ธฐ๋ณธ ํ๋ฆ„์€ ์™„์„ฑ


โ˜˜๏ธ 10. ๋‹ค์Œ ๋ชฉํ‘œ

Response DTO ์ ์šฉ
API ๊ตฌ์กฐ ๊ฐœ์„ 
TaskEvent ๋„๋ฉ”์ธ ์„ค๊ณ„

์ƒํƒœ ์ค‘์‹ฌ ๊ตฌ์กฐ์—์„œ
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ๋„˜์–ด๊ฐ„๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€