Skip to content

jypLord/inxj-newsfeed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

216 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

INXJ: NEWSFEED

Image

๐Ÿ“ ์†Œ๊ฐœ

๐Ÿ“ฐ SNS ๊ธฐ๋ฐ˜ ๋‰ด์Šคํ”ผ๋“œ ํ”„๋กœ์ ํŠธ
ํŽ˜์ด์Šค๋ถ, ์ธ์Šคํƒ€๊ทธ๋žจ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜ SNS ํ”Œ๋žซํผ


โœ… ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์‚ฌ์šฉ์ž, ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€์˜ CRUD ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๊ธ€๊ณผ ๋Œ“๊ธ€์— ์ข‹์•„์š”(โค๏ธ) ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ๊ตฌ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์ƒ๋Œ€๋ฐฉ์ด ์ˆ˜๋ฝํ•˜๋ฉดํ•˜์—ฌ ์นœ๊ตฌ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
    ์–ธ์ œ๋“ ์ง€ ์นœ๊ตฌ ๋ชฉ๋ก์—์„œ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋ชฉ์ฐจ



๐Ÿ™‹โ€โ™€๏ธ INXJ

ํŒ€์žฅ
๋ฐ•์ค€์šฐ
@jypLord
ํŒ€์›
๊น€์ฑ„์ง„
@kmchaejin
ํŒ€์›
์œค์˜ˆ์ง„
@YejinY00n
ํŒ€์›
์ž„๊ฒฝ์ˆ˜
@rabitis99
ํŒ€์›
์ž„์ง€์œค
@jiyun-im-dev

๐Ÿ‘ฅ ์—ญํ•  ๋ถ„๋‹ด

๐Ÿง‘โ€๐Ÿ’ป ๋ฐ•์ค€์šฐ

  • ์œ ์ € ๋„๋ฉ”์ธ (CRUD, ๋กœ๊ทธ์ธ)
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฝ”๋”ฉ

๐Ÿง‘โ€๐Ÿ’ป ๊น€์ฑ„์ง„

  • ์นœ๊ตฌ ๋„๋ฉ”์ธ

๐Ÿง‘โ€๐Ÿ’ป ์œค์˜ˆ์ง„

  • ๊ฒŒ์‹œ๊ธ€ ๋„๋ฉ”์ธ
  • ์นดํ…Œ๊ณ ๋ฆฌ ๋„๋ฉ”์ธ

๐Ÿง‘โ€๐Ÿ’ป ์ž„๊ฒฝ์ˆ˜

  • ๋Œ“๊ธ€ ๋„๋ฉ”์ธ
  • ExceptionHandler ๊ตฌํ˜„
  • ์ด๋ฉ”์ผ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„

๐Ÿง‘โ€๐Ÿ’ป ์ž„์ง€์œค

  • ๋กœ๊ทธ์ธ ํ•„ํ„ฐ
  • ์ข‹์•„์š” ๋„๋ฉ”์ธ



๐Ÿ“š ๊ฐœ๋ฐœ ๊ทœ์น™

โฑ๏ธ ๊ณ ๋ฏผ์€ 30๋ถ„๊นŒ์ง€

  • ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ 30๋ถ„๊นŒ์ง€๋งŒ ๊ณ ๋ฏผํ•˜๊ณ , ๋ฐ”๋กœ ํŒ€์›์—๊ฒŒ ์งˆ๋ฌธํ•˜๊ธฐ

๐Ÿ“ Commit ์ปจ๋ฒค์…˜

  • ํ—ค๋”: ํ•œ๊ธ€
  • ๋ณธ๋ฌธ: ํ•œ๊ธ€
  • ์˜ˆ์‹œ) ๊ธฐ๋Šฅ: ๋Œ“๊ธ€ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๐Ÿ”€ PR(Pull Request) ๊ทœ์น™

  • ๋ชจ๋“  PR์€ ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ๋ฆฌ๋ทฐ ์Šน์ธ ํ•„์š”
  • ๋ฆฌ๋ทฐ์–ด ์ง€์ •

๐ŸŒฟ ๋ธŒ๋žœ์น˜ ์ „๋žต

  • main : โœ… ์ตœ์ข… ๋ฐฐํฌ ๋ธŒ๋žœ์น˜
  • develop : ๐Ÿ”ง ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
  • feat/#issue-number : ๐Ÿงฉ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์šฉ ๋ธŒ๋žœ์น˜
    (ex. feat/#12)

๐Ÿ“Œ Git issue ์—ฐ๋™
์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๋˜๋Š” PR ์„ค๋ช…์— ์ด์Šˆ ๋ฒˆํ˜ธ ํฌํ•จํ•˜๊ธฐ (#12 ๋“ฑ)



โš™ ๊ธฐ์ˆ  ์Šคํƒ



๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

โ”œโ”€๐Ÿ“ newsfeed
            โ””โ”€ domain
                   โ”œโ”€๐Ÿ’ฌcomment
                   โ”‚  โ”œโ”€controller, dto, entity, repository, service
                   โ”œโ”€๐Ÿ”งcommon
                   โ”‚  โ”œโ”€annotation, config, dto, entity, enums, filter, util
                   โ”œโ”€โš ๏ธexception 
                   โ”œโ”€โš ๏ธexceptionHandler
                   โ”œโ”€๐Ÿคfriend
                   โ”‚  โ”œโ”€controller, dto, entity, repository, service
                   โ”œโ”€โค๏ธlike
                   โ”‚  โ”œโ”€controller, entity, repository, service
                   โ”œโ”€โœ๏ธpost
                   โ”‚  โ”œโ”€controller, converter, dto, entity, initializer, repository, service
                   โ””โ”€๐Ÿ‘คuser
                      โ”œโ”€controller, entity, repository, service
                      โ”œโ”€dto
                         โ”œโ”€request
                         โ””โ”€response



๐Ÿ“Š ERD

Image

๐Ÿ›  ์™€์ด์–ด ํ”„๋ ˆ์ž„

figma



๐Ÿš€ ๊ธฐ๋Šฅ ์†Œ๊ฐœ

  • ํšŒ์› ๊ฐ€์ž…/๋กœ๊ทธ์ธ
    • ์ด๋ฉ”์ผ์„ ํ†ตํ•œ ์ธ์ฆ
  • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ
    • ์นดํ…Œ๊ณ ๋ฆฌ ์ง€์ •
    • ๊ณต๊ฐœ ๋ฒ”์œ„ ์„ค์ •
  • ๋Œ“๊ธ€ ์ž‘์„ฑ
  • ๊ฒŒ์‹œ๊ธ€/๋Œ“๊ธ€ ์ข‹์•„์š”
  • ์นœ๊ตฌ ์ถ”๊ฐ€

๐Ÿ‘ค ํšŒ์›

  • ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
  • ํšŒ์› ์ •๋ณด ์กฐํšŒ
  • ํšŒ์› ์ •๋ณด ์ˆ˜์ •
  • ํšŒ์› ํƒˆํ‡ด

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ์นœ๊ตฌ

  • ์นœ๊ตฌ ์š”์ฒญ ๋ณด๋‚ด๊ธฐ / ์ˆ˜๋ฝ / ๊ฑฐ์ ˆ
  • ์นœ๊ตฌ ๋ชฉ๋ก ํ™•์ธ

๐Ÿ“ ๊ฒŒ์‹œ๊ธ€

  • ์ƒˆ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ
  • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
    • ์กฐ๊ฑด ๊ฒ€์ƒ‰: ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„, ์ „์ฒด/์นœ๊ตฌ ๊ณต๊ฐœ
  • ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • / ์‚ญ์ œ

๐Ÿ’ฌ ๋Œ“๊ธ€

  • ๋Œ“๊ธ€ ์ž‘์„ฑ / ์ˆ˜์ • / ์‚ญ์ œ
  • ๋Œ“๊ธ€ ๋ชฉ๋ก ํ™•์ธ

โค๏ธ ์ข‹์•„์š”

  • ๊ฒŒ์‹œ๊ธ€์— ์ข‹์•„์š” ์ถ”๊ฐ€ ๋ฐ ์ทจ์†Œ
  • ๋Œ“๊ธ€์— ์ข‹์•„์š” ์ถ”๊ฐ€ ๋ฐ ์ทจ์†Œ



๐Ÿ—‚๏ธ APIs

๐Ÿ”—API Docs



โš ๏ธ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

Github merge ์ถฉ๋Œ

๐Ÿ“Œ ์ƒํ™ฉ
develop ๋ธŒ๋žœ์น˜๊ฐ€ ์•„๋‹Œ main ๋ธŒ๋žœ์น˜์— PR์ด merge ๋จ.

๐Ÿ”ง ํ•ด๊ฒฐ
1๏ธโƒฃ ๋กค๋ฐฑ

  • ๋ธŒ๋žœ์น˜ ๋กค๋ฐฑ ๊ณ ๋ คํ•˜์˜€์œผ๋‚˜, ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์ถฉ๋Œ์ด ์—†์—ˆ๊ณ  ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •์ด์—ˆ์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์ง„ํ–‰ 2๏ธโƒฃโœ… ๋Œ€์‹  main ๋ธŒ๋žœ์น˜๋ฅผ develop ๋ธŒ๋žœ์น˜๋กœ mergeํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ๋กœ ๋งŒ๋“ฆ

์–‘๋ฐฉํ–ฅ ์ฒดํฌ

๐Ÿ“Œ ์ƒํ™ฉ

  • ์นœ๊ตฌ ์š”์ฒญ์—์„œ user1, user2๊ฐ€ ์„œ๋กœ receiver, requester ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ด€๊ด€๊ณ„ โžก๏ธ ์–‘๋ฐฉํ–ฅ ์กฐํšŒ ํ•„์š”

๐Ÿ”ง ํ•ด๊ฒฐ
โœ… JPQL ๋กœ ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ 

๐Ÿ’ก JPQL ์ด๋ž€? ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ํ•˜๋Š” ๋„๊ตฌ

๐Ÿ› ๏ธ ๊ตฌํ˜„ ๋ฐฉ์‹

  • @Query ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑ
  • ํ…Œ์ด๋ธ” ๋ช…, ์ปฌ๋Ÿผ๋ช…์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๋ช…๊ณผ ํ•„๋“œ ๋ช… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์‹ค์ œ ํ…Œ์ด๋ธ” ๋ช…๊ณผ ์ปฌ๋Ÿผ๋ช… ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์‹œ @Query(nativeQuery=true)๋กœ ์„ค์ •

์ผ๋Œ€๋‹ค(1:N) ์—ฐ๊ด€๊ด€๊ณ„ ์ตœ์ ํ™”

๐Ÿ“Œ ์ƒํ™ฉ
๊ฒŒ์‹œ๋ฌผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€(Comment)์— ๋Œ€ํ•ด ๊ถŒํ•œ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š” ๋กœ์ง

if (!userId.equals(comment.getUser().getId())&&!userId.equals(comment.getPost().getUser().getId())) {
    throw new CustomException(ErrorCode.UNAUTHORIZED_USER_ID);
}

์ด๋•Œ comment.getUser()๋‚˜ comment.getPost().getUser()๊ฐ€ Lazy Loading ์ƒํƒœ๋ผ๋ฉด ๊ฐ๊ฐ ํ˜ธ์ถœ๋  ๋•Œ ๋งˆ๋‹ค ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋จ

์ฆ‰ ํ•˜๋‚˜์˜ ๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋”๋ผ๋„

comment.getUser() โ†’ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ 1ํšŒ comment.getPost().getUser() โ†’ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ 1ํšŒ โžก๏ธ ์ด 3๊ฐœ์˜ ์ฟผ๋ฆฌ ๋ฐœ์ƒ (Comment, User, PostUser)

๐Ÿ”ง ํ•ด๊ฒฐ
โœ… fetch join์„ ํ†ตํ•ด ๊ด€๋ จ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋„๋ก Repository ์ˆ˜์ •

๐Ÿ“ˆ ๊ฒฐ๊ณผ

  • DB์— ๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ์š”์ฒญ์ด ์ค„์–ด๋“ค์–ด ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • N+1 ๋ฌธ์ œ ์˜ˆ๋ฐฉ
  • ์—”ํ‹ฐํ‹ฐ ์ ‘๊ทผ ์‹œ LazyLoading์œผ๋กœ ์ธํ•œ ์˜ˆ์™ธ ๊ฐ€๋Šฅ์„ฑ ์ œ๊ฑฐ (LazyInitializationException ๋ฐฉ์ง€)
  • ์ „์ฒด ๋กœ์ง์˜ ์‘๋‹ต์†๋„ ํ–ฅ์ƒ

Category ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ ์ „๋žต

๐Ÿ“Œ ์ƒํ™ฉ

  • Enum Category๋ฅผ ๋ฃฉ์—… ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ DB์—์„œ ๊ด€๋ฆฌ.
  • ์ •์ ์ด๊ณ  ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๊ฐ’์„ DB ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค์–ด ์œ ์—ฐํ•œ ๊ด€๋ฆฌ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •์„ ์šฉ์ดํ•˜๊ฒŒ ํ•จ

โ— ๋ฌธ์ œ

  • ์ƒ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋  ๊ฐ’์ด๋ฏ€๋กœ ์ดˆ๊ธฐ๊ฐ’์„ DB์— ์–ด๋–ป๊ฒŒ ๋„ฃ์„์ง€ ๊ฒฐ์ •์ด ํ•„์š”.

๐Ÿ”ง ํ•ด๊ฒฐ โœ… ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— @PostConstruct๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ ์ดˆ๊ธฐํ™”.

  • ์ฝ”๋“œ์™€ DB ๋™๊ธฐํ™” ์‰ฌ์›€
  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ enum ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ ๊ฐ€๋Šฅ
  • ์ฝ”๋“œ ๋‚ด์—์„œ๋„ ์ง๊ด€์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿ› ๏ธ ๊ตฌํ˜„ ๋ฐฉ์‹

  • @Component + @PostConstruct ์กฐํ•ฉ์œผ๋กœ CategoryInitializer ์ƒ์„ฑ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ enum ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ DB์— ๊ฐ’ ์‚ฝ์ž…

โœ… ๊ฒฐ๋ก 

  • enum๋ณด๋‹ค ํ™•์žฅ์„ฑ/์œ ์—ฐ์„ฑ ํ–ฅ์ƒ
  • ์ฝ”๋“œ์™€ DB์˜ ๋ถˆ์ผ์น˜ ๋ฐฉ์ง€
  • ์ƒˆ๋กœ์šด ๊ฐ’ ํ•„์š” ์‹œ enum์— ์ถ”๊ฐ€๋งŒ ํ•˜๋ฉด ์ž๋™ ๋ฐ˜์˜๋จ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages