์งํ์ฒ ๊ฒฝ๋ก ์กฐํ - TDD ๋ฏธ์ ์ ์งํํ๋ Repository
- ๋ชจ๋ ์งํ์ฒ ๋ ธ์ ๊ณผ ๊ฐ ๋ ธ์ ์ ํฌํจ๋ ์งํ์ฒ ์ญ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ
- ์ธ์ ํ ์คํธ์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑ (Outside-In)
- ํ์ด์ง ์ฐ๋
- ๋ชจ๋ ์งํ์ฒ ๋ ธ์ ๊ณผ ์งํ์ฒ ์ญ ๋ชฉ๋ก์ ์กฐํ
Feature: ์ ์ฒด ์งํ์ฒ ๋
ธ์ ๋ ์ ๋ณด ์กฐํ
Scenario: ์งํ์ฒ ๋
ธ์ ๋ ์ ๋ณด ์กฐํ๋ฅผ ํ๋ค.
Given ์งํ์ฒ ์ญ์ด ์ฌ๋ฌ ๊ฐ ์ถ๊ฐ๋์ด์๋ค.
And ์งํ์ฒ ๋
ธ์ ์ด ์ฌ๋ฌ ๊ฐ ์ถ๊ฐ๋์ด์๋ค.
And ์งํ์ฒ ๋
ธ์ ์ ์งํ์ฒ ์ญ์ด ์ฌ๋ฌ ๊ฐ ์ถ๊ฐ๋์ด์๋ค.
When ์งํ์ฒ ๋
ธ์ ๋ ์ ์ฒด ์กฐํ ์์ฒญ์ ํ๋ค.
Then ์งํ์ฒ ๋
ธ์ ๋ ์ ์ฒด๋ฅผ ์๋ต ๋ฐ๋๋ค.
- ์ธ์ ์กฐ๊ฑด ํ์ ํ๊ธฐ - fin
- ์ธ์ ํ ์คํธ ์์ฑํ๊ธฐ - fin
- ์ธ์ ํ ์คํธ ์ฑ๊ณต ์ํค๊ธฐ - fin
- ๊ธฐ๋ฅ ๊ตฌํ - fin
- API๋ฅผ ํ์ฉํ์ฌ ํ์ด์ง ์ฐ๋ํ๊ธฐ - fin
- ์ธ์ ํ ์คํธ ์์ฑ
- Mock ์๋ฒ์ DTO ์ ์
- ์ปจํธ๋กค๋ฌ ๊ตฌํ
- ์๋น์ค ๊ตฌํ - TDD๋ก ์งํ
- ์ธ์ ํ ์คํธ ๊ฒ์ฆ ํ ํ์ธ
- HTTP Cache์ ์ข ๋ฅ๋ฅผ ํ์ต - fin
- ์งํ์ฒ ๋ ธ์ ๋ ์กฐํ์ ETag๋ฅผ ํตํด ์บ์๋ฅผ ์ ์ฉ - fin
- LineControllerTest์ ETag ํ ์คํธ๋ฅผ ์ฑ๊ณต์ํค๊ธฐ - fin
- ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์ค์ด๊ธฐ ์ํด์๋ ์๋ฒ์ชฝ์๋ ์บ์ ์ค์ ์ด ํ์
- ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ
- ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ(Happy Case)์ ๋ชฉํ๋ก ํ๊ณ ์์ธ ์ํฉ(Side Case)์ ๋ํ ์ฒ๋ฆฌ๋ ๋ค์ ๋จ๊ณ์์ ๊ณ ๋ ค
- TDD ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ผ์ ๊ฐ๋ฐ ์งํ
- ์ธ์ ์กฐ๊ฑด & ์ธ์ ํ ์คํธ ์์ฑ
- ๊ธฐ๋ฅ ๊ตฌํ์ ํ์ํ ๋จ์ ํ ์คํธ ์์ฑ
- ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ(ํ ์คํธ ์ฝ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ณต ์ ๊ฑฐ)
- ๊ฐ์ฒด์งํฅ ์ํ์ฒด์กฐ ์ค์
- ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ ์ ๋ ฅ
- ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก์ ๊ธฐํ ์ ๋ณด๋ฅผ ์๋ต
- ์ด ์์์๊ฐ, ์ด ๊ฑฐ๋ฆฌ ๋ฑ
- ์ต๋จ ๊ฒฝ๋ก๊ฐ ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ ๊ฒฝ๋ก๋ ํ๋๋ง ์๋ต
- ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ ๊ฒฝ๋ก ์ ๋ณด ๋
ธ์ถ
- ์ด ์์์๊ฐ, ์ ์ฐจ์ญ ๋ฑ
- ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฒํผ๊ณผ ์ต์ ์๊ฐ ๊ธฐ์ค ์กฐํ๋ ๋ค๋ฅธ ๋ฏธ์
์ด๋ฏ๋ก ๋ฌด์
- ์ต์์๊ฐ ๊ธฐ์ค์ 3๋จ๊ณ ๋ฏธ์
- ์ฆ๊ฒจ์ฐพ๊ธฐ(๋ณ)์ 3์ฃผ์ฐจ ๋ฏธ์
-
์ธ์ ์กฐ๊ฑด ์์ฑ ๋ฐ ์ธ์ ํ ์คํธ ์์ฑํ๊ธฐ
- Gherkin ๋ฌธ๋ฒ์ ํ์ฉํ์ฌ ์ธ์ ์กฐ๊ฑด ์์ฑ
-
์ธ์ ํ ์คํธ ์ฑ๊ณต ์ํค๊ธฐ
- mock ์๋ฒ์ dto๋ฅผ ์ ์ํ์ฌ ์ธ์ ํ ์คํธ ์ฑ๊ณต ์ํค๊ธฐ
-
๊ธฐ๋ฅ ๊ตฌํ
- ์ปจํธ๋กค๋ฌ ๋ ์ด์ด ๊ตฌํ ์ดํ ์๋น์ค ๋ ์ด์ด ๊ตฌํ ์ ์๋น์ค ํ ์คํธ ์ฐ์ ์์ฑ ํ ๊ธฐ๋ฅ ๊ตฌํ
- ์๋น์ค ํ ์คํธ ๋ด๋ถ์์ ๋๋ฉ์ธ๋ค๊ฐ์ ๋ก์ง์ ํ๋ฆ์ ๊ฒ์ฆ, ์ด ๋ ์ฌ์ฉ๋๋ ๋๋ฉ์ธ์ mock ๊ฐ์ฒด๋ฅผ ํ์ฉ
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ๋ก์ง์ ๊ฒ์ฆํ ๋๋ ๊ฐ๊ธ์ ์ค์ ๊ฐ์ฒด๋ฅผ ํ์ฉ
- Happy ์ผ์ด์ค์ ๋ํ ๋ถ๋ถ๋ง ๊ตฌํ(Side ์ผ์ด์ค์ ๋ํ ๊ตฌํ์ ๋ค์ ๋จ๊ณ์์ ์งํ)
-
API๋ฅผ ํ์ฉํ์ฌ ํ์ด์ง ์ฐ๋ํ๊ธฐ
- ์ ์์ ์ธ ๊ธฐ๋ฅ์ ๋ํ ์ฒ๋ฆฌ ์ฐ์ ์ ์ฉ
- jgrapht ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์กฐํํ ์ ์์
- ์ ์ (vertext)๊ณผ ๊ฐ์ (edge), ๊ทธ๋ฆฌ๊ณ ๊ฐ์ค์น ๊ฐ๋
์ ์ด์ฉ
- ์ ์ : ์งํ์ฒ ์ญ(Station)
- ๊ฐ์ : ์งํ์ฒ ์ญ ์ฐ๊ฒฐ์ ๋ณด(LineStaion)
- ๊ฐ์ค์น: ๊ฑฐ๋ฆฌ or ์์์๊ฐ
- ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธฐ์ค ์กฐํ ์ ๊ฐ์ค์น๋ฅผ
๊ฑฐ๋ฆฌ
๋ก ์ค์
@Test
public void getDijkstraShortestPath() {
WeightedMultigraph<String, DefaultWeightedEdge> graph
= new WeightedMultigraph(DefaultWeightedEdge.class);
graph.addVertex("v1");
graph.addVertex("v2");
graph.addVertex("v3");
graph.setEdgeWeight(graph.addEdge("v1", "v2"), 2);
graph.setEdgeWeight(graph.addEdge("v2", "v3"), 2);
graph.setEdgeWeight(graph.addEdge("v1", "v3"), 100);
DijkstraShortestPath dijkstraShortestPath
= new DijkstraShortestPath(graph);
List<String> shortestPath
= dijkstraShortestPath.getPath("v3", "v1").getVertexList();
assertThat(shortestPath.size()).isEqualTo(3);
}
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌํ์ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋จ์ ํ ์คํธ๋ฅผ ํ์ง ์์
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ง์ ๊ตฌํํ๋ ๋ก์ง์ ๊ฒ์ฆํด์ผ ํจ
- ์ง์ ๊ตฌํํ๋ ๋ก์ง ๊ฒ์ฆ ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ถ์ ์ค์ ๊ฐ์ฒด๋ฅผ ํ์ฉ
- Happy ์ผ์ด์ค ์ด์ธ ์์ธ ์ํฉ์ ๋ํ ๊ธฐ๋ฅ ๊ตฌํ
- ๋จ์ ํ ์คํธ๋ฅผ ํตํด ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ด ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ๊ฒ์ฆ
- ์ต์ ์๊ฐ ๊ฒฝ๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐ
- ์ต๋จ ๊ฒฝ๋ก ์กฐํ ๊ธฐ๋ฅ๊ณผ์ ์ฝ๋ ์ค๋ณต ์ ๊ฑฐ(ํ ์คํธ ์ฝ๋ ํฌํจ)
- Bean์ผ๋ก ์ฃผ์ ๋ฐ๋ ๋ณ์๋ค final๋ก ์์
- PathController์ ๋ํ ํ ์คํธ ์ฝ๋ ์์ฑ (side case๋ ํจ๊ป)
- Enum์ผ๋ก PathType ๊ตฌํ ํ ๋ฆฌํฉํ ๋ง
- PathAcceptanceTest๋ฅผ ParameterizedTest๋ก ์์ ํด๋ณด๊ธฐ
- PathService์ DijkstraShortestPath.findPathBetween() ๋ฉ์๋๋ฅผ ์ ์ฉํ ์ ์๋ ๋ถ๋ถ ์ฐพ์๋ณด๊ธฐ
- ๊ฒฝ๋ก ๊ฒ์์ css๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๋ถ๋ถ ์์
-
PathController
์searchPath
๋ฉ์๋์RequestParam
์ ์ปค๋งจ๋ ๊ฐ์ฒด(RequestDto)๋ก ๋ณ๊ฒฝ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ- Dto์ ๋ณ์๋ก type๋ ํจ๊ป ์ ์ฅํ๋๋ก ์์
-
FrontEnd ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ ์์
- service์ index.js ์์ (query๋ก type๋ ํจ๊ป ๋๊ธฐ๋๋ก)
- search.js์ ๊ฒฝ๋ก ์กฐํ ํจ์ ์์
- ์กด์ฌํ์ง ์๋ ์ญ์ ์ ๋ ฅํ ์ Front์์ ์์ธ ์ฒ๋ฆฌํ๋๋ก ์์
-
์ต๋จ๊ฑฐ๋ฆฌ, ์ต์์๊ฐ์ ๋ํ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ๋ณด๋ด์ง ๋ง๊ณ ์์ฒญ๋ง๋ค ์ ๋ฌํ๋๋ก ์์ (์บ์ฑ ์ ์ฉ์ด ํ์)
-
์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ด ๊ฐ์ ๊ฒฝ์ฐ, ์กด์ฌํ์ง ์๋ ์ถ๋ฐ์ญ์ ๋ํ ์กฐํ ์์ฒญ์ด ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ์ ๋ํ ํ ์คํธ ์ผ์ด์ค ์์ฑ