교육 (Today I Learned)/Hanaro

[Hanaro] 51일차 / Spring Boot (Devtools, LocaleResolver-다국어 처리, 스프링과 스프링부트의 차이)

Bay Im 2024. 3. 30. 18:37

Spring Boot Devtools

  • Devtools
    • html 파일 저장 시 서버 재시작없이 view 파일 변경 가능
  • 적용
    1. build.gradle - dependencies 안에 아래 코드 추가
      • developmentOnly 'org.springframework.boot:spring-boot-devtools'
    2. preferences - 컴파일러 - 프로젝트 자동 빌드 체크
    3. 고급설정 - 컴파일러 - auto-make 허용 체크
    4. 우측 상단에 구성 편집 - 옵션 수정
      • update 작업 시 - 클래스 및 리소스 업데이트
      • 프레임 비활성화 시 - 클래스 및 리소스 업데이트
    5. application.properties 안에 아래 코드 추가
      • spring.devtools.restart.enabled=true
      • spring.thymeleaf.cache=false
    6. 크롬 확장자 LiveReload++ 프로그램 설치 후 북마크바에 고정 후 활성화

 

다국어 처리 (LocaleResolver)

  • LocaleResolver
    • AcceptHeaderLocaleResolver
      • 웹 브라우저가 전송한 헤더의 Accept-Language 값을 기반으로 Locale을 선택한다.
      • setLocale() 메서드를 지원하지 않는다.
    • SessionLocaleResolver - 많이 사용
      • 세션으로부터 Locale 정보를 구한다.
      • setLocale() 메서드는 세션에 Locale 정보를 저장한다.
    • CookieLocaleResolver
      • 쿠키를 이용해서 Locale 정보를 구한다.
      • setLocale() 메서드는 쿠키에 Locale 정보를 저장한다.
    • FixedLocaleResolver
      • 웹 요청에 상관없이 특정한 Locale로 설정한다.
      • setLocale() 메서드를 지원하지 않는다.
  • 다국어 처리 방법 (클릭으로 한/영 전환하기)
    1. application.properties에 spring.messages.basename=messages 추가
    2. 언어별로 properties 파일 작성
      • messages.properties 생성
        • 예시
        • hello=안녕
          # name으로 들어온 값이 {0}으로 들어간다.
          hello.name=안녕, {0}
      • messages_en.properties 생성
        • 예시
        • hello=Hello
          # name으로 들어온 값이 {0}으로 들어간다.
          hello.name=Hello, {0}
    3. html에 변수 작성
      • 타임리프로 th:text=”#{변수명}” 형식으로 값을준다.
      • 여기서 다른 타임리프 문법과는 달리 변수명 앞에는 #이 붙는 다는 점
      • 예시
      • <body>
            <h2 th:text="#{hello}"></h2>
            <h2 th:text="#{hello.name('Spring')}"></h2>
        </body>
    4. html에 경로 작성 및 컨트롤러 메소드 추가
      • 예시
        • html에 <a href="/changeLocale">전환</a> 추가
        • 컨트롤러에 전환 메소드 추가
        • @GetMapping("/changeLocale")
              public String changeLocale(HttpSession session){
                  Locale locale = (Locale)session.getAttribute(
                          SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
                  if ( Locale.KOREA.equals(locale) ){
                      session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
                              Locale.ENGLISH);
                  } else{
                      session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
                              Locale.KOREA);
                  }
                  return "redirect:/";
              }
    5. Config 클래스 생성
    6. @Configuration
      public class Config {
          @Bean
          public LocaleResolver localeResolver() {
              SessionLocaleResolver localeResolver = new SessionLocaleResolver();
              localeResolver.setDefaultLocale(Locale.KOREA);
              
              //AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
              
              return localeResolver;
          }
      }
    • 혹시 한글이 잘려나온다면 인텔리제이 설정에서 encoding을 UTF-8로 변경하자

 

스프링과 스프링부트

  • Spring
    • Spring Framework는 자바 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 Spring이라고도 불린다.
    • 이전의 EJB(Enterprise Java Bean) 방식의 단점을 해결한 프레임워크
  • Spring의 대표적인 특징
    • 제어 역전
    • 의존성 주입
    • AOP 지원 (관점 지향 프로그래밍)
    • 웹 개발 지원
  • Spring의 문제점
    • 설정의 복잡성
    • 높은 초기 학습 난이도
    • 의존성 관리 문제
    • 별도 WAS 서버 구성의 번거로움
  • Spring Boot
    • Spring의 문제점을 해결해주기 위해 개발된 스프링의 프레임워크
    • Spring Boot 사용시 내장형 서버를 사용하여 별도의 웹 애플리케이션 서버를 설치할 필요 없이 웹 애플리케이션을 실행할 수 있다.
    • 다양한 스프링 프레임워크 기능과 라이브러리 사용 가능
  • Spring Boot의 대표적인 특징
    • 간결한 설정
    • 내장 서버
    • 의존성 관리 간소화
    • 운영 편의성
728x90