์จ๋ผ์ธ ์ ๋ฐ ์ผํ๋ชฐ์ ์ํ Spring Boot Full-stack ์น ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์ ์นํ์ ์ธ UI์ ์์ ์ ์ธ ๋ฐฑ์๋ ์ํคํ ์ฒ๋ฅผ ํตํด
์ํ ๊ฒ์๋ถํฐ ๊ฒฐ์ ๊น์ง ์ํํ ๊ฒฝํ์ ์ ๊ณตํ๋ฉฐ, ์ํยทํ์ยท์ฃผ๋ฌธ์ ๊ด๋ฆฌํ ์ ์๋ ๊ด๋ฆฌ์ ํ์ด์ง๋ ํฌํจ๋ ํ๋ก์ ํธ์ ๋๋ค.
- ํ๋ก์ ํธ ๊ธฐ๊ฐ: 2025.05.12 ~ 2025.05.23 (2์ฃผ)
- ๊ฐ๋ฐ ํํ: ํ ํ๋ก์ ํธ (8์ธ)
- ๋ด๋น ์ ๋ฌด: ํ๋ก ํธ์๋ ๋ฉ์ธ ํ์ด์ง, ๊ด๋ฆฌ์ ํ์ด์ง ํ๋ก ํธ& ๋ฐฑ์๋ ํ์๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ, UI/UX ๊ธฐํ ์ฐธ์ฌ
- Frontend: Thymeleaf, HTML5, CSS3, JavaScript
- Backend: Java (JDK 17), Spring Boot 3.4.5, Spring Security, MyBatis, JPA
- Database: Oracle XE 18c, ๊ณต๊ณต API
- Version Control: GitHub, Git Flow
- Tools & IDE: IntelliJ IDEA, STS4, Eclipse, VS Code, Gradle, SQL Developer, Figma, Photoshop
- OS: Windows 11
- ์ด๋ฉ์ผ, ์์ ๋ก๊ทธ์ธ ์ง์
- ๋น๋ฐ๋ฒํธ ์ฌ์ค์ / ์์ด๋ ์ฐพ๊ธฐ
- ๊ฐ์ธ ํ๋กํ: ์ฃผ๋ฌธ ๋ด์ญ, ์ ๋ฆฝ๊ธยท์ฟ ํฐ, ๋ฆฌ๋ทฐ/Q&A ๊ธฐ๋ก ํ์ธ ๊ฐ๋ฅ
- ํ์ํ๊ธฐ
- ์นดํ ๊ณ ๋ฆฌ / ๋ธ๋๋ / ์ฑ๋ณ / ์ฐ๋ น๋ ๋ณ ์ํ ํํฐ
- ์ ๋ ฌ ์ต์ (์ ์ํ, ํ ์ธ์จ, ์ธ๊ธฐ์) ์ ๊ณต
- ์ํ ์ดํด๋ณด๊ธฐ
- ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋, ์ต์ (์์ยท์ฌ์ด์ฆ) ์ ํ, ์ฌ๊ณ ํ์ธ
- ์ค๊ตฌ๋งค์ ํ๊ธฐ, ํ์ , Q&A ์ด๋ ๊ฐ๋ฅ
- ์ฅ๋ฐ๊ตฌ๋ & ์์๋ฆฌ์คํธ
- ์ ํ ์ํ ๋ด๊ธฐ / ์ญ์ / ์๋ ๋ณ๊ฒฝ
- ์ฅ๋ฐ๊ตฌ๋์์ ์ฆ์ ์ฃผ๋ฌธ ๊ฐ๋ฅ
- ๋ค์ํ ๊ฒฐ์ ์๋จ (์นด๋, ๊ฐํธ๊ฒฐ์ , ๋ฌดํต์ฅ์ ๊ธ)
- ์ฟ ํฐ/ํฌ์ธํธ ๋์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฐฐ์ก์ง ๊ด๋ฆฌ ๋ฐ ๋ฐฐ์ก ์ํ ์ค์๊ฐ ํ์ธ
- ์ฃผ๋ฌธ ์ทจ์ / ํ๋ถ ์ ์ฐจ ์ ๊ณต
- ์ํ ํ๊ธฐ ์์ฑ + ๋ณ์ ๋ฑ๋ก
- ๋ฌธ์(Q&A) ๋ฑ๋ก ๋ฐ ๋ต๋ณ ํ์ธ
- ์ด๋ฒคํธ / ํ๋ก๋ชจ์ ์ฐธ์ฌ ๊ฐ๋ฅ
- ์ํ ๋ฑ๋กยท์์ ยทํ ์ธ์จ/์ฌ๊ณ ๊ด๋ฆฌ
- ํ์ ๋ฑ๊ธ ์กฐ์ ๋ฐ ํฌ์ธํธยท์ฟ ํฐ ์ง๊ธ
- ์ด๋ฒคํธ, ๊ณต์ง, ๋ฐฐ๋, ํ์ ๋ฑ ํ๋ก๋ชจ์ ๊ด๋ฆฌ
- ๋ฆฌ๋ทฐ ๋ธ๋ผ์ธ๋ ์ฒ๋ฆฌ & ์ ๊ณ ๋์
- Q&A ๋ฐ 1:1 ๋ฌธ์ ๋ต๋ณ ๊ด๋ฆฌ
- ๋งค์ถ/ํ์ ํต๊ณ ๋์๋ณด๋ ์ ๊ณต
- ๋ฉ์ธ โ ์ํ ์์ธ โ ์ฅ๋ฐ๊ตฌ๋ โ ๊ฒฐ์ โ ์ฃผ๋ฌธ ์๋ฃ
- ์ํ ํํฐ, ์ ๋ ฌ, ๋ฆฌ์คํธ ๊ตฌํ
- CSS ๋ฐ ๋ ์ด์์ ์กฐ์ ์ผ๋ก ํ๋ฉด ๊นจ์ง ๋ฐฉ์ง
- ์ฌ์ด์ฆ/์๋ ์ ํ ์ DOM ๋์ ์์ฑ
- ์ด ๊ฒฐ์ ๊ธ์ก ์๋ ๊ณ์ฐ ๊ธฐ๋ฅ ๊ตฌํ
- CSS ์กฐ์ ์ผ๋ก ์ต์ ์์ญ ์ถ๊ฐ ์ ๋ ์ด์์ ์ ์ง
- ์ ํ ์ํ ๋ด๊ธฐ/์ญ์ /์๋ ๋ณ๊ฒฝ ๊ธฐ๋ฅ ๊ตฌํ
- ์ด ๊ฒฐ์ ๊ธ์ก ์ค์๊ฐ ๊ณ์ฐ
- ์ฃผ๋ฌธ ์ ๋ณด ์ ์ก ๋ฐ ๊ฒฐ์ ๋ก์ง ์ฐ๋
- ์ฌ์ฉ์ ์ ๋ ฅ ๊ฒ์ฆ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ๋ด์ญ ์์ฝ, ๊ฒฐ์ ์ํ ํ์
- ์ ๋ ฅ ๊ฒ์ฆ ๋ฐ ๊ฒฐ๊ณผ ํ์ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (์ด๋ฆ/์์ด๋/์ฐ๋ฝ์ฒ)
- ํ์ ์ ๋ณด ์์ ๋ฐ ์์ธ ํ์ด์ง ๊ตฌ์ฑ
shoebox/
โโโ src/main/java/com.test.shoebox/
โ โโโ config/ # Spring Security & MVC ์ค์
โ โโโ controller/ # ์ญํ ๋ณ ์ปจํธ๋กค๋ฌ(Admin, Member ๋ฑ)
โ โโโ dto/ # ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(DTO)
โ โโโ entity/ # JPA ์ํฐํฐ
โ โโโ repository/ # JpaRepository ์ ์
โ โโโ service/ # ๋น์ฆ๋์ค ๋ก์ง
โ โโโ ShoeboxApplication.java
โโโ resources/
โ โโโ static/ # CSS, JS, ์ด๋ฏธ์ง
โ โโโ templates/ # Thymeleaf ํ
ํ๋ฆฟ
โ โโโ application.yml
โโโ shoebox_DDL.sql # DB ํ
์ด๋ธ ์์ฑ ์คํฌ๋ฆฝํธ
โโโ build.gradle
- Oracle ์ค์น ํ
shoebox_DDL.sql์คํ
- STS4 ๋๋ IntelliJ์์ Gradle ํ๋ก์ ํธ๋ก Import
application.yml์์ DB ์ ์ ์ ๋ณด, ํฌํธ, ๋ณด์ ์ต์ ์์
ShoeboxApplication.java์คํ
๋๋./gradlew bootRun
- ์ฌ์ฉ์: http://localhost:8090/main/
- ๊ด๋ฆฌ์: http://localhost:8090/admin/
- ๋ฌธ์ : ์ฌ์ด์ฆ ์ ํ ํ ์ต์ ์์ญ์ด ์ถ๊ฐ๋ ๋ ๋ ์ด์์์ด ๋ฌด๋์ง
- ์์ธ: CSS
display์์ฑ๊ณผ JSinnerHTML์ฌ์ฉ์ผ๋ก flex ์คํ์ผ ์ด๊ธฐํ - ํด๊ฒฐ:
selected-size-info์ ๊ณ ์ flex ์คํ์ผ ์ ์ฉinnerHTML๋์appendChild์ฌ์ฉ์ผ๋ก DOM ๊ตฌ์กฐ ์ ์ง
- ๋ฌธ์ : ์๋ ๋ณ๊ฒฝ ์ ์ด ๊ธ์ก์ด ๋ฐ์๋์ง ์์
- ์์ธ: ์ซ์ ํฌ๋งท(์ผํ ํฌํจ) ํ์ฑ ์คํจ,
updateTotal()๋ฏธํธ์ถ - ํด๊ฒฐ:
- ์ด๋ฒคํธ๋ง๋ค
updateTotal()๊ฐ์ ํธ์ถ parseInt(price.replace(/[^0-9]/g, ''))๋ก ์ซ์๋ง ์ถ์ถ
- ์ด๋ฒคํธ๋ง๋ค
- ๋ฌธ์ : ์ฅ๋ฐ๊ตฌ๋/๊ตฌ๋งค ๋ฒํผ ํด๋ฆญ ์ ์ ํ ์ํ์ด ์์ผ๋ฉด ๋ฐ์ ์์
- ํด๊ฒฐ:
- ์กฐ๊ฑด๋ฌธ์ผ๋ก ์์ธ ์ฒ๋ฆฌ โ
alert๋ฉ์์ง ์ถ๋ ฅ - ์๋ชป๋ ์์ฒญ ์ฐจ๋จ, ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์
- ์กฐ๊ฑด๋ฌธ์ผ๋ก ์์ธ ์ฒ๋ฆฌ โ
- ๋ฌธ์ : ์ผ๋ถ ํ์ ํ์ด์ง ์ ๊ทผ ์ ์๋ฒ ์ค๋ฅ
- ์์ธ: Controller์์
Optional.get()ํธ์ถ ์ ๋ฐ์ดํฐ ๋ฏธ์กด์ฌ - ํด๊ฒฐ:
Optional.orElseThrow()๋ก null ์์ ์ฒ๋ฆฌ ๋ฐ @ControllerAdvice๋ก ์์ธ ๊ณตํต ์ฒ๋ฆฌ
- ๋ฌธ์ : ์ฃผ๋ฌธ/ํ์ ์กฐํ ์ ๋ฐ์ดํฐ๊ฐ ํ๋ฉด์ ํ์๋์ง ์์
- ์์ธ:
application.yml์ Oracle ์ ์ ์ ๋ณด ์คํ, ํ ์ด๋ธ ๋ฐ์ดํฐ ๋๋ฝ - ํด๊ฒฐ: DB ์ ์ ์ ๋ณด ์์ , ํ ์ด๋ธ ์์ฑ ์คํฌ๋ฆฝํธ(shoebox_DDL.sql) ์ ์ฉ, HikariCP ๋ก๊ทธ ํ์ธ
- ๋ฌธ์ : ์์ธํ์ด์ง, ๋ง์ดํ์ด์ง ์ผ๋ถ ๋ทฐ๊ฐ ๋ก๋๋์ง ์์
- ์์ธ: ๋ชจ๋ธ ๊ฐ์ฒด ๋ฏธ์ ๋ฌ ๋๋ ๋ทฐ ํ์ผ ๊ฒฝ๋ก ๋ถ์ผ์น
- ํด๊ฒฐ: Controller์์ Model์ DTO ์ ๋ฌ, ํ ํ๋ฆฟ ํ์ผ(user/detail.html ๋ฑ)๊ณผ ๊ฒฝ๋ก/๋ณ์๋ช ์ผ์น ํ์ธ
- ๋ฌธ์ : CSS/JS ์์ ํ ๋ธ๋ผ์ฐ์ ์์ ๊ฐฑ์ ๋์ง ์์
- ์์ธ: ๋ธ๋ผ์ฐ์ ์บ์, Spring Boot ๊ธฐ๋ณธ ๋ฆฌ์์ค ์บ์
- ํด๊ฒฐ:
spring.web.resources.cache.period=0์ค์ , ๊ฐ๋ฐํ๊ฒฝ์์๋ง ์ ์ฉ