์คํฐ๋๋ฅผ ์์ํ๊ธฐ ์ํด์๋ Base์ฝ๋์ Test์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
Base ์ฝ๋๋ ๋ค์ ํด๋์ ์์นํ์ฌ์ผ ํฉ๋๋ค.
src/main/java/{Package}/study/weekN/
Test ์ฝ๋๋ ๋ค์ ํด๋์ ์์นํ์ฌ์ผ ํฉ๋๋ค.
src/test/java/{Package}/WeekNTests.java
Base ์ฝ๋๋ก๋ Controller๋ฅผ ์ฃผ๊ณ Test ์ฝ๋๋ก๋ Controller์ ๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
MockMvc๋ฅผ ์ด์ฉํ์ฌ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด Controller์ ๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ํธ๋ฆฌํฉ๋๋ค.
MockMvc๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
private final MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new Week1HelloController()).build();
@Test
void helloWorldEndpoint() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World!"));
}์๋ merge ๋ ์ง๋ weekly-merge.yml ํ์ผ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
on:
schedule:
- cron: '0 15 * * 0'๊ธฐ๋ณธ์ ์ผ๋ก ๋งค์ฃผ ์ผ์์ผ 15์(UTC)์ ์๋ merge๊ฐ ์งํ๋๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
cron ํํ์์ ์ด์ฉํ์ฌ ์ํ๋ ๋ ์ง์ ์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๊ท๋ชจ๊ฐ ํฐ ์คํฐ๋์ ๊ฒฝ์ฐ GitHub Actions์ ๋ฌด๋ฃ ์ฌ์ฉ๋์ ์ด๊ณผํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ Self-hosted Runner๋ฅผ ์ค์ ํ์ฌ GitHub Actions๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
์ฐ์ Self-hosted Runner๋ฅผ ์ค์ ํด์ผ ๋ฉ๋๋ค. ๊ทธ ํ weekly-merge.yml ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ ์ผ ๋ฉ๋๋ค.
jobs:
merge:
runs-on: self-hosted๋ง์ฝ ์๋ Merge๊ฐ ์งํ๋์ง ์๊ฑฐ๋ ์ค์๋ก Main๋ธ๋์น์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ง ์์์ ๊ฒฝ์ฐ ์๋์ผ๋ก Actions๋ฅผ ํตํ Merge๋ฅผ ํ ์ ์์ต๋๋ค.
์์ชฝ Actions ํญ์์ Weekly Merge๋ฅผ ์ ํํ์ฌ Run workflow๋ฅผ ๋๋ฅด๋ฉด ์๋์ผ๋ก Merge๋ฉ๋๋ค.
๋ง์ฝ ์ถฉ๋์ ์ด์ ๋ก Merge๊ฐ ์งํ๋์ง ์์ ๊ฒฝ์ฐ Issue๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ทธ ๊ฒฝ์ฐ Actions๋ฅผ ํตํด Mergeํ ์ ์์ผ๋ฏ๋ก ์ง์ Mergeํ์ ์ผ ๋ฉ๋๋ค.