![]() |
![]() |
![]() |
![]() |
![]() |
| ์ด์์ค | ๋ฐ์ง์ | ์ค๊ฐํฌ | ์ด์ ์ฐ | ์๋ฏผ์ |
ํ๋์ ๊ตฌ์ญ ์ฃผ๋ณ ๋ง์ง ์ ๋ณด์ ๋ฆฌ๋ทฐ๋ฅผ ์ ๊ณตํ๋ ์น ํ๋ซํผ
๐ ์์ํ๊ธฐ โข ๐ ๊ธฐ๋ฅ โข ๐๏ธ ์ํคํ ์ฒ โข ๐ ๏ธ ๊ธฐ์ -์คํ
Sol-Food๋ ํ๋์ ๊ตฌ์ญ ์ฃผ๋ณ์ ๋ค์ํ ๋ง์ง ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ , ์ฌ์ฉ์๋ค์ด ์ง์ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ๊ณ ๊ณต์ ํ ์ ์๋ ์น ํ๋ซํผ์ ๋๋ค. ์นด์นด์ค Local API๋ฅผ ํ์ฉํ ์๋ ๋ฐ์ดํฐ ์์ง, ์ฌ์ฉ์ ์ฐธ์ฌํ ๋ฆฌ๋ทฐ ์์คํ , ๊ฐ๋ ฅํ ๊ด๋ฆฌ์/์ ์ฃผ/์ฌ์ฉ์ ๊ถํ ๋ถ๋ฆฌ, ๊ฒฐ์ ๊ด๋ฆฌ ๋ฑ ์ค์ ์๋น์ค ์์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๐บ๏ธ ์นด์นด์ค๋งต ์ฐ๋: ์ค์๊ฐ ์์น ๊ธฐ๋ฐ ๋ง์ง ๊ฒ์
- ๐ค ์๋ ํฌ๋กค๋ง: ์นด์นด์ค Local API๋ฅผ ํตํ ๋ง์ง ์ ๋ณด ์๋ ์์ง
- โญ ๋ณ์ ์์คํ : 5์ ๋ง์ ๋ฆฌ๋ทฐ ๋ฐ ํ๊ท ๋ณ์ ์ ๊ณต
- ๐ฑ ๋ฐ์ํ ๋์์ธ: ๋ชจ๋ฐ์ผ๊ณผ ๋ฐ์คํฌํฑ ๋ชจ๋ ์ง์
- ๐ฅ ๋ค์ค ์ฌ์ฉ์: ์ผ๋ฐ ์ฌ์ฉ์, ์ ์ฃผ, ๊ด๋ฆฌ์ ๊ถํ ๋ถ๋ฆฌ
- Java 11 ์ด์
- Maven 3.6 ์ด์
- Oracle Database 19c ๋๋ MariaDB 3.5.3
- ์นด์นด์ค ๊ฐ๋ฐ์ ๊ณ์ (Local API ํค ํ์)
-
์ ์ฅ์ ํด๋ก
git clone https://github.com/your-username/sol-food.git cd sol-food -
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
-- Oracle ๋๋ MariaDB์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ CREATE DATABASE sol_food;
-
์ค์ ํ์ผ ๊ตฌ์ฑ
# src/main/resources/application.properties db.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy db.url=jdbc:log4jdbc:mariadb://YOUR_IP:YOUR_PORT_NUMBER/YOUR_DB_NAME db.username=YOUR_DB_USER_NAME db.password=YOUR_DB_PASSWORD server.ip=YOUR_IP server.port=YOUR_PORT_NUMBER # ์นด์นด์ค API ํค ์ค์ kakao.restApiKey=YOUR_KAKAO_RESTAPI_KEY kakao.jsApiKey=YOUR_KAKAO_JS_KEY
-
ํ๋ก์ ํธ ๋น๋ ๋ฐ ์คํ
mvn clean install mvn spring-boot:run
-
์น ๋ธ๋ผ์ฐ์ ์์ ์ ์
http://YOUR_IP:YOUR_PORT_NUMBER
- ๋ง์ง ๊ฒ์: ์นดํ ๊ณ ๋ฆฌ๋ณ, ์์น๋ณ ๋ง์ง ๊ฒ์
- ๋ฆฌ๋ทฐ ์์ฑ: ๋ณ์ , ์ฌ์ง, ํ ์คํธ ๋ฆฌ๋ทฐ ์์ฑ
- ๋ฆฌ๋ทฐ ์กฐํ: ๊ฐ๊ฒ๋ณ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ ์์ธ ๋ณด๊ธฐ
- ๋ง์ดํ์ด์ง: ๊ฐ์ธ ์ ๋ณด ๊ด๋ฆฌ ๋ฐ ๋ด ๋ฆฌ๋ทฐ ๊ด๋ฆฌ
- ๊ฐ๊ฒ ๊ด๋ฆฌ: ๊ฐ๊ฒ ์ ๋ณด ๋ฑ๋ก ๋ฐ ์์
- ๋ฉ๋ด ๊ด๋ฆฌ: ๋ฉ๋ด ๋ฑ๋ก, ์์ , ์ญ์
- ๋ฆฌ๋ทฐ ๋ชจ๋ํฐ๋ง: ๊ฐ๊ฒ ๋ฆฌ๋ทฐ ํํฉ ํ์ธ
- ์ฌ์ฉ์ ๊ด๋ฆฌ: ํ์ ์ ๋ณด ์กฐํ ๋ฐ ๊ด๋ฆฌ
- ๊ฐ๊ฒ ํฌ๋กค๋ง: ์นด์นด์ค API๋ฅผ ํตํ ์๋ ๊ฐ๊ฒ ์ ๋ณด ์์ง
- ํต๊ณ ๋์๋ณด๋: ์ฌ์ฉ์ ํ๋ ๋ฐ ๊ฐ๊ฒ ํต๊ณ ํ์ธ
- ๊ฒฐ์ ๊ด๋ฆฌ: ํตํฉ๊ฒฐ์ ๋ด์ญ ์กฐํ ๋ฐ ์์ธ ํ์ด์ง
src/main/java/kr/co/solfood/
โโโ user/ # ์ผ๋ฐ ์ฌ์ฉ์(๋ก๊ทธ์ธ, ๊ฒ์ํ, ๋ง์ดํ์ด์ง, ๋ฆฌ๋ทฐ, ์นดํธ, ๊ฐ๊ฒ, ๋ฉ๋ด, ์ข์์, ๊ฒ์, ์นดํ
๊ณ ๋ฆฌ ๋ฑ)
โโโ owner/ # ์ ์ฃผ(๋ก๊ทธ์ธ, ๊ฐ๊ฒ, ๋ฆฌ๋ทฐ, ๋ฉ๋ด)
โโโ admin/ # ๊ด๋ฆฌ์(ํ, ๋ก๊ทธ์ธ, ํฌ๋กค๋ฌ, DTO, ๊ฒฐ์ ๊ด๋ฆฌ ๋ฑ)
โโโ payments/ # ๊ฒฐ์ (ํตํฉ๊ฒฐ์ , ๋จ์ผ๊ฒฐ์ , ๊ณตํต, ์ถฉ์ ๋ฑ)
โโโ common/ # ๊ณตํต ์์, S3 ๋ฑ
โโโ util/ # ์์ธ, ํ์ด์ง, ์๋ฌ์ฝ๋ ๋ฑ ์ ํธ๋ฆฌํฐ
src/main/resources/kr/co/solfood/
โโโ user/ # ์ฌ์ฉ์ ๋งคํผ(Board, Login, Store, Review, Mypage ๋ฑ)
โโโ owner/ # ์ ์ฃผ ๋งคํผ
โโโ admin/ # ๊ด๋ฆฌ์ ๋งคํผ(Home, Login)
โโโ payments/ # ๊ฒฐ์ ๋งคํผ(Payment, Integrated, Charge)
src/main/webapp/WEB-INF/views/
โโโ user/ # ์ฌ์ฉ์ JSP(๋ก๊ทธ์ธ, ๊ฒ์ํ, ๊ฐ๊ฒ, ๋ง์ดํ์ด์ง, ๋ฆฌ๋ทฐ, ์นดํธ, ๊ฒ์ ๋ฑ)
โโโ owner/ # ์ ์ฃผ JSP(๊ฐ๊ฒ, ๋ฉ๋ด, ๋ฆฌ๋ทฐ, ๋งค์ถ ๋ฑ)
โโโ admin/ # ๊ด๋ฆฌ์ JSP(ํ, ์ฌ์ฉ์/์ ์ฃผ/๊ฒฐ์ /๋ฆฌ๋ทฐ ๊ด๋ฆฌ, ๋ก๊ทธ์ธ ๋ฑ)
โ โโโ payment-management/ (home.jsp, detail.jsp)
โโโ common/ # ๊ณตํต ํค๋ ๋ฑ
src/main/webapp/js/admin/
โโโ payment-management.js # ๊ฒฐ์ ๊ด๋ฆฌ JS
โโโ user-management.js # ์ฌ์ฉ์๊ด๋ฆฌ JS
โโโ owner-management.js # ์ ์ฃผ๊ด๋ฆฌ JS
src/main/webapp/css/admin/
โโโ payment-management.css # ๊ฒฐ์ ๊ด๋ฆฌ CSS
โโโ user-management.css # ์ฌ์ฉ์๊ด๋ฆฌ CSS
โโโ owner-management.css # ์ ์ฃผ๊ด๋ฆฌ CSS
์ฌ์ฉ์/๊ด๋ฆฌ์ ์์ฒญ
โ
Controller (ex: AdminHomeController)
โ
Service (ex: AdminHomeService)
โ
Mapper (MyBatis, ex: AdminMapper.xml, PaymentMapper.xml ๋ฑ)
โ
DB
โ
Model(DTO) โ JSP View (ex: payment-management/detail.jsp)
- ๊ฒฐ์ ์์ธ: PageMaker๋ก ์ฌ๋ฌ ๊ฒฐ์ ์ ๋ณด ๋ฆฌ์คํธ ์ ๋ฌ
- JSP์์ forEach๋ก ๋ฐ๋ณต, ๊ฐ ์ธ์๋ณ ์์ธ๋ฅผ ์์ฝ๋์ธ+์นด๋๋ก ์ถ๋ ฅ
- DTO์ ๋ ์ง ํ๋๋ LocalDateTime โ JSP์์ ๋ฌธ์์ด๋ก ์ถ๋ ฅ
- ๋งคํผ XML์ src/main/resources/kr/co/solfood/ ํ์์ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌ
- ๊ฒฝ๋ก:
/admin/payment-management/detail?integratedpaymentId=... - ๊ธฐ๋ฅ:
- ํตํฉ๊ฒฐ์ ID๋ก ์ฌ๋ฌ ์ธ์์ ๊ฒฐ์ ๋ด์ญ์ ํ ๋ฒ์ ์กฐํ
- ๊ฐ ์ธ์์ ๊ฒฐ์ ์์ธ๋ฅผ ์์ฝ๋์ธ(ํ ๊ธ)์ผ๋ก ํผ์ณ์ ํ์ธ
- ๊ฒฐ์ ์ ๋ณด(๊ธ์ก, ์ํ, ์๋จ ๋ฑ), ๊ฒฐ์ ์ ์ ๋ณด, ์ฌ์ฉ์ ์ ๋ณด(ํ๋กํ ํฌํจ) ๋ฑ ์น์ ๋ณ ์นด๋๋ก ๊ตฌ๋ถ
- Bootstrap 5 ์ ์ฉ, ๋ฐ์ํ/์ปฌ๋ฌ/์์ด์ฝ/๋ฑ์ง ๋ฑ ์๊ฐ์ ๊ฐ์กฐ
- ์์์ฆ ๋ฐ๋ก๊ฐ๊ธฐ, ๊ฒฐ์ ์ทจ์ ๋ฑ ์ก์ ๋ฒํผ
- ์๋ฌ ๋ฐ์ ์ ์ฌ์ฉ์ ์นํ์ ์๋ด
<div class="accordion" id="paymentAccordion">
<c:forEach var="detail" items="${paymentDetail.list}" varStatus="status">
<div class="accordion-item">
<h2 class="accordion-header" id="heading${status.index}">
<button class="accordion-button collapsed" ...>
<span class="me-2">๐ณ</span> <b>${detail.usersName}</b> <span class="text-muted">/ ๊ฒฐ์ ID: ${detail.paymentId}</span>
</button>
</h2>
<div id="collapse${status.index}" ...>
<div class="accordion-body">
<div class="row g-4">
<div class="col-md-6"> ...๊ฒฐ์ ์ ๋ณด ์นด๋... </div>
<div class="col-md-6"> ...๊ฒฐ์ ์ ์ ๋ณด ์นด๋... </div>
</div>
<hr/>
<div class="row g-4">
<div class="col-md-12"> ...์ฌ์ฉ์ ์ ๋ณด ์นด๋... </div>
</div>
</div>
</div>
</div>
</c:forEach>
</div>- Bootstrap 5 CDN ์ ์ฉ (CSS/JS)
- JSTL forEach, ์กฐ๊ฑด๋ฌธ, ๋ฑ์ง/์์ด์ฝ/์ปฌ๋ฌ ๋ฑ ์ ๊ทน ํ์ฉ
- DTO์ LocalDateTime์ JSP์์ ๋ฌธ์์ด๋ก ์ถ๋ ฅ (formatDate ์ฌ์ฉ X)
- ์ปจํธ๋กค๋ฌ์์ PageMaker๋ก ๋ฆฌ์คํธ ์ ๋ฌ, JSP์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ๋ ฅ
- ์๋ฌ ๋ฐ์ ์ 500 ์๋ฌ ์๋ด ๋ฐ ์์ธ(๋ ์ง ํ์ ๋ฑ) ๋ช ํํ ์ฒ๋ฆฌ
- Java 11, Spring Framework 5.2.25, Spring MVC, MyBatis 3.5.19, HikariCP 6.3.0
- Lombok, JUnit5, Mockito, log4jdbc
- Oracle 19c, MariaDB 3.5.3
- JSP, JSTL, Bootstrap 5, Kakao Maps API, jQuery(์ผ๋ถ), CSS/JS ๋ถ๋ฆฌ
- Kakao Local API, Kakao Maps JavaScript API
- S3 ํ์ผ ์ ๋ก๋, ํ์ด์ง ์ ํธ, ์ปค์คํ ์์ธ/์๋ฌ์ฝ๋, ์ธ์ /์ธํฐ์ ํฐ ๋ณด์ ๋ฑ
- DTO๋ ๊ธฐ๋ฅ๋ณ๋ก src/main/java/kr/co/solfood/*/dto/์ ์์น
- ๋งคํผ XML์ src/main/resources/kr/co/solfood/*/์ ์์น, ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌ
- ์ปจํธ๋กค๋ฌ๋ ๊ฐ ๋๋ฉ์ธ๋ณ๋ก ๋ถ๋ฆฌ, Model์ DTO/๋ฆฌ์คํธ/ํ์ด์ง ๊ฐ์ฒด ์ ๋ฌ
- JSP๋ forEach, ์กฐ๊ฑด๋ฌธ, Bootstrap ์นด๋/์์ฝ๋์ธ ๋ฑ์ผ๋ก ๋ฐ์ดํฐ ์๊ฐํ
- JS/CSS๋ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌ, ๊ด๋ฆฌ์ ๊ฒฐ์ ๊ด๋ฆฌ ์ ์ฉ payment-management.js/css ์กด์ฌ
- LocalDateTime ๋ฑ ๋ ์ง ํ์ ์ JSP์์ ๋ฌธ์์ด๋ก ์ถ๋ ฅ, formatDate ์ฌ์ฉ ์ 500์๋ฌ ์ฃผ์
- CustomException, ErrorCode, ErrorResponseEntity ๋ฑ์ผ๋ก ์์ธ/์๋ฌ ์ผ๊ด ์ฒ๋ฆฌ
- ์ธ์ /์ธํฐ์ ํฐ๋ก ๊ด๋ฆฌ์/์ ์ฃผ/์ฌ์ฉ์ ๊ถํ ๋ถ๋ฆฌ ๋ฐ ์ธ์ฆ
- SQL ์ธ์ ์ ๋ฐฉ์ง, XSS ๋ฐฉ์ง, ์ ๋ ฅ ๊ฒ์ฆ ๋ฑ ๋ณด์ ์ ์ฉ
- JUnit5, Mockito ๊ธฐ๋ฐ ๋จ์/ํตํฉ ํ ์คํธ
- ํ ์คํธ ์ฝ๋ src/test/java/kr/co/solfood/ ํ์์ ์์น
- ๊ธฐ์ฌ: Fork & PR, ์ด์/๋ฌธ์๋ GitHub Issues ๋๋ contact@sol-food.com
๐ฝ๏ธ Sol-Food์ ํจ๊ป ํ๋ ์ฃผ๋ณ ๋ง์ง์ ๋ฐ๊ฒฌํ๊ณ , ๊ฐ๋ ฅํ ๊ด๋ฆฌ์ ๊ฒฐ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ผ๋ก ์ด์ ํจ์จ์ ๋์ด์ธ์!




