๋์ ํ๋งค ์น์ฌ์ดํธ
์ฌ์ฉ์์ ๊ด๋ฆฌ์๊ฐ ๋ชจ๋ ์ด์ฉํ ์ ์๋ ์ข ํฉ ๋์ ํ๋งค ํ๋ซํผ์ ๋๋ค. ์ฌ์ฉ์๋ ๋์ ๊ฒ์, ์์ธ ์กฐํ, ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ, ๋์ ๊ตฌ๋งค, ๋ฆฌ๋ทฐ ์์ฑ ๋ฑ์ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์๋ ๋์ ๋ฑ๋กยท์์ ยท์ญ์ , ์ฌ๊ณ ๊ด๋ฆฌ, ์ฃผ๋ฌธ ๋ด์ญ ๊ด๋ฆฌ, ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฑ ํ๋ซํผ ์ด์์ ํ์ํ ๋ค์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณต๋ฐ์ต๋๋ค.
- ๋์ ์กฐํ ๋ฐ ๊ฒ์: ์ ์ฒด ๋์ ๋ชฉ๋ก ํ์ธ ๋ฐ ํค์๋ ๊ฒ์ ๊ธฐ๋ฅ
- ํ์๊ฐ์ ๋ฐ ๋ง์ดํ์ด์ง: ์ผ๋ฐ ์ฌ์ฉ์ ๋ฐ ๊ด๋ฆฌ์ ๊ฐ์ , ๋ด ์ ๋ณด ์์
- ์ฅ๋ฐ๊ตฌ๋ ๋ฐ ์ฃผ๋ฌธ: ์ํ ๋ด๊ธฐ, ์๋ ๋ณ๊ฒฝ, ์ง์ ๊ตฌ๋งค ๋ฐ ์ฅ๋ฐ๊ตฌ๋ ๊ฒฐ์ ๊ธฐ๋ฅ
- ๊ฒ์ํ ๋ฐ ๋ฆฌ๋ทฐ: ๊ฒ์๊ธ ์์ฑ ๋ฐ ๋์ ๋ฆฌ๋ทฐ ๊ด๋ฆฌ
- ๋์ ๊ด๋ฆฌ: ์ ๊ท ๋์ ๋ฑ๋ก, ์ ๋ณด ์์ ๋ฐ ์ญ์
- ํ์ ๊ด๋ฆฌ: ์ ์ฒด ํ์ ๋ชฉ๋ก ์กฐํ ๋ฐ ๊ถํ/์ ๋ณด ๊ด๋ฆฌ
- ํํฉ ํ์ : ๋์ ํ๋งค ํํฉ ํ์ธ
- Language: Java 1.8
- Framework: Spring Framework 5.3.33 / Spring Web MVC 5.3.8
- Security: Spring Security 5.8.10
- ORM/Library: MyBatis 3.5.19, Lombok, Jackson, Jsoup
- Database: MySQL 8.0.33
- Connection Pool: HikariCP 6.3.0
- View: JSP (JSTL 1.2)
- Framework: Vue.js
- Cloud: AWS (Elastic Beanstalk, S3)
- CI/CD: GitHub Actions
- Build Tool: Maven
src
โโโ main
โ โโโ java
โ โ โโโ bestseller # ๋ฒ ์คํธ์
๋ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ทฐ ๊ด๋ฆฌ
โ โ โโโ board # ๊ฒ์ํ CRUD ๋ก์ง
โ โ โโโ cart # ์ฅ๋ฐ๊ตฌ๋ ๋ฐ ์ฟ ํค ์๋น์ค
โ โ โโโ category # ๋์ ์นดํ
๊ณ ๋ฆฌ ๋ถ๋ฅ
โ โ โโโ login # Spring Security ๊ธฐ๋ฐ ์ธ์ฆ/์ธ๊ฐ ์ค์
โ โ โโโ purchase # ๊ฒฐ์ ์์คํ
๋ฐ ์ฃผ๋ฌธ ์ค์ผ์ค๋ฌ
โ โ โโโ restapi # ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ REST ์ปจํธ๋กค๋ฌ
โ โ โโโ user # ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฐ ๋ค์ด๋ฒ ๋์ API ์ฐ๋
โ โโโ resources # DB ์ ์ ์ ๋ณด ๋ฐ API ํค ์ค์ (properties)
โ โโโ webapp
โ โโโ WEB-INF
โ โโโ views # JSP ํ์ด์ง ๊ตฌ์ฑ (Board, Manager, User ๋ฑ)
โ โโโ web.xml # ์๋ธ๋ฆฟ ๋ฐ ํํฐ ์ค์
GET /
๋์ ๋ชฉ๋ก ํ์ด์ง๋ก ์ด๋(user/booklist)
GET /insertform
๋์ ๋ฑ๋ก ํผ์ผ๋ก ์ด๋POST /insert
๋์ ๋ฑ๋ก ์ฒ๋ฆฌGET /bookeditform?id={id}
๋์ ์์ ํผ์ผ๋ก ์ด๋POST /bookedit
๋์ ์ ๋ณด ์์ ์ฒ๋ฆฌGET /bookdelete?id={id}
๋์ ์ญ์ ์ฒ๋ฆฌGET /booklist
๋์ ๋ชฉ๋ก ์กฐํGET /salesview๋์ ํ๋งค ํํฉ
GET /managerview
ํ์ ๋ชฉ๋ก ์กฐํGET /managereditform?id={id}
ํ์ ์์ ํผ์ผ๋ก ์ด๋POST /manageredit
ํ์ ์ ๋ณด ์์ ์ฒ๋ฆฌGET /managerdelete?id={id}
ํ์ ์ญ์ ์ฒ๋ฆฌ
GET /booklist
๋์ ๋ชฉ๋ก ์กฐํ (๊ฒ์์ด ํฌํจ)GET /bookdetail?id={id}
๋์ ์์ธ ์ ๋ณด ์กฐํ
GET /registerform
์ฌ์ฉ์ ํ์๊ฐ์ ํผPOST /register
์ฌ์ฉ์ ํ์๊ฐ์ ์ฒ๋ฆฌGET /adminregisterform
๊ด๋ฆฌ์ ํ์๊ฐ์ ํผPOST /adminregister
๊ด๋ฆฌ์ ํ์๊ฐ์ ์ฒ๋ฆฌGET /mypage/{username}
๋ด ์ ๋ณดGET /checkPasswordform
๋ด ์ ๋ณด ์์ ์ ๋น๋ฐ๋ฒํธ ํ์ธ ํผGET /editform/{id}
๋ด ์ ๋ณด ์์ ํผ
GET /loginform
๋ก๊ทธ์ธ ํผGET /login?error=true
๋ก๊ทธ์ธ ์คํจ ์ ๋ฉ์์ง ํฌํจGET /logout
๋ก๊ทธ์์ ์ฒ๋ฆฌ ํ ๋์ ๋ชฉ๋ก์ผ๋ก ์ด๋
GET /purchase
๊ตฌ๋งค ํ์ด์ง ์ด๋GET /mypurchaselist
ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ตฌ๋งค ๋ด์ญ ์กฐํ
POST /add
์ฅ๋ฐ๊ตฌ๋์ ์ํ ์ถ๊ฐ (bookId,quantityํฌํจ)GET /
๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ์กฐํPOST /updateQuantity
์ฅ๋ฐ๊ตฌ๋ ์ํ ์๋ ๋ณ๊ฒฝ (bookId,quantityํฌํจ)POST /remove
์ฅ๋ฐ๊ตฌ๋์์ ์ํ ์ญ์ (bookIdํฌํจ)
POST /direct
๋์ ์์ธ/๋ชฉ๋ก์์ ๋ฐ๋ก ๊ตฌ๋งค ์์ฒญ (bookId,quantityํฌํจ) โ ๊ฒฐ์ ํ์ด์ง ์ด๋POST /cart
์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ํ ๊ตฌ๋งค ์ค๋น โ ๊ฒฐ์ ํ์ด์ง ์ด๋GET /checkout
๊ฒฐ์ ํ์ด์ง ์กฐํ (type: direct ๋๋ cart,bookId๋ฐquantityํฌํจ ๊ฐ๋ฅ)POST /confirm
๊ฒฐ์ ํ์ ์ฒ๋ฆฌ (์ง์ ๊ตฌ๋งค ๋๋ ์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค)GET /success
๊ฒฐ์ ์ฑ๊ณต ํ์ด์ง ํ์
POST /direct
๋์ ์์ธ/๋ชฉ๋ก์์ ๋ฐ๋ก ๊ตฌ๋งค ์์ฒญ (bookId,quantityํฌํจ) โ ๊ฒฐ์ ํ์ด์ง ์ด๋POST /cart
์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ํ ๊ตฌ๋งค ์ค๋น โ ๊ฒฐ์ ํ์ด์ง ์ด๋GET /checkout
๊ฒฐ์ ํ์ด์ง ์กฐํ (type: direct ๋๋ cart,bookId๋ฐquantityํฌํจ ๊ฐ๋ฅ)POST /confirm
๊ฒฐ์ ํ์ ์ฒ๋ฆฌ (์ง์ ๊ตฌ๋งค ๋๋ ์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค)GET /success
๊ฒฐ์ ์ฑ๊ณต ํ์ด์ง ํ์
GET /category/{category}
์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ฅธ ์ฑ ๋ชฉ๋ก
-
GET /main
๊ฒ์๊ธ ๋ชฉ๋ก(์์ ์ด ์์ฑํ ๊ธ์ ๋ณ ํ์) -
GET /write
๊ฒ์๊ธ ์์ฑ(์์ฑ์๋ ์์ด๋๋ก ์๋ ๊ธฐ์ ) -
POST /write
๊ฒ์๊ธ ์์ฑ ์ฒ๋ฆฌ -
GET /view?id={id}
๊ฒ์๊ธ ์์ธ๋ณด๊ธฐ(์์ ์ด ์์ฑํ ๊ฒ์๊ธ๋ง ์์ ,์ญ์ ๊ฐ๋ฅ ๋จ, ๊ด๋ฆฌ์๋ ๋ชจ๋ ๊ธ ์ญ์ ๊ฐ๋ฅ) -
POST /edit?id={id}
๊ฒ์๊ธ ์์ ํผ -
POST /edit
๊ฒ์๊ธ ์์ ์ฒ๋ฆฌ -
POST /delete
๊ฒ์๊ธ ์ญ์ ์ฒ๋ฆฌ
GET /insertform
๋์ ๋ฑ๋ก ํผ์ผ๋ก ์ด๋POST /insert
๋์ ๋ฑ๋ก ์ฒ๋ฆฌGET /bookeditform?id={id}
๋์ ์์ ํผ์ผ๋ก ์ด๋POST /bookedit
๋์ ์ ๋ณด ์์ ์ฒ๋ฆฌGET /bookdelete?id={id}
๋์ ์ญ์ ์ฒ๋ฆฌGET /booklist
๋์ ๋ชฉ๋ก ์กฐํGET /salesview๋์ ํ๋งค ํํฉ
GET /managerview
ํ์ ๋ชฉ๋ก ์กฐํGET /managereditform?id={id}
ํ์ ์์ ํผ์ผ๋ก ์ด๋POST /manageredit
ํ์ ์ ๋ณด ์์ ์ฒ๋ฆฌGET /managerdelete?id={id}
ํ์ ์ญ์ ์ฒ๋ฆฌ
GET /booklist
๋์ ๋ชฉ๋ก ์กฐํ (๊ฒ์์ด ํฌํจ)GET /bookdetail?id={id}
๋์ ์์ธ ์ ๋ณด ์กฐํ
GET /registerform
์ฌ์ฉ์ ํ์๊ฐ์ ํผPOST /register
์ฌ์ฉ์ ํ์๊ฐ์ ์ฒ๋ฆฌGET /adminregisterform
๊ด๋ฆฌ์ ํ์๊ฐ์ ํผPOST /adminregister
๊ด๋ฆฌ์ ํ์๊ฐ์ ์ฒ๋ฆฌGET /mypage/{username}
๋ด ์ ๋ณดGET /checkPasswordform
๋ด ์ ๋ณด ์์ ์ ๋น๋ฐ๋ฒํธ ํ์ธ ํผGET /editform/{id}
๋ด ์ ๋ณด ์์ ํผ
GET /loginform
๋ก๊ทธ์ธ ํผGET /login?error=true
๋ก๊ทธ์ธ ์คํจ ์ ๋ฉ์์ง ํฌํจGET /logout
๋ก๊ทธ์์ ์ฒ๋ฆฌ ํ ๋์ ๋ชฉ๋ก์ผ๋ก ์ด๋
GET /purchase
๊ตฌ๋งค ํ์ด์ง ์ด๋GET /mypurchaselist
ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ตฌ๋งค ๋ด์ญ ์กฐํ
POST /add
์ฅ๋ฐ๊ตฌ๋์ ์ํ ์ถ๊ฐ (bookId,quantityํฌํจ)GET /
๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ์กฐํPOST /updateQuantity
์ฅ๋ฐ๊ตฌ๋ ์ํ ์๋ ๋ณ๊ฒฝ (bookId,quantityํฌํจ)POST /remove
์ฅ๋ฐ๊ตฌ๋์์ ์ํ ์ญ์ (bookIdํฌํจ)
POST /direct
๋์ ์์ธ/๋ชฉ๋ก์์ ๋ฐ๋ก ๊ตฌ๋งค ์์ฒญ (bookId,quantityํฌํจ) โ ๊ฒฐ์ ํ์ด์ง ์ด๋POST /cart
์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ํ ๊ตฌ๋งค ์ค๋น โ ๊ฒฐ์ ํ์ด์ง ์ด๋GET /checkout
๊ฒฐ์ ํ์ด์ง ์กฐํ (type: direct ๋๋ cart,bookId๋ฐquantityํฌํจ ๊ฐ๋ฅ)POST /confirm
๊ฒฐ์ ํ์ ์ฒ๋ฆฌ (์ง์ ๊ตฌ๋งค ๋๋ ์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค)GET /success
๊ฒฐ์ ์ฑ๊ณต ํ์ด์ง ํ์
POST /direct
๋์ ์์ธ/๋ชฉ๋ก์์ ๋ฐ๋ก ๊ตฌ๋งค ์์ฒญ (bookId,quantityํฌํจ) โ ๊ฒฐ์ ํ์ด์ง ์ด๋POST /cart
์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ํ ๊ตฌ๋งค ์ค๋น โ ๊ฒฐ์ ํ์ด์ง ์ด๋GET /checkout
๊ฒฐ์ ํ์ด์ง ์กฐํ (type: direct ๋๋ cart,bookId๋ฐquantityํฌํจ ๊ฐ๋ฅ)POST /confirm
๊ฒฐ์ ํ์ ์ฒ๋ฆฌ (์ง์ ๊ตฌ๋งค ๋๋ ์ฅ๋ฐ๊ตฌ๋ ๊ตฌ๋งค)GET /success
๊ฒฐ์ ์ฑ๊ณต ํ์ด์ง ํ์
GET /category/{category}
์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ฅธ ์ฑ ๋ชฉ๋ก
-
GET /main
๊ฒ์๊ธ ๋ชฉ๋ก(์์ ์ด ์์ฑํ ๊ธ์ ๋ณ ํ์) -
GET /write
๊ฒ์๊ธ ์์ฑ(์์ฑ์๋ ์์ด๋๋ก ์๋ ๊ธฐ์ ) -
POST /write
๊ฒ์๊ธ ์์ฑ ์ฒ๋ฆฌ -
GET /view?id={id}
๊ฒ์๊ธ ์์ธ๋ณด๊ธฐ(์์ ์ด ์์ฑํ ๊ฒ์๊ธ๋ง ์์ ,์ญ์ ๊ฐ๋ฅ ๋จ, ๊ด๋ฆฌ์๋ ๋ชจ๋ ๊ธ ์ญ์ ๊ฐ๋ฅ) -
POST /edit?id={id}
๊ฒ์๊ธ ์์ ํผ -
POST /edit
๊ฒ์๊ธ ์์ ์ฒ๋ฆฌ -
POST /delete
๊ฒ์๊ธ ์ญ์ ์ฒ๋ฆฌ