Skip to content

[3์ฃผ์ฐจ] ๐Ÿš€ 2๋‹จ๊ณ„ - ๋‹ค์ค‘ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ#23

Open
JoyDaheeCha wants to merge 22 commits intonext-step:joydaheechafrom
JoyDaheeCha:step2
Open

[3์ฃผ์ฐจ] ๐Ÿš€ 2๋‹จ๊ณ„ - ๋‹ค์ค‘ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ#23
JoyDaheeCha wants to merge 22 commits intonext-step:joydaheechafrom
JoyDaheeCha:step2

Conversation

@JoyDaheeCha
Copy link
Copy Markdown

@JoyDaheeCha JoyDaheeCha commented Sep 26, 2025

๋ธŒ๋ผ์šด๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์š”!
์ด๋ฒˆ ๋ฆฌ๋ทฐ๋„ ์ž˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค~

์งˆ๋ฌธ 1

Hooks์—์„œ baseUrl์„ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์งˆ๋•Œ๋งˆ๋‹ค Hook ์—์„œ ์ดˆ๊ธฐํ™”ํ•  ๋Œ€์ƒ์ด ๋งŽ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”. ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ๋Š” 3๊ฐœ ์„œ๋น„์Šค ๋ฟ์ด๋ผ ํ•˜๋‚˜์˜ Hook์œผ๋กœ ๋‘์—ˆ๋Š”๋ฐ, ๋ณ„๊ฐœ์˜ Hook์œผ๋กœ ๋‘๋Š”๊ฒŒ ๋‚˜์„์ง€ ์˜๊ฒฌ ์—ฌ์ญค๋ด…๋‹ˆ๋‹ค~

์งˆ๋ฌธ 2

docker ๊ตฌ์„ฑ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ cursor ์™€ ์ž‘์—…ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ๋ฒˆ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž
cursor ๊ฐ€ ์ž‘์—…ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ธฐ์ˆ  ์ง€์‹์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•„, ์ฝ”๋“œ๋ฅผ ๋ดค์„๋•Œ ์ข‹์€ ์ฝ”๋“œ์ธ์ง€ ์• ๋งคํ•  ๊ฒฝ์šฐ, "์ด์ •๋„๋ฉด ๋˜์—ˆ๋‹ค" ๊ฒฐ์ •ํ•˜์‹œ๋Š” ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

  • ์—…๋ฌดํ• ๋•Œ๋Š” cursorํ•œํ…Œ ํ•œ๋ฒˆ ์ž‘์—…์„ ์‹œํ‚ค๊ณ , Junie๋กœ ๋ฆฌ๋ทฐ๋ฅผ ๊ผผ๊ผผํžˆ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ์„ ํ–ˆ๋Š”๋ฐ, Junie๋„ ์ž์ฃผ ํ‹€๋ฆฌ๋”๋ผ๊ตฌ์š”
    (ํ”„๋กฌํ”„ํŠธ ํƒ“์ด๊ฒ ์ง€๋งŒ...)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

- ๋ชจ๋“  ์„œ๋น„์Šค(kiosk, admin, reservation)๋ฅผ ๊ณต์šฉ ๋„คํŠธ์›Œํฌ atdd-net์— ์—ฐ๊ฒฐ
- admin๊ณผ reservation ์„œ๋น„์Šค์— ๊ณต์šฉ DB(atdd-db) ์ ‘์† ์ •๋ณด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€
- MySQL 8.0 ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ๋ฐฉ์–ธ ์„ค์ •
- DDL ๋ชจ๋“œ๋ฅผ validate๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ธฐ์กด ์Šคํ‚ค๋งˆ ์‚ฌ์šฉ
- kiosk๊ฐ€ admin์— ์˜์กดํ•˜๋„๋ก depends_on ์„ค์ •
- ์ธํ”„๋ผ DB(atdd-db) ์ž๋™ ์‹œ์ž‘ ๋ฐ ์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- start_infra_db() ํ•จ์ˆ˜๋กœ DB ํ—ฌ์Šค์ฒดํฌ ๋ฐ ์ดˆ๊ธฐํ™” ์ž๋™ํ™”
- stop_infra_db() ํ•จ์ˆ˜๋กœ ์ธํ”„๋ผ DB ์ •๋ฆฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ์„œ๋น„์Šค ์‹œ์ž‘ ์‹œ ์ธํ”„๋ผ DB๋ฅผ ๋จผ์ € ์‹œ์ž‘ํ•˜๋„๋ก ์ˆœ์„œ ์กฐ์ •
- ๋ชจ๋“  ์„œ๋น„์Šค ์ค‘์ง€ ์‹œ ์ธํ”„๋ผ DB๋„ ํ•จ๊ป˜ ์ค‘์ง€ํ•˜๋„๋ก ์ˆ˜์ •
- ๋„์›€๋ง์— ๊ณต์šฉ DB ๊ด€๋ จ ์ •๋ณด ์ถ”๊ฐ€
- customers ํ…Œ์ด๋ธ” ์ถ”๊ฐ€ (Admin ์„œ๋น„์Šค์—์„œ ํ•„์š”)
- JPA DDL ๋ชจ๋“œ๋ฅผ validate์—์„œ none์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ ๋น„ํ™œ์„ฑํ™”
- ๊ณต์šฉ DB์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ํ˜ธํ™˜์„ฑ ๊ฐœ์„ 
- atdd-tests ๋‚ด init.sql๊ณผ ์ถฉ๋Œํ•˜์—ฌ ์ œ๊ฑฐ
Copy link
Copy Markdown
Contributor

@boorownie boorownie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์•ˆ๋…•ํ•˜์„ธ์š” ๋‹คํฌ๋‹˜!
2๋‹จ๊ณ„๋„ ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค!
์•ž ๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ๋„ ๋งŽ์ด ๋ฐ˜์˜ํ•ด์ฃผ์…จ๋„ค์š” ๐Ÿ‘

2๋‹จ๊ณ„ ์š”๊ตฌ์‚ฌํ•ญ ์ค‘ ๋ช‡ ๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒจ๋‘์—ˆ๋Š”๋ฐ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฌ๊ณ ์š”!
ํ˜น์‹œ ์ œ๊ฐ€ ์ž˜๋ชป์ดํ•ดํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒจ์ฃผ์‹œ๊ณ  ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด ๋ฐ”๋กœ ๋ฆฌ๋ทฐ์š”์ฒญ ์ฃผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค!

์งˆ๋ฌธ1๋ฒˆ์€ ์ฝ”๋“œ์— ์ฝ”๋ฉ˜ํŠธ๋กœ ๋‚จ๊ฒจ๋‘์—ˆ๊ณ , 2๋ฒˆ์€ ์•„๋ž˜ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค!
์ฐธ๊ณ ํ•ด์„œ ํ™•์ธ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค :)

===

cursor ๊ฐ€ ์ž‘์—…ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ธฐ์ˆ  ์ง€์‹์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•„, ์ฝ”๋“œ๋ฅผ ๋ดค์„๋•Œ ์ข‹์€ ์ฝ”๋“œ์ธ์ง€ ์• ๋งคํ•  ๊ฒฝ์šฐ, "์ด์ •๋„๋ฉด ๋˜์—ˆ๋‹ค" ๊ฒฐ์ •ํ•˜์‹œ๋Š” ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

์šฐ์„  ์ €๋Š” cursor๋กœ ๊ตฌํ˜„์„ ํ•  ๋•Œ๋„ TDD ํ•  ๋•Œ ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋˜๋Š”์ง€๋ฅผ ์šฐ์„  ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ํ›„ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ด์–ด์„œ ์ง„ํ–‰ํ•ด์ฃผ๋Š”๋ฐ์š”, ์•„๋งˆ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์–ธ์ œ๊นŒ์ง€ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ํ•ด์ฃผ์‹  ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ์–ด์š”.

์‚ฌ์‹ค AI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „๊ณผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฆฌํŒฉํ„ฐ๋ง ์ˆ˜ํ–‰ ๊ธฐ์ค€์ด ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ๋” ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์ด ์—†์–ด๋ณด์ผ ๋•Œ ๊นŒ์ง€ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ˆ˜์ •์„ ํ–ˆ์„ ๋•Œ ํฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์ƒ๊ธธ ๊ฒƒ ๊ฐ™๋‹ค ๋А๊ปด์ง€๋ฉด ์ง€๊ธˆ ํ•  ์ง€ ๋‹ค์Œ์— ํ•  ์ง€๋ฅผ ํŒ๋‹จํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„ ๊ทธ๋งŒ๋‘๋Š” ํŽธ์ด์—์š”!

Comment on lines +18 to 23
private static void initializeRestAssured() {
kioskBaseUrl = KIOSK_URL;
adminBaseUrl = ADMIN_URL;
reservationBaseUrl = RESERVATION_URL;
RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooks์—์„œ baseUrl์„ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์งˆ๋•Œ๋งˆ๋‹ค Hook ์—์„œ ์ดˆ๊ธฐํ™”ํ•  ๋Œ€์ƒ์ด ๋งŽ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”. ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ๋Š” 3๊ฐœ ์„œ๋น„์Šค ๋ฟ์ด๋ผ ํ•˜๋‚˜์˜ Hook์œผ๋กœ ๋‘์—ˆ๋Š”๋ฐ, ๋ณ„๊ฐœ์˜ Hook์œผ๋กœ ๋‘๋Š”๊ฒŒ ๋‚˜์„์ง€ ์˜๊ฒฌ ์—ฌ์ญค๋ด…๋‹ˆ๋‹ค~

๊ฐœ์ธ์ ์œผ๋กœ๋Š” Context์— kioskBaseUrl ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ ๋ฐ”๋กœ BaseUrl์— ์ •์˜ํ•œ URL์„ ์“ฐ๋„๋กํ•˜๋ฉด
๋งค๋ฒˆ ์žฌ์ •์˜ํ•ด์ค„ ํ•„์š”์—†์ด BaseUrl์— ์ •์˜ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–จ๊นŒ์š”?

Comment on lines +31 to +38
- SPRING_PROFILES_ACTIVE=docker
# Database configuration for shared DB
- SPRING_DATASOURCE_URL=jdbc:mysql://atdd-db:3306/atdd?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=secret
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
- SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQL8Dialect
- SPRING_JPA_HIBERNATE_DDL_AUTO=none
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋ฌถ์–ด์„œ ์žฌ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š” :)

https://docs.docker.com/reference/compose-file/fragments/

@@ -0,0 +1,53 @@
# Multi-stage build for Spring Boot application
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋„์ปคํŒŒ์ผ ์ž˜ ๋งŒ๋“ค์–ด์ฃผ์…จ๋„ค์š” ๐Ÿ‘
๋‹ค๋ฅธ ๋„์ปคํŒŒ์ผ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ ๋ คํ•ด๋ณผ๋งŒํ•  ๊ฒƒ ๊ฐ™์•„์š”!

"https://github.com/next-step/atdd-camping-kiosk.git",
"repos/atdd-camping-kiosk"
// ํด๋ก ํ•  ์ €์žฅ์†Œ ๋ชฉ๋ก
val repositories = listOf(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๊ฐ€์ ธ ์˜ฌ ๋ธŒ๋žœ์น˜ ๋ช…๋„ ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ค˜๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋„ค์š” :)

Comment on lines +206 to +207
./manage-services.sh status # ์ƒํƒœ ํ™•์ธ
./manage-services.sh restart # ์žฌ์‹œ์ž‘
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ•ด๋‹น ํŒŒ์ผ์ด ๋ณด์ด์ง€ ์•Š๋„ค์š”!
์ด ํŒŒ์ผ๋“ค์˜ ์ž‘์—…๋„ clone๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ gradle task๋กœ ์˜ฎ๊ฒจ๋ณด๋Š”๊ฑด ์–ด๋–จ๊นŒ์š”?

@@ -1,4 +1,12 @@
-- Create tables if not exist (so we can seed before apps start)
CREATE TABLE IF NOT EXISTS customers (
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์„œ๋น„์Šค์— ๋งž๊ฒŒ ํ•„์š”ํ•œ ํ…Œ์ด๋ธ” ์ถ”๊ฐ€ ๐Ÿ‘


@When("ํ‚ค์˜ค์Šคํฌ ์ƒํ’ˆ ๋ชฉ๋ก์„ ์กฐํšŒํ•œ๋‹ค")
public void ํ‚ค์˜ค์Šคํฌ์ƒํ’ˆ๋ชฉ๋ก์„์กฐํšŒํ•œ๋‹ค() {
lastResponse = getWithAuth(kioskBaseUrl, "/api/products", authToken);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ‚ค์˜ค์Šคํฌ ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ API์—์„œ ์ธ์ฆ์ด ํ•„์š”ํ•œ๊ฐ€์š”?
ํ˜น์‹œ admin์•„ ์•„๋‹Œ๊ฐ€์š”?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants