Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

๐Ÿš€ 1๋‹จ๊ณ„ - ํ† ํฐ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ #180

Merged
merged 10 commits into from
Feb 13, 2022

Conversation

loop-study
Copy link

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฆฌ๋ทฐ์–ด๋‹˜!
3์ฃผ์ฐจ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๊ฒŒ๋œ ๋ฐ•ํ˜„์ฒ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ด์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ๋งˆ๋‹ค ์ธ์ˆ˜ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€, ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ง„ํ–‰๋˜์—ˆ๋Š”๋ฐ, ์ค‘๊ฐ„์— ํ•œ๋ฒˆ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ ๋…๋ฆฝ์ ์ธ ๊ฒƒ๋ณด๋‹ค ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•˜๋Š”๊ฒŒ ๋” ์–ด๋ ค์› ๋„ค์š”. ๊ฐ๊ฐ ๋ถ„๋ฆฌ๋œ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ์™€ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ๋œ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ ์ค‘์—์„œ ๋ฌด์—‡์ด ๋” ์„ ํ˜ธํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  2. TokenAuthenticationInterceptorTest์—์„œ๋Š” Mock์œผ๋กœ ๊ฐ€์งœ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ, preHandle() ํ…Œ์ŠคํŠธ์—์„œ ์„ฑ๊ณตํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์‰ฝ๊ฒŒ ํ†ต๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค๊ฐ์ฒด ํ…Œ์ŠคํŠธ์ธ AuthAcceptanceTest.myInfoWithBearerAuth() ํ† ํฐ ๋ฐœํ–‰์— ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋’ค๋Šฆ๊ฒŒ ์ž˜๋ชป๋œ ๋กœ์ง์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”.
    ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ๊ฐ€์งœ๊ฐ์ฒดํ…Œ์ŠคํŠธ์—์„œ ํ†ต๊ณผ๋ฅผ ํ•œ๋‹ค๋ฉด Mock ๊ฐ์ฒด์˜ ๋‹จ์ ์ธ์ง€ ์•„๋‹ˆ๋ฉด, Mock์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž˜๋ชป ์ž‘์„ฑํ•œ๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
    ์ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  3. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ, JWT์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์—†์–ด์„œ 3์ฃผ์ฐจ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์‚ด์ง ๋Šฆ์€ ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป ๊ตฌํ˜„ํ•œ๊ฒŒ ์žˆ์œผ๋ฉด ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์ง€๋„ ๋ถ€ํƒ๋“œ๋ฆฌ๊ณ˜์Šต๋‹ˆ๋‹ค!๐Ÿ“–
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‡๐Ÿปโ€โ™€๏ธ

2022. 02. 12
๋กœ๊ทธ์ธ ์ธ์ฆ ํ”„๋กœ์„ธ์Šค ์‹ค์Šต ์ •๋ฆฌ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
MemberController, PathController, StationController
- ๊ณตํ†ต ๊ฒฝ๋กœ, ๋ฉ”์„œ๋“œ์—์„œ ํด๋ž˜์Šค๋‹จ์œ„๋กœ ๋ณ€๊ฒฝ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
MemberAcceptanceTest.java
- ํšŒ์› ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
MemberController
- AuthAcceptanceTest ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
READMD.md
- step1 ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
TokenAuthenticationInterceptor
- authenticate ๋ฉ”์„œ๋“œ, AuthenticationToken์—์„œ AuthenticationToken ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
TokenAuthenticationInterceptorTest
- preHandle ํ…Œ์ŠคํŠธ ํ†ต๊ณผ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
TokenAuthenticationInterceptorTest
- ๊ฒ€์ฆ ์ฝ”๋“œ ์ˆ˜์ •

TokenAuthenticationInterceptor
- ์˜ค๋ฅ˜ ์ฝ”๋“œ ์ˆ˜์ •

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
MemberController
- ํ† ํฐ ๊ธฐ๋ฐ˜ ๋ฉ”์„œ๋“œ @AuthenticationPrincipal ์ด์šฉ

MemberSteps
- ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

MemberAcceptanceTest
- ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ์š”์ฒญ ํ™•์ธ ๊ฒ€์ฆ ๋กœ์ง์„ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœ

Resolver : loop-study
See also : heesunjeong
2022. 02. 12
README.md
- ์š”๊ตฌ์‚ฌํ•ญ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ˆ˜์ •

Resolver : loop-study
See also : heesunjeong
Copy link

@heesunjeong heesunjeong left a comment

Choose a reason for hiding this comment

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

์•ˆ๋…•ํ•˜์„ธ์š” ํ˜„์ฒ ๋‹˜, 3์ฃผ์ฐจ ๋ฏธ์…˜ ๋ฆฌ๋ทฐ๋ฅผ ๋งก๊ฒŒ๋œ ์ •ํฌ์„ ์ž…๋‹ˆ๋‹ค :) ์ž˜ ๋ถ€ํƒ๋“œ๋ ค์š” ๐Ÿ˜†
1๋‹จ๊ณ„ ๋ฏธ์…˜ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์‹  ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿ‘ ์งˆ๋ฌธ์ฃผ์‹  ๋ถ€๋ถ„์€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋‹ˆ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ ค์š”~!
์ด์–ด์„œ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค ๐Ÿ”ฅ ๐Ÿ”ฅ

- [x] AuthenticationPrincipalArgumentResolver๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ArgumentResolver ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ

- [x] MemberAcceptanceTest์˜ manageMyInfo ์„ฑ๊ณต ์‹œํ‚ค๊ธฐ
- [x] @AuthenticationPrincipal์„ ํ™œ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์ •๋ณด ๋ฐ›์•„์˜ค๊ธฐ

Choose a reason for hiding this comment

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

์งˆ๋ฌธ์ฃผ์‹  ๋ถ€๋ถ„์€ ์—ฌ๊ธฐ์— ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€ํ• ๊ฒŒ์š” :)

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

ํ†ตํ•ฉ ์ธ์ˆ˜ํ…Œ์Šค๋ฅผ ์ž‘์„ฑํ•˜์‹œ๋ฉด์„œ ์–ด๋ ค์›€์„ ๊ฒช์œผ์…จ๊ตฐ์š” ๐Ÿ˜ข
์ฒ˜์Œ๋ถ€ํ„ฐ ํ†ตํ•ฉ์ธ์ˆ˜ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ธ์ˆ˜ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํ›„์— ์ธ์ˆ˜ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ฉํ•ด๋ณด์‹œ๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•ด๋ณด์‹ค์ˆ˜ ์žˆ์œผ์‹ค ๊ฒƒ ๊ฐ™์•„์š”! ์ €๋„ ๋ถ„๋ฆฌ๋œ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ์˜ ์ž‘์„ฑ์ด ํ›จ์”ฌ ์‰ฝ๊ธฐ๋•Œ๋ฌธ์— ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•˜๊ณ  ์„ฑ๊ณตํ•œ ์ดํ›„์— ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๊ณ  ์žˆ์–ด์š” :)

TokenAuthenticationInterceptorTest์—์„œ๋Š” Mock์œผ๋กœ ๊ฐ€์งœ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ, preHandle() ํ…Œ์ŠคํŠธ์—์„œ ์„ฑ๊ณตํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์‰ฝ๊ฒŒ ํ†ต๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค๊ฐ์ฒด ํ…Œ์ŠคํŠธ์ธ AuthAcceptanceTest.myInfoWithBearerAuth() ํ† ํฐ ๋ฐœํ–‰์— ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋’ค๋Šฆ๊ฒŒ ์ž˜๋ชป๋œ ๋กœ์ง์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”.
์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ๊ฐ€์งœ๊ฐ์ฒดํ…Œ์ŠคํŠธ์—์„œ ํ†ต๊ณผ๋ฅผ ํ•œ๋‹ค๋ฉด Mock ๊ฐ์ฒด์˜ ๋‹จ์ ์ธ์ง€ ์•„๋‹ˆ๋ฉด, Mock์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž˜๋ชป ์ž‘์„ฑํ•œ๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋„ค ๋งž์Šต๋‹ˆ๋‹ค mock ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ๋Š” ํ˜„์ฒ ๋‹˜์ด ๊ฒฝํ—˜ํ•˜์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์‹ค์ œ๋Š” ์‹คํŒจํ•˜๋Š” ์ผ€์ด์Šค์ด์ง€๋งŒ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋ž˜์„œ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹ค์ œ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. :)

@@ -27,8 +29,9 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
AuthenticationToken authenticationToken = convert(request);
Authentication authentication = authenticate(authenticationToken);

// TODO: authentication์œผ๋กœ TokenResponse ์ถ”์ถœํ•˜๊ธฐ
TokenResponse tokenResponse = null;
String payload = new ObjectMapper().writeValueAsString(authentication.getPrincipal());

Choose a reason for hiding this comment

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

๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์‹œ๋งˆ๋‹ค ObjectMapper๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  bean์„ ํ™œ์šฉํ•ด๋ณด์‹œ๋ฉด ์–ด๋–จ๊นŒ์š”?

Copy link
Author

Choose a reason for hiding this comment

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

ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

public static void ํšŒ์›_์ •๋ณด_์กฐํšŒ๋จ(ExtractableResponse<Response> response, String email, int age) {
assertThat(response.jsonPath().getString("id")).isNotNull();
assertThat(response.jsonPath().getString("email")).isEqualTo(email);
assertThat(response.jsonPath().getInt("age")).isEqualTo(age);
}

public static void ํšŒ์›_์ƒ์„ฑ_์š”์ฒญ_ํ™•์ธ(ExtractableResponse<Response> response) {

Choose a reason for hiding this comment

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

๋ฉ”์†Œ๋“œ๊ฐ€ ๋น„์–ด์žˆ๋„ค์š” ๐Ÿ‘€

Copy link
Author

Choose a reason for hiding this comment

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

ํ—›. ์ง€์šฐ๋Š”๊ฑธ ๋ฐ˜์˜์•ˆํ–ˆ๋„ค์š”. ๐Ÿ™ˆ

@heesunjeong heesunjeong merged commit ab0d4bc into next-step:loop-study Feb 13, 2022
ChoiGiSung added a commit to ChoiGiSung/atdd-subway-favorite that referenced this pull request Feb 17, 2022
* 4th init

* Step1 : ๊ธฐ๋Šฅ ๊ตฌํ˜„ (next-step#175)

* 3rd init

* 4th init

* feat : ํ”„๋ก ํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋„ค์š” (next-step#139)

* step1 : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ธฐ๋Šฅ ๊ตฌํ˜„ (next-step#171)

* feat : front end ์ฝ”๋“œ ์‚ญ์ œ

* feat : ๋…ธ์„  ์ƒ์„ฑ

* feat : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๋ชฉ๋ก ์กฐํšŒ

* feat : ๋…ธ์„  ๋‹จ๊ฑด ์กฐํšŒ

* feat : ๋…ธ์„  ์—…๋ฐ์ดํŠธ

* feat : ๋…ธ์„  ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* fix : test ์ˆ˜์ •

* feat : responseEntity ์ˆ˜์ •

* Step2 : ๋ฆฌํŒฉํ† ๋ง (next-step#180)

* feat : front end ์ฝ”๋“œ ์‚ญ์ œ

* feat : ๋…ธ์„  ์ƒ์„ฑ

* feat : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๋ชฉ๋ก ์กฐํšŒ

* feat : ๋…ธ์„  ๋‹จ๊ฑด ์กฐํšŒ

* feat : ๋…ธ์„  ์—…๋ฐ์ดํŠธ

* feat : ๋ฆฌ๋ฒ ์ด์Šค

* feat : ์ถฉ๋Œ ํ•ด๊ฒฐ

* style : ์ฃผ์„๊ณผ ๋ณธ๋ฌธ์„ ์ผ์น˜ ์‹œํ‚ค๊ธฐ

* refactor : ์ƒ์„ฑ์‹œ ๋ฐ˜ํ™˜๋˜๋Š” location ์žฌ์‚ฌ์šฉ

* style : ์ฃผ์„ ์ˆ˜์ •

* feat : ์ค‘๋ณต๋œ ์ง€ํ•˜์ฒ  ์—ญ ์ƒ์„ฑ ๋ถˆ๊ฐ€

* feat : ๋…ธ์„ ์ด๋ฆ„ ์ค‘๋ณต์€ ์ƒ์„ฑ ์‹คํŒจ ๊ธฐ๋Šฅ๊ตฌํ˜„

* feat : http request ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์œ ํ‹ธ ์ƒ์„ฑ

* refactor : ์ง€ํ•˜์ฒ  ์—ญ ์ƒ์„ฑ ๋ฆฌํŒฉํ† ๋ง

- ์ค‘๋ณต๋œ ์ฝ”๋“œ๋Š” httpRequestTestUtil์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝ

* chore : HttpRequestTestUtil ํŒจํ‚ค์ง€ ์ด๋™

- ์œ ํ‹ธ ํŒจํ‚ค์ง€๋กœ ์ด๋™

* refactor : ์ง€ํ•˜์ฒ  ์—ญ test ๋ฆฌํŒฉํ† ๋ง

- ์œ ํ‹ธ์„ ์ด์šฉํ•ด ๋ฆฌํŒฉํ† ๋ง

* style : ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ •

- ํ•œ ์ค„์— ์  ํ•˜๋‚˜

* refactor : ์—”ํ‹ฐํ‹ฐ๋Š” DTO๋ฅผ ๋ชจ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ

- ๊ณ ์ˆ˜์ค€์—์„œ๋Š” ์ ‘๊ทผ์€ ์–ด๋ ต๊ฒŒ

* Step3 : ๊ธฐ๋Šฅ๊ตฌํ˜„ (next-step#260)

* refactor : lineTest ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

* refactor : stationTest ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

* refactor : ๋ฉ”์†Œ๋“œ ๋ช… ํ•œ๋“ค๋กœ ๋ณ€๊ฒฝ

* feat : ๋…ธ์„  ์ƒ์„ฑ์‹œ ํ•„๋“œ ์ถ”๊ฐ€

* feat : Section ๋„๋ฉ”์ธ ์ถ”๊ฐ€

- line์—๋„ ์ถ”๊ฐ€

* feat : ์ฐพ๋Š” ๊ฐœ์ฒด๊ฐ€ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์„ ์–ธ

* feat : ๋…ธ์„  ์ƒ์„ฑ์‹œ section์„ ํ•จ๊ป˜ ๋“ฑ๋กํ•œ๋‹ค

- station์ด ์žˆ๋Š”์ง€ ๋จผ์ € ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค

* feat : ๊ตฌ๊ฐ„ ์ถ”๊ฐ€ํ•˜๊ธฐ

- ๊ตฌ๊ฐ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค

* feat : ๊ตฌ๊ฐ„ ๋“ฑ๋ก์‹œ ๊ทœ์น™์ด ์กด์žฌ

- ์‹ ๊ทœ ๊ตฌ๊ฐ„์˜ ์ƒํ–‰์€ ๊ธฐ์กด ๊ตฌ๊ฐ„์˜ ํ•˜ํ–‰ ์ข…์ ์ด์–ด์•ผํ•œ๋‹ค

* feat : ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ํ•˜ํ–‰ ๊ตฌ๊ฐ„์„ ๋“ฑ๋กํ•œ๋‹ค

* refactor : step์œผ๋กœ ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

- ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ์„ ํ–‰์ž‘์—…์„ ๋ถ„๋ฆฌ

* refactor : ์˜ˆ์™ธ ๊ณ„์ธต ์ˆ˜์ •

* fix : ๋”ํ‹ฐ์ฒดํ‚น ์œ„ํ•ด transaction ์„ ์–ธ

* feat : ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ

* feat : ๋งˆ์ง€๋ง‰ ์—ญ์€ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค

* feat : ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„์€ ์‚ญ์ œ๋œ๋‹ค

* feat : ์กฐํšŒ ๋กœ์ง ๋ณ€๊ฒฝ

* refactor : ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor : ์ค‘๋ณต ์ œ๊ฑฐ

* refactor : ํŒŒ๋ผ๋ฏธํ„ฐ ํ…Œ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝ

* refactor ; ์ง€ํ•˜์ฒ  ์‚ญ์ œ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

* refactor : ๋…ธ์„  ์‚ญ์ œ ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ, ๊ตฌ๊ฐ„์ƒ์„ฑ์‹œ static string ์‚ฌ์šฉ

* refactor : ๊ณ ์ •์ ์ธ ๊ฐ’ ๋ณด๋‹ค ์œ ์—ฐํ•œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

* refactor : ๋””์Šคํ”Œ๋ ˆ์ด ๋„ค์ž„ ๋ณ€๊ฒฝ

* refactor : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€

* refactor : ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€๊ฒฝ, ๋ถ€์ •ํ˜• ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

* refactor : response์˜ ๋™๋“ฑ์„ฑ ๋น„๊ต์„ ์œ„ํ•ด ์ถ”๊ฐ€

* refactor : ์ƒ์„ฑ์ž ์ˆจ๊ธฐ๊ธฐ

* style : ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* style ; ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* style : ์˜คํƒ€ ์ˆ˜์ •

* refactor : ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ ‘๊ทผ ์ œํ•œ์ž ๋ณ€๊ฒฝ

* refactor : ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ‚ค๋ฅผ ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜

* refactor : ๊ฐ’ ๊ฒ€์‚ฌ๋„ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌ

* refactor : transaction์˜ ์œ„์น˜ ๋ณ€๊ฒฝ

- class ๋‹จ์ด ์•„๋‹Œ ๋ฉ”์†Œ๋“œ ๋‹จ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor : ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

* feat : ์ค‘๊ฐ„ ๊ตฌ๊ฐ„์— ๊ตฌ๊ฐ„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

* refactor : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์ˆ˜์ •

* refactor  : ๋…ธ์„  ์กฐํšŒ ์‹œ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒ

* test : ๋‚˜๋จธ์ง€ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat : ๋ชจ๋“  ์—ญ์ด ๋…ธ์„ ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๋ถˆ๊ฐ€

* feat : ์ƒํ–‰์—ญ๊ณผ ํ•˜ํ–‰์—ญ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋…ธ์„ ์— ํฌํ•œ๋œ ์—ญ์ด์–ด์•ผ ํ•œ๋‹ค

* fix : ์กฐ๊ฑด ์ˆ˜์ •

- ์ƒํ–‰์—ญ, ํ•˜ํ–‰์—ญ๋งŒ ๋’ค์ง€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•ด์•ผํ•œ๋‹ค

* feat : ์ถฉ๋Œ ํ•ด๊ฒฐ

* feat : ๊ธฐ์กด ์ฝ”๋“œ ์‚ญ์ œ

* feat : given ,when ,then ์ถ”๊ฐ€

* feat : ๊ตฌ๊ฐ„ ์‚ญ์ œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat  : sections์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* feat : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor : ๋ฆฌ์Šคํฐ์Šค ํ•œ๊ธ€๋กœ ์ •์˜

* refactor : ํ”„๋ก ํŠธ ์ถฉ๋Œ ํ•ด๊ฒฐ

* refactor : stream ์œผ๋กœ ๋ณ€๊ฒฝ

* feat : ์„œ๋น„์Šค ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

Co-authored-by: boorownie <probitanima11@gmail.com>

* Step2 : ๊ธฐ๋Šฅ ๊ตฌํ˜„ (next-step#191)

* feat : ์—ญ ์‚ญ์ œ ์‹œ ๋ด‰ํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

* feat : ๋…ธ์„ ์— ์—†๋Š” ์—ญ์€ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค

* feat : fake ๊ฐ์ฒด ์‚ฌ์šฉ์œผ๋กœ test

* feat : fake ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ service test ์ฝ”๋“œ ์ž‘์„ฑ

* Step3 : ๊ธฐ๋Šฅ ๊ตฌํ˜„ (next-step#219)

* refactor : ๋ฆฌ๋ทฐ ๋ฐ˜์˜

* refactor : fake ๊ฐ์ฒด ๋ฆฌ๋ทฐ ๋ฐ˜์˜

- fake ๊ฐ์ฒด ๋ฐ˜์˜

* feat : path finder ๋„๋ฉ”์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

* feat : ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ

* feat : ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat : path finder ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

* feat : service ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor : ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ž ๊ธˆ

- ์œ ํ‹ธ๋กœ ์‚ฌ์šฉ

* feat : ๊ธฐ์กด ํŒŒ์ผ ์‚ญ์ œ

* feat : ์ด์ „ ์ฝ”๋“œ ์˜ฎ๊ธฐ๊ธฐ

* feat : test ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

* feat : ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์„ฑ๊ณต ์‹œํ‚ค๊ธฐ

* test : ์ธํ„ฐ์…‰ํ„ฐ ๋‹จ์œ„ test

* feat : authenticate test

* feat : preHandle test

* feat : bearer test ์ˆ˜์ •

* feat : ๋ฆฌ๋ทฐ๋ฐ˜์–‘

Co-authored-by: boorownie <probitanima11@gmail.com>
ChoiGiSung added a commit to ChoiGiSung/atdd-subway-favorite that referenced this pull request Feb 21, 2022
* 3rd init

* 4th init

* feat : ํ”„๋ก ํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋„ค์š” (next-step#139)

* step1 : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ธฐ๋Šฅ ๊ตฌํ˜„ (next-step#171)

* feat : front end ์ฝ”๋“œ ์‚ญ์ œ

* feat : ๋…ธ์„  ์ƒ์„ฑ

* feat : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๋ชฉ๋ก ์กฐํšŒ

* feat : ๋…ธ์„  ๋‹จ๊ฑด ์กฐํšŒ

* feat : ๋…ธ์„  ์—…๋ฐ์ดํŠธ

* feat : ๋…ธ์„  ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* fix : test ์ˆ˜์ •

* feat : responseEntity ์ˆ˜์ •

* Step2 : ๋ฆฌํŒฉํ† ๋ง (next-step#180)

* feat : front end ์ฝ”๋“œ ์‚ญ์ œ

* feat : ๋…ธ์„  ์ƒ์„ฑ

* feat : ์ง€ํ•˜์ฒ  ๋…ธ์„  ๋ชฉ๋ก ์กฐํšŒ

* feat : ๋…ธ์„  ๋‹จ๊ฑด ์กฐํšŒ

* feat : ๋…ธ์„  ์—…๋ฐ์ดํŠธ

* feat : ๋ฆฌ๋ฒ ์ด์Šค

* feat : ์ถฉ๋Œ ํ•ด๊ฒฐ

* style : ์ฃผ์„๊ณผ ๋ณธ๋ฌธ์„ ์ผ์น˜ ์‹œํ‚ค๊ธฐ

* refactor : ์ƒ์„ฑ์‹œ ๋ฐ˜ํ™˜๋˜๋Š” location ์žฌ์‚ฌ์šฉ

* style : ์ฃผ์„ ์ˆ˜์ •

* feat : ์ค‘๋ณต๋œ ์ง€ํ•˜์ฒ  ์—ญ ์ƒ์„ฑ ๋ถˆ๊ฐ€

* feat : ๋…ธ์„ ์ด๋ฆ„ ์ค‘๋ณต์€ ์ƒ์„ฑ ์‹คํŒจ ๊ธฐ๋Šฅ๊ตฌํ˜„

* feat : http request ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์œ ํ‹ธ ์ƒ์„ฑ

* refactor : ์ง€ํ•˜์ฒ  ์—ญ ์ƒ์„ฑ ๋ฆฌํŒฉํ† ๋ง

- ์ค‘๋ณต๋œ ์ฝ”๋“œ๋Š” httpRequestTestUtil์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝ

* chore : HttpRequestTestUtil ํŒจํ‚ค์ง€ ์ด๋™

- ์œ ํ‹ธ ํŒจํ‚ค์ง€๋กœ ์ด๋™

* refactor : ์ง€ํ•˜์ฒ  ์—ญ test ๋ฆฌํŒฉํ† ๋ง

- ์œ ํ‹ธ์„ ์ด์šฉํ•ด ๋ฆฌํŒฉํ† ๋ง

* style : ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ •

- ํ•œ ์ค„์— ์  ํ•˜๋‚˜

* refactor : ์—”ํ‹ฐํ‹ฐ๋Š” DTO๋ฅผ ๋ชจ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ

- ๊ณ ์ˆ˜์ค€์—์„œ๋Š” ์ ‘๊ทผ์€ ์–ด๋ ต๊ฒŒ

* Step3 : ๊ธฐ๋Šฅ๊ตฌํ˜„ (next-step#260)

* refactor : lineTest ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

* refactor : stationTest ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

* refactor : ๋ฉ”์†Œ๋“œ ๋ช… ํ•œ๋“ค๋กœ ๋ณ€๊ฒฝ

* feat : ๋…ธ์„  ์ƒ์„ฑ์‹œ ํ•„๋“œ ์ถ”๊ฐ€

* feat : Section ๋„๋ฉ”์ธ ์ถ”๊ฐ€

- line์—๋„ ์ถ”๊ฐ€

* feat : ์ฐพ๋Š” ๊ฐœ์ฒด๊ฐ€ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์„ ์–ธ

* feat : ๋…ธ์„  ์ƒ์„ฑ์‹œ section์„ ํ•จ๊ป˜ ๋“ฑ๋กํ•œ๋‹ค

- station์ด ์žˆ๋Š”์ง€ ๋จผ์ € ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค

* feat : ๊ตฌ๊ฐ„ ์ถ”๊ฐ€ํ•˜๊ธฐ

- ๊ตฌ๊ฐ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค

* feat : ๊ตฌ๊ฐ„ ๋“ฑ๋ก์‹œ ๊ทœ์น™์ด ์กด์žฌ

- ์‹ ๊ทœ ๊ตฌ๊ฐ„์˜ ์ƒํ–‰์€ ๊ธฐ์กด ๊ตฌ๊ฐ„์˜ ํ•˜ํ–‰ ์ข…์ ์ด์–ด์•ผํ•œ๋‹ค

* feat : ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ํ•˜ํ–‰ ๊ตฌ๊ฐ„์„ ๋“ฑ๋กํ•œ๋‹ค

* refactor : step์œผ๋กœ ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ

- ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ์„ ํ–‰์ž‘์—…์„ ๋ถ„๋ฆฌ

* refactor : ์˜ˆ์™ธ ๊ณ„์ธต ์ˆ˜์ •

* fix : ๋”ํ‹ฐ์ฒดํ‚น ์œ„ํ•ด transaction ์„ ์–ธ

* feat : ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ

* feat : ๋งˆ์ง€๋ง‰ ์—ญ์€ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค

* feat : ๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„์€ ์‚ญ์ œ๋œ๋‹ค

* feat : ์กฐํšŒ ๋กœ์ง ๋ณ€๊ฒฝ

* refactor : ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor : ์ค‘๋ณต ์ œ๊ฑฐ

* refactor : ํŒŒ๋ผ๋ฏธํ„ฐ ํ…Œ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝ

* refactor ; ์ง€ํ•˜์ฒ  ์‚ญ์ œ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

* refactor : ๋…ธ์„  ์‚ญ์ œ ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ, ๊ตฌ๊ฐ„์ƒ์„ฑ์‹œ static string ์‚ฌ์šฉ

* refactor : ๊ณ ์ •์ ์ธ ๊ฐ’ ๋ณด๋‹ค ์œ ์—ฐํ•œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

* refactor : ๋””์Šคํ”Œ๋ ˆ์ด ๋„ค์ž„ ๋ณ€๊ฒฝ

* refactor : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€

* refactor : ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€๊ฒฝ, ๋ถ€์ •ํ˜• ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

* refactor : response์˜ ๋™๋“ฑ์„ฑ ๋น„๊ต์„ ์œ„ํ•ด ์ถ”๊ฐ€

* refactor : ์ƒ์„ฑ์ž ์ˆจ๊ธฐ๊ธฐ

* style : ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* style ; ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€

* style : ์˜คํƒ€ ์ˆ˜์ •

* refactor : ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ ‘๊ทผ ์ œํ•œ์ž ๋ณ€๊ฒฝ

* refactor : ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ‚ค๋ฅผ ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜

* refactor : ๊ฐ’ ๊ฒ€์‚ฌ๋„ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌ

* refactor : transaction์˜ ์œ„์น˜ ๋ณ€๊ฒฝ

- class ๋‹จ์ด ์•„๋‹Œ ๋ฉ”์†Œ๋“œ ๋‹จ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor : ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

* feat : ์ค‘๊ฐ„ ๊ตฌ๊ฐ„์— ๊ตฌ๊ฐ„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

* refactor : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์ˆ˜์ •

* refactor  : ๋…ธ์„  ์กฐํšŒ ์‹œ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒ

* test : ๋‚˜๋จธ์ง€ ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat : ๋ชจ๋“  ์—ญ์ด ๋…ธ์„ ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๋ถˆ๊ฐ€

* feat : ์ƒํ–‰์—ญ๊ณผ ํ•˜ํ–‰์—ญ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋…ธ์„ ์— ํฌํ•œ๋œ ์—ญ์ด์–ด์•ผ ํ•œ๋‹ค

* fix : ์กฐ๊ฑด ์ˆ˜์ •

- ์ƒํ–‰์—ญ, ํ•˜ํ–‰์—ญ๋งŒ ๋’ค์ง€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•ด์•ผํ•œ๋‹ค

* feat : ์ถฉ๋Œ ํ•ด๊ฒฐ

* feat : ๊ธฐ์กด ์ฝ”๋“œ ์‚ญ์ œ

* feat : given ,when ,then ์ถ”๊ฐ€

* feat : ๊ตฌ๊ฐ„ ์‚ญ์ œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat  : sections์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* feat : ๊ตฌ๊ฐ„ ๋“ฑ๋ก ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor : ๋ฆฌ์Šคํฐ์Šค ํ•œ๊ธ€๋กœ ์ •์˜

* refactor : ํ”„๋ก ํŠธ ์ถฉ๋Œ ํ•ด๊ฒฐ

* refactor : stream ์œผ๋กœ ๋ณ€๊ฒฝ

* feat : ์„œ๋น„์Šค ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

Co-authored-by: boorownie <probitanima11@gmail.com>
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.

None yet

2 participants