λͺ©μ°¨
1. xml κΈ°λ° μ€μ
`applicationContext.xml` κ°μ μ€μ νμΌμ Bean μ μ€μ νλ λ°©λ²
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Bean μ μ -->
<bean id="car" class="com.example.Car">
<property name="engine" ref="engine" />
</bean>
<bean id="engine" class="com.example.EngineImpl" />
</beans>
`<beans>` : xml μ€μ μ μ΅μμ μμ, Bean μ μ
`<bean>` : μ€μ Bean μ μ μνλ μμ id λ Bean μ΄λ¦ / class λ Bean ꡬν ν΄λμ€
`<property>` : κ°μ²΄λ₯Ό μ£Όμ νλ λΆλΆ , ref μμ±μ λ€λ₯Έ Bean μ΄λ¦μ μ°Έμ‘°νμ¬ μ£Όμ
2. μ΄λ Έν μ΄μ λ°©μ
Spring μμλ λ€μν μ€ν λ μ€νμ μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ Bean μ μ μν μ μλ€. !
μ½λλ΄μμ μ€μ μ²λ¦¬λ₯Ό νκΈ° λλ¬Έμ, μ€μ μ΄ κ°κ²°νκ³ νΈλ¦¬ν΄μ§λ€. βΊοΈ
* μ€ν λ μ€νμ μ΄λ Έν μ΄μ : Spring Frameworkμμ λΉμ μ μν λ μ¬μ©λλ νΉμν μ’ λ₯μ μ΄λ Έν μ΄μ
- @Component:
- κΈ°λ³Έμ μΈ Bean λ±λ‘ λ°©μ , ν΄λμ€μ λΆμ¬μ Spring 컨ν μ΄λμ μν΄ μλμΌλ‘ λΉ(Bean)μΌλ‘ λ±λ‘λ©λλ€. @Service, @Repository, @Controllerλ @Componentμ νΉμνλ ννμ λλ€.
- @Service:
- λΉμ¦λμ€ λ‘μ§μ μννλ μλΉμ€ ν΄λμ€λ₯Ό λνλ λλ€. @Componentμ λμΌνκ² λΉμΌλ‘ λ±λ‘λ©λλ€.
- @Repository:
- λ°μ΄ν° μ‘μΈμ€ λ μ΄μ΄μ λΉμ λνλ λλ€. λ°μ΄ν°λ² μ΄μ€ μ κ·Όκ³Ό κ΄λ ¨λ ν΄λμ€λ₯Ό μ μνλ©°, @Componentμ λμΌνκ² λΉμΌλ‘ λ±λ‘λ©λλ€.
- @Controller:
- μΉ μμ²μ μ²λ¦¬νλ 컨νΈλ‘€λ¬ ν΄λμ€λ₯Ό λνλ λλ€. @Componentμ λμΌνκ² λΉμΌλ‘ λ±λ‘λλ©°, MVC ν¨ν΄μ 컨νΈλ‘€λ¬λ‘ μ¬μ©λ©λλ€.
- @Configuration:
- ν΄λμ€κ° νλ μ΄μμ @Bean λ©μλλ₯Ό μ 곡νλ μ€μ ν΄λμ€λ₯Ό λνλ λλ€. μ ν리μΌμ΄μ 컨ν μ€νΈμ λΉ μ€μ μ ꡬμ±ν©λλ€.
- @Bean:
- λ©μλμ λΆμ¬μ ν΄λΉ λ©μλκ° λΉμΌλ‘ λ±λ‘λλλ‘ ν©λλ€. @Configuration ν΄λμ€ λ΄μμ μ¬μ©λ©λλ€.
- @Autowired:
μμ‘΄μ± μ£Όμ μ μλμΌλ‘ μ²λ¦¬ν©λλ€. νλ, μμ±μ, λ©μλμ μ¬μ©νμ¬ μμ‘΄μ±μ μ£Όμ ν©λλ€.
* Autowried * λΉκ°μ²΄λ₯Ό μλμΌλ‘ μ£Όμ νκ² λλλ°, λ¨Όμ νμ μΌλ‘ μ°Ύμμ μ£Όμ , μ΄λ¦μΌλ‘ μ°Ύμμ μ£Όμ * *
μμ±μ, λ©μλ, λ©€λ²λ³μμ λͺ¨λ μ¬μ©κ°λ₯ν¨ *
λ©€λ²λ³μμ autowriedμ¬μ©ν λλ κΈ°λ³Έμμ±μκ° λ°λμ νμν¨
* * required = falseμ΅μ μ
* μ€νλ§μ΄ μ£Όμ ν λΉμ΄ μμΌλ©΄ μλ¬λ₯Ό λ°μμν€λλ°, μ΄κ±°λ₯Ό 무μνκ³ μ§λκ° μ£ΌμΈμ λΌλ μμ±μ λλ€ *
- @Qualifier:
- μ¬λ¬ λΉμ΄ μμ λ νΉμ λΉμ μ ννμ¬ μ£Όμ ν μ μλλ‘ λμμ€λλ€. @Autowiredμ ν¨κ» μ¬μ©λ©λλ€.
- * Qualifier - λΉ κ°μ μ°κ²°
- 컨ν μ΄λμ λμΌ κ°μ²΄κ° μ¬λ¬κ° μμ λ, μ΄λ¦μΌλ‘ κ°μ μ£Όμ μ λ£μ΄μ£Όλ μ΄λ Έν μ΄μ
- @Value:
- μΈλΆ νλ‘νΌν° νμΌ λλ νκ²½ λ³μμμ κ°μ μ£Όμ λ°μ΅λλ€. λ¬Έμμ΄, μ«μ, 리μ€νΈ λ± λ€μν νμ μ μ§μν©λλ€.
- @PostConstruct:
- λΉ μ΄κΈ°ν ν νΈμΆλ λ©μλλ₯Ό μ μν©λλ€. λΉ μμ± ν μΆκ°μ μΈ μ€μ μμ μ μνν λ μ¬μ©λ©λλ€.
- @PreDestroy:
- λΉ μλ©Έ μ μ νΈμΆλ λ©μλλ₯Ό μ μν©λλ€. λΉμ΄ 컨ν μ΄λμμ μ κ±°λ λ 리μμ€λ₯Ό μ 리νκ±°λ ν΄λ¦°μ μμ μ μνν λ μ¬μ©λ©λλ€.
κ·Έ μΈ μ΄λ Έν μ΄μ
2. Spring Web μ΄λ Έν μ΄μ
- @RequestMapping:
- HTTP μμ²μ μ²λ¦¬νλ λ©μλλ ν΄λμ€μ κ²½λ‘λ₯Ό 맀νν©λλ€. HTTP λ©μλ(GET, POST λ±)μ μμ² κ²½λ‘λ₯Ό μ§μ ν μ μμ΅λλ€.
- @GetMapping, @PostMapping, @PutMapping, @DeleteMapping:
- κ°κ° GET, POST, PUT, DELETE μμ²μ μ²λ¦¬νλ λ©μλλ₯Ό μ§μ ν©λλ€. @RequestMappingμ μΆμ½νμ λλ€.
- @PathVariable:
- URL κ²½λ‘μμ λ³μλ₯Ό μΆμΆνμ¬ λ©μλ 맀κ°λ³μμ μ£Όμ ν©λλ€. RESTful μΉ μλΉμ€μμ μ μ©ν©λλ€.
- @RequestParam:
- HTTP μμ² νλΌλ―Έν°λ₯Ό λ©μλ 맀κ°λ³μμ μ£Όμ ν©λλ€. 쿼리 νλΌλ―Έν° λλ νΌ νλΌλ―Έν°λ₯Ό μ²λ¦¬ν λ μ¬μ©λ©λλ€.
- @RestController :
Spring Frameworkμμ RESTful μΉ μλΉμ€λ₯Ό ꡬνν λ μ¬μ©λλ μ λ Έν μ΄μ μ λλ€. @RestControllerλ @Controllerμ @ResponseBodyμ μ‘°ν©μΌλ‘, REST APIμ μλν¬μΈνΈλ₯Ό ꡬνν λ μ¬μ©λ©λλ€. μ΄ μ λ Έν μ΄μ μ μ¬μ©νλ©΄ λ©μλκ° λ°ννλ κ°μ΄ JSON, XML, λλ λ€λ₯Έ νμμΌλ‘ μ§μ ν΄λΌμ΄μΈνΈμ μλ΅μΌλ‘ μ λ¬λ©λλ€.
- @RequestBody:
- HTTP μμ² λ³Έλ¬Έμ λ©μλ 맀κ°λ³μμ 맀νν©λλ€. JSON, XML λ±μ λ°μ΄ν° ν¬λ§·μ μ²λ¦¬ν λ μ¬μ©λ©λλ€
- @ResponseBody:
- λ©μλ λ°ν κ°μ HTTP μλ΅ λ³Έλ¬ΈμΌλ‘ μ§λ ¬νν©λλ€. μ£Όλ‘ RESTful μΉ μλΉμ€μμ μ¬μ©λ©λλ€.
- @ModelAttribute:
- μμ² νλΌλ―Έν°λ₯Ό κ°μ²΄μ λ°μΈλ©ν©λλ€. νΌ λ°μ΄ν°μ μ²λ¦¬λ₯Ό μ½κ² ν μ μμ΅λλ€.
- @SessionAttributes:
- μΈμ μ μ μ₯ν λͺ¨λΈ μμ±μ μ§μ ν©λλ€. νΉμ λͺ¨λΈ μμ±μ μΈμ μ μ μ§ν λ μ¬μ©λ©λλ€.
- @RequestHeader:
- HTTP μμ² ν€λλ₯Ό λ©μλ 맀κ°λ³μμ μ£Όμ ν©λλ€.
- @CookieValue:
- HTTP μΏ ν€ κ°μ λ©μλ 맀κ°λ³μμ μ£Όμ ν©λλ€.
3. Spring Data Access μ΄λ Έν μ΄μ
- @Transactional:
- νΈλμμ κ΄λ¦¬λ₯Ό μ§μν©λλ€. λ©μλ λλ ν΄λμ€μ λΆμ¬μ νΈλμμ μ μλμΌλ‘ μμνκ³ μ»€λ°/λ‘€λ°±μ κ΄λ¦¬ν©λλ€.
- @Repository:
- λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ μννλ μ»΄ν¬λνΈλ₯Ό λνλ΄λ©°, μμΈλ₯Ό λ°μ΄ν° μ κ·Ό μμΈλ‘ λ³νν©λλ€.
4. Spring Security μ΄λ Έν μ΄μ
- @Secured:
- λ©μλ λλ ν΄λμ€ μμ€μμ κΆνμ μ§μ ν©λλ€. μ§μ λ κΆνμ΄ μλ μ¬μ©μκ° λ©μλμ μ κ·Όν μ μλλ‘ ν©λλ€.
- @PreAuthorize:
- λ©μλ μ€ν μ μ SpEL(Spring Expression Language)μ μ¬μ©νμ¬ κΆνμ 체ν¬ν©λλ€.
- @RolesAllowed:
- νΉμ μν μ λν μ κ·Ό μ μ΄λ₯Ό μ€μ ν©λλ€. @Securedμ λμμΌλ‘ μ¬μ©λ©λλ€.
5. Spring Boot μ΄λ Έν μ΄μ
- @SpringBootApplication:
- Spring Boot μ ν리μΌμ΄μ μ κΈ°λ³Έ μ€μ μ μ 곡ν©λλ€. @Configuration, @EnableAutoConfiguration, @ComponentScanμ μ‘°ν©μ λλ€.
- @EnableAutoConfiguration:
- Spring Bootμ μλ κ΅¬μ± κΈ°λ₯μ νμ±νν©λλ€. μ ν리μΌμ΄μ μ μ€μ μ μλμΌλ‘ ꡬμ±ν©λλ€.
- @ComponentScan:
- νΉμ ν¨ν€μ§ λ΄μ μ»΄ν¬λνΈλ₯Ό μλμΌλ‘ μ€μΊνκ³ λΉμΌλ‘ λ±λ‘ν©λλ€. Spring Bootμμλ μλμΌλ‘ ν¨ν€μ§λ₯Ό μ€μΊν©λλ€.
- @ConfigurationProperties:
- μΈλΆ νλ‘νΌν° νμΌμμ μ€μ κ°μ λ°μΈλ©ν©λλ€. νμ μμ νκ² νλ‘νΌν°λ₯Ό μ£Όμ ν μ μμ΅λλ€.
- @SpringBootTest:
- Spring Boot μ ν리μΌμ΄μ μ ν΅ν© ν μ€νΈλ₯Ό μν μ΄λ Έν μ΄μ μ λλ€. μ€μ μ ν리μΌμ΄μ 컨ν μ€νΈλ₯Ό λ‘λνμ¬ ν μ€νΈλ₯Ό μνν©λλ€.
6. κΈ°ν μ μ©ν μ΄λ Έν μ΄μ
- @Slf4j:
- Lombok λΌμ΄λΈλ¬λ¦¬μ μ΄λ Έν μ΄μ μΌλ‘, λ‘κ·Έλ₯Ό μλμΌλ‘ μμ±ν μ μκ² ν΄μ€λλ€.
- @Data:
- Lombokμ μ΄λ Έν μ΄μ μΌλ‘, getter, setter, toString, equals, hashCode λ©μλλ₯Ό μλμΌλ‘ μμ±ν©λλ€.
- @Builder:
- Lombokμ μ΄λ Έν μ΄μ μΌλ‘, λΉλ ν¨ν΄μ μ μ©ν μ μκ² ν΄μ€λλ€.