์คํ๋ง ๋ถํธ์ ์คํ๋ง์์ ์ฌ์ฉํ๋ ์ ๋ ธํ ์ด์ ์ ๋ํ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๊ณ ์์ธํ๊ฒ ์์๋ณผ ๋๋ ํค์๋๋ฅผ ๊ฐ์ง๊ณ ๊ณต๋ถํ ์ ์๋๋ก ์ ๋ํ๋ ํฌ์คํธ.
ํด๋น ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๊ธฐ์ ํ์ง ์๊ณ ์ ๋ ธํ ์ด์ ์ ๋ณด๋ง ๋น ๋ฅด๊ฒ ๋ณผ ์ ์๋๋ก ์ ๋ฆฌํ์๋ค.
โ๏ธ@ComponentScan
- @Component์ @Service, @Repository, @Controller, @Configuration์ด ๋ถ์ ํด๋์ค Bean๋ค์ ์ฐพ์์ Context์ bean๋ฑ๋ก์ ํด์ฃผ๋ Annotation
ApplicationContext.xml์ <bean id="jeongpro" class="jeongpro" /> ์ด๋ฐ์์ผ๋ก xml์ bean์ ์ง์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ๋ ์๊ณ ์์ ๊ฐ์ด ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ํ๋ ๋ฐฉ๋ฒ๋ ์์
base-package๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ํจํค์ง ์๋์ ์๋ ์ปดํฌ๋ํธ๋ค์ ์ฐพ๊ณ ๊ทธ ๊ณผ์ ์ spring-context-๋ฒ์ (4.3.11.RELEASE).jar์์ ์ฒ๋ฆฌํ๋ค.
@Component๋ก ๋ค ์ฐ์ง ์ ๊ตณ์ด @Repository, @Service, @Controller๋ฑ์ ์ฌ์ฉํ๋๋ฉด ์๋ฅผ๋ค์ด @Repository๋ DAO์ ๋ฉ์๋์์ ๋ฐ์ํ ์ ์๋ unchecked exception๋ค์ ์คํ๋ง์ DataAccessException์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๊ฐ๋ ์ฑ์์๋ ํด๋น ์ ๋ ธํ ์ด์ ์ ๊ฐ๋ ํด๋์ค๊ฐ ๋ฌด์์ ํ๋์ง ๋จ ๋ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ์์ฑํ๋ฉด ์๋์ผ๋ก ๋ฑ๋ก๋๋ ๋น์ ์ด๋ฆ์ ํด๋์ค์ ์ฒซ๋ฌธ์๊ฐ ์๋ฌธ์๋ก ๋ฐ๋ ์ด๋ฆ์ด ์๋์ ์ฉ๋๋ค.
(HomeController -> homeController)
โ๏ธ@EnableAutoConfiguration
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ง๋ค ๋ ์๋์ผ๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ์ ์ผ ๋ค.
classpath์ ๋ด์ฉ์ ๊ธฐ๋ฐํด์ ์๋ ์์ฑํด์ค๋ค. ๋ง์ฝ tomcat-embed-core.jar๊ฐ ์กด์ฌํ๋ฉด ํฐ์บฃ ์๋ฒ๊ฐ setting๋๋ค.
โ๏ธ@Configuration
- Configuration์ ํด๋์ค์ ์ ์ฉํ๊ณ @Bean์ ํด๋น ํด๋์ค์ ๋ฉ์๋์ ์ ์ฉํ๋ฉด @Autowired๋ก ๋น์ ๋ถ๋ฅผ ์ ์๋ค.
โ๏ธ@Required
- setter ๋ฉ์๋์ ์ ์ฉํด์ฃผ๋ฉด ๋น ์์ฑ์ ํ์ ํ๋กํผํฐ ์์ ์๋ฆฐ๋ค.
โ๏ธ@Qualifier("id123")
- @Autowired์ ๊ฐ์ด ์ฐ์ด๋ฉฐ, ๊ฐ์ ํ์ ์ ๋น ๊ฐ์ฒด๊ฐ ์์ ๋ ํด๋น ์์ด๋๋ฅผ ์ ์ด ์ํ๋ ๋น์ด ์ฃผ์ ๋ ์ ์๋๋ก ํ๋ ์ ๋ ธํ ์ด์
(๊ฐ์ ํ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ex) ๋๋ฌผ, ์์ญ์ด, ๋ญ, ๊ฐ, ๋ผ์ง)
โ๏ธ@Resource
- @Autowired์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํด์ฃผ๋๋ฐ ์ฐจ์ด์ ์ Autowired๋ ํ์ ์ผ๋ก, Resource๋ ์ด๋ฆ์ผ๋ก ์ฐ๊ฒฐํด์ค๋ค.
โ๏ธ@PostConstruct, @PreConstruct
- ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ดํ ์ด๊ธฐํ ์์ ์ ์ํด ๊ฐ์ฒด ์์ฑ ์ /ํ์(pre/post) ์คํํด์ผ ํ ๋ฉ์๋ ์์ ๋ถ์ธ๋ค.
โ๏ธ@PreDestroy
- ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ (pre)์ ํด์ผํ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
โ๏ธ@PropertySource
- ํด๋น ํ๋กํผํฐ ํ์ผ์ Environment๋ก ๋ก๋ฉํ๊ฒ ํด์ค๋ค.
ํด๋์ค์ @PropertySource("classpath:/settings.properties")๋ผ๊ณ ์ ๊ณ ํด๋์ค ๋ด๋ถ์ @Resource๋ฅผ Environmentํ์ ์ ๋ฉค๋ฒ๋ณ์์์ ์ ์ผ๋ฉด ๋งคํ๋๋ค.
โ๏ธ@ConfigurationProperties
- yamlํ์ผ ์ฝ๋๋ค. default๋ก classpath:application.properties ํ์ผ์ด ์กฐํ๋๋ค.
์์ฑ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด๋๊ณ ๊ทธ ์์ (prefix="mail")์ ์จ์ ํ๋กํผํฐ์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ ์ ์์
mail.host = mailserver@mail.com
mail.port = 9000
mail.defaultRecipients[0] = admin@mail.com
mail.defaultRecipients[1] = customer@mail.com
โ๏ธ@Lazy
- ์ง์ฐ๋ก๋ฉ์ ์ง์ํ๋ค.
@Component๋ @Bean ์ ๋ ธํฐ์์ ๊ณผ ๊ฐ์ด ์ฐ๋๋ฐ ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์คํ๋ง์์ ๋ฐ๋ก bean๋ฑ๋ก์ ๋ง์น๋ ๊ฒ์ด ์๋๋ผ ์ค์ ๋ก ์ฌ์ฉ๋ ๋ ๋ก๋ฉ์ด ์ด๋ค์ง๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โ๏ธ@Value
- properties์์ ๊ฐ์ ๊ฐ์ ธ์ ์ ์ฉํ ๋ ์ฌ์ฉํ๋ค.
โ๏ธ@Value("${value.from.file}")
private String valueFromFile; ์ด๋ผ๊ณ ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด value.from.file์ ๊ฐ์ ๊ฐ์ ธ์์ ํด๋น ๋ณ์์ ์ฃผ์ ํด์ค๋ค.
spEL์ ์ด์ฉํด์ ์กฐ๊ธ ๋ ๊ณ ๊ธ์ค๋ฝ๊ฒ ์ธ ์ ์๋ค.
โ๏ธ@Value(#{systemProperties['priority'] ?: 'some default'})
โ๏ธ@SpringBootApplication
- @Configuration, @EnableAutoConfiguration, @ComponentScan 3๊ฐ์ง๋ฅผ ํ๋์ ์ ๋ ธํ ์ด์ ์ผ๋ก ํฉ์น ๊ฒ์ด๋ค.
โ๏ธ@RequestMapping
- ์์ฒญ URL์ ์ด๋ค ๋ฉ์๋๊ฐ ์ฒ๋ฆฌํ ์ง mappingํด์ฃผ๋ ์ ๋ ธํ ์ด์ ์ด๋ค.
์ปจํธ๋กค๋ฌ๋ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์ ์ ์ฉํ๋ค.
@RequestMapping("/list"), @RequestMapping("/home, /about");
@RequestMapping("/admin", method=RequestMethod.GET)
โ๏ธ@CookieValue
- ์ฟ ๊ธฐ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๋ฐ์ ์ ์๋ ๋ฐฉ๋ฒ
ํด๋น ์ฟ ๊ธฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด 500 ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
์์ฑ์ผ๋ก required๊ฐ ์๋๋ฐ default๋ true๋ค. false๋ฅผ ์ ์ฉํ๋ฉด ํด๋น ์ฟ ํค ๊ฐ์ด ์์ ๋ null๋ก ๋ฐ๊ณ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค.
public String view(@CookieValue(value="auth")String auth){...}; // ์ฟ ํค์ key๊ฐ auth์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ ธ์ด
โ๏ธ@CrossOrigin
- CORS ๋ณด์์์ ๋ฌธ์ ๋ก ๋ธ๋ผ์ฐ์ ์์ ๋ฆฌ์์ค๋ฅผ ํ์ฌ origin์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก์ AJAX์์ฒญ์ ๋ฐฉ์งํ๋ ๊ฒ์ด๋ค.
@RequestMapping์ด ์๋ ๊ณณ์ ์ฌ์ฉํ๋ฉด ํด๋น ์์ฒญ์ ํ ๋๋ฉ์ธ์์ ์จ ajax์์ฒญ์ ์ฒ๋ฆฌํด์ค๋ค.
@CrossOrigin(origins = "http://jeong-pro.tistory.com", maxAge = 3600)
-> ๊ธฐ๋ณธ ๋๋ฉ์ธ์ด http://jeong-pro.tistory.com ์ธ ๊ณณ์์ ์จ ajax์์ฒญ๋ง ๋ฐ์์ฃผ๊ฒ ๋ค.
โ๏ธ@ModelAttribute
- view์์ ์ ๋ฌํด์ฃผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํด๋์ค(VO/DTO)์ ๋ฉค๋ฒ ๋ณ์๋ก binding ํด์ฃผ๋ ์ ๋ ธํ ์ด์
๋ฐ์ธ๋ฉ ๊ธฐ์ค์ <input name="id" /> ์ฒ๋ผ ์ด๋ค ํ๊ทธ์ name๊ฐ์ด ํด๋น ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ช ๊ณผ ์ผ์นํด์ผํ๊ณ set๋ฉ์๋๋ช ๋ ์ผ์นํด์ผํ๋ค.
class Person{
String id;
public void setId(String id){ this.id = id;}
}
โ๏ธ@GetMapping
- @RequestMapping(Method=RequestMethod.GET)๊ณผ ๊ฐ์
@PostMapping, @PutMapping, @PatchMapping, @DeleteMapping์ ์ ์ถ ๊ฐ๋ฅํจ.
โ๏ธ@SessionAttributes
- ์ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ ์ฐ๋ ์ ๋ ธํ ์ด์
@SessionAttributes("name")์ด๋ผ๊ณ ํ๋ฉด Model์ key๊ฐ์ด "name"์ผ๋ก ์๋ ๊ฐ์ ์๋์ผ๋ก ์ธ์ ์๋ ์ ์ฅ๋๊ฒ ํ๋ค.
โ๏ธ@Valid
- ์ ํจ์ฑ ๊ฒ์ฆ์ด ํ์ํ ๊ฐ์ฒด์์ ์ง์ ํ๋ค.
โ๏ธ@InitBinder
- @Valid ์ ๋ ธํ ์ด์ ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฆ์ด ํ์ํ๋ค๊ณ ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ์ ์ ์ํํด์ผํ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ค.
โ๏ธ@RequestAttribute
- Request์ ์ค์ ๋์ด ์๋ ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
โ๏ธ@RequestBody
- ์์ฒญ์ด ์จ ๋ฐ์ดํฐ(JSON์ด๋ XMLํ์)๋ฅผ ๋ฐ๋ก ํด๋์ค๋ model๋ก ๋งคํํ๊ธฐ ์ํ ์ ๋ ธํ ์ด์
โ๏ธ@RequestHeader
- Request์ header๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ
@RequestHeader(value="Accept-Language")String acceptLanguage ๋ก ์ฌ์ฉ //ko-KR,ko;q=0.8,en-US;q=0.6
โ๏ธ@RequestParam
- @PathVariable๊ณผ ๋น์ทํ๋ค. request์ parameter์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค. ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ๋จ
โ๏ธ@RequestPart
- Request๋ก ์จ MultipartFile์ ๋ฐ์ธ๋ฉํด์ค๋ค.
@RequestPart("file")MultipartFile file๋ก ๋ฐ์์ฌ ์ ์์.
โ๏ธ@ResponseBody
- view๊ฐ ์๋ JSON ํ์์ ๊ฐ์ ์๋ตํ ๋ ์ฌ์ฉํ๋ ์ ๋ ธํ ์ด์ ์ผ๋ก ๋ฌธ์์ด์ ๋ฆฌํดํ๋ฉด ๊ทธ ๊ฐ์ http response header๊ฐ ์๋ response body์ ๋ค์ด๊ฐ๋ค.
๋ง์ฝ ๊ฐ์ฒด๋ฅผ returnํ๋ ๊ฒฝ์ฐ JACKSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ๋ฌธ์์ด๋ก ๋ณํ๋์ด ์ ์ก๋๋ค.
context์ ์ค์ ๋ resolver๋ฅผ ๋ฌด์ํ๋ค๊ณ ๋ณด๋ฉด๋๋ค. (viewResolver)
โ๏ธ@PathVariable
- ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ์์ ์ฌ์ฉํ๋ฉด์ ํด๋น URL์์ {ํน์ ๊ฐ}์ ๋ณ์๋ก ๋ฐ์ ์ฌ ์ ์๋ค.
โ๏ธ@ExceptionHandler(ExceptionClassName.class)
- ํด๋น ํด๋์ค์ ์์ธ๋ฅผ ์บ์นํ์ฌ ์ฒ๋ฆฌํ๋ค.
โ๏ธ@ControllerAdvice
- ํด๋์ค ์์ ControllerAdvice๋ฅผ ๋ถ์ด๊ณ ์ด๋ค ์์ธ๋ฅผ ์ก์๋ผ ๊ฒ์ธ์ง๋ ๊ฐ ๋ฉ์๋ ์๋จ์ @ExceptionHandler(์์ธํด๋์ค๋ช .class)๋ฅผ ๋ถ์ฌ์ ๊ธฐ์ ํ๋ค.
โ๏ธ@RestControllerAdvice
- ๋ฌธ๋ฒ์ ์คํ์ผ๋ก @ControllerAdvice + @ResponseBody๋ค.
โ๏ธ@ResponseStatus
- ์ฌ์ฉ์์๊ฒ ์ํ๋ response code์ reason์ ๋ฆฌํดํด์ฃผ๋ ์ ๋ ธํ ์ด์
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "my page URL changed..") => ์์ธ์ฒ๋ฆฌ ํจ์ ์์ ์ฌ์ฉํ๋ค.
โ๏ธ@EnableEurekaServer
- Eureka ์๋ฒ๋ก ๋ง๋ค์ด์ค๋ค.
โ๏ธ@EnableDiscoveryClient
- Eureka ์๋ฒ์์ ๊ด๋ฆฌ๋ ์ ์๋ ํด๋ผ์ด์ธํธ ์์ ์๋ ค์ฃผ๊ธฐ์ํ ์ ๋ ธํ ์ด์
โ๏ธ@Transactional
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ์ค์ ํ๊ณ ์ถ์ ๋ฉ์๋์ ์ ๋ ธํ ์ด์ ์ ์ ์ฉํ๋ฉด ๋ฉ์๋ ๋ด๋ถ์์ ์ผ์ด๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก์ง์ด ์ ๋ถ ์ฑ๊ณตํ๊ฒ๋๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ค์ ๋กค๋ฐฑํ ์ ์๊ฒ ํด์ฃผ๋ ์ ๋ ธํ ์ด์
@Transaction(readOnly=true, rollbackFor=Exception.class) : readOnly๋ ์ฝ๊ธฐ์ ์ฉ์์ ์๋ฆฌ๊ณ rollbackFor๋ ํด๋น Exception์ด ์๊ธฐ๋ฉด ๋กค๋ฐฑํ๋ผ๋ ๋ป
@Transaction(noRollbackFor=Exception.class)๋ ํด๋น Exception์ด ๋ํ๋๋ ๋กค๋ฐฑํ์ง ๋ง๋ผ๋ ๋ป
@Transaction(timeout = 10)์ 10์ด์์ ํด๋น ๋ก์ง์ ์ํํ์ง ๋ชปํ๋ฉด ๋กค๋ฐฑํ๋ผ๋ ๋ป.
โ๏ธ@Cacheable
- ๋ฉ์๋ ์์ ์ง์ ํ๋ฉด ํด๋น ๋ฉ์๋๋ฅผ ์ต์ด์ ํธ์ถํ๋ฉด ์บ์์ ์ ์ฌํ๊ณ ๋ค์๋ถํฐ๋ ๋์ผํ ๋ฉ์๋ ํธ์ถ์ด ์์ ๋ ์บ์์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ ๋ฆฌํดํ๋ฏ๋ก ๋ฉ์๋ํธ์ถ ํ์๋ฅผ ์ค์ฌ์ฃผ๋ ์ ๋ ธํ ์ด์
์ฃผ์ํ ์ ์ ์ ๋ ฅ์ด ๊ฐ์ผ๋ฉด ํญ์ ์ถ๋ ฅ์ด ๊ฐ์ ๋ฉ์๋(=์์ ํจ์)์ ์ ์ฉํด์ผํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ ํญ์ ๊ฐ์ ๊ฐ๋ง ๋ฑ์ด์ฃผ๋ ๋ฉ์๋์ ์ ์ฉํ๋ ค๋ฉด ์กฐ๊ธ ์์ฌ์ธ ์ ์๋ค. ๋ฐ๋ผ์ ๋ฉ์๋ ํธ์ถ์ ์ฌ์ฉ๋๋ ์์์ด ๋ง๊ณ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์์ ๋ ์ฌ์ฉํ๊ณ ๋์ค์ ์์ ๋๋ฉด ์บ์๋ฅผ ์์ ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์๋ค.
@Cacheable(value="cacheKey"), @Cacheable(key="cacheKey")
โ๏ธ@CachePut
- ์บ์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์ ๋ฉ์๋๋ฅผ ํญ์ ์คํํ๊ฒ ๊ฐ์ ํ๋ ์ ๋ ธํ ์ด์
ํด๋น ์ ๋ ธํ ์ด์ ์ด ์์ผ๋ฉด ๋ฉ์๋ํธ์ถ์ ํญ์ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก @Cacheable๊ณผ ์์ถฉ๋์ด ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์๋๋ค.
โ๏ธ@CacheEvict
- ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ ํธ๋ฆฌ๊ฑฐ๋ก ๋์ํ๋ ๋ฉ์๋
์บ์๋ ๋ฐ์ดํฐ๋ ์ธ์ ๊ฐ๋ ์ง์์ ธ์ผํ๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ด ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ๋๋ฐ๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ(์บ์๋ ๋ฐ์ดํฐ)๋ฅผ ๋ถ๋ฌ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฌผ๋ก ์บ์ ์ค์ ์์ ์บ์ ๋ง๋ฃ์๊ฐ์ ์ค ์๋ ์๋ค.
@CacheEvict(value="cacheKey"), @CacheEvict(value="cacheKey", allEntries=true)
allEntries๋ ์ ์ฒด ์บ์๋ฅผ ์ง์ธ์ง ์ฌ๋ถ๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค.
โ๏ธ@CacheConfig
- ํด๋์ค ๋ ๋ฒจ์์ ๊ณตํต์ ์บ์์ค์ ์ ๊ณต์ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
โ๏ธ@Scheduled
- Linux์ crontab์ฒ๋ผ ๋ญ๊ฐ ์ ํด์ง ์๊ฐ์ ์คํํด์ผํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
@Scheduled(cron = "0 0 07 * * ?") "์ด ๋ถ ์ ์ผ ์ ์์ผ ๋ (์ ํ)์ ํด๋น ๋ฉ์๋ ํธ์ถ
์ด์์ผ๋ก ์์ ํด์ผํ ์ ๋ ธํ ์ด์ ์ด๋ ์ถ๊ฐํ๊ณ ์ถ์ ์ ๋ ธํ ์ด์ ์ด ์๊ธธ๋๋ง๋ค ์กฐ๊ธ์ฉ ๋ชจ์์ ์ ๋ฐ์ดํธํ ์์
'Project๐ธ > ๊ฐ๋ฐ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Axios๋? / Axios ์ฌ์ฉ ๋ฐ ์๋ฒ ํต์ ํด๋ณด๊ธฐ! (0) | 2023.05.20 |
---|---|
[๋ฉด์ ์ง๋ฌธโ๏ธ] Controller, Service, Repository ๊ฐ ๋ฌด์์ผ๊น? (0) | 2023.05.18 |
[Spring๐ฑ] @Controller์ @RestController ์ฐจ์ด (0) | 2023.05.18 |
[๋คํธ์ํฌ] Get์ ๋ฌด์์ด๊ณ Post๋ ๋ฌด์์ธ๊ฐ? (0) | 2023.05.17 |
[JSON] JSON์ ๋ฌด์์ธ๊ฐ? ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ฉํ๋๊ฐ?? (0) | 2023.05.17 |