PROJECTS

Team Project 5 | ํ”„๋กœ์ ํŠธ ๊ธฐํš S.A | 6์›”28์ผ

nicesugi 2022. 6. 28. 17:30

๐Ÿ‘ป ํ”„๋กœ์ ํŠธ ์ฃผ์ œ

  • ์œ ํ™” ์ œ์ž‘
    • ์œ ํ™”์ œ์ž‘ ์ธ๊ณต์ง€๋Šฅ ๊ธฐ์ˆ (NST)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์œผ๋ฉด ์œ ํ™” ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ™˜๋˜์–ด ์ถœ๋ ฅ๋˜๋Š” ์„œ๋น„์Šค
    • ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ธฐ์ˆ (Generative models)์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํฅ๋ฏธ๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค

๐Ÿ‘ป ํ•„์ˆ˜ ๊ตฌํ˜„ ๊ธฐ์ˆ 

  • Django Rest-framework
  • ์œ ํ™”์ œ์ž‘ ์ธ๊ณต์ง€๋Šฅ ๊ธฐ์ˆ (NST)
  • CRUD
  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ - JWT
  • AWS EC2 ๋ฐฐํฌ

๐Ÿ‘ป ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ์ •๊ธฐ์ ์ธ ์ƒํ˜ธ ํ”ผ๋“œ๋ฐฑ ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ๊ฐ„
  • git hub
    • branch ํ™œ์šฉ๋ฒ• ๊ณต๋ถ€ ( ๋ฐฑ์—… ๋ฐ ๋กค๋ฐฑ๊ธฐ๋Šฅ ์‚ฌ์šฉ,๋‹ค๋ฅธ ํŒ€์›๋„ ์ž˜ ์•Œ์•„๋ณด๋„๋ก ํ‘œ์‹œ )
    • Issues / Projects / Wiki ํƒญ ํ™œ์šฉ
    • pull & push
    • merge ๋ฐฉ๋ฒ• 3 ๊ฐ€์ง€์— ๋Œ€ํ•œ ์˜๋ฏธ ์ˆ™์ง€
  • ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” RESTful API ์ž‘์„ฑ
  • ๊ณต๋ถ€
    • DRF
    • mySQL
    • ๋จธ์‹ ๋Ÿฌ๋‹
    • ๋ถ๋งˆํฌ, ์ข‹์•„์š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๐Ÿ‘ป ํ•„์ˆ˜ ํฌํ•จ ์‚ฌํ•ญ

๐Ÿ˜‡ ํ•„์ˆ˜ ๊ธฐ๋Šฅ

  • DRF ์‚ฌ์šฉ
    • ํšŒ์› ๊ธฐ๋Šฅ ํฌํ•จ (JWT ํ† ํฐ์„ ์ด์šฉ)
  • ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ธฐ๋Šฅ๋ณ„ ๊ด€๋ฆฌ
  • CRUD ๊ธฐ๋Šฅ
  • ์œ ํ™”์ œ์ž‘ ์ธ๊ณต์ง€๋Šฅ ๊ธฐ์ˆ (NST)
  • AWS EC2 ๋ฐฐํฌ

๐Ÿ˜‡ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

  • ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋Š” S3์— ์˜ฌ๋ ค์„œ ๊ด€๋ฆฌ
  • ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ฌ์ดํŠธ์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •(๋…ธ์ถœ ์‹œ๊ฐ„, ๊ณต๊ฐœ ์—ฌ๋ถ€ ์„ ํƒ ๊ฐ€๋Šฅ)
  • ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด ์ข‹์•„์š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๋งˆ์ดํŽ˜์ด์ง€์— ๋ณธ์ธ์ด ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€/๊ฒŒ์‹œ๊ธ€์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ์ƒ์„ฑ๋œ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ๊ณต์œ ๊ธฐ๋Šฅ(๋ฉ”์ผ ๋ณด๋‚ด๊ธฐ ๋“ฑ) ์ถ”๊ฐ€
  • ์†Œ์…œ ๋กœ๊ทธ์ธ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๐Ÿ‘ป MOCKUP

๐Ÿ‘ป DB

user {
	"user_id(pk)" : "Primary Key",
	"username" : "์‚ฌ์šฉ์ž ์•„์ด๋””",
	"password" : "๋น„๋ฐ€๋ฒˆํ˜ธ",
	"email" : "์ด๋ฉ”์ผ",
	"fullname": "์ด๋ฆ„",
	"join_date": "์ƒ์„ฑ์‹œ๊ฐ„",
}

style {
	"style_id(pk)": "Primary Key",
	"style_image": "ํ’๊ฒฝ ์‚ฌ์ง„",
	"category": "์นดํ…Œ๊ณ ๋ฆฌ"
}

image {
	"image_id(pk)": "Primary Key",
	"style_id(fk)": "Foreign Key",
	"article_id(fk)": "Foreign Key",
	"user_id(fk)": "Foreign Key",
	"input": "์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์‚ฌ์ง„",
	"output": "๊ฒฐ๊ณผ ์‚ฌ์ง„"
}

article {
	"article_id(pk)" : "Primary Key",
	"user_id(fk)" : "Foreign Key",
	"image_id(fk)": "Foreign Key",
	"title" : "์ œ๋ชฉ",
	"content" : "๋‚ด์šฉ",
	"created_at" : "๋“ฑ๋ก ์ผ์ž",
	"modlfied_at" : "์ˆ˜์ • ์ผ์ž"
}

comment {
	"comment_id(pk)" : "Primary Key",
	"article_id(fk)": "Foreign Key",
	"user_id(fk)" : "Foreign Key",
	"content" : "๋‚ด์šฉ"
}

like {
	"like_id(pk)" : "Primary Key",
	"user_id(fk)" : "Foreign Key",
	"article(fk)" : "Foreign Key",
}

bookmark {
	"bookmark_id(pk)" : "Primary Key",
	"user_id(fk)" : "Foreign Key",
  "article_id(fk)" : "Foreign Key",
}

๐Ÿ‘ป ์ปจ๋ฒค์…˜

๐Ÿ˜‡ GitHub

  • ํ”„๋ก ํŠธ์—”๋“œ
    • ๋ธŒ๋žœ์น˜ (app ๋ณ„๋กœ )
  • ๋ฐฑ์—”๋“œ
    • ๋ธŒ๋žœ์น˜ (app ๋ณ„๋กœ )
  • ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€
Commit Type
- Feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ
- Fix : ๋ฒ„๊ทธ ์ˆ˜์ •
- Docs : ๋ฌธ์„œ ์ˆ˜์ •
- Design : CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ
- Style: ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ /  ์ฝ”๋“œ ํฌ๋งท ๋ณ€๊ฒฝ, ์ƒˆ๋ฏธ ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ˆ˜์ •์ด ์—†๋Š” ๊ฒฝ์šฐ
- Refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
- Test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ/๊ธฐ๋Šฅ ์ถ”๊ฐ€
- Rename : ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ
- Remove : ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ

Subject
- 50์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๊ณ , ์ปค๋ฐ‹ ํƒ€์ž…์„ ์ค€์ˆ˜ํ•จ.

 Body
- 72์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๊ณ , ๋ชจ๋“  ์ปค๋ฐ‹์— ๋ณธ๋ฌธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†์Œ.

๐Ÿ‘ป ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

๐Ÿ˜‡ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ

  • ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ํšŒ์›๊ฐ€์ž… ๋˜๋Š” ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํšŒ์›๊ฐ€์ž…์€ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๊ฐ€ 6์ž๋ฆฌ ์ด์ƒ ์ด์—ฌ์•ผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์•„์ด๋””๊ฐ€ ์ค‘๋ณต๋˜๋ฉด ํšŒ์›๊ฐ€์ž…์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ์ด ๋œ ์ƒํƒœ์—์„  ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ ‘์†์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ : ์†Œ์…œ ๋กœ๊ทธ์ธ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ
  • ์ถ”๊ฐ€ : ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ

๐Ÿ˜‡ ๋ฉ”์ธ ํŽ˜์ด์ง€

  • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ํ•œ ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์—ญ์ˆœ)
  • ๊ฐ ๊ฒŒ์‹œ๋ฌผ์— ์ข‹์•„์š”์™€ ๋ถ๋งˆํฌ๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์—…๋กœ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ๋„ค์ด์…˜์„ ํ†ตํ•ด 2 x 3 ์ด ๋„˜์–ด๊ฐ€๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๋ฌผ์„ ํด๋ฆญ ์‹œ ๊ฒŒ์‹œ๊ธ€์˜ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜‡ ์—…๋กœ๋“œ ํŽ˜์ด์ง€

  • ์‚ฌ์ง„์„ ์„ ํƒํ•˜์—ฌ ์—…๋กœ๋“œ ํ•˜๋ฉด ๋จธ์‹ ๋Ÿฌ๋‹์„ ํ†ตํ•ด ์‚ฌ์ง„์˜ ์Šคํƒ€์ผ์„ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ๊ณ„์ ˆ๊ฐ์˜ ์‚ฌ์ง„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋จธ์‹ ๋Ÿฌ๋‹์˜ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜ค๋ฉด ์‚ฌ์ง„์— ๋งž๋Š” ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ์‚ฌ์ง„์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ œ๋ชฉ์€ 30์ž, ์„ค๋ช…์€ 100์ž ์ดํ•˜๋กœ๋งŒ ์ž‘์„ฑํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ ๋ฉ”์ธํŽ˜์ด์ง€๋กœ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ˜‡ ๋งˆ์ด ํŽ˜์ด์ง€

  • ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ ์‚ฌ์ง„ ๋ฐ ๋ถ๋งˆํฌํ•œ ์‚ฌ์ง„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ ์‚ฌ์ง„๋“ค์ด ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.
  • ๋ฌดํ•œ ์Šคํฌ๋กค์„ ์ด์šฉํ•˜์—ฌ ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๋ฌผ์„ ํด๋ฆญ ์‹œ ๊ฒŒ์‹œ๊ธ€์˜ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ ์‚ฌ์ง„์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ˜‡ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€

  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ธ€์— ๋ถ๋งˆํฌ๋ฅผ ๋‚จ๊ฒจ ๋งˆ์ด ํŽ˜์ด์ง€์˜ ๋ถ๋งˆํฌ ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ข‹์•„์š” ์นด์šดํŠธ ์ˆซ์ž๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ˜‡ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ํŽ˜์ด์ง€

  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์‚ฌ์ง„ ์ค‘ ์ˆ˜์ •ํ•  ์‚ฌ์ง„์„ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ํ™”๋ฉด์œผ๋กœ ๋“ค์–ด์™€
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋งˆ์ดํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ
    • ๊ฒŒ์‹œ๊ธ€์˜ ์„ค๋ช…
  • ์šฐ์ƒ๋‹จ์˜ ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ‘ป API

๐Ÿ‘ป ํŒ€์›๋“ค์˜ ์—ญํ•  ๋ฐ ์•ฝ์†

๐Ÿ˜‡ ํŒ€์›๋ณ„ ์—ญํ• 

  • ๊น€๊ฒฝ์ˆ˜, ์ •์ฃผํ˜„
    • ๋ฐฐํฌ
    • ๋ฉ”์ธ ํŽ˜์ด์ง€ : ์ ์šฉ๋œ ๋Œ€์ƒ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€
    • ๊ฒŒ์‹œ๊ธ€ ์—…๋กœ๋“œ ํŽ˜์ด์ง€ :์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€
    • ๋Œ“๊ธ€
    • ์ข‹์•„์š”
    • ๋ถ๋งˆํฌ
  • ์ •๋Œ€๊ทผ, ์œค์Šฌ๊ธฐ
    • ์œ ํ™”์ œ์ž‘ ์ธ๊ณต์ง€๋Šฅ ๊ธฐ์ˆ 
    • ํšŒ์›๊ฐ€์ž…
    • ๋กœ๊ทธ์ธ
    • ๋งˆ์ด ํŽ˜์ด์ง€
      • ๋ถ๋งˆํฌ ๋ชจ์€ ํŽ˜์ด์ง€
      • ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

๐Ÿ˜‡ ์šฐ๋ฆฌ ํŒ€์˜ ์•ฝ์†

  • ์„œ๋กœ์˜ ์˜๊ฒฌ์„ ์กด์ค‘ํ•ด ์ฃผ๊ธฐ
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋ ต๊ณ  ํž˜๋“ค์–ด๋„ ์›ƒ๊ธฐ
  • ํœด์ผ์—๋„ ํ”„๋กœ์ ํŠธ์— ์‹œ๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํ• ์• ํ•˜๊ธฐ
  • ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋ฉฐ ์„œ๋กœ๊ฐ€ ์„œ๋กœ์˜ ๋ฉ˜ํ† ๊ฐ€ ๋˜์–ด์ฃผ๊ธฐ
๋ฐ˜์‘ํ˜•