๋ ๋ฒจ 1์ด ๋๋๊ณ ๋ ๋ฒจ 2๊ฐ ์์๋๋ค. ์คํ๋ง์ ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋๋ค์ ์ํ ๊ณผ์ ์ด๋ผ๊ณ ํ๋ ๋๋ฅผ ์ํ ๊ณผ์ ์ด๋ค~
๋ฐฉํ์ถ ์์ฝ ๊ด๋ฆฌ
STEP1
ํ์ด๋ก ํฌ์คํฐ, ๋ค๋ก๊ฐ ๋์๋ค. ๋ ๋ฒจ๋ง๋ค 3์ธ ํ์ด๋ฅผ ํ๋ฒ์ฉ ๊ฑธ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค. ์ฃผ๋ณ์์ 3์๊ฐ๋ง ํฌ์ํด๋ ๋ฏธ์
์ ๊ตฌํํ ๋งํผ ๊ฐ๋จํ๋ค๊ณ ํด์ ํ์ต ํ
์คํธ๋ฅผ ํ๋๋ฐ ์๊ฐ์ ๋ง์ด ์ผ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ผ๋ก ๊ถ๊ธํ ํค์๋๋ค์ ๋ํด์๋ ํ์ตํ๋ ์๊ฐ์ ๊ฐ์ง ์ ์์๋ค. ์์ฌ์ด ์ ์ ์ฌ์ด ๋ฏธ์
์ด๊ณ ๊ธฐ๊ฐ์ด ์งง์๋งํผ ๋น ๋ฅด๊ฒ merge ๋์๋ค๋ ์ ์ด๋ค.
๋๋ ๋ญ ๋ฐฐ์ ์๊น?
- `@RequestBody` vs `@ModelAttribute`
๋ฏธ์
์ค ํด๋ผ์ด์ธํธ ์์ฒญ ์ Body์ ํฌํจ๋ Json ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๋ก ๋ฐ์ผ๋ ค๊ณ ํ ๋, ํ๋ผ๋ฏธํฐ์ ์ ์ฉํ ๋ ์ด๋
ธํ
์ด์
`@RequestBody`, `@ModelAttribute` ๋ชจ๋ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์์๋ค. ์ฌ๋ฐ๋ ์ ์ `@ModelAttribute`๋ก ๋ฐ์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ๋ชจ๋ ํ๋๊ฐ null์ด๋ผ๋ ์ ์ด๋ค. ์ด๋ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ์ ๊ทธ๋ ๋ค.
1. @RequestBody
RequestBody๋ HTTP ์์ฒญ ๋ณธ๋ฌธ(Json, XML, etc...)์ Java ๊ฐ์ฒด๋ก ๋ณํํ๋ค.
HTTP ์์ฒญ ๋ณธ๋ฌธ ๋ฐ์ดํฐ๋ `HttpMessageConverter`๋ฅผ ํตํด ํ์
์ ๋ง๋ ๊ฐ์ฒด๋ก ๋ณํ๋๋ค.
public class RequestBodyDto {
private String name;
private long age;
private String password;
private String email;
public RequestBodyDto() { // ๊ธฐ๋ณธ ์์ฑ์
}
// Getter ์ถ๊ฐ ๋ฐ Setter ์ญ์
}
์ ๊ธฐํ๊ฒ๋ ํ๋๋ฅผ ์ด๊ธฐํํ๋ ์์ฑ์, setter๊ฐ ์์ด๋ `@RequestBody`๋ ์ ์์ ์ผ๋ก ๋งคํํ๋ค. ๊ทธ ๋น๋ฐ์ `MappingJackson2HttpMessageConverter`์ด๋ค. ์ง๋ ฌํ๋ฅผ ์ํ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์์ด๋ค. ๋ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ํ ํ๋๋ช
์ ์์์ผํด์ getter, setter ๋ ์ค ํ๋ ์์ด์ผ ํ๋ค!
2. @ModelAttribute
HTTP ํ๋ผ๋ฏธํฐ๋ค์ ํน์ ์๋ฐ ๊ฐ์ฒด์ ๋งคํํ๋ ๊ฒ์ด๋ค. `/hello?name=req&age=1`, `form-data/name=req&age=1`์ ๊ฐ์ ์์ฒญ์ ๋ํ form ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ค๋ค. ์์ฑ์๋ก ๋งคํํ์ง๋ง, ์์ผ๋ฉด setter๋ก ๋งคํํ๋ค.
- `@Component` vs `@Controller`
@Component๋ ํด๋์ค์ ์ ์ธํ์ฌ Bean์ผ๋ก ๊ด๋ฆฌํ๋๋ก ํ๋ ์ด๋
ธํ
์ด์
์ด๋ค.
@Controller๋ ๊ทธ ๊ด์ ์์๋ ๋๊ฐ๋ค. ๋ด๋ถ์ @Component๊ฐ ์๋ค.
๊ทธ๋ผ ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ?
์ปดํฌ๋ํธ ์ค์บ ๋จ๊ณ์์ ์กฐ๊ธ ์ฐจ์ด๋ฅผ ๋ณด์ด๋๋ฐ ์คํ๋ง์ `RequestMappingHandlerMapping` ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ง๋ค๊ณ , ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ `@Controller` ์ด๋
ธํ
์ด์
์ด ๋ถ์ ๋น์ ๊ฐ์ ธ์จ๋ค. ์ด๋, ๋ด๋ถ์ ์ผ๋ก `isHandler` ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ธ์จ ๋น์ ์ด๋
ธํ
์ด์
์ ํ์ธํ๊ณ , `@Controller` ์ด๋
ธํ
์ด์
์ด๋ฉด ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ์ฐพ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ํด๋น ๋ฉ์๋๋ฅผ key(URL): value(๋ฉ์๋ ๋ฐ ํด๋์ค)์ ํํ๋ก ๋งคํํ๋ค. ์ฆ, `@Controller`๋ฅผ ๋ถ์ด๋ฉด ํด๋น ์ ๋ณด์ ๋งคํ๋์ด URL์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ๋ง๋ค์ด์ง๋ค.
๋ง๋ค์ด์ง ๋งคํ ์ ๋ณด๋ `RequestMappingHandlerAdapter`์์ ํด๋น ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋๋ฐ ์ด์ฉ๋๋ค!
์คํ๋ง ๋ถํธ 2.x ๋ฒ์ ์์๋ `@RequestMapping` ์ด๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ ๋งคํ ๋์์ ํฌํจ๋์์ผ๋, 3.x ๋ฒ์ ๋ถํฐ๋ `@Controller` ์ด๋
ธํ
์ด์
๋ง ๋งคํ ๋์์ ํฌํจ๋๋ค. ๊ฒฐ๋ก ์ ํด๋น ํด๋์ค๊ฐ ์ปจํธ๋กค๋ฌ์์ ์คํ๋ง์๊ฒ ์๋ ค์ฃผ๋ ค๋ฉด @Controller๋ก ๋ช
์ํด์ผ ํ๋ค.
- ์น ์์ฒญ ํ๋ฆ
1. localhost -> ํค๋์ /admin/reservation์ ๋ด์ ์์ ์ ์ปดํจํฐ ip๋ก GET ์์ฒญ
2. ํฐ์บฃ์ด ํด๋น ์์ฒญ์ ๋ฐ์์ HttpServeletRequest ๊ฐ์ฒด๋ก ๋ณํ
3. ๋ณํ๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง์ DispatcherServlet์ ์ ๋ฌํจ
4. ์ด ๊ฐ์ฒด์์ ์์ฒญ URL์ ํ์ธ
5. RequestMappingHandlerAdapter๊ฐ RequestMappingHandlerMapping์ด ๋ฑ๋กํ key(url: /admin/reservation): value(๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ปจํธ๋กค๋ฌ ๋ฉ์๋)๋ฅผ ๋ณด๊ณ ์ปจํธ๋กค๋ฌ ํธ์ถ
6. spring์์ http body์ html ํ์ผ์ ๋ด์ ์๋ตํจ.
7. http๋ฅผ ๋ฐ์ ๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋ง์ ํ๋ฉด์ ํ์ํ css, js ํ์ผ์ ๋ค์ ์์ฒญ
8. ๋ฐ๊ณ ๋์, ๋ ๋๋ง์ ์งํํ๋ค๊ฐ js ํ์ผ์ ๋ฐ์ผ๋ฉด ํด๋น js ์ฝ๋๋ฅผ ์คํํจ
9. js ์ฝ๋ ์์์ json ๋ฐ์ดํฐ ์์ฒญ
10. ๋ฐ์์ ํ์ด์ง ๋ ๋๋ง
- ๋๊ฐ `JdbcTemplate`์ ์ฃผ์ ํด์ค๊น?
์ด ๊ถ๊ธ์ฆ์ JdbcTemplate๊ณผ @Autowired๋ฅผ ์ฌ์ฉํ๋ฉด์ ์๊ธด ๊ถ๊ธ์ฆ์ด๋ค. ๋๋ฆ๋๋ก ์กฐ์ฌ๋ฅผ ํตํด ์ ์ฒด๋ฅผ ์์๋๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ์ฃผ์ ํด์ฃผ๋ ์ฃผ์ธ๊ณต์ ๋ฐ๋ก ์คํ๋ง ์ปจํ ์ด๋.
์คํ๋ง ์ปจํ ์ด๋๋ ์คํ๋ง IoC Container๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด ์ปจํ ์ด๋๋ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํด์ค๋ค. `org.springframework.context.ApplicationContext` ์ธํฐํ์ด์ค๋ก ๋ํ๋๋ฉฐ, configuration metadata๋ฅผ ์ฝ์ด ์ปดํฌ๋ํธ๋ค์ ์ด๋ป๊ฒ ์ธ์คํด์คํํ๊ณ ์กฐํฉํ๊ณ ์ค์ ํ ์ง ์์๋ธ๋ค.
configuration metadata๋ ๋ฌด์์ผ๊น?
์ด๋ xml๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ ์ง ์ ์ด๋์ ํ์ผ์ด๋ค. `<bean>` ํ๊ทธ์ ํจ๊ป ๊ฐ์ฒด์ ํ๋ ๋ฑ์ด ์์ฑ๋ ํ์ผ์ ๋ณธ ์ ์์ํ ๋ฐ ์ด๊ฒ configuration metadata์ ํด๋นํ๋ค. ๋๋ ๊ฐ์ฅ ์ฝ๊ฒ ๋ณผ ์ ์๋ `@Bean`, `@Component` ๋ฑ๊ณผ ๊ฐ์ ์ด๋ ธํ ์ด์ ๋ฐฉ์์ด ์๋ค.
๋ค์ ๋์์์ ์ ๋ฆฌํ๋ฉด ์คํ๋ง ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด `ApplicationContext`๊ฐ ์์ฑ๋๊ณ configuration metadata, @Bean, @Component๋ก ๋ฑ๋ก๋ ํด๋์ค๋ฅผ ์ค์บํ๋ฉด์ ์คํ๋ง ๋น์ผ๋ก ๋ง๋ ๋ค. ์ด๋ ๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์๊ธด๋ค.
- xml ํ์ผ๋ก ์ ์ํ ๊ฒฝ์ฐ
1. xml ํ์ผ ์ bean์ ๋ชจ๋ ์ค์บํ๊ณ ์์ฑ ์์๋ฅผ ๋จผ์ ํ์ ํ๋ค.
2. ๋ค๋ฅธ ๋น์ ์์กดํ๋ฉด, ์์กด๋๋ ๋น์ ๋จผ์ ์์ฑํ๋ค.
3. xml ํ์ผ์ ์ ์๋ ์์ฑ์ ์ธ์์ ๋ฐ๋ผ ์ฃผ์ ํ๋ฉฐ ๋น์ ์ฐจ๋ก๋ก ์์ฑํ๋ค.
- @Bean, @Component
@Bean์ ๊ฒฝ์ฐ ์ง์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉฐ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๊ธฐ์ ์ด๋ฅผ ํ ๋๋ก ์คํ๋ง์์ ๋ฉ์๋ ํธ์ถ์ ๊ฐ๋ก์ฑ ๋น์ ์์ฑํ๊ณ ์ฃผ์ ํ๋ค.
@Component์ ๊ฒฝ์ฐ xml๊ณผ ๋น์ทํ๊ฒ ํ์ํ ๋น์ ๋จผ์ ์์ฑํ๋ฉฐ ์ฃผ์ ํ๋ค.
STEP2
step2๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ค์ด๊ฐ๊ณ , ์๋ก์ด ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ ์๊ธฐ๊ณ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์๊ฒผ๋ค. ์ด์ฏค๋ถํฐ๋ ํผ์ ์งํํ๊ธฐ๋ ํ๊ณ , ๋น์ฅ ๊ตฌํ์ด ์ด๋ ต๋ค๊ณ ๋๋ผ์ง ์์์ ๋ด ํ์ต ๋ฐฉ๋ฒ์ ์ด์ฉํด ํ์ตํ๋ค. ๊ทธ๋์ ์ฌ๋ฌ ํฌ๋ฃจ๋ค๊ณผ ๋ํ๋ฅผ ๋๋๋ ์๊ฐ์ด ๋ ๋ง์๊ณ , ์์ฐ์ค๋ ์คํ๋ง์ ์ฌ์ฉ ๋ฐฉ๋ฒ๋ณด๋ค๋ ์ค๊ณ๋ ์ฒ ํ์ ๋ํ ๊ณ ๋ฏผ์ ๋ ๋ง์ด ํ ๊ฒ ๊ฐ๋ค.
๋๋ ๋ญ ๋ฐฐ์ ์๊น?
- DDD
๋๋ฉ์ธ ๊ฐ์ฒด์ `id`๊ฐ ๋ค์ด๊ฐ๋ ๊ฒ์ ๋ํ์ฌ
[๋ธ๋ก๊ทธ] ๊ฐ์ฒด๊ฐ DB์ id๋ฅผ ํ๋๋ก ๊ฐ์ง๋ ๊ฒ์ ๋ํ์ฌ
๋ ๋ฒจ 1๋ถํฐ ๊ณ์ ๊ฐ์ฒด์งํฅ์ ๋ฐฐ์ฐ๋ค DB์ ํ๋๊ฐ ๋ค์ด๊ฐ๋ ๊ฒ์ด ๋ถํธํ๊ธฐ์ ์ด๋ฐ ๊ณ ๋ฏผ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ด์ ์ ๋ฌ๋ฆฌํ๋ฉฐ ์ด๋ฅผ ํด์ํ๋ค.
`DAO` vs `Repository`
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด DB์ ์ง์คํ๊ฒ ๋๋ค๋ฉด DB ํ
์ด๋ธ๊ณผ 1:1 ๋งคํ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ๋๋ฉด DB์ ๊ฐ์ฒด ์ฌ์ด์ ํจ๋ฌ๋ค์์ ๋ง์ถ๊ธฐ ์ํด ๊ฐ์ฒด์ ํ๋๋ฅผ ๋ณ๊ฒฝํ๋ค. ์ฅ๊ธฐ ๋ฏธ์
๋๋ ๊ทธ๋ฌ๋ค. DB์ ์ง์คํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ ๊ฐ์ฒด์งํฅ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ฌ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๊ณ , ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๊ฒ ๋๋ ๊ฒฝํ์ ํ์๋ค. ์ด๋ฐ ๊ฒฝํ์ ํ๊ธฐ์ ์ด์ ๋ DB๊ฐ ์๋ ๊ฐ์ฒด์ ์ง์คํ๊ณ ์ถ์๋ค.
๊ทธ๋์ ๊ด์ ์ ๋ฐ๊ฟ๋ณด์๋ค. DB๊ฐ ์๋ ๋๋ฉ์ธ ๊ฐ์ฒด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๊ตฌ์ฌํญ์ ๋จผ์ ์๊ฐํ๊ณ ์๊ตฌ์ฌํญ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ฅ๋ค์ ๋จผ์ ์๊ฐํ๋ค๋ฉด ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋ชฉ๋ก์ ๋ฝ์ ์ถ์ํ๋ฅผ ํ ์ ์๋ค. ์ด๋ ๊ฒ ์ถ์ํํ๋ฉด ํด๋น ๊ธฐ๋ฅ๋ค์ ์งํฉ์ DB ํ
์ด๋ธ๊ณผ 1:1 ๋์๋๋ ๊ฒ์ด ์๋ ๋ง์น ๋๋ฉ์ธ ๊ฐ์ฒด์ ๋ํ ์ปฌ๋ ์
์ฒ๋ผ ๋ณด์ธ๋ค.
๋ ๊ฒฝ์ฐ์ ์ฐจ์ด๊ฐ ์ดํด๊ฐ ๋๋๊ฐ? ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ๋ `DAO`๊ณ , ๋ ๋ฒ์งธ ๊ฒฝ์ฐ๊ฐ ๋ฐ๋ก `Repository`์ด๋ค.
์ํฐํฐ, ๋๋ฉ์ธ, VO
[๋ธ๋ก๊ทธ] ์ํฐํฐ, VO...
์ฉ์ด์ ๋ํ ๊ธฐ์ค์ด ํ์ํ๋ค๊ณ ์๊ฐํด์ ์ฌ๋ฌ ํฌ๋ฃจ๋ค๊ณผ ์ด์ผ๊ธฐ๋ฅผ ๋๋๋ฉฐ ๋์ ์๊ฐ์ ์ ํํ๊ณ ๋ค๋ฅธ ์ด๋ค์ ์๊ฐ์ ํก์ํ๋ฉฐ ์ฉ์ด์ ๋ํด ์ด๋์ ๋ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค. ํ์ง๋ง, ์์ง DDD๋ฅผ ํ์ตํ๊ธฐ์ ์ด๋ฅธ ๊ฒ ๊ฐ์์ ๋ฐ๋ก ํ์ตํ์ง ์์ ์์ ์ด๋ค. ์๋ง ์ง๊ธ์ฒ๋ผ ํฌ๋ฃจ๋ค๊ณผ์ ์๊ธฐ๋ฅผ ํตํด DDD ์ง์์ ํก์ํ ๋ฏํ๋ค! ๋ ๋ฒจ 2๋ ์คํ๋ง์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ชฉ์ ์ ๋๊ณ ์์์ ํญ์ ์์ง ์๊ณ ๋์๊ฐ ์๊ฐ์ด๋ค.
- `@Autowired`
1. ์์ฑ์ ์ฃผ์
2. setter ์ฃผ์
3. ํ๋ ์ฃผ์
์ด์ธ์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ด ์๋ค.
public class MovieRecommender {
@Autowired
private MovieCatalog[] movieCatalogs;
// private Set<MovieCatalog> movieCatalogs;
// ...
}
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, `movieCatalogs` ๋ฐฐ์ด์ `MovieCatalog`๋ก ๋ง๋ค์ด์ง ๋ชจ๋ ๋น์ ๋ด์์ค๋ค. ์ปฌ๋ ์
๋ ์์ธ๋ ์๋ค. ๊ฒ๋ค๊ฐ `@Order`, `@Priority`๋ก ์์๋ฅผ ์ ํ ์ ์๋ค.
Map์ผ๋ก ๋ฐ๋๋ค๋ฉด `Map<String, MovieCatalog>`์ฒ๋ผ key๋ก ๋น ์ด๋ฆ, value๋ก ํด๋น ๋น์ ๊ฐ์ ธ์ฌ ์๋ ์๋ค.
`required` ์ต์
์ ๋น์ด ๊ผญ ์ฑ์์ง์ง ์์๋ ๋๋ค๋ ์ต์
์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก true์ด๊ธฐ์ ์ฃผ์
ํ ๋น์ด ์์ผ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง, required ์ต์
์ false๋ก ์ค๋ค๋ฉด ๋น์ด ์์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ null๋ก ์ฑ์ด๋ค.
๋, ์ฌ๋ฐ๋ ์ ์ ์ธํฐํ์ด์ค์ ๊ฐ์ด ์ฌ๋ฌ ๋น์ด ๋ค์ด์ฌ ์ ์๋ ๊ฒฝ์ฐ๋ ํ๋๋ช
์ ๋ณด๊ณ ๋น์ ์ฃผ์
ํด์ค๋ค.
- ๋ ์ด์ด๋ ์ํคํ
์ฒ
๋ ์ด์ด๋ ์ํคํ
์ฒ์ ํต์ฌ์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ค. ํด๋น ๋ฏธ์
์์ step1๊น์ง๋ ์ปจํธ๋กค๋ฌ์ ์๋น์ค์ ๊ณ์ธต์ ๋๋ ์ผ ํ๋ ์ด์ ๋ฅผ ์ฐพ์ง ๋ชปํ์๋ค. ์๋น์ค๊ฐ ๊ฐ์ ธ์ผ ํ ์ฑ
์์ ๋ฌด๊ฒ๊ฐ ๋๋ฌด ์์๋ณด์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, ๋ ์ด์ด๋ ์ํคํ
์ฒ ๊ด์ ์์ ๋ณธ๋ค๋ฉด ์ด๋ ์๋ชป๋ ๊ตฌ์กฐ์ด๋ค. ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ์ ์ง์คํ๋ฉด ์ปจํธ๋กค๋ฌ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋ชป๋์์ผ๋ฉฐ, ์๋น์ค๊ฐ ๊ฐ์ง๋ ์ฑ
์์ ๋ฌด๊ฒ๊ฐ ์๋๋ผ๋ ํด๋น ์ฑ
์์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๋ง๋ค.
๊ทธ๋์ step2์์๋ ์๋์ ์ผ๋ก ์ปจํธ๋กค๋ฌ์ ์๋น์ค์ ๊ณ์ธต์ ๊ตฌ๋ถํ์๋ค. ์ด๋ฌํ ์ค๊ณ๊ฐ ์๋์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ์ด๋ค๋ผ ์ ์์ผ๋ฉฐ, ์ถํ์ ์ฌ์ํ ์ฑ
์์ด๋ผ๋ ๋ถ๋ฆฌํด๋ผ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
๋ง์ง๋ง
์ด๋ฒ ๋ฏธ์
๋ฟ๋ง ์๋๋ผ ํญ์ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ์๋ฌธ์ด ๋๋ ๊ฒ์ด ์๋ค. step1์์๋ ๊ตฌํ์ด ๋ฐ๋น ๊น๊ฒ ๊ณ ๋ฏผํ์ง ๋ชปํ๊ณ ํค์๋๋ง ๊ฐ์ ธ๊ฐ๊ฒ ๋๊ณ , step2์์ ํด๋น ํค์๋์ ๋ํ ์๋ฌธ์ ํด์ํ๊ณ ์ฌ๋ฌ ๋ฐฉ๋ฉด์์ ๊น์ ๊ณ ๋ฏผ์ ๋น ์ง๊ฒ ๋๋ค. ์ด๋ฐ ์ฌ์ดํด์ด ์ ๋ง ์ข์ ๊ฒ์ผ๊น? ํ์ด ํ๋ก๊ทธ๋๋ฐ์์๋ step2๋งํผ ์ป์ด๊ฐ ์ ์์๊น?
ํ์ด ํ๋ก๊ทธ๋๋ฐ์์ ์ป์ด๊ฐ ๊ฒ์ ๋ฌด์์ด๋ฉฐ, step2๋ฅผ ์งํํ๋ฉฐ ์ป์ด๊ฐ๋ ๊ฒ์ ์ฐจ์ด๋ ๋ญ๊น? ๋๋ ์์ง ํ์ด ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ์ ํฌ๊ฒ ๋ชป ๊ฐ์ ธ๊ฐ๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค. ๋ถ๋ช
๋ ๋ฒจ 1 ํ๊ณ ์์ ์ฐํ
์ฝ์ ํ๊ฒฝ์ ํตํด ์ฑ์ฅํ๋ค๊ณ ํ์ง๋ง ํ์ด ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฑ์ฅํ ๋งํผ ๊น์ ๊ณ ๋ฏผ์ ํ ์๊ฐ์ด ์ฃผ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ์ฑ์ฅํ๋ค๊ณ ๋๋ผ์ง ๋ชปํ๋ค.
ํ์ง๋ง, ์ด๋ฒ์ ํ๊ณ ๋ฅผ ํ๋ฉด์ ์ด๋ฐ ์ฌ์ดํด๋ ๊ด์ฐฎ์ ์ฌ์ดํด์ด ์๋๊ฐ ํ๋ ์๊ฐ์ด ๋ค์๋ค. step2๊ฐ ๋๋ฉด ์ฌ๋ฌ ํฌ๋ฃจ๋ค๊ณผ ๋ํ๋ฅผ ๋๋๊ณ , ์๊ฐํ ์๊ฐ๋ค์ ๊ฐ์ง๋ฉด์ ์ค์ค๋ก ์ฑ์ฅํ๋ค. step1์ ์งํํ๋ฉฐ ๋๋ฆ์ ์๋๋ฅผ ๋ด์ผ๋ ค๊ณ ๊ณ ๋ฏผํ๊ณ ์๊ฐํ๊ธฐ์ ๋ฐฐ์์ ๋ํ ํค์๋๋ฅผ ๋ฝ์๋ผ ์ ์์๋ ๊ฒ์ด๊ณ , ์ด๋ฅผ step2์์ ๊ณ ๋ฏผํ๊ณ ์๊ฐํ๋ฉฐ ํด์ํ ์ ์์๋ ๊ฒ์ด๋ค. ๋๋ ์ด๋ฏธ ํ์ด ํ๋ก๊ทธ๋๋ฐ์์ ์ป์ ์ ์๋ ๊ฒ์ ์ ์ป์ด๋ด๊ณ ์์๋ค.
ํ์ด๊ฐ ์๋์๋ค๋ฉด ์๊ฐํ์ง ๋ชปํ์ ํค์๋๋ ์์๊ณ , ์ค์ค๋ก ์๊ฐํ ํค์๋๋ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ํค์๋๋ค์ด ๋ฐฉํฅ์ฑ์ ์ก์์ค๋ค. ๊ทธ๋ฌ๋ฉด์ ์์ฐ์ค๋ step2์์ ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ ํด์ํ๊ณ ํฌ๋ฃจ๋ค๊ณผ ์๊ธฐ๋ฅผ ๋๋๋ฉฐ ๋๋ง์ ์ฒ ํ์ ๋ง๋ค์ด๊ฐ๋ค.
์ถฉ๋ถํ ์ ํ๊ณ ์์๋ค.
'๊ฐ๋ฐ > ์ฐ์ํํ ํฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐํ ์ฝ ๋ ๋ฒจ 2์ ๋ฏธ์ 2 ํ๊ณ (4) | 2025.05.19 |
---|---|
persist๋ฅผ ํ๋ฉด ์์์ฑ ์ปจํ ์คํธ์์ ์ผ์ด๋๋ ์ผ (1) | 2025.05.16 |
์ํฐํฐ, VO... (1) | 2025.05.04 |
๊ฐ์ฒด๊ฐ DB์ id๋ฅผ ํ๋๋ก ๊ฐ์ง๋ ๊ฒ์ ๋ํ์ฌ (5) | 2025.04.22 |
์ฐํ ์ฝ์์ ๋ ์ฑ์ฅํ๊ณ ์๋ค. (6) | 2025.04.19 |