13์ผ์ ๊ฑธ์น stackoverflow ๊ตฌํ ํ๋ฆฌํ๋ก์ ํธ๊ฐ ์ค๋๋ก ๋์ด ๋ฌ๋ค.
๋ถํธ์บ ํ์์ ์ฒ์ ์งํํด๋ณด๋ ํ๋ก์ ํธ๋ผ ๊ฑฑ์ ๋ ๋ง์์ง๋ง, ๊ณํ๋๋ก ์ ์งํ๋ ๊ฒ ๊ฐ์ ๋คํ์ด๋ค.
ํ๋ก ํธ๋ถ๋ถ์ ์์ ํด์ผ ํ ๋ถ๋ถ์ด ์ข ๋ ๋จ์ ์์ผ๋, ๊ทธ๋ถ๋ถ์ ์ฐจ์ฐจ ์์ ํด๋๊ฐ๋ฉด ๋์ง ์์๊น ์๊ฐํ๋ค.
์ฐ์ , ์ด๋ฒ ํ๋ฆฌ ํ๋ก์ ํธ๋ stackoverflow ํ์ด์ง๋ฅผ ๊ตฌํํด๋ณด๋ ๊ณผ์ ์๋ค. (ํ์ฅ์ ๋งก์..)
๋จผ์ ํ๋ก์ ํธ ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์งํํ๋ค.
๋งค์ผ ์ ํด์ง ์๊ฐ 2์~3์์ ํ์๋ฅผ ์งํํ์์ผ๋ฉฐ, ํ์ ์๊ฐ์๋ ์งํ ์ํฉ์ ์ ๊ฒํ๊ณ , FE์ BE ์ฌ์ด ํ์ํ ๋ถ๋ถ๋ค์ ์กฐ์ ํด๋๊ฐ๋ค.
GitHub Project Kanban์ ์ฌ์ฉํ์ฌ ์์ ๋ด์ฉ์ ์๊ฐํํ๊ณ , ์ ๋ฌด์ ๋ณ๋ชฉ ํ์๊ณผ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ์๊ธฐ์ง ์๋๋ก ๊ด๋ฆฌ ํ๋ค.
์นธ๋ฐ ๋ณด๋๋ ์ด๋ฒ์ ์ฒ์ ์จ ๋ณด์๋๋ฐ, (๊ทธ ์ ์๋ Jira๋ฅผ ์ฌ์ฉํ์ด์) ๋ง์ผ์คํค์ ์ค์ ํ๊ณ , ์ด์๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ฌ๋ฐ๊ธฐ๋ ํ๊ณ , ํ์ฌ ์ ๋ฌด๊ฐ ์ด๋ ๋จ๊ณ์ ์์๋์ง ํ๋์ ๋ณผ ์ ์์ด์ ์ข์๋ค.


Git flow๋ ๊ฐ๋จํ Coz' git flow๋ฅผ ์ฌ์ฉํ์๋๋ฐ, main <- release <-fe-dev, be-dev <-fe-feature~,be-feature๋ก ๋ธ๋์น๋ฅผ ๋๋์ด ์์ ํ๊ณ mergeํ ๋๋ ๊ฐ๊ฐ FE, BE ํ์์ ํ์ ํ ์งํํ๋ค.

๊ทธ ๋ฐ์ ๋ฌธ์ํ(์ฌ์ฉ์ ์ ์์, ํ ์ด๋ธ ๋ช ์ธ์, ํ๋ฉด ์ ์์, ERD, ๊ฐ๋ฐ์ ํ ์คํธ ์ฒดํฌ๋ฆฌ์คํธ, API ๋ฌธ์)๋ ๋ชจ๋ Notion์์ ๊ด๋ฆฌํ์๋ค.
https://www.notion.so/codestates/5bc39b81d1eb40068f77fd253580350f?pvs=4
๊ฐ๋ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์งํํ์๋ค.
๋๋ ๋ฐฑ์๋ ๋ถ๋ถ์ ๋งก์๊ธฐ ๋๋ฌธ์ ์ต๋ํ ํ๋ก ํธ๋ถ๋ค์ด API๋ฌธ์๋ฅผ ๋นจ๋ฆฌ ๋ฐ์ผ์ค ์ ์๋๋ก ํ๋ ๊ฒ๊ณผ, ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๊ณผ์ ์๋ค.
๊ทธ๋์ ์ฒซ์งธ ์ฃผ์ ๊ฑฐ์ API ๋ฌธ์๋ฅผ ์์ฑํด์ ๋จผ์ ํ๋ก ํธ ๋ถ๋ค๊ป ์ ๋ฌํด ๋๋ฆฌ๊ณ , CI/CD ํ๋ซํผ ์ค ํ๋์ธ gitActions๋ก ๋ฐฐํฌ Flow๋ฅผ ๊ตฌํํ๋ค. ์๋ฒ๋ฅผ ๋จผ์ ์ฌ๋ฆฌ๊ณ ๋๋ FE๋ถ๋ค๊ป์ api ์์ฒญ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ ๊ฐ๋ค์ ํ์ธํด ๋ณผ ์ ์์ด์ ํธ๋ฆฌํ๋ค.
๋๋ Member(ํ์) ๋ถ๋ถ์ ๋งก์์ JWT๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ์ธ์ฆ, ์ธ๊ฐ ์ ํ์ ๋ฑ๋ก, ์์ , ์ญ์ (ํํด) ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฐ๋ถ์ OAuth2 ๋ก๊ทธ์ธ์ ๋งก์ผ์ จ๋ ๋ถ์ด ๊ตฌํ์ ํ๋ค์ดํ์ ์ google OAuth2๋ก ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๋๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐ ๊ตฌํํ์๋ค.
๋๋จธ์ง ํ์๋ถ๋ค์ ๊ฐ๊ฐ question, answer, ouath2๋ฅผ ๋งก์ผ์ ์ ๊ตฌํํด ์ฃผ์ จ๋ค. (์ง๋ฌธ ๋ฑ๋ก, ์์ , ์ญ์ , ๋๊ธ ๋ฑ๋ก, ์์ , ์ญ์ , ์ง๋ฌธ Title๋ก ๊ฒ์ํ๊ธฐ ๋ฑ)
(ํ์ง๋ง, OAuth2์ ๊ฒฝ์ฐ ํ๋ก ํธ์์ ๊ตฌํ์ด ๋๋์ง ์์ ํ๋ก์ ํธ์ ์ ์ฉ์ ๋ชปํ๋ค. -> MainProject์์ ์ ์ฉํด ๋ณผ ์์ )
๋ฐ์ํ๋ ์ด์๋ค..
๋ณธ์ฒด ๊ฑฑ์ ์ด ๋ง์ ์ฑ๊ฒฉ์ด๋ผ ํ๋ก์ ํธ ์งํ ์ ์ด๋ ค์์ด ๋ฐ์ํ์ง ์๋๋ก ๋๋๋ก ๋นจ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ์๋ค. ํ์ง๋ง gitActions์ ๋ฐฐํฌ๋ฅผ ํ ๋ ec2์ ๋ณด์ ๊ทธ๋ฃน ๋ฌธ์ ๋ก ์ธ์ฐ๊ธฐ ์์ํ์๊ณ ,, ๊ฒฐ๊ตญ ec2 ์ธ์คํด์ค๋ฅผ ์ง์ฐ๊ณ ๋ค์ ์ธํ ํ๋๋ ํด๊ฒฐ๋์๋ค.
๋, API ๋ฌธ์ํ๋ฅผ ์ํด Mockito๋ก ์ฌ๋ผ์ด์ค ํ ์คํธ๋ฅผ controller ๋ง๋ค ์์ฑํด ์ฃผ์๋๋ฐ ๊ทธ ๊ณผ์ ์์ Spring Security๋ฅผ ์ ์ฉํ๋ ๊ฒ๋ ์ค๋ฅ๊ฐ ์์๋ค. ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์ฌ๋ผ์ด์ค ํ ์คํธ์ ์์ฑํด์ฃผ์๋ @WebMvcTest๊ฐ Spring Security๋ฅผ ํ์ฑํ์ํค์ง ์๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด @SpringBootTest๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ Spring Rest Docs 2.x ๋ฒ์ ์์ URI ๊ฐ์ฒด๋ฅผ get(), patch() ๋ฑ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์,,
urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
๋ค์๊ณผ ๊ฐ์ด ์ง์ String์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ์๋ค.
//when
ResultActions actions = mockMvc.perform(
get("/users/{member-id}",memberId)
.accept(MediaType.APPLICATION_JSON)
);
์์ฌ์ ๋ ์ ..๐
์ฐ์ , ๋ฐฑ์๋ ์ฝ๋์ ๊ฒฝ์ฐ, ๊ธฐํํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์ ์๋๋์์ง๋ง, ํ๋ก ํธ์ ์ฐ๋ํ์ ๋ ๋ฐ์ํ๋ ์ด์๋ค์ ๋ชจ๋ ํด๊ฒฐํ์ง ๋ชปํ๋ค.(์ฌ์ฉ์ ์ง๋ฌธ, ๋๊ธ ์ ๋ณด ๋ถ๋ถ..) ๋ฐฑ์์ ์ค์ ํ ์ ์๋ CORS ๊ด๋ จ ์ค์ ์ ๋ชจ๋ ํด์คฌ๋๋ฐ ์๋ง๋ ํ๋ก ํธ์ axios ์์ฒญ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. ๊ฐ์ด ์์ ์ ํ์ด์ผ ํ๋๋ฐ ์๊ฐ์ด ์ถฉ๋ถํ์ง ๋ชปํ๋ค. ๋น ๋ฅด๊ฒ S3๋ก ์ฌ๋ ค์ ํ๋ก ํธ ์ํฉ์ ํ์ธํ์ด์ผ ํ๋๋ฐ ํ๋ ์์ฌ์์ด ์ข ๋จ๋๋ค.ใ ใ
๋ฐ๋ก ๋ฉ์ธ ํ๋ก์ ํธ๋ฅผ ๋ค์ด๊ฐ์ ๋น์ฅ ์์ ์ ์ด๋ ต๊ฒ ์ง๋ง, ์๊ฐ ๋ ๋ ํํ์ด ์์ ํด ๋ณผ ์์ ์ด๋ค.
์ข์๋ ์ !๐
์ฐ์ ํ๋ฆฌํ๋ก์ ํธ๋ก ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ๋ค ํนํ, Spring Boot๋ก ํ๋ก์ ํธ๋ฅผ ํด๋ณผ ์ ์์ด์ ์ข์๋ค. ์ค๋๋ง์ ํด๋ณด๋ ํ์ ๊ณผ์ ๋ ์ฆ๊ฑฐ์ ๊ณ , ๋ฌด์๋ณด๋ค ํ์๋ถ๋ค์ด ๋ค ๊ธ์ ์ ์ธ ํ๋๋ก ์ปค๋ฎค๋์ผ์ด์ ์ ์ํด์ฃผ์ ์ ๊ฐ์ฌํ๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋ฐฐํฌ๊น์ง ํด๋ณผ ์ ์์ด์ ์ข์๊ณ , ๋ฐ์ํ๋ ์ด์๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ ๊ณผ์ ์ด ใ ใ .. ํ๋ค์์ง๋ง ํด๊ฒฐํ๊ณ ๋๋ฉด ๋ ๋ฟ๋ฏํ๊ฑธ..๐(์๋ฌด๋ ์์์ฃผ์ง ์๋ ํ๋ณต..ใ ใ ใ )
๊ฒฐ๊ณผ๋ฌผโญ๏ธ






ํ๋ก์ ํธ ๋ ํฌ :
https://github.com/codestates-seb/seb44_pre_006
๋ฐฐํฌ ๋ ํฌ :
'SEB TIL๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Section 3 - KPT ํ๊ณ (3) | 2023.05.09 |
|---|---|
| TIL - Spring MVC ํ ์คํ (0) | 2023.04.29 |
| TIL - Spring MVC ์์ธ์ฒ๋ฆฌ (0) | 2023.04.17 |
| Section 2 - KPT ํ๊ณ (2) | 2023.04.10 |
| TIL - Spring Core ๊ธฐ๋ณธ (0) | 2023.04.04 |