[Sprint Mission7]
1. ํ๋ก์ ํธ ๋ง์ผ์คํค
- ๋ก๊ทธ ๊ด๋ฆฌ
- ์ปค์คํ ์์ธ ์ค๊ณ
- ์ ํจ์ฑ ๊ฒ์ฌ
- Actuator๋ฅผ ํ์ฉํ ๋ชจ๋ํฐ๋ง
- ๋จ์ ํ ์คํธ
- ์ฌ๋ผ์ด์ค ํ ์คํธ
- ํตํฉ ํ ์คํธ
2. ๊ธฐ๋ณธ ์๊ตฌ์ฌํญ
2-1. ํ๋กํ์ผ ๊ธฐ๋ฐ ์ค์ ๊ด๋ฆฌ
- ๊ฐ๋ฐ, ์ด์ ํ๊ฒฝ์ ๋ํ ํ๋กํ์ผ์ ๊ตฌ์ฑํ์ธ์.
application-dev.yaml,ยapplication-prod.yamlย ํ์ผ์ ์์ฑํ์ธ์.- ๋ค์๊ณผ ๊ฐ์ ์ค์ ๊ฐ์ ํ๋กํ์ผ๋ณ๋ก ๋ถ๋ฆฌํ์ธ์.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด
- ์๋ฒ ํฌํธ
2-2. ๋ก๊ทธ ๊ด๋ฆฌ
- Lombok์ย
@Slf4jย ์ด๋ ธํ ์ด์ ์ ํ์ฉํด ๋ก๊น ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋๋ก ๊ตฌ์ฑํ์ธ์. application.yaml์ ๊ธฐ๋ณธ ๋ก๊น ๋ ๋ฒจ์ ์ค์ ํ์ธ์.- ๊ธฐ๋ณธ์ ์ผ๋กย
infoย ๋ ๋ฒจ๋ก ์ค์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋กย
- ํ๊ฒฝ ๋ณ ์ ์ ํ ๋ก๊น
๋ ๋ฒจ์ ํ๋กํ์ผ ๋ณ๋ก ์ค์ ํด๋ณด์ธ์.
- SQL ๋ก๊ทธ๋ฅผ ๋ณด๊ธฐ์ํด ์ค์ ํ๋ ๋ ๋ฒจ์ ์ ์งํฉ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํ๋ก์ ํธ์ ๋ก๊ทธ๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ย
debug, ์ด์ ํ๊ฒฝ์์๋ยinfoย ๋ ๋ฒจ๋ก ์ค์ ํฉ๋๋ค.
- Spring Boot์ ๊ธฐ๋ณธ ๋ก๊น
๊ตฌํ์ฒด์ธ Logback์ ์ค์ ํ์ผ์ ๊ตฌ์ฑํ์ธ์.
logback-spring.xmlํ์ผ์ ์์ฑํ์ธ์.- ๋ค์ ์์์ ๊ฐ์ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ๋ก๊น
ํจํด๊ณผ ์ถ๋ ฅ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์งํ์ธ์.
-
๋ก๊ทธ ์ถ๋ ฅ ์์
# ํจํด {๋ }-{์}-{์ผ} {์}:{๋ถ}:{์ด}:{๋ฐ๋ฆฌ์ด} [{์ค๋ ๋๋ช }] {๋ก๊ทธ ๋ ๋ฒจ(5๊ธ์๋ก ๋ง์ถค)} {๋ก๊ฑฐ ์ด๋ฆ(์ต๋ 36๊ธ์)} - {๋ก๊ทธ ๋ฉ์์ง}{์ค๋ฐ๊ฟ} # ์์ 25-01-01 10:33:55.740 [main] DEBUG c.s.m.discodeit.DiscodeitApplication - Running with Spring Boot v3.4.0, Spring v6.2.0
-
- ์ฝ์๊ณผ ํ์ผ์ ๋์์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋๋ก ์ค์ ํ์ธ์.
- ํ์ผ์ย
{ํ๋ก์ ํธ ๋ฃจํธ}/.logsย ๊ฒฝ๋ก์ ์ ์ฅ๋๋๋ก ์ค์ ํ์ธ์.
- ํ์ผ์ย
- ๋ก๊ทธ ํ์ผ์ ์ผ์๋ณ๋ก ๋กค๋ง๋๋๋ก ๊ตฌ์ฑํ์ธ์.
- ๋ก๊ทธ ํ์ผ์ 30์ผ๊ฐ ๋ณด๊ดํ๋๋ก ๊ตฌ์ฑํ์ธ์.
- ์๋น์ค ๋ ์ด์ด์ ์ปจํธ๋กค๋ฌ ๋ ์ด์ด์ ์ฃผ์ ๋ฉ์๋์ ๋ก๊น
์ ์ถ๊ฐํ์ธ์.
- ๋ก๊น ๋ ๋ฒจ์ ์ ์ ํ ์ฌ์ฉํ์ธ์: ERROR, WARN, INFO, DEBUG
- ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋์ ๋ก๊น
์ ์ถ๊ฐํ์ธ์:
- ์ฌ์ฉ์ ์์ฑ/์์ /์ญ์
- ์ฑ๋ ์์ฑ/์์ /์ญ์
- ๋ฉ์์ง ์์ฑ/์์ /์ญ์
- ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋
2-3. ์์ธ ์ฒ๋ฆฌ ๊ณ ๋ํ
- ์ปค์คํ
์์ธ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ์ธ์.
- ํจํค์ง๋ช
:
com.sprint.mission.discodeit.exception[.{๋๋ฉ์ธ}] ErrorCodeEnum ํด๋์ค๋ฅผ ํตํด ์์ธ ์ฝ๋๋ช ๊ณผ ๋ฉ์์ง๋ฅผ ์ ์ํ์ธ์.- ์๋๋ ์์์ ๋๋ค. ํ์ํ๋ค๊ณ ํ๋จ๋๋ ๋ค์ํ ์ฝ๋๋ฅผ ์ ์ํ์ธ์.
-
์์

- ๋ชจ๋ ์์ธ์ ๊ธฐ๋ณธ์ด ๋๋
DiscodeitExceptionํด๋์ค๋ฅผ ์ ์ํ์ธ์.-
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ

-
details๋ ์์ธ ๋ฐ์ ์ํฉ์ ๋ํ ์ถ๊ฐ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์ฑ์ ๋๋ค.- ์์
- ์กฐํ ์๋ํ ์ฌ์ฉ์์ ID ์ ๋ณด
- ์ ๋ฐ์ดํธ ์๋ํ PRIVATE ์ฑ๋์ ID ์ ๋ณด
- ์์
-
DiscodeitException์ ์์ํ๋ ์ฃผ์ ๋๋ฉ์ธ ๋ณ ๋ฉ์ธ ์์ธ ํด๋์ค๋ฅผ ์ ์ํ์ธ์.UserException,ยChannelExceptionย ๋ฑ- ์ค์ ๋ก ํ์ฉ๋๋ ํด๋์ค๋ผ๊ธฐ๋ณด๋ค๋ ์์ธ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํ ํด๋์ค ์ ๋๋ค.
- ๋๋ฉ์ธ ๋ฉ์ธ ์์ธ ํด๋์ค๋ฅผ ์์ํ๋ ๊ตฌ์ฒด์ ์ธ ์์ธ ํด๋์ค๋ฅผ ์ ์ํ์ธ์.
UserNotFoundException,UserAlreadyExistException๋ฑ ํ์ํ ์์ธ๋ฅผ ์ ์ํ์ธ์.-
์์

- ํจํค์ง๋ช
:
- ๊ธฐ์กด์ ๊ตฌํํ๋ ์์ธ๋ฅผ ์ปค์คํ
์์ธ๋ก ๋์ฒดํ์ธ์.
NoSuchElementExceptionIllegalArgumentException- โฆ
ErrorResponse๋ฅผ ํตํด ์ผ๊ด๋ ์์ธ ์๋ต์ ์ ์ํ์ธ์.-
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ

int status: HTTP ์ํ์ฝ๋String exceptionType: ๋ฐ์ํ ์์ธ์ ํด๋์ค ์ด๋ฆ
-
- ์์ ์ ์ํ
ErrorResponse์@RestControllerAdvice๋ฅผ ํ์ฉํด ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ธ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํ์ธ์.- ๋ชจ๋ ํธ๋ค๋ฌ๋ ์ผ๊ด๋ ์๋ต(
ErrorResponse)์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ๋ชจ๋ ํธ๋ค๋ฌ๋ ์ผ๊ด๋ ์๋ต(
2-4. ์ ํจ์ฑ ๊ฒ์ฌ
- Spring Validation ์์กด์ฑ์ ์ถ๊ฐํ์ธ์.
- ์ฃผ์ Request DTO์ ์ ์ฝ ์กฐ๊ฑด ๊ด๋ จ ์ด๋
ธํ
์ด์
์ ์ถ๊ตฌํ์ธ์.
@NotNull,ย@NotBlank,ย@Size,ย@Emailย ๋ฑ
- ์ปจํธ๋กค๋ฌ์ย
@Validย ๋ฅผ ์ฌ์ฉํด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ์ธ์. - ๊ฒ์ฆ ์คํจ ์ ๋ฐ์ํ๋ย
MethodArgumentNotValidException์ ์ ์ญ ์์ธ ํธ๋ค๋ฌ์์ ์ฒ๋ฆฌํ์ธ์. - ์ ํจ์ฑ ๊ฒ์ฆ ์คํจ ์ ์์ธํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํฌํจํ ์๋ต์ ๋ฐํํ์ธ์.
2-5. Actuator
- Spring Boot Actuator ์์กด์ฑ์ ์ถ๊ฐํ์ธ์.
- ๊ธฐ๋ณธ Actuator ์ํธํฌ์ธํธ๋ฅผ ์ค์ ํ์ธ์.
- health, info, metrics, loggers
- Actuator info๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด๋ฅผ ์ถ๊ฐํ์ธ์.
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ:ย
Discodeit - ์ ํ๋ฆฌ์ผ์ด์
๋ฒ์ :ย
1.7.0 - ์๋ฐ ๋ฒ์ :ย
17 - ์คํ๋ง ๋ถํธ ๋ฒ์ :ย
3.4.0 - ์ฃผ์ ์ค์ ์ ๋ณด
- ๋ฐ์ดํฐ์์ค: url, ๋๋ผ์ด๋ฒ ํด๋์ค ์ด๋ฆ
- jpa: ddl-auto
- storage ์ค์ : type, path
- multipart ์ค์ : max-file-size, max-request-size
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ:ย
- Spring Boot ์๋ฒ๋ฅผ ์คํ ํ ๊ฐ์ข
์ ๋ณด๋ฅผ ํ์ธํด๋ณด์ธ์.
/actuator/info/actuator/metrics/actuator/health/actuator/loggers
2-6. ๋จ์ ํ ์คํธ
- ์๋น์ค ๋ ์ด์ด์ ์ฃผ์ ๋ฉ์๋์ ๋ํ ๋จ์ ํ
์คํธ๋ฅผ ์์ฑํ์ธ์.
- ๋ค์ ์๋น์ค์ ํต์ฌ ๋ฉ์๋์ ๋ํด ๊ฐ๊ฐ ์ต์ 2๊ฐ ์ด์(์ฑ๊ณต, ์คํจ)์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
- UserService: create, update, delete ๋ฉ์๋
- ChannelService: create(PUBLIC, PRIVATE), update, delete, findByUserId ๋ฉ์๋
- MessageService: create, update, delete, findByChannelId ๋ฉ์๋
Mockito๋ฅผ ํ์ฉํด Repository ์์กด์ฑ์ ๋ชจ์(mock)ํ์ธ์.BDDMockito๋ฅผ ํ์ฉํด ํ ์คํธ ๊ฐ๋ ์ฑ์ ๋์ด์ธ์.
- ๋ค์ ์๋น์ค์ ํต์ฌ ๋ฉ์๋์ ๋ํด ๊ฐ๊ฐ ์ต์ 2๊ฐ ์ด์(์ฑ๊ณต, ์คํจ)์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
2-7. ์ฌ๋ผ์ด์ค ํ ์คํธ
- ๋ ํฌ์งํ ๋ฆฌ ๋ ์ด์ด์ ์ฌ๋ผ์ด์ค ํ
์คํธ๋ฅผ ์์ฑํ์ธ์.
@DataJpaTest๋ฅผ ํ์ฉํด ํ ์คํธ๋ฅผ ๊ตฌํํ์ธ์.- ํ
์คํธ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ํ๋กํ์ผ์ ๊ตฌ์ฑํ์ธ์.
application-test.yaml์ ์์ฑํ์ธ์.- ๋ฐ์ดํฐ์์ค๋ H2 ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ , PostgreSQL ํธํ ๋ชจ๋๋ก ์ค์ ํ์ธ์.
- H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํด ํ์ํ ์์กด์ฑ์ ์ถ๊ฐํ์ธ์.
- ํ ์คํธ ์์ ์ ์คํค๋ง๋ฅผ ์๋ก ์์ฑํ๋๋ก ์ค์ ํ์ธ์.
- ๋๋ฒ๊น ์ ์ฉ์ดํ๋๋ก ๋ก๊ทธ ๋ ๋ฒจ์ ์ ์ ํ ์ค์ ํ์ธ์.
- ํ
์คํธ ์คํ ๊ฐย
testย ํ๋กํ์ผ์ ํ์ฑํ ํ์ธ์. - JPA Audit ๊ธฐ๋ฅ์ ํ์ฑํ ํ๊ธฐ ์ํด ํ
์คํธ ํด๋์ค์ย
@EnableJpaAuditing์ ์ถ๊ฐํ์ธ์. - ์ฃผ์ ๋ ํฌ์งํ ๋ฆฌ(User, Channel, Message)์ ์ฃผ์ ์ฟผ๋ฆฌ ๋ฉ์๋์ ๋ํด ๊ฐ๊ฐ ์ต์ 2๊ฐ ์ด์(์ฑ๊ณต, ์คํจ)์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
- ์ปค์คํ ์ฟผ๋ฆฌ ๋ฉ์๋
- ํ์ด์ง ๋ฐ ์ ๋ ฌ ๋ฉ์๋
- ์ปจํธ๋กค๋ฌ ๋ ์ด์ด์ ์ฌ๋ผ์ด์ค ํ
์คํธ๋ฅผ ์์ฑํ์ธ์.
@WebMvcTest๋ฅผ ํ์ฉํด ํ ์คํธ๋ฅผ ๊ตฌํํ์ธ์.WebMvcTest์์ ์๋์ผ๋ก ๋ฑ๋ก๋์ง ์๋ ์ ํ์ Bean์ด ํ์ํ๋ค๋ฉด@Import๋ฅผ ํ์ฉํด ์ถ๊ฐํ์ธ์.- ์์
@Import({ErrorCodeStatusMapper.class})
- ์์
- ์ฃผ์ ์ปจํธ๋กค๋ฌ(User, Channel, Message)์ ๋ํด ์ต์ 2๊ฐ ์ด์(์ฑ๊ณต, ์คํจ)์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
- MockMvc๋ฅผ ํ์ฉํด ์ปจํธ๋กค๋ฌ๋ฅผ ํ ์คํธํ์ธ์.
- ์๋น์ค ๋ ์ด์ด๋ฅผ ๋ชจ์(mock)ํ์ฌ ์ปจํธ๋กค๋ฌ ๋ก์ง๋ง ํ ์คํธํ์ธ์.
- JSON ์๋ต์ ๊ฒ์ฆํ๋ ํ ์คํธ๋ฅผ ํฌํจํ์ธ์.
2-8. ํตํฉ ํ ์คํธ
- ํตํฉ ํ
์คํธ ํ๊ฒฝ์ ๊ตฌ์ฑํ์ธ์.
@SpringBootTest๋ฅผ ํ์ฉํด Spring ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ์ธ์.- H2 ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ์ธ์.
- ํ ์คํธ์ฉ ํ๋กํ์ผ์ ๊ตฌ์ฑํ์ธ์.
- ์ฃผ์ API ์๋ํฌ์ธํธ์ ๋ํ ํตํฉ ํ
์คํธ๋ฅผ ์์ฑํ์ธ์.
- ์ฃผ์ API์ ๋ํด ์ต์ 2๊ฐ ์ด์์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
- ์ฌ์ฉ์ ๊ด๋ จ API (์์ฑ, ์์ , ์ญ์ , ๋ชฉ๋ก ์กฐํ)
- ์ฑ๋ ๊ด๋ จ API (์์ฑ, ์์ , ์ญ์ )
- ๋ฉ์์ง ๊ด๋ จ API (์์ฑ, ์์ , ์ญ์ , ๋ชฉ๋ก ์กฐํ)
- ๊ฐ ํ
์คํธ๋ย
@Transactional์ ํ์ฉํด ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ์ธ์.
- ์ฃผ์ API์ ๋ํด ์ต์ 2๊ฐ ์ด์์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ธ์.
3. ์ฌํ ์๊ตฌ์ฌํญ
3-1. MDC๋ฅผ ํ์ฉํ ๋ก๊น ๊ณ ๋ํ
- ์์ฒญ ID, ์์ฒญ URL, ์์ฒญ ๋ฐฉ์ ๋ฑ์ ์ ๋ณด๋ฅผ MDC์ ์ถ๊ฐํ๋ ์ธํฐ์
ํฐ๋ฅผ ๊ตฌํํ์ธ์.
- ํด๋์ค๋ช
:ย
MDCLoggingInterceptor - ํจํค์ง๋ช
:ย
com.**.discodeit.config - ์์ฒญ ID๋ ๋๋คํ ๋ฌธ์์ด๋ก ์์ฑํฉ๋๋ค. (UUID)
- ์์ฒญ ID๋ ์๋ต ํค๋์ ํฌํจ์์ผ ๋ ๋ง์ ๋ถ์์ด ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
- ํค๋ ์ด๋ฆ:ย
Discodeit-Request-ID
- ํค๋ ์ด๋ฆ:ย
- ํด๋์ค๋ช
:ย
WebMvcConfigurer๋ฅผ ํตํดยMDCLoggingInterceptor๋ฅผ ๋ฑ๋กํ์ธ์.- ํด๋์ค๋ช
:ย
WebMvcConfig - ํจํค์ง๋ช
:ย
com.**.discodeit.config
- ํด๋์ค๋ช
:ย
- Logback ํจํด์ MDC ๊ฐ์ ํฌํจ์ํค์ธ์.
-
๋ก๊ทธ ์ถ๋ ฅ ์์
# ํจํด {๋ }-{์}-{์ผ} {์}:{๋ถ}:{์ด}:{๋ฐ๋ฆฌ์ด} [{์ค๋ ๋๋ช }] {๋ก๊ทธ ๋ ๋ฒจ(5๊ธ์๋ก ๋ง์ถค)} {๋ก๊ฑฐ ์ด๋ฆ(์ต๋ 36๊ธ์)} [{MDC:์์ฒญID} | {MDC:์์ฒญ ๋ฉ์๋} | {MDC:์์ฒญ URL}] - {๋ก๊ทธ ๋ฉ์์ง}{์ค๋ฐ๊ฟ} # ์์ 25-01-01 10:33:55.740 [main] DEBUG o.s.api.AbstractOpenApiResource [827cbc0b | GET | /v3/api-docs] - Init duration for springdoc-openapi is: 216 ms
-
3-2. Spring Boot Admin์ ํ์ฉํ ๋ฉํธ๋ฆญ ๊ฐ์ํ
- Spring Boot Admin ์๋ฒ๋ฅผ ๊ตฌํํ ๋ชจ๋์ ์์ฑํ์ธ์.
-
IntelliJ ํ๋ฉด ์ฐธ๊ณ

-
๋ชจ๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

-
์์กด์ฑ

-
-
admin๋ชจ๋์ ๋ฉ์ธ ํด๋์ค์@EnableAdminServer์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๊ณ , ์๋ฒ๋ 9090๋ฒ ํฌํธ๋ก ์ค์ ํฉ๋๋ค.import de.codecentric.boot.admin.server.config.EnableAdminServer; @SpringBootApplication @EnableAdminServer public class AdminApplication { public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); } }# application.yaml spring: application: name: admin server: port: 9090 admin์๋ฒ ์คํ ํ localhost:9090/applications ์ ์ ์ํด๋ด ๋๋ค.- discodeit ํ๋ก์ ํธ์ Spring Boot Admin Client๋ฅผ ์ ์ฉํฉ๋๋ค.
- ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค.
dependencies { ... implementation 'de.codecentric:spring-boot-admin-starter-client:3.4.5 } - admin ์๋ฒ์ ๋ฑ๋ก๋ ์ ์๋๋ก ์ค์ ์ ๋ณด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
# application.yml spring: application: name: discodeit ... boot: admin: client: instance: name: discodeit ...# application-dev.yml spring: application: name: discodeit ... boot: admin: client: url: http://localhost:9090 ...# application-prod.yml spring: application: name: discodeit ... boot: admin: client: url: ${SPRING_BOOT_ADMIN_CLIENT_URL} ... - discodeit ์๋ฒ๋ฅผ ์คํํ๊ณ , admin ๋์๋ณด๋์ discodeit ์ธ์คํด์ค๊ฐ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
- ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค.
- admin ๋์๋ณด๋ ํ๋ฉด์ ์กฐ์ํด๋ณด๋ฉด์ ๊ฐ์ข
๋ฉํธ๋ฆญ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด์ธ์.
- ์ฃผ์ API์ ์์ฒญ ํ์, ์๋ต์๊ฐ ๋ฑ
- ์๋น์ค ์ ๋ณด
3-3. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๊ด๋ฆฌ
-
JaCoCo ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ์ธ์.
plugins { id 'jacoco' } test { finalizedBy jacocoTestReport } jacocoTestReport { dependsOn test reports { xml.required = true html.required = true } } - ํ
์คํธ ์คํ ํ ์์ฑ๋ ๋ฆฌํฌํธ๋ฅผ ๋ถ์ํด๋ณด์ธ์.
- ๋ฆฌํฌํธ๋ย
build/reports/jacocoย ๊ฒฝ๋ก์์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ฆฌํฌํธ๋ย
com.sprint.mission.discodeit.service.basicํจํค์ง์ ๋ํด์ 60% ์ด์์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ฌ์ฑํ์ธ์.
Leave a comment