'์ง๋ค'๋ ๋ถ๋์ฐ ๋งค๋ฌผ ๊ฒ์ ๋ฐ ์ปค๋ฎค๋ํฐ ํ๋ซํผ ์ ๋๋ค.
- SSAFY ๊ดํต ํ๋ก์ ํธ๋ก ๋ถ๋์ฐ ๋งค๋ฌผ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ๋ฐ์, ๊ฐ๋ฐํ ํ๋ก์ ํธ ์ ๋๋ค.
- ์ํ ์์ โฌ๏ธ (ํด๋ฆญํ์ฌ ์ฌ์)
- ์ง์ญ๋ณ, ์กฐ๊ฑด๋ณ ์ํํธ ๋งค๋ฌผ ๊ฒ์ ๋ฐ ํํฐ๋ง
- ์นด์นด์ค๋งต ์ฐ๋ ์ง๋ ๊ธฐ๋ฐ ๋งค๋ฌผ ์์น ํ์ธ
- ๋งค๋ฌผ ์์ธ ์ ๋ณด ์กฐํ ๋ฐ ๊ฑฐ๋ ๋ด์ญ ๋ถ์
- ์์ ๋ก๊ทธ์ธ (Google, Kakao, Naver)
- JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
- ํ์ ์ ๋ณด ๊ด๋ฆฌ ๋ฐ ํ๋กํ ์์
- ๋ถ๋์ฐ ๊ด๋ จ ๊ฒ์๊ธ ์์ฑ/์กฐํ/๋๊ธ
- ์ค์๊ฐ ์ชฝ์ง ์์คํ
- ๊ด๋ฆฌ์ ๊ณต์ง์ฌํญ ๊ด๋ฆฌ
- OpenAI ChatGPT ์ฐ๋ ๋ถ๋์ฐ ์๋ด ์๋น์ค
- ๋ค์ํ ์๋๋ฆฌ์ค๋ณ ํ๋กฌํํธ ํ ํ๋ฆฟ ํ์ฉ
- ๋ถ๋์ฐ ์ ๋ณด ๋ฐ ํฌ์ ์กฐ์ธ ์ ๊ณต
- ๊ด์ฌ ์ง์ญ/์ํํธ ์ฐํ๊ธฐ
- ๊ฐ์ธํ๋ ๋งค๋ฌผ ์ถ์ฒ
- ๊ด์ฌ ๋ชฉ๋ก ๊ด๋ฆฌ
|
Java 21 |
Spring Boot 3.3.5 |
Spring Data JPA |
QueryDSL |
Swagger |
|
Vue.js 3.5.12 |
CSS |
HTML5 |
JavaScript |
|
Redis |
MySQL |
์๋๋ ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ฃผ์ Spring Boot ๋ฐ ๊ด๋ จ ๊ธฐ์ ๋ค์ ๋ํ ์ ๋ฆฌ์ ๋๋ค. ์ค์ ๊ตฌํ๋ ๊ธฐ๋ฅ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
- ๊ฐ๋ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๊ณ์ธต์ ์ํ JPA ๊ตฌํ์ฒด์ ํ์ ์์ ํ ์ฟผ๋ฆฌ ๋น๋
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- JPA Repository: ๊ธฐ๋ณธ CRUD ์์ ์ ์ํ ํ์ค ์ธํฐํ์ด์ค ํ์ฉ
- QueryDSL: ๋ณต์กํ ์กฐ๊ฑด ๊ฒ์๊ณผ ๋์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ
- ์:
DealQueryRepository,HouseQueryRepository๋ฑ์์ ๋ค์ํ ๊ฒ์ ์กฐ๊ฑด ์ฒ๋ฆฌ
- ์:
- MySQL ์ฐ๋: ํ๋ก๋์ ํ๊ฒฝ์์ MySQL 8.0 ์ฌ์ฉ
- ๊ฐ๋ : AOP๋ฅผ ํ์ฉํ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization) ์ฒ๋ฆฌ
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ:
JwtProviderํด๋์ค๋ฅผ ํตํ ํ ํฐ ์์ฑ ๋ฐ ๊ฒ์ฆ- Access Token๊ณผ Refresh Token ๋ถ๋ฆฌ ๊ด๋ฆฌ
- ์ค์ ํ์ผ์์ ๋น๋ฐํค์ ๋ง๋ฃ์๊ฐ ์ธ๋ถํ (
@Valueํ์ฉ)
- AOP ๊ธฐ๋ฐ ๊ถํ ๊ด๋ฆฌ:
@UserAccess,@AdminAccess๋ฑ ์ปค์คํ ์ด๋ ธํ ์ด์ ๊ณผ Aspect๋ฅผ ํตํ ๊ถํ ์ฒดํฌUserAccessAspect,AdminAccessAspect๋ฑ์ผ๋ก ๋ฉ์๋ ์คํ ์ ๊ถํ ๊ฒ์ฆ
- ์ง์ ๊ตฌํํ ์์ ๋ก๊ทธ์ธ: Google, Kakao, Naver OAuth Provider ์ง์ ๊ตฌํ
- JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ:
- ๊ฐ๋ : ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ํ์ฉํ ์บ์ฑ ๋ฐ ์ธ์ ๊ด๋ฆฌ
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- Refresh Token ์ ์ฅ: ํ ํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์บ์ ์ ์ฅ์
- ๊ณ ์ฑ๋ฅ ์กฐํ: ๋น๋ฒํ ์กฐํ ์์ ์ ์ฑ๋ฅ ํฅ์
- ์ค์ ์ธ๋ถํ:
application.yml์์ Redis ํธ์คํธ/ํฌํธ ๊ด๋ฆฌ
- ๊ฐ๋ : AI ๊ธฐ๋ฅ ํตํฉ์ ์ํ Spring AI ํ๋ ์์ํฌ
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- OpenAI API ์ฐ๋: ChatGPT ๋ชจ๋ธ์ ํ์ฉํ ์ฑ๋ด ์๋น์ค
- ํ๋กฌํํธ ํ
ํ๋ฆฟ:
prompts/๋๋ ํ ๋ฆฌ์.stํ์ผ๋ก ๋ค์ํ ์๋๋ฆฌ์ค๋ณ ํ๋กฌํํธ ๊ด๋ฆฌ - AI Controller: ๋ถ๋์ฐ ๊ด๋ จ ์๋ด ๋ฐ ์ ๋ณด ์ ๊ณต ์๋น์ค
- ๊ฐ๋ : API ๋ฌธ์ํ ๋ฐ ํ ์คํธ๋ฅผ ์ํ ์๋ํ ๋๊ตฌ
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- ์๋ API ๋ฌธ์ ์์ฑ:
@OpenAPIDefinition์ด๋ ธํ ์ด์ ์ผ๋ก API ๋ช ์ธ์ ๊ตฌ์ฑ - Controller Docs: ๊ฐ ๋๋ฉ์ธ๋ณ
ControllerDocs์ธํฐํ์ด์ค๋ก API ๋ฌธ์ํ - ์ค์๊ฐ ํ ์คํธ: Swagger UI๋ฅผ ํตํ API ํ ์คํธ ํ๊ฒฝ ์ ๊ณต
- ์๋ API ๋ฌธ์ ์์ฑ:
- ๊ฐ๋ : ์ด๋ฉ์ผ ๋ฐ์ก ๊ธฐ๋ฅ์ ์ํ Spring ๋ชจ๋
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- Gmail SMTP ์ฐ๋: ์ด๋ฉ์ผ ์ธ์ฆ ๋ฐ ์๋ฆผ ๊ธฐ๋ฅ
- ๋น๋ฐ๋ฒํธ ์ฌ์ค์ : ์ธ์ฆ ์ฝ๋ ๋ฐ์ก์ ํตํ ๋ณด์ ๊ฐํ
- ์ค์ ์ธ๋ถํ:
application-secret.yml๋ก ๋ฏผ๊ฐ ์ ๋ณด ๋ถ๋ฆฌ
- ๊ฐ๋ : ๋๋ฉ์ธ๋ณ๋ก ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ ํด๋ฆฐ ์ํคํ ์ฒ
- ํน์ง ๋ฐ ์ ์ฉ ๋ฐฉ์
- ๊ณ์ธต ๋ถ๋ฆฌ:
presentationโapplicationโdomainโinfrastructure - ๋๋ฉ์ธ๋ณ ๋ชจ๋ํ:
member,house,deal,article,auth๋ฑ - ์์กด์ฑ ์ญ์ : Repository ์ธํฐํ์ด์ค๋ฅผ domain์, ๊ตฌํ์ฒด๋ฅผ infrastructure์ ๋ฐฐ์น
- ๊ณ์ธต ๋ถ๋ฆฌ:
| Backend | Frontend |
|---|---|
| ์ ์ ์ฐ | ์กฐ์์ฌ |




