๋น๋ฐ๋ฒํธ ์ ๋ณด์ด๊ฒ์์ฒญ ๋น๋ฐ๋ฒํธ์ ๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ์ ๋3 Layer Architecture ํ์ฉJDBC ํ์ฉ๐ Git Hub ๋งํฌ & ReadMe / API ๋ช ์ธ์
| ํ์๊ธฐ๋ฅ | ๋จ๊ณ๋ณ | ์๊ตฌ์ฌํญ |
|---|---|---|
| โ | Level 0 | API ๋ช ์ธ์ ์์ฑํ๊ธฐ, ERD ์์ฑํ๊ธฐ, SQL ์์ฑํ๊ธฐ |
| โ | Level 1 | ์ผ์ ์์ฑ (๊ณ ์ ์๋ณ์ ์๋ ์์ฑํ์ฌ ๊ด๋ฆฌ) |
| ์ ์ฒด ์ผ์ ์กฐํ (์์ ์ผ, ์์ฑ์๋ช ๋ฐํ์ผ๋ก ์ผ์ ์กฐํ) | ||
| ์ ํ ์ผ์ ์กฐํ (๊ณ ์ ์๋ณ์๋ก ์กฐํ ) | ||
| โ | Level 2 | ์ ํ ์ผ์ ์์ (๋น๋ฐ๋ฒํธ ๊ฒ์ฆ) |
| ์ ํ ์ผ์ ์ญ์ (๋น๋ฐ๋ฒํธ ๊ฒ์ฆ) |
Controller
์ต๋ํ ์์ฒญ์ ๋ํ ์๋ต์ ๋ฐํํ๋ ์ญํ ๋ง ํ๋๋ก ๋ถ๋ฆฌํ๋ค
Service
๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ณ , ๊ฒ์ฆ์ด๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ฌ๊ธฐ์ ํ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค.
(์๊ฐํด๋ณด๋ ์ ์ฒด ์ผ์ ์กฐํ-์กฐ๊ฑด๋ถ ํํฐ๋ง ํ ๋ null ๊ฒ์ฆ์ ์ด๊ณณ ์ ๊ณณ์์ ํ ๊ฒ ๊ฐ๋ค๐ฅฒ)
Repository
DB๋ฅผ ์
๋ ฅํ๊ณ ๊บผ๋ด์ค๊ณ ๊ธฐ์กด DB์ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋์ง ๋ฑ๋ฑ..
JDBC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก sql์ ํ์ฉํด ์กฐ๊ฑด์ ํํฐ๋งํ๋ค
โ๏ธ RESTful API ์ฒดํฌ๋ฆฌ์คํธ
| ํญ๋ชฉ | ์ค์ ์ฌ๋ถ |
|---|---|
| ๋ฆฌ์์ค ๋ช ์ฌ ์ฌ์ฉ | โ |
| ๋ณต์ํ ์ฌ์ฉ | โ |
| ๋์ฌ ํ์ฉ ์กฐ๊ฑด | ๋์ฌ ์ฌ์ฉ ์์ |
| ์์ ๊ณ์ธต ๊ด๊ณ ํํ | โ
๊ณตํต ๊ณ์ธต/schedules์ฌ์ฉ, ๊ธฐ๋ฅ์ ๋ฐ๋ผ/{id} ์ฌ์ฉ |
| ๋์ ์ฌ๋์ ๊ธ์ง | โ |
| (์ธ๋๋ฐ ์ฌ์ฉ ๊ธ์ง)ํ์ดํ ์ฌ์ฉ | ํ์ดํ ์ฌ์ฉ ์์ |
| ์๋ฌธ์ ์ฌ์ฉ | โ |
| ํ์ผ ํ์ฅ์ ํฌํจ ๊ธ์ง | โ |
| CRUD ํจ์๋ช ๋ฏธ์ฌ์ฉ | โ
POST, DELETE ๋ฑ HTTP ๋ฉ์๋ ์ฌ์ฉ |
| ํํฐ/์ ๋ ฌ/ํ์ด์ง | โ ์ผ์ ์ ์ฒด ์กฐํ(ํํฐ)์ query param ์ฌ์ฉ /schedules?user=Surin&date=2025-03-25 |
@PathVariable๋ก ์ ๋ฌํ๊ณ @RequestBody๋ก ์ ๋ฌํ์ฌ repository์์ ๊ฒ์ฆํ๋คController๋ ์์ฒญ/์๋ต ๋ด๋นService๋ ๊ฒ์ฆ ๋ฐ ๋ก์ง ๋ด๋นRepository๋ DB์ ์ง์ ํต์ Service, Repository ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์๋๋ฐ,id๋ @PathVariable / ๋น๋ฐ๋ฒํธ๋ @RequestBody๋ฅผ ํตํด dto๋ก ๋ฐ์ ์ ๋ฌํ๋ค
๋๋ค ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ฉํด์ผ ํด์ ScheduleRequestDto๋ฅผ ํ์ฉํ๊ณ
๊ฐ์์์ ๋์จ๋๋ก Service์์ intํ์
์ ์ฌ์ฉํด์ ์์ธ ์ํฉ์ ๊ฐ์ ํ๋ค
Repository์์ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋์ง ๊ฒ์ฆํ๊ธฐ ์ ์ Service์์ ์์ธ์ํฉ์ ๋ํ ์ํ์ฝ๋์ ๋ฉ์ธ์ง๋ฅผ ๋ํ๋๋ค
placeholder ? ๋ก ๋์ฒดํ๊ณ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ธ๋ฉํ๋ค์ผ๋จ DB์ DEFAULT๊ฐ์ ์ถ๊ฐํด์คฌ๋ค TIMESTMAP = CURRENT_TIMESTAMP ์ฌ์ฉ
ALTER TABLE schedule
MODIFY created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE schedule
MODIFY updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
์ผ์ ์์ฑ์ : ์์ฑ์ผ ์์ ์ผ์ ๋๋ค ํ์ฌ์๊ฐ์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๊ณ ๋ฐ์ดํฐ์ ์ ์ฅํ๋ค
์ผ์ ์์ ์ : ์์ ์ผ๋ง ์ฌ์ฉํ๊ณ ํ์ฌ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค
required = false
user๋ง ์์๋, date๋ง ์์๋ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ sql๋ฌธ์ ์ด์ด๋ถ์๋ค
@Override
public List<ScheduleResponseDto> findAllSchedules(String user, String date) {
StringBuilder sql = new StringBuilder("select * from schedule where 1=1 ");
List<Object> fillteringSql = new ArrayList<>();
if (user != null){
sql.append("AND user = ?");
fillteringSql.add(user);
}
if (date != null) {
sql.append("AND DATE(updated_at) = ?");
fillteringSql.add(Date.valueOf(date));
}
sql.append("Order by updated_at desc");
return jdbcTemplate.query(sql.toString(),scheduleRowMapper(), fillteringSql.toArray());
}
application.properties ์ค์ ๋ถํฐ ๋ง์ด ํค๋งธ๊ณ ,