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

๐Ÿšง [STMT-146] ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ #89

Merged
merged 26 commits into from
Mar 14, 2024

Conversation

05AM
Copy link
Collaborator

@05AM 05AM commented Mar 6, 2024

๐Ÿ’ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ๋ฅผ ์ ์–ด์ฃผ์„ธ์š”

  • ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ๋ฐ ๋ฆฌํŒฉํ„ฐ๋ง

๐Ÿค” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์ ์–ด์ฃผ์„ธ์š”

  • BusinessException์„ ์ƒ์†๋ฐ›๋Š” NotImplementedException๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์‹œ ์˜ˆ์™ธ ๋˜์ง€๊ธฐ
  • ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ IOException ๋†“์ณค๋˜ ๋กœ๊ทธ ์ถœ๋ ฅ
  • ์œ ํšจํ•œ ์ด๋ฏธ์ง€ ํ™•์žฅ์ž๋ฅผ ๋ณ„๋„์˜ enum ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„
  • FileUtil ํด๋ž˜์Šค ๋ฆฌํŒฉํ„ฐ๋ง: ํ™•์žฅ์ž ๊ฒ€์‚ฌ๋ฅผ ๋ฌธ์ž์—ด ์ถ”์ถœ์—์„œ content type ๊ฒ€์‚ฌ๋กœ ๋ณ€๊ฒฝ
    • originalFileName์—์„œ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” contentType์„ ๊ฐ€์ ธ์™€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • null ๊ฒ€์‚ฌ ๋“ฑ์˜ ๋กœ์ง์€ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ์ถ”๊ฐ€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค ์ƒ๊ฐ๋˜์‹œ๋ฉด ํŽธํ•˜๊ฒŒ ๋ฆฌ๋ทฐ ๋‹ฌ์•„์ฃผ์„ธ์š”!
  • file upload ์ •์ƒ์ž‘๋™ ํ…Œ์ŠคํŠธ์šฉ API ๊ตฌํ˜„
    • ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” api๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ •์ƒ ์ž‘๋™์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ดํ›„ admin๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ api๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ณ , ์‚ฌ์šฉํ•  ์ผ์ด ์—†์„ ์‹œ์—๋Š” ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ™‹ ์ค‘์ ์ ์œผ๋กœ ๋ฆฌ๋ทฐ ํ–ˆ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ ์–ด์ฃผ์„ธ์š”

  • GlobalExceptionController์˜ ์ƒ์ˆ˜ WARN_LOG_MESSAGE๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”์ง€, ์•ˆ๋˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹์„์ง€.
    • ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณธ ๋ฐฉ๋ฒ•์€ common์˜ Constant ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
public class GlobalExceptionHandler {

    public static final String ERROR_LOG_MESSAGE = "[ERROR] {} : {}";
    public static final String WARN_LOG_MESSAGE = "[WARN] {} : {}";
  • ์ง€๊ธˆ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฐ๋Š”๋‹ค๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒƒ ๊ฐ™์€๋ฐ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„์ง€
catch (IOException e) {
log.warn(WARN_LOG_MESSAGE, e.getClass().getSimpleName(), e.getMessage());
log.debug(e.getMessage(), e);

throw new BusinessException(ErrorCode.UPLOAD_FILE_FAIL_ERROR);
}
  • ValidImageContentType์˜ ํŒจํ‚ค์ง€ ์œ„์น˜
    • ํ˜„์žฌ๋Š” FileUtil๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ์ด๋‹ˆ utils์— ๋„ฃ์—ˆ๋Š”๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์—ฐ๊ด€๋œ ํด๋ž˜์Šค์ธ๋“ฏ๋„ ํ•˜์—ฌ ์–ด๋””์— ์œ„์น˜์‹œ์ผœ์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค.

05AM added 10 commits March 5, 2024 01:29
@05AM 05AM requested a review from zxcv9203 as a code owner March 6, 2024 10:32
@zxcv9203
Copy link
Collaborator

zxcv9203 commented Mar 6, 2024

  • originalFileName์—์„œ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” contentType์„ ๊ฐ€์ ธ์™€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • null ๊ฒ€์‚ฌ ๋“ฑ์˜ ๋กœ์ง์€ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ์ถ”๊ฐ€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค ์ƒ๊ฐ๋˜์‹œ๋ฉด ํŽธํ•˜๊ฒŒ ๋ฆฌ๋ทฐ ๋‹ฌ์•„์ฃผ์„ธ์š”!

์ด์ „์—๋„ ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์ด์ง€๋งŒ contentType + ํŒŒ์ผ๋ช…์˜ .ํ™•์žฅ์ž ๋‘˜๋‹ค ๊ฒ€์ฆํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. contentType์„ image/jpeg์ธ ์ƒํƒœ๋”๋ผ๋„ .asd์™€ ๊ฐ™์ด ์ž„์˜๋กœ ํ™•์žฅ์ž๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๋„˜์–ด์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜๋‹ค ๊ฒ€์ฆํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿค”

  • GlobalExceptionHandler์˜ ์ƒ์ˆ˜ WARN_LOG_MESSAGE๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”์ง€, ์•ˆ๋˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹์„์ง€.

    • ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณธ ๋ฐฉ๋ฒ•์€ common์˜ Constant ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
public class GlobalExceptionHandler {

    public static final String ERROR_LOG_MESSAGE = "[ERROR] {} : {}";
    public static final String WARN_LOG_MESSAGE = "[WARN] {} : {}";
  • ์ง€๊ธˆ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฐ๋Š”๋‹ค๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒƒ ๊ฐ™์€๋ฐ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„์ง€
catch (IOException e) {
log.warn(WARN_LOG_MESSAGE, e.getClass().getSimpleName(), e.getMessage());
log.debug(e.getMessage(), e);

throw new BusinessException(ErrorCode.UPLOAD_FILE_FAIL_ERROR);
}

๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์žก์•„์„œ ์ถœ๋ ฅํ•ด์ฃผ์–ด๋„ ์ถฉ๋ถ„ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๐Ÿ‘

  • ValidImageContentType์˜ ํŒจํ‚ค์ง€ ์œ„์น˜

ํŒจํ‚ค์ง€ ์œ„์น˜๋Š” ๊ดœ์ฐฎ์€๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ValidImageContentType์ด๋ผ๋Š” ์ด๋ฆ„๋„ ์ข‹์ง€๋งŒ Valid๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์–ด๋„ ์ดํ•ดํ•˜๊ธฐ ์ถฉ๋ถ„ํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ์ œ๊ฑฐํ•ด์ฃผ์…”๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿค”

  • ํ˜„์žฌ๋Š” FileUtil๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ์ด๋‹ˆ utils์— ๋„ฃ์—ˆ๋Š”๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์—ฐ๊ด€๋œ ํด๋ž˜์Šค์ธ๋“ฏ๋„ ํ•˜์—ฌ ์–ด๋””์— ์œ„์น˜์‹œ์ผœ์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋„๋ฉ”์ธ์— ์ข…์†๋œ ์œ ํ‹ธ ํด๋ž˜์Šค๋ผ๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋„๋ฉ”์ธ์— utils ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•ด๋„ ๊ดœ์ฐฎ์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋กœ, FileUtil์˜ ๊ฒฝ์šฐ Image ๊ด€๋ จ ์œ ํ‹ธ ํด๋ž˜์Šค์ธ ๊ฒƒ ๊ฐ™์•„ ImageUtil ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋„ค์š” ๐Ÿ‘

@05AM
Copy link
Collaborator Author

05AM commented Mar 7, 2024

@zxcv9203

๋‹ฌ์•„์ฃผ์‹  ํ”ผ๋“œ๋ฐฑ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค!
๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์˜ FileUtil์˜ ๊ฒฝ์šฐ ์ถ”ํ›„ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘๊ณ  ์ง€์€ ์ด๋ฆ„์ด์—ˆ๋Š”๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ถ„๋ฆฌํ•˜๋Š” ์ชฝ์ด SRP์— ๋” ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ImageUtil์€ ์ด๋ฏธ์ง€์™€ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋„ ์—ฐ์ƒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ณ ์•ˆํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ฆฌ๋ทฐ ๋ฐ˜์˜ + ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋ฆฌ๋ทฐ ์š”์ฒญ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ถ”ํ›„์— ์Šคํ„ฐ๋”” ๊ทธ๋ฃน ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ ํ›„์— ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

05AM added 2 commits March 8, 2024 01:56
- `String.contains`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ `image/jpeg`, ํ™•์žฅ์ž jpg์˜ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ์œ ํšจํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ
- ImageContentType์— extension์„ ์ถ”๊ฐ€ํ•ด contentType๊ณผ extension์„ ๋น„๊ตํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€
@05AM 05AM requested a review from zxcv9203 March 7, 2024 17:29
@05AM 05AM self-assigned this Mar 7, 2024
@05AM 05AM added the D-1 1์ผ ์ „ ๊นŒ์ง€ ๋ฆฌ๋ทฐํ•ด์ฃผ์„ธ์š” label Mar 7, 2024
@github-actions github-actions bot added D-0 ๋ฐ”๋กœ ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•ด์š” and removed D-1 1์ผ ์ „ ๊นŒ์ง€ ๋ฆฌ๋ทฐํ•ด์ฃผ์„ธ์š” labels Mar 8, 2024
05AM added 6 commits March 12, 2024 13:37
- `ErrorCode` ์—์„œ ๋ˆ„๋ฝ๋œ ์ฝ”๋“œ ์ถ”๊ฐ€
- !๋ฅผ ๋ถ™์ด์ง€ ์•Š์€ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜์™€ test์—์„œ ๋ฐ”๋ผ๋Š” ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ์‘๋‹ต์„ ์ฃผ์–ด์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
- ์ถ”์ถœํ•œ content type์ด non null์ผ ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์ •ํ•ด์ง„ content type ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ํ™•์žฅ์ž์˜ ๊ฒฝ์šฐ Unsupported media type๊ณผ Bad Reqeust ๋‘˜ ์ค‘์— ์–ด๋–ค ์ƒํƒœ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ผ์ง€ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, Validator์ธ๋งŒํผ ์œ ํšจ์„ฑ์„ ํŒ๋‹จํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ `BadRequest` ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ†ต์ผํ•˜์—ฌ ์‘๋‹ตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
@05AM 05AM requested a review from zxcv9203 March 13, 2024 00:14
@05AM 05AM merged commit 24302db into dev Mar 14, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
D-0 ๋ฐ”๋กœ ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•ด์š”
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants