MapleStory Finger Point

🟀 JAVA/Spring

[Spring] XML & Annotation μ„€μ • (+ μ–΄λ…Έν…Œμ΄μ…˜ 정리)

HYEJU01 2024. 8. 25. 20:11
 

λͺ©μ°¨

 

     

    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의 μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, λΉŒλ” νŒ¨ν„΄μ„ μ μš©ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.