Autofixture: ์ œ์•ˆ: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด "Arrange Act Assert" ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

์— ๋งŒ๋“  2017๋…„ 11์›” 18์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AutoFixture/AutoFixture

ํ˜„์žฌ ์šฐ๋ฆฌ์˜ ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธ ๋ณธ๋ฌธ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์„œํˆฌ๋ฅธ 4๋‹จ๊ณ„ ํ…Œ์ŠคํŠธ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. xUnit๊ณผ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š” ๊ตฌ์‹ ๋ฌผ๊ฑด์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ด€์‹ฌ์‚ฌ:

  • // Teardown ๋‹จ๊ณ„๋Š” restore ํ•„์š” ์—†์ด ํ…Œ์ŠคํŠธ๋‹น sut ์ƒ์„ฑํ•˜๋ฏ€๋กœ xUnit ํ…Œ์ŠคํŠธ์—์„œ ํ•ญ์ƒ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • // Fixture setup , // Exercise System ๋ฐ // Verify Outcome ๋Š” ๋„ˆ๋ฌด ์žฅํ™ฉํ•ด ๋ณด์ด์ง€๋งŒ // arrange , // act ๋ฐ // assert ๋Š” ๋” ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋‹จ์–ด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค(์˜คํƒ€ ์—†์ด exercise ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ์–ด๋ ต์Šต๋‹ˆ๋‹ค ๐Ÿ˜…).

๋”ฐ๋ผ์„œ @moodmosaic ๊ฐ•๋ ฅํ•œ ์ด์˜๊ฐ€ ์—†๋‹ค๋ฉด(์—†์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค) 3๋‹จ๊ณ„ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ๊ณ ํ†ต๋ณด๋‹ค๋Š” ๋งŒ์กฑ๊ฐ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์—์š” ๐Ÿ˜–

enhancement good first issue

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ €๋Š” ๋ณดํ†ต // Act & Assert ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ฉ‹์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค ๐Ÿ˜Ž @moodmosaic ์ด ๊ฑฑ์ •๋˜์ง€ ์•Š๋Š” ํ•œ ๊ทธ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

๋ชจ๋“  22 ๋Œ“๊ธ€

๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๊ฐ€์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

// Arrange
// Act
// Assert

๋Œ€์‹ ์—

// arrange
// act
// assert

๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ๋Œ€๋ฌธ์ž๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. AAA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.:blush:

๊ฐ ๋‹จ๊ณ„๋ฅผ ๋นˆ ์ค„๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ œ๊ฐ€ ์š”์ฆ˜ ์‚ฌ์šฉํ•˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…Œ์ŠคํŠธ ๋ฆฌ๋”๋Š” ๊ทธ๊ฒƒ์ด Given/When/Then ๋˜๋Š” Arrange/Act/Assert ๋˜๋Š” ์‹ฌ์ง€์–ด (4๋‹จ๊ณ„๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Œ) ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ "์ฝ”๋“œ๋ณด๋‹ค 3 ์„  ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ"์„น์…˜์—์„œ ๋” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์— .

์ €๋Š” OSS์—์„œ ์ฃผ์„ ๋Œ€์‹  ๋นˆ ์ค„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ์‹ซ์–ดํ•˜๊ณ  Marks ์•„์ด๋””์–ด์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด ์˜๊ฒฌ์„ ์ฐธ์กฐ

๊ฐ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„ ์œ„์— ์žˆ๋Š” ์ฃผ์„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ๊ณผ ์ž…๋‹ˆ๋‹ค . ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋“ค์€ ์ด์œ  ๋Œ€์‹ ์— ๋ฐฉ๋ฒ• ์„ ์„ค๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์ด์ œ AutoFixture๋กœ ๋Œ์•„๊ฐ€์„œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ฃผ์„์œผ๋กœ ์žฅ์‹๋˜์–ด ์žˆ๊ณ  ์กฐ๋ช…๊ธฐ ๋ถ„ํ•ด ๋‹จ๊ณ„๊ฐ€ ๊ฑฐ์˜ ํ•ญ์ƒ ๋น„์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์ง„ํ–‰ํ•˜์—ฌ AAA๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ๊ณผ์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚˜๋Š” ๋˜ํ•œ ์ด ๊ทœ์น™์„ ์ž์ฃผ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ, ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” "์‚ฌ๊ณผ"๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„ ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ณ  ์—„๊ฒฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ "๋ ˆ์ด๋ธ”์ด ์žˆ๋Š”" ํ…Œ์ŠคํŠธ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์Šต๊ด€์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜‰

ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์Šต๊ด€์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค

์ด๊ฒƒ; ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ๋ˆ„๊ฐ€ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”์ง€์˜ ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Autofixture์˜ ์—ด๋ ฌํ•œ ํŒฌ์ด๋ฉฐ ํ•ญ์ƒ ์ œ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๋ฉฐ ๋ณด๋‹ตํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
// Fixture setup ~ // Arrange
// Exercise System ~ // Act
// Verify Outcome ~ // Assert
๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจ๋‚ด // Teardown ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ผ๋ถ€ ๋‹จ๊ณ„๊ฐ€ ํ•จ๊ป˜ ๊ฒฐํ•ฉ๋˜๋ฏ€๋กœ '์ฐพ๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ'๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ฆ‰, ์šด๋™ ์‹œ์Šคํ…œ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ ๊ณผ ์œ ์‚ฌํ•œ IIRC๋ฅผ ์ ‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@moodmosaic ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด '์ฐพ๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ'๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ๋ณ„๋กœ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด์ง€๋งŒ ๋” ๋ถ„๋ช…ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค,
์—์ด์‚ฌ

// Exercise system and verify outcome ๋Œ€ํ•œ @moodmosaic ์€ ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
// Act and Assert
์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์ƒ๊ฐ์„ ํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

์ €๋Š” ๋ณดํ†ต // Act & Assert ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ฉ‹์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค ๐Ÿ˜Ž @moodmosaic ์ด ๊ฑฑ์ •๋˜์ง€ ์•Š๋Š” ํ•œ ๊ทธ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

์–ด๋Š ์ชฝ์ด๋“  OK:neckbeard:

๊ทธ๋ž˜์„œ ์ด๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•˜๊ณ  VS 2017์—์„œ All.sln์„ ๋กœ๋“œํ•œ ํ›„ ๋‘ ๊ฐœ์˜ F# ํ”„๋กœ์ ํŠธ
( AutoFoq,AutoFoqUnitTest ) ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. F#์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†์œผ๋ฏ€๋กœ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
screenshot_121417_042805_pm

@micheleissa ์ตœ์‹  ๋ฒ„์ „์˜ VS(15.5.1 ์ด์ƒ)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(MS๊ฐ€ F# SDK์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•จ). ๋˜ํ•œ ๋‹ซํžŒ VS๊ฐ€ ์žˆ๋Š” ๋ฃจํŠธ์—์„œ git clean -fdx . ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒดํฌ์•„์›ƒํ•œ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ์ž„์‹œ ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๋‹จ๊ณ„ ๋ชจ๋‘ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ดํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค ๐Ÿ˜‰

screenshot_121517_111531_am
@zvirja ์ตœ์‹  ๋ฒ„์ „์˜ VS 2017 15.5.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ž

๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

  • ๋‹ซ๊ธฐ VS
  • ์ตœ์‹  master
  • ๋ฃจํŠธ๋กœ ์ด๋™ํ•˜์—ฌ git clean -fdx .
  • VS๋ฅผ ๋‹ค์‹œ ์—ฌ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด์ „ SDK์—์„œ ๋‹จ์ˆœํžˆ ๋‚จ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปดํ“จํ„ฐ์— F# ๋„๊ตฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
image

์˜ˆ, ๋‘ ๋ฒˆ์งธ๋ฅผ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค :)
์ง€๊ธˆ ํ•ด๋ณผ๊ฒŒ์š”

@zvirja ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์งˆ๋ฌธ์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๊ธฐ๋œ ์ €์žฅ์†Œ์—์„œ ์ž‘์—… ์ค‘์ธ ์ง€์ ์„ ์ด ํ‹ฐ์ผ“์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํšจ๊ณผ๊ฐ€ ์ข‹์•˜๋‹ค! ๐Ÿ‘

๋ถ„๊ธฐ๋œ ์ €์žฅ์†Œ์—์„œ ์ž‘์—… ์ค‘์ธ ์ง€์ ์„ ์ด ํ‹ฐ์ผ“์— ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๊นŒ?

์ด ๊ธฐ์‚ฌ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/sevntu-checkstyle/sevntu.checkstyle/wiki/Development-workflow-with-Git :-Fork,-Branching,- ์ปค๋ฐ‹ ๋ฐ ํ’€ ์š”์ฒญ

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋ถ„๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค, ๋‹น์‹ ์€ ๋Œ์–ด ์˜ค๊ธฐ ์š”์ฒญ์„ ์ž‘์„ฑํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ (์˜ˆ๋ฅผ ๋“ค์–ด, ์ฐธ์กฐ ๋ชธ์—์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ์ด ํ•˜๋‚˜).

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์—ฌ๋Ÿฌ๋ถ„์ด ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ธฐ์—ฌ ์ง€์นจ์— ์–ธ๊ธ‰๋œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋™์•ˆ ํ’€ ์š”์ฒญ์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

JoshKeegan picture JoshKeegan  ยท  6์ฝ”๋ฉ˜ํŠธ

mjfreelancing picture mjfreelancing  ยท  4์ฝ”๋ฉ˜ํŠธ

zvirja picture zvirja  ยท  3์ฝ”๋ฉ˜ํŠธ

zvirja picture zvirja  ยท  4์ฝ”๋ฉ˜ํŠธ

Accc99 picture Accc99  ยท  4์ฝ”๋ฉ˜ํŠธ