02.ETC
ETC
λ©μμ§, κ΅μ ν
λ©μμ§ κΈ°λ₯: λ€μν λ©μμ§λ₯Ό ν κ³³μμ κ΄λ¦¬νλ κΈ°λ₯
messages.properteis
item=μν
item.id=μν ID
item.itemName=μνλͺ
item.price=κ°κ²©
item.quantity=μλκ΅μ ν κΈ°λ₯: λ©μμ§ νμΌμ κ° λλΌλ³λ‘ λ³λλ‘ κ΄λ¦¬νλ κ΅μ ν κΈ°λ₯
messages_en.properties μ κ°μ΄ νμΌλͺ λ§μ§λ§μ μΈμ΄ μ 보 μΆκ°
μ°Ύμ μ μλ κ΅μ ν νμΌμ΄ μμΌλ©΄ messages.properties λ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©
messages_en.propertis
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantitymessages_ko.propertis
Spring Message Source
SpringBoot λ MessageSource λ₯Ό μλμΌλ‘ μ€νλ§ λΉμΌλ‘ λ±λ‘
Spring μ¬μ© μ ꡬνμ²΄μΈ ResourceBundleMessageSource λ₯Ό λΉμΌλ‘ λ±λ‘
SpringBoot Message Source μ€μ
application.properties
μ€νλ§ λΆνΈ λ©μμ§ μμ€ κΈ°λ³Έ κ°:
spring.messages.basename=messagesMessageSource λ₯Ό μ€νλ§ λΉ λ±λ‘νμ§ μκ³ , μ€νλ§ λΆνΈ κ΄λ ¨ μ€μ μ νμ§ μμΌλ©΄ messages λΌλ μ΄λ¦μΌλ‘ κΈ°λ³Έ λ±λ‘
λ°λΌμ messages.properties, messages_en.properties .. νμΌλ§ λ±λ‘νλ©΄ μλμΌλ‘ μΈμ
μΆκ° μ΅μ μ Spring-Boot Docs μ°Έκ³
/resources/messages.propertiesκ²½λ‘μ Message νμΌ μ μ₯
Message Source μ¬μ©
SpringBoot λ MessageSource λ₯Ό μλμΌλ‘ Spring Bean μΌλ‘ λ±λ‘νλ―λ‘ λ°λ‘ μ¬μ© κ°λ₯
MessageSource λ message.properties νμΌ μ 보λ₯Ό κ°μ§κ³ μμ
Message Source κ΅μ ν μ¬μ©
locale μ 보 κΈ°λ°μΌλ‘ κ΅μ ν νμΌ μ ν
Locale μ΄ en_US μΌ κ²½μ° messages_en_US β messages_en β messages(default) μμ νμ
Web Application Message
λ©μμ§ μ μ©
νμ리νμ λ©μμ§ ννμ
#{...}λ₯Ό μ¬μ©νλ©΄ μ€νλ§ λ©μμ§λ₯Ό νΈλ¦¬νκ² μ‘°ν κ°λ₯messages.properties
Thymeleaf
κ΅μ ν μ μ©
μΉ λΈλΌμ°μ μ μΈμ΄ μ€μ κ°μ΄ λ³νλ©΄ μμ²μ Accept-Language μ κ°μ΄ λ³κ²½λκ³ , μ΄ μ 보λ₯Ό Spring μ Locale λ‘ μΈμν΄ μλμΌλ‘ κ΅μ ν μ²λ¦¬
LocaleResolverSpring μ Locale μ ν λ°©μμ λ³κ²½ν μ μλλ‘ LocaleResolver μΈν°νμ΄μ€ μ 곡
Spring Boot λ μΈμ΄ μ ν μ κΈ°λ³Έμ μΌλ‘ Accept-Language ν€λκ°μ νμ©νλ AcceptHeaderLocaleResolver μ¬μ©
Locale μ ν λ°©μμ λ³κ²½νλ €λ©΄ LocaleResolver ꡬν체λ₯Ό λ³κ²½ν΄μ μΏ ν€λ μΈμ κΈ°λ°μ Locale μ ν κΈ°λ₯ μ¬μ©
Spring Type Converter
μ€νλ§ νμ λ³ν μ μ© μ
HTTP Query String μΌλ‘ μ λ¬λλ λ°μ΄ν°λ λͺ¨λ String Type μ΄μ§λ§, μ€νλ§μ νμ μ λ³νν΄ μ 곡
@RequestParam@ModelAttribute@PathVariable@ValueXML Spring Bean μ 보 λ³νView Rendering...
Type Converter
Converter Interface
μ€νλ§μ μ¬μ©μ μ μ νμ λ³νμ΄ νμνλ©΄ 컨λ²ν° μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ λ±λ‘ν΄ λ³΄μ.
ex. 컨λ²ν° μΈν°νμ΄μ€ ꡬν
μ€νλ§μ μ©λμ λ°λΌ λ€μν λ°©μμ νμ 컨λ²ν° μ 곡
Converter: κΈ°λ³Έ νμ 컨λ²ν°ConverterFactory: μ 체 ν΄λμ€ κ³μΈ΅ κ΅¬μ‘°κ° νμν κ²½μ°GenericConverter: μ κ΅ν ꡬν, λμ νλμ μ λ Έν μ΄μ μ 보 μ¬μ© κ°λ₯ConditionalGenericConverter: νΉμ μ‘°κ±΄μ΄ μ°ΈμΈ κ²½μ°μλ§ μ€νκ·Έλ°μ λ¬Έμ, μ«μ, boolean, Enum λ± μΌλ°μ μΈ νμ μ λν λλΆλΆμ 컨λ²ν°λ₯Ό κΈ°λ³ΈμΌλ‘ μ 곡
ConversionService
κ°λ³ 컨λ²ν°λ₯Ό λͺ¨μλκ³ , κ·Έκ²λ€μ λ¬Άμ΄μ νΈλ¦¬νκ² μ¬μ©ν μ μλ κΈ°λ₯
μ€νλ§μ @RequestParam κ°μ κ³³ λ΄λΆμμ ConversionService λ₯Ό μ¬μ©ν΄μ νμ μ λ³ν
ConversionService interface
Converting κ°λ₯ μ¬λΆμ κΈ°λ₯ μ 곡
DefaultConversionService
ConversionService μΈν°νμ΄μ€μ ꡬν체(컨λ²ν°λ₯Ό λ±λ‘νλ κΈ°λ₯λ μ 곡)
μ¬μ© μ΄μ μ
ConversionServiceμ λ±λ‘ μ΄μ μConverterRegistryλ‘ λΆλ¦¬λμ΄ κ΅¬νμΈν°νμ΄μ€ λΆλ¦¬ μμΉ μ μ©(
ISP-Interface Segregation Principal)μΈν°νμ΄μ€ λΆλ¦¬λ₯Ό ν΅ν΄ 컨λ²ν°λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈμ 컨λ²ν°λ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ ν΄λΌμ΄μΈνΈμ κ΄μ¬μ¬λ₯Ό λͺ ννκ² λΆλ¦¬
.
νμ 컨λ²ν°λ€μ 컨λ²μ μλΉμ€ λ΄λΆμ μ¨μ΄μ μ 곡λλ―λ‘, ν΄λΌμ΄μΈνΈλ νμ 컨λ²ν°λ₯Ό λͺ°λΌλ 무κ΄
νμ λ³νμ μνλ ν΄λΌμ΄μΈνΈμ κ²½μ° μ»¨λ²μ μλΉμ€ μΈν°νμ΄μ€μλ§ μμ‘΄
컨λ²μ μλΉμ€λ₯Ό λ±λ‘νλ λΆλΆκ³Ό μ¬μ©νλ λΆλΆμ λΆλ¦¬νκ³ μμ‘΄κ΄κ³ μ£Όμ μ μ¬μ©
Apply Converter in Spring π
μ€νλ§μ λ΄λΆμμ ConversionService μ 곡
WebMvcConfigurer κ° μ 곡νλ
addFormatters()λ₯Ό μ¬μ©ν΄μ 컨λ²ν° λ±λ‘@RequestParam μ κ²½μ° RequestParamMethodArgumentResolver μμ ConversionService λ₯Ό μ¬μ©ν΄μ νμ μ λ³ν
WebConfig.java
Apply Converter in View Template
νμ리νλ λ λλ§ μ 컨λ²ν°λ₯Ό μ μ©ν΄μ λ λλ§ νλ λ°©λ²μ νΈλ¦¬νκ² μ§μ
View Template
Controller.java
view.html
λ³μ ννμ :
${...}컨λ²μ μλΉμ€ μ μ© :
${{...}}
Form
Controller.java
@ModelAttribute λ΄λΆμμ ConversionService λμ
form.html
th:field λ Converter κΉμ§ μλ μ μ©
th:value λ 보μ¬μ£Όλ μ©λ
Formatter
κ°μ²΄λ₯Ό νΉμ ν ν¬λ©§μ λ§μΆμ΄ λ¬Έμλ‘ μΆλ ₯νκ±°λ, κ·Έ λ°λμ μν μ νλ κ²μ νΉνλ κΈ°λ₯
Converter: λ²μ©(κ°μ²΄ β κ°μ²΄)μ μ¬μ©Formatter: λ¬Έμ(κ°μ²΄ β λ¬Έμ, λ¬Έμ β κ°μ²΄, νμ§ν)μ νΉννΉλ³ν Converter..
Formatter Interface
implements Formatter
μ€νλ§μ μ©λμ λ°λΌ λ€μν λ°©μμ ν¬λ§·ν° μ 곡
AnnotationFormatterFactory: νλμ νμ μ΄λ μ λ Έν μ΄μ μ 보λ₯Ό νμ©ν μ μλ ν¬λ§·ν°
FormattingConversionService
ConverstionService μλ 컨λ²ν°λ§ λ±λ‘ κ°λ₯νκ³ , ν¬λ§·ν°λ λ±λ‘ λΆκ°
ν¬λ§·ν° λ±λ‘μ μ§μνλ
FormattingConversionServiceλ₯Ό μ¬μ©νμ¬ ν¬λ§·ν°λ₯Ό μΆκ°ν΄ 보μ.λ΄λΆμμ μ΄λν° ν¨ν΄μ μ¬μ©ν΄μ Formatter κ° Converter μ²λΌ λμνλλ‘ μ§μ
DefaultFormattingConversionServiceλ FormattingConversionService λ₯Ό μμλ°μ κΈ°λ³Έμ μΈ ν΅ν, μ«μ κ΄λ ¨ κΈ°λ³Έ ν¬λ§·ν°λ₯Ό μΆκ° μ 곡ConversionService κ΄λ ¨ κΈ°λ₯μ μμλ°μΌλ―λ‘ Converter, Formatter λͺ¨λ λ±λ‘ κ°λ₯
μ€νλ§ λΆνΈλ DefaultFormattingConversionService λ₯Ό μμ λ°μ
WebConversionServiceλ₯Ό λ΄λΆμμ μ¬μ©
Apply Formatter in Spring π
κΈ°λ₯μ΄ κ²ΉμΉ κ²½μ°(Source-type, Target-type λμΌ) Converter μ°μ
Annotation driven Formatting
μ€νλ§μ μλ°μμ κΈ°λ³ΈμΌλ‘ μ 곡νλ νμ λ€μ λν΄ μλ§μ ν¬λ§·ν°λ₯Ό κΈ°λ³ΈμΌλ‘ μ 곡
κ°μ²΄μ κ° νλλ§λ€ λ€λ₯Έ νμμ ν¬λ§·μ μ§μ νλ μ΄λ €μμ ν΄κ²°νκΈ° μν΄ μ λ Έν μ΄μ κΈ°λ° νμ μ§μ ν¬λ§·ν° μ 곡
@NumberFormat: μ«μ κ΄λ ¨ νμ μ§μ ν¬λ§·ν° μ¬μ©NumberFormatAnnotationFormatterFactory
@DateTimeFormat: λ μ§ κ΄λ ¨ νμ μ§μ ν¬λ§·ν° μ¬μ©Jsr310DateTimeFormatAnnotationFormatterFactory
μ°Έκ³ ,
HttpMessageConverter μλ Convetion Service κ° μ μ©λμ§ μμ
JSON μ κ°μ²΄λ‘ λ³ννλ HttpMessageConverter λ λ΄λΆμμ Jackson κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©
λ°λΌμ, JSON κ²°κ³Όλ‘ λ§λ€μ΄μ§λ μ«μλ λ μ§ ν¬λ§·μ λ³κ²½νκ³ μΆμΌλ©΄ ν΄λΉ λΌμ΄λΈλ¬λ¦¬κ° μ 곡νλ μ€μ μ ν΅ν΄μ ν¬λ§·μ μ§μ
File Upload
μ μ‘ λ°©μ
κΈ°λ³Έμ μΈ HTML Form μ μ‘ λ°©μ
application/x-www-form-urlencodedHTML Form
HTTP Message
Form λ΄μ©κ³Ό μ¬λ¬ νμΌμ ν¨κ» μ μ‘νλ HTML Form μ μ‘ λ°©μ
multipart/form-dataHTML Form
form tag μ enctype="multipart/form-data" μ§μ
HTTP Message
κ°κ°μ μ μ‘ νλͺ©μ΄ ꡬλΆ
Content-Disposition λΌλ νλͺ©λ³ ν€λμ λΆκ° μ λ³΄κ° λΆλ¦¬
Servlet File Upload
Multipart κ΄λ ¨ μ€μ
multipart.enabled μ΅μ μ΄ μΌμ Έ μλ€λ©΄, Spring
DispatcherServletμμMultipartResolverμ€νmultipart μμ²μΈ κ²½μ° Servlet Container κ° μ λ¬νλ
HttpServletRequestλ₯ΌMultipartHttpServletRequestλ‘ λ³νν΄μ λ°νSpring μ΄ μ 곡νλ κΈ°λ³Έ
MultipartResolverλMultipartHttpServletRequestInterface λ₯Ό ꡬννStandardMultipartHttpServletRequestλ₯Ό λ°ν
ServletUploadController.java
Spring File Upload π
μ€νλ§μ
MultipartFileInterface λ‘ Multipart File μ λ§€μ° νΈλ¦¬νκ² μ§μ
File Upload And Download
Last updated