Skip to content

๐Ÿพ Spring ๊ธฐ๋ฐ˜ ์œ ๊ธฐ๋™๋ฌผ ์ž…์–‘ยท๋ด‰์‚ฌยทํ›„์› ํ†ตํ•ฉ ๊ด€๋ฆฌ ํ”Œ๋žซํผ

Notifications You must be signed in to change notification settings

Rege-97/Animal-Care-Platform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

logo3

์ „๊ตญ ์œ ๊ธฐ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์™€ ์ž…์–‘์ž, ํ›„์›์ž๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ตํ•ฉ ๊ด€๋ฆฌ ํ”Œ๋žซํผ

๋ฐฐํฌ๋งํฌ

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Animal-Care-Platform์€ ์œ ๊ธฐ๋™๋ฌผ ๋ณดํ˜ธ์†Œ, ์ž…์–‘์ž, ํ›„์›์ž ๋“ฑ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ฃผ์ฒด๊ฐ€ ์ฐธ์—ฌํ•˜๋Š”
์œ ๊ธฐ๋™๋ฌผ ํ†ตํ•ฉ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

์ž…์–‘ ์‹ ์ฒญ, ๋ด‰์‚ฌ ํ™œ๋™, ํ›„์› ์ฐธ์—ฌ ๋“ฑ ์‹ค์ œ ๋ณดํ˜ธ์†Œ ์šด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€์œผ๋ฉฐ,
๋ณดํ˜ธ์†Œ ๊ด€๋ฆฌ์ž์™€ ์šด์˜์ž(๊ด€๋ฆฌ์ž ๊ณ„์ •)์˜ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•ด ์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ์—ญํ•  ์ฒด๊ณ„๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” 4์ธ ํŒ€ ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ, ์ €๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ์˜์—ญ์„ ๋‹ด๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… ์ฃผ์š” ๊ธฐ์—ฌ ๋‚ด์—ญ

  • [์‚ฌ์šฉ์ž] ์œ ๊ธฐ๋™๋ฌผ ํ•„ํ„ฐ ์กฐํšŒ ๋ฐ ์ž…์–‘ ์‹ ์ฒญ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • [๋ณดํ˜ธ์†Œ] ์œ ๊ธฐ๋™๋ฌผ ๋“ฑ๋กยท์ˆ˜์ •ยท์‚ญ์ œ, ์›”๋ณ„ ํ†ต๊ณ„ API ๋ฐ Chart.js ์‹œ๊ฐํ™” ์ฒ˜๋ฆฌ
  • [๊ด€๋ฆฌ์ž] ๋ณดํ˜ธ์†Œ ๊ฐ€์ž… ์Šน์ธ/๊ฑฐ์ ˆ ๋ฐ ๋ฉ”์ผ ๋ฐœ์†ก, ๊ณต์ง€์‚ฌํ•ญ ํŠธ๋ฆฌํ˜• ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐ CRUD ๊ตฌํ˜„
  • ๊ณตํ†ต ์‘๋‹ต ๊ตฌ์กฐ: OkResponseDTO, ErrorResponseDTO, PageInformationDTO ์ง์ ‘ ์„ค๊ณ„ ๋ฐ ์ ์šฉ
  • ํŒŒ์ผ ์—…๋กœ๋“œ ์œ ํ‹ธ: FileManager ์œ ํ‹ธ ์„ค๊ณ„ ๋ฐ ๋ชจ๋“  ํŒŒ์ผ ๊ธฐ๋Šฅ ํ†ตํ•ฉ ์ ์šฉ
  • MyBatis: useGeneratedKeys ํ™œ์šฉํ•ด ํŒŒ์ผ-๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์‹œ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • RESTful API ๊ตฌ์กฐ ๋ฐ ์‘๋‹ต ์ผ๊ด€ํ™” ์„ค๊ณ„
  • AWS ๋ฐฐํฌ: EC2 + RDS ์ˆ˜๋™ ๋ฐฐํฌ, ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •, WAR ์šด์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • GitHub ํ˜‘์—… ์ „๋žต: Git Flow ์ œ์•ˆ ๋ฐ ๋ธŒ๋žœ์น˜/PR ๊ธฐ๋ฐ˜ ํ˜‘์—… ๊ตฌ์กฐ ์ •๋ฆฝ

RESTful ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž, ๋ณดํ˜ธ์†Œ, ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ,
๐Ÿ‘‰ API ๋ช…์„ธ์„œ ๋ณด๊ธฐ

๐Ÿ“Œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

๋ฉ”์ธํŽ˜์ด์ง€ ์ž…์–‘ ๋™๋ฌผ ์กฐํšŒ
๋ฉ”์ธํŽ˜์ด์ง€ ์ž…์–‘ํŽ˜์ด์ง€
๋ณดํ˜ธ์‹œ์„ค ์กฐํšŒ ๋ณดํ˜ธ์‹œ์„ค ํ†ต๊ณ„
๋ณดํ˜ธ์‹œ์„ค ํŽ˜์ด์ง€ ํ†ต๊ณ„์กฐํšŒ

๐Ÿ›  ์‚ฌ์šฉ ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„์•ผ ๊ธฐ์ˆ 
์–ธ์–ด Java JavaScript HTML5 CSS3
๋ฐฑ์—”๋“œ Spring MyBatis JSP Servlet
ํ”„๋ก ํŠธ์—”๋“œ JSTL EL Chart.js
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค MySQL
์„œ๋ฒ„ / ๋ฐฐํฌ Apache Tomcat AWS EC2 AWS RDS
ํ˜‘์—… ๋„๊ตฌ Git GitHub Notion Figma ERD Cloud
๊ธฐํƒ€ ๋„๊ตฌ DBeaver Postman draw.io

๐Ÿงฑ ๊ธฐ์ˆ  ์Šคํƒ ์„ ํƒ ๋ฐฐ๊ฒฝ

Spring Boot๊ฐ€ ์•„๋‹Œ Spring Framework ๊ธฐ๋ฐ˜์˜ ๋ ˆ๊ฑฐ์‹œ ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ตฌ์„ฑํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ ์ž ํ•จ
  • DI, ํŠธ๋žœ์žญ์…˜, ViewResolver ๋“ฑ ํ•ต์‹ฌ ์„ค์ •์„ ์ง์ ‘ ๊ฒฝํ—˜
  • ์ผ๋ถ€ ๊ธฐ์—…์˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ์šด์˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์‹ค๋ฌด ๋Œ€์‘๋ ฅ ํ™•๋ณด
  • Boot ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋ฌธ์ œ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜ ๋งˆ๋ จ

๐Ÿ“ ERD & ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„

Animal-Care-Platform์€ ์ž…์–‘, ๋ด‰์‚ฌ, ํ›„์›, ๊ฒŒ์‹œํŒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ฃผ์ฒด์™€ ๊ธฐ๋Šฅ ํ๋ฆ„์„ ๊ณ ๋ คํ•˜์—ฌ
์ด 28๊ฐœ ํ…Œ์ด๋ธ”์„ ํŒ€์›๋“ค๊ณผ ์„ค๊ณ„ํ•˜๊ณ  ์ •๊ทœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… ์„ค๊ณ„ ๋ฐฉ์‹

  • ๊ฐœ๋… ๋ชจ๋ธ: Peter Chen ๋ชจ๋ธ์„ ํ™œ์šฉํ•ด ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„ ์ •์˜
  • ๋…ผ๋ฆฌ/๋ฌผ๋ฆฌ ๋ชจ๋ธ: IE ๋ฐฉ์‹์œผ๋กœ ์ •๊ทœํ™”, ํ‚ค ์„ค์ •, ์ œ์•ฝ ์กฐ๊ฑด ๋ฐ˜์˜
  • ๊ธฐ๋Šฅ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ˜์˜
    โ”” ํšŒ์›-์ž…์–‘, ๋ณดํ˜ธ์†Œ-์œ ๊ธฐ๋™๋ฌผ, ํ›„์›-๋Œ“๊ธ€ ๋“ฑ ์‹ค์‚ฌ์šฉ ํ๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„

โœ… ์„ค๊ณ„ ์›์น™

  • ํ…Œ์ด๋ธ”์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฑ…์ž„์„ ๋ถ„์‚ฐ
  • ๋ชจ๋“  ์—ฐ๊ด€ ๊ด€๊ณ„๋Š” ์™ธ๋ž˜ํ‚ค๋กœ ์—ฐ๊ฒฐ โ†’ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ
  • ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์ •๊ทœํ™”๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

๐Ÿ—‚ ERD ์ž์„ธํžˆ ๋ณด๊ธฐ

๐Ÿ“„ ERD ๋‹ค์ด์–ด๊ทธ๋žจ ๋ณด๊ธฐ

๐Ÿงฉ ๊ณตํ†ต ์œ ํ‹ธ ๊ตฌ์กฐ & ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

Animal-Care-Platform์€ ๊ธฐ๋Šฅ๋ณ„ ๋ณต์žก๋„๊ฐ€ ๋†’์€ ๊ตฌ์กฐ ์†์—์„œ๋„
์ผ๊ด€๋œ ์‘๋‹ต ํฌ๋งท๊ณผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด
๊ณตํ†ต ์œ ํ‹ธ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… ๊ณตํ†ต ์‘๋‹ต DTO ์„ค๊ณ„

  • ๋ชจ๋“  API ์‘๋‹ต์„ ์ผ๊ด€๋œ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ DTO๋ฅผ ์ง์ ‘ ์„ค๊ณ„ ๋ฐ ์ ์šฉํ•จ:

    • OkResponseDTO: ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์‘๋‹ต (code, message, data)
    • OkPageResponseDTO: ๋ชฉ๋ก + ํŽ˜์ด์ง• ์‘๋‹ต (code, data, PageInformationDTO)
    • ErrorResponseDTO: ์˜ˆ์™ธ ์‘๋‹ต (code, message)
  • ํ”„๋ก ํŠธ์—์„œ๋Š” code์™€ message๋งŒ์œผ๋กœ๋„ ์„ฑ๊ณต/์‹คํŒจ ํŒ๋‹จ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋จ

  • ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ •๋ณด๋„ ํฌํ•จ๋˜์–ด ๋ณ„๋„ API ํ˜ธ์ถœ ์—†์ด UI ๊ตฌํ˜„ ๊ฐ€๋Šฅ

โœ… ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ

  • ๋ชจ๋“  ์˜ˆ์™ธ๋Š” ์ „์—ญ์ ์œผ๋กœ ErrorResponseDTO ํ˜•ํƒœ๋กœ ๋ž˜ํ•‘๋˜์–ด ์‘๋‹ต๋จ
  • ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋ฅผ code ๊ฐ’์œผ๋กœ ์ผ๊ด€๋˜๊ฒŒ ๋ถ„๊ธฐ ๊ฐ€๋Šฅ
  • ์ปจํŠธ๋กค๋Ÿฌ/์„œ๋น„์Šค/DAO ์ „ ๊ตฌ๊ฐ„์—์„œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ๊ณตํ†ต ๋ฉ”์‹œ์ง€ ์ •์˜

โœ… ํŒŒ์ผ ์—…๋กœ๋“œ ์œ ํ‹ธ (FileManager)

  • ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์‚ญ์ œ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํ‹ธ ํด๋ž˜์Šค๋กœ ์„ค๊ณ„
  • multipart/form-data ๊ธฐ๋ฐ˜ ์—…๋กœ๋“œ ์‹œ:
    • ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™ ์ƒ์„ฑ
    • ์ €์žฅ ํ›„ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ DB ์ €์žฅ ๋˜๋Š” ํ”„๋ก ํŠธ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ
  • ์‚ญ์ œ ์‹œ ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ ํ›„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํฌํ•จ
  • ๋ชจ๋“  ๋„๋ฉ”์ธ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„ โ†’ ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ + ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

์ด ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด API ์‘๋‹ต ์ฒ˜๋ฆฌ, ํŒŒ์ผ I/O, ์˜ˆ์™ธ ๋Œ€์‘ ๋“ฑ์—์„œ
์ค‘๋ณต ์—†์ด ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜์„ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ง ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ

Animal-Care-Platform์€ ์‚ฌ์šฉ์ž, ๋ณดํ˜ธ์‹œ์„ค, ๊ด€๋ฆฌ์ž 3๊ฐ€์ง€ ์—ญํ•  ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ,
๋‹ค์Œ ์˜์—ญ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์„ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง‘ ์‚ฌ์šฉ์ž ํŽ˜์ด์ง€

โ–ซ ์œ ๊ธฐ๋™๋ฌผ ์กฐํšŒ & ์ž…์–‘ ์‹ ์ฒญ

  • ํ’ˆ์ข…, ์ง€์—ญ, ์„ฑ๋ณ„, ์ž…์–‘ ์ƒํƒœ ๋“ฑ ๋‹ค์ค‘ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง ๊ฒ€์ƒ‰ API
  • ํŽ˜์ด์ง€๋„ค์ด์…˜ ํฌํ•จ ์‘๋‹ต โ†’ ํ”„๋ก ํŠธ ๋‹จ ๋ Œ๋”๋ง ์ตœ์ ํ™”
  • ์ƒ์„ธ ์กฐํšŒ ์‹œ ๋ณดํ˜ธ์†Œ ์ •๋ณด ๋™์‹œ ๋ฐ˜ํ™˜
  • ์ž…์–‘ ์‹ ์ฒญ ์‹œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ๋ฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ

โ–ซ ๋ณดํ˜ธ์†Œ ์ •๋ณด ์กฐํšŒ

  • ๋ณดํ˜ธ์†Œ๋ช… / ์ง€์—ญ๋ช… ๊ธฐ์ค€ ํ•„ํ„ฐ๋ง ๋ฐ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ
  • ์ƒ์„ธ ์‘๋‹ต ์‹œ ํ›„๊ธฐ, ๋ด‰์‚ฌ ์•ˆ๋‚ด ๋“ฑ ์ฝ˜ํ…์ธ  ํฌํ•จ
  • ๋ณดํ˜ธ์†Œ ID์™€ ์—ฐ๊ด€ ์ฝ˜ํ…์ธ  ๊ฐ„ ์†Œ์† ๊ด€๊ณ„ ๊ฒ€์ฆ

๐Ÿ  ๋ณดํ˜ธ์‹œ์„ค ๊ด€๋ฆฌ ํŽ˜์ด์ง€

โ–ซ ์œ ๊ธฐ๋™๋ฌผ ๋“ฑ๋ก / ์ˆ˜์ • / ์‚ญ์ œ

  • ๋ณดํ˜ธ์†Œ ๊ณ„์ • ์ „์šฉ REST API ๊ตฌ์„ฑ
  • multipart/form-data ๋ฐฉ์‹ ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ
  • ์ €์žฅ ๊ฒฝ๋กœ ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜, ์‚ญ์ œ ์ฒ˜๋ฆฌ ๊ณตํ†ตํ™”
  • ์ฒ˜๋ฆฌ ์ƒํƒœ ๋ฐ ๊ถŒํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌ์กฐ ์„ค๊ณ„

โ–ซ ๋ณดํ˜ธ์†Œ ํ†ต๊ณ„ API

  • ์ตœ๊ทผ 6๊ฐœ์›” ๊ธฐ์ค€ ์ž…์–‘/๋ด‰์‚ฌ/๊ฒŒ์‹œ๊ธ€ ์›”๋ณ„ ์ง‘๊ณ„ API
  • ๋ˆ„๋ฝ๋œ ์›” ๋ณด์ •์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ณธ๊ฐ’ ํฌํ•จ
  • Chart.js ์ ์šฉ์„ ์œ„ํ•œ ์‘๋‹ต ํฌ๋งท ๊ณ ์ •ํ™”

๐Ÿ›  ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž)

โ–ซ ๋ณดํ˜ธ์†Œ ๊ฐ€์ž… ์Šน์ธ / ๊ฑฐ์ ˆ

  • ๊ฐ€์ž… ์š”์ฒญ ๋ชฉ๋ก ํŽ˜์ด์ง• ์กฐํšŒ
  • ์ƒํƒœ ๊ธฐ๋ฐ˜ ์Šน์ธ/๊ฑฐ์ ˆ ์ฒ˜๋ฆฌ ๋ฐ ๋ฉ”์ผ ๋ฐœ์†ก
  • ๊ฑฐ์ ˆ ์‚ฌ์œ  ์ž…๋ ฅ โ†’ ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ๋ฉ”์ผ ์ž๋™ ์ „์†ก

โ–ซ ๊ณต์ง€์‚ฌํ•ญ ๊ฒŒ์‹œํŒ

  • ref, lev, turn ๊ธฐ๋ฐ˜ ํŠธ๋ฆฌํ˜• ๊ฒŒ์‹œํŒ ๊ตฌ์กฐ
  • ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ API ๊ตฌํ˜„
  • ๊ตฌ์กฐ์  ํ™•์žฅ์„ฑ ๊ณ ๋ คํ•œ ์„ค๊ณ„ (์ž์œ ๊ฒŒ์‹œํŒ, ๋‹ต๊ธ€ ๊ตฌ์กฐ ์ง€์› ๊ฐ€๋Šฅ)

๐Ÿงฉ ๊ณตํ†ต ์ฒ˜๋ฆฌ ๊ธฐ๋ฐ˜

  • ์‘๋‹ต ๊ตฌ์กฐ ํ‘œ์ค€ํ™” DTO (OkResponseDTO, ErrorResponseDTO, OkPageResponseDTO) ์„ค๊ณ„ ๋ฐ ์ ์šฉ
  • ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์‚ญ์ œ๋Š” ๊ณตํ†ต ์œ ํ‹ธ FileManager๋กœ ํ†ตํ•ฉ ์ฒ˜๋ฆฌ
  • ๋ชจ๋“  ๊ธฐ๋Šฅ API๋Š” RESTful ๊ตฌ์กฐ ์ค€์ˆ˜

๐Ÿง  ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฒฝํ—˜

Animal-Care-Platform ๊ตฌํ˜„ ์ค‘ ์‹ค๋ฌด์—์„œ ๋งˆ์ฃผ์น  ์ˆ˜ ์žˆ๋Š”
๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ, ๋™์‹œ์„ฑ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋“ค์„ ๊ฒฝํ—˜ํ•˜๊ณ  ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์œ ๊ธฐ๋™๋ฌผ ๋“ฑ๋ก ์‹œ ํŒŒ์ผ-๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

  • ์ดˆ๊ธฐ์—๋Š” MAX(IDX) ๋ฐฉ์‹์œผ๋กœ ์œ ๊ธฐ๋™๋ฌผ ๋“ฑ๋ก ํ›„ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ–ˆ์œผ๋‚˜,
  • โ†’ ๋™์‹œ์— ๋“ฑ๋ก ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋™๋ฌผ์˜ ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • โœ… ํ•ด๊ฒฐ: useGeneratedKeys๋ฅผ ํ†ตํ•ด DB๊ฐ€ ์ƒ์„ฑํ•œ IDX๋ฅผ ์ฆ‰์‹œ ๋ฐ›์•„์™€ ์ •ํ™•ํ•œ ํŒŒ์ผ ๊ฒฝ๋กœ ์„ค์ •

๐Ÿ“Œ ๋ณดํ˜ธ์†Œ ๊ฐ€์ž… ์Šน์ธ ์ค‘ ์ค‘๋ณต ์Šน์ธ ์ฒ˜๋ฆฌ

  • ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๋ฏธ ์Šน์ธํ•œ ๋ณดํ˜ธ์†Œ ๊ณ„์ •์ด ๋‹ค์‹œ ์Šน์ธ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • โœ… ํ•ด๊ฒฐ: checkJoinStatus() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์„ ๊ฒ€์ฆํ•˜๊ณ 
    ์Šน์ธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—์„œ๋งŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋„๋ก ๋กœ์ง ๋ณด์™„

๐Ÿ“Œ ๊ณต์ง€์‚ฌํ•ญ ref ๋ฒˆํ˜ธ ์ค‘๋ณต ๋ฌธ์ œ

  • ๊ณต์ง€์‚ฌํ•ญ ๋“ฑ๋ก ์‹œ MAX(ref)๋ฅผ ์กฐํšŒ ํ›„ INSERTํ•˜๋Š” ๊ตฌ์กฐ
  • โ†’ ๋™์‹œ ์š”์ฒญ ์‹œ ๋™์ผํ•œ ref ๊ฐ’์ด ๋ฐœ์ƒ๏ฟฝ๏ฟฝ ๊ฒŒ์‹œํŒ ํŠธ๋ฆฌ ๊ตฌ์กฐ ๊นจ์ง
  • โœ… ํ•ด๊ฒฐ: INSERT ... SELECT ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋กœ
    ref ๊ฐ’ ์ƒ์„ฑ๊ณผ INSERT๋ฅผ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ถฉ๋Œ ๋ฐฉ์ง€

๐Ÿ“Œ ๋ณดํ˜ธ์†Œ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ ๋ฌธ์ œ

  • ์›”๋ณ„ ํ†ต๊ณ„ API์—์„œ ๊ฐ’์ด ์—†๋Š” ์›”์€ ์‘๋‹ต ์ž์ฒด์—์„œ ๋น ์ง€๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • โœ… ํ•ด๊ฒฐ: ๋ˆ„๋ฝ๋œ ์›”์€ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ํ™•์ธ ํ›„ ๊ธฐ๋ณธ๊ฐ’ 0์„ ์ฑ„์›Œ
    ์‘๋‹ต์— ํฌํ•จ โ†’ Chart.js์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์‹œ๊ฐํ™” ๊ฐ€๋Šฅ

๐Ÿ“Œ ๋ณดํ˜ธ์†Œ ์ƒ์„ธ ์กฐํšŒ ์‹œ ๋ฌดํšจํ•œ ์ฝ˜ํ…์ธ  ์š”์ฒญ

  • ํ›„๊ธฐ๋‚˜ ๋ด‰์‚ฌ ์•ˆ๋‚ด ์š”์ฒญ ์‹œ ๋ณดํ˜ธ์†Œ ID๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์—๋„ ์‘๋‹ต ์‹œ๋„๋จ
  • โœ… ํ•ด๊ฒฐ: ๋ณดํ˜ธ์†Œ์™€ ์—ฐ๊ด€ ์ฝ˜ํ…์ธ  ๊ฐ„ ์†Œ์† ๊ด€๊ณ„๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฒ€์ฆ
    โ†’ ๋ฌดํšจ ์š”์ฒญ์€ ErrorResponseDTO๋ฅผ ํ†ตํ•ด ์ผ๊ด€๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๐Ÿ“Œ ์ž…์–‘ ์‹ ์ฒญ ์‹œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋ˆ„๋ฝ

  • ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ ์ฒญํ•˜๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋™๋ฌผ ID ์ž…๋ ฅ ์‹œ ์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • โœ… ํ•ด๊ฒฐ: ์„œ๋ฒ„ ๋‹จ์—์„œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ๋™๋ฌผ ID, ๋ณดํ˜ธ์†Œ ID๊นŒ์ง€ ๋ชจ๋‘ ์‚ฌ์ „ ๊ฒ€์ฆ
    โ†’ 500 ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๋ฐฉ์ง€ ๋ฐ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋ช…ํ™•ํ™”

โ˜๏ธ AWS ๋ฐฐํฌ & ์šด์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ์™„์„ฑ๋„๋ฅผ ๋ชฉํ‘œ๋กœ
AWS EC2 + RDS ํ™˜๊ฒฝ์— ์ง์ ‘ ๋ฐฐํฌ ๋ฐ ์šด์˜์„ ๊ตฌ์„ฑํ•˜๋ฉฐ ์‹ค์ „ ์ธํ”„๋ผ ๊ฒฝํ—˜์„ ์Œ“์•˜์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ EC2 (Ubuntu 22.04) ํ™˜๊ฒฝ ์„ค์ •

  • EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„, Apache Tomcat 9.0 ์ˆ˜๋™ ์„ค์น˜
  • WAR ํŒŒ์ผ์„ /webapps์— ์ง์ ‘ ๋ฐฐํฌํ•˜์—ฌ ์ˆ˜๋™ ์šด์˜ ๊ตฌ์กฐ ๊ตฌ์„ฑ
  • ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •: 22, 80, 9090 ํฌํŠธ ๊ฐœ๋ฐฉ

๐Ÿ›  ์„œ๋ฒ„ ํ™˜๊ฒฝ ์„ค์ •

  • ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์œผ๋กœ Java 11, Maven ํ™˜๊ฒฝ ์„ค์น˜
  • Tomcat ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (JAVA_HOME, CATALINA_HOME)

๐Ÿ›ข RDS(MySQL 8.0) ๊ตฌ์„ฑ

  • RDS์—์„œ MySQL ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •

๐Ÿ” ์šด์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด

  • ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ์˜ˆ๋ฐฉ์„ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง (htop, top, df -h ๋“ฑ)
  • ํ”„๋ฆฌํ‹ฐ์–ด EC2์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด 1GB Swap Memory ์ˆ˜๋™ ์„ค์ •

๐Ÿ“Ž ๊ธฐํƒ€ ์šด์˜ ์‚ฌํ•ญ

  • ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ localhost ๊ธฐ๋ฐ˜ API URL์„ ์‹ค์ œ EC2 Public IP๋กœ ๋ณ€๊ฒฝ
  • mapKey.properties ํŒŒ์ผ์„ ํ†ตํ•œ Kakao ์ง€๋„ API Key ์„ค์ • ๋ถ„๋ฆฌ

๐Ÿ“ˆ ๊ฒฐ๊ณผ & ํšŒ๊ณ 

๐Ÿš€ ์„ฑ๊ณผ ์š”์•ฝ

  • ์‹ค์ œ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ์„œ๋น„์Šค ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์œผ๋กœ ํ”„๋กœ์ ํŠธ ์™„์„ฑ
  • ๋ณดํ˜ธ์†Œ/์œ ๊ธฐ๋™๋ฌผ/์ž…์–‘/ํ›„์› ๋“ฑ ์‹ค์ œ ํ๋ฆ„์— ๋งž์ถ˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”„๋ฆฌํ‹ฐ์–ด EC2 ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ, ๋ฆฌ์†Œ์Šค ๋ถ„๋ฆฌ ๋“ฑ์œผ๋กœ ์ง์ ‘ ํ•ด๊ฒฐ
  • ์‚ฌ์šฉ์ž/๋ณดํ˜ธ์†Œ/๊ด€๋ฆฌ์ž ๊ฐ„ ๊ถŒํ•œ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ
  • ERD/Figma ๊ธฐ๋ฐ˜์˜ ํ˜‘์—… ๊ตฌ์กฐ ์ˆ˜๋ฆฝ, ํŒ€์› ๊ฐ„ ๊ธฐ๋Šฅ ํ๋ฆ„ ๊ณตํ†ต ์ดํ•ด ๊ณต์œ 
  • Git Flow ๋„์ž… ๋ฐ PR ๋ณ‘ํ•ฉ ์ „๋žต ๊ฐ€์ด๋“œ โ†’ ํŒ€์› ๊ฐ„ ํ˜‘์—… ํ’ˆ์งˆ ํ–ฅ์ƒ
  • RESTful API URI/์‘๋‹ต ๊ตฌ์กฐ ์ผ๊ด€ํ™” ๋ฐ DTO ๊ธฐ๋ฐ˜ ์„ค๊ณ„ ๊ฒฝํ—˜
    • ์—๋Ÿฌ ์‘๋‹ต ํฌ๋งท ํ†ต์ผ (status, message ํฌํ•จ)
    • ๊ถŒํ•œ ๋ถ„๊ธฐ, ์ž…๋ ฅ ๊ฒ€์ฆ, ์˜ˆ์™ธ ๋Œ€์‘์„ Controller ๋‹จ์—์„œ ๊ตฌ์กฐํ™”

๐Ÿง  ๊ธฐ์ˆ ์  ์„ฑ์žฅ

  • JSP/Servlet + MyBatis ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์‹ค์ „ ์ˆ˜์ค€๊นŒ์ง€ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋ฐฑ์—”๋“œ ๊ธฐ๋ฐ˜ ๋‹ค์ง
  • ํŒŒ์ผ ์—…๋กœ๋“œ, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ, ๋‹ค์ค‘ ํ…Œ์ด๋ธ” ์กฐํšŒ ๋“ฑ ์‹ค์ œ ์›น ๊ธฐ๋Šฅ ํ๋ฆ„์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด
  • DB ์ค‘์‹ฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„ค๊ณ„ ๋Šฅ๋ ฅ ๊ฐ•ํ™” (JOIN/์กฐ๊ฑด ๋ถ„๊ธฐ/์˜ˆ์™ธ ๋Œ€์‘ ๋“ฑ)
  • RESTful ๊ฐœ๋ฐœ ๋ฐฉ์‹ ์ ์šฉ
    โ†’ URL ๋ช…์„ธ ์„ค๊ณ„, ์‘๋‹ต ํฌ๋งท ์ผ๊ด€ํ™”, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ†ตํ•ฉ ๋“ฑ์„ ์ง์ ‘ ๊ตฌ์กฐํ™”
  • ํ”„๋ฆฌํ‹ฐ์–ด ์„œ๋ฒ„ ๊ตฌ์„ฑ, ๋กœ๊ทธ ๋ถ„์„, ์ธํ”„๋ผ ์šด์šฉ ๋“ฑ ์šด์˜๋‹จ ๋ ˆ๋ฒจ๊นŒ์ง€ ๊ฒฝํ—˜

๐Ÿค ํ˜‘์—…๊ณผ ํƒœ๋„ ๋ณ€ํ™”

  • ํŒ€์› ๊ธฐ์ˆ  ์—ญ๋Ÿ‰๊ณผ ์ผ์ • ํ˜„์‹ค์„ฑ์„ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌ์กฐ์  ๋ฐฉํ–ฅ ์ œ์‹œ
  • ๊ธฐ๋Šฅ ์„ค๊ณ„ ์‹œ๋งˆ๋‹ค ํ™”๋ฉด ํ๋ฆ„, ERD, ๊ถŒํ•œ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์‹œ๊ฐํ™”ํ•˜๋ฉฐ ์†Œํ†ต
  • ํ˜ผ์ž ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ๊ฐ™์ด ์™„์„ฑํ•ด๊ฐ€๋Š” ํ˜‘์—… ํ๋ฆ„์˜ ์ค‘์š”์„ฑ ์ฒด๊ฐ

๋‹จ์ˆœํžˆ ๊ตฌํ˜„๋งŒ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ,
"๊ธฐํš โ†’ ์„ค๊ณ„ โ†’ ๊ตฌํ˜„ โ†’ ์šด์˜" ์ „์ฒด ์‚ฌ์ดํด์„ ์‹ค์ œ์ฒ˜๋Ÿผ ๊ฒช์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

About

๐Ÿพ Spring ๊ธฐ๋ฐ˜ ์œ ๊ธฐ๋™๋ฌผ ์ž…์–‘ยท๋ด‰์‚ฌยทํ›„์› ํ†ตํ•ฉ ๊ด€๋ฆฌ ํ”Œ๋žซํผ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages