[Spring][국비교육] Day 91

Ga02·2023년 5월 9일

국비교육

목록 보기
78/82

🔍 DI 어노테이션

➰ @Autowired

패키지 : org.springframework.beans.factory.annotation.Autowired

  • 스프링에서 제공하는 DI 어노테이션
  • 적용가능한 위치 : 멤버 필드, 생성자, 파라미터가 존재하는 메소드
  • 바인딩 전략 : byType 먼저, byName 다음

➰ @Resource

패키지 : javax.annotation.Resource

  • 자바 표준으로 제공하는 DI 어노테이션
  • 추가 라이브러리(Javax Annotation API)가 필요 👉🏻 Tmocat 9.0.71에 포함되어 있음
  • 적용 가능한 위치 : 멤버필드, 파라미터가 1개인 setter
  • 바인딩 전략 : byName 먼저, byType 다음

➰ @Inject

패키지 : javax.inject.Inject

  • 자바 표준으로 제공하는 DI 어노테이션
  • 추가 라이브러리(Javaax Inject API)가 필요 👉🏻 Spring MVC Legacy Project에는 pom.xml에 의존성이 추가되어있음
  • @Autowired와 동일한 기능을 가짐

➰ @Qualifier("beanName")

DI 어노테이션의 보조기능

  • 바인딩될 beanName을 직접 지정할 수 있게 도와줌

🔍 스프링 Controller 만들기

  1. 일반 클래스를 생성

  2. 클래스 정의 앞에 @Controller 어노테이션 붙이기

  3. servlet-context.xml 파일에서 <context:component-scan> 태그의 base-package 속성값으로 패키지를 추가
    <context:component-scan base-package="a.b.c, web.controller" /> 👉🏻 web까지만 써도 인식은 하지만 디테일하게 써주는 것이 좋음

    web.controller / web.service / web.dao를 만들면 web까지만 쓰는 것이 좋지만 우리는 dao안쓰고 mybatis를 사용할 것임
    ➡ mybatis랑 우리가 만든거랑 충돌되기때문에 나중에 수정이 편하도록 디테일하게 작성해줘야함

  4. 일반 메소드를 작성

  5. 메소드 정의 앞에 @RequestMapping 어노테이션 붙이기

  • 어노테이션의 매개변수로 value, method를 지정
    • value는 url-pattern을 이용하여 URL을 매핑
    • method는 요청 메소드를 매핑

🔍 Log4J 라이브러리

Logging For Java, 자바 프로그램을 위한 로그 라이브러리

  • 로그를 출력할 수 있는 객체를 패키지 단위로 관리할 수 있음
  • Log4J 설정으로 적용한 패키지의 객체들만 로그를 남길 수 있도록 관리됨
  • 로그 출력장치(디바이스)를 지정할 수 있음 👉🏻 기본은 System.out (Console)로 되어 있음
  • 로그 메시지의 레벨(등급)을 지정하여 로그 출력을 제어할 수 있음

➰ Log4J에서 정의된 레벨

  • FATAL : 심각한 에러일 때 사용
    • 시스템으로도 문제가 번질 정도로 문제가 있는 상황
  • ERROR : 에러 레벨
    • 프로그램이 중단될 정도의 문제 상황, Exception 발생 상황
  • WARN : 경고 레벨
    • 정상 처리 가능한지 확인이 필요한 정도의 상황
  • INFO : 정보 레벨
    • 일반적인 메시지
    • 상태 정보, 상태 변경 알림, 일반적인 동작 정보를 표현하는 상황
  • DEBUG : 디버깅 레벨
    • 프로그램을 디버깅하는 상황
    • 오류 상황 확인, 정상적인 동작 확인
  • TRACE : 추적(트레이스) 레벨
    • 프로그램의 대부분의 동작을 모두 확인할 때 사용

➰ 로그 레벨 등급의 중요도 차이

FATAL > ERROR > WARN > INFO > DEBUG > TRACE
✔ log4j.xml 파일의 <logger> 태그를 이용하여 등급별 로그 출력을 제어함

로그 레벨을 DEBUG로 설정하면 FATAL ~ DEBUG까지 출력
로그레벨을 WRAN으로 설정하면 FATAL ~ WARN까지 출력


🔍 컨트롤러 메소드의 리턴 타입

  • 응답할 View(viewName)와 View에 전달할 MODEL값과 연관이 있음
  • viewName으로 지정한 문자열을 이용하여 View를 찾아서 응답하도록 만듬
    ✔ View는 주로 JSP 파일
  • viewName은 ViewResolver객체에 전달되는 데이터
  • ViewResolver객체는 viewName에 해당하는 View를 찾아 응답하도록 만듬
  • ViewResolver의 유형(클래스 타입)에 따라 viewName을 이용하는 방식이 다름
    ✔ InternalResourceViewResolver : JSP파일을 찾아서 View로 사용 👉🏻 UrlBasedViewResolver 객체의 자식클래스
    ✔ UrlBasedViewResolver : 요청 URL에서 viewName을 추출하여 활용
    ✔ BeanNameViewResolver : 스프링 빈 객체를 찾아서 View로 사용
    ✔ Spring Legacy Project에는 기본적으로 InternalResourceViewResolver를 적용하고 있음
    • sevlet-context.xml에 설정 항목이 존재
    • prefix + viewName + suffix에 해당하는 경로의 JSP 파일을 응답 View로 활용
      👉🏻 /WEB-INF/views/{viewName}.jsp

➰ 컨트롤러 메소드에서 사용하는 리턴 타입

  • void
  • String
  • ModelAndView
    1. void 리턴타입
    @RequestMapping에 적용된 url-pattern을 이용하여 viewName으로 적용
  • URL의 첫 '/'를 제거
  • 폴더 구조를 유지
  • URL의 마지막으로 확장자형태를 가지고 있으면 확장자를 제거
@RequestMapping("/member/login.do")
public void login() {}
➡ viewName : "member/login"View : /WEB-INF/views/member/login.jsp

2. String 리턴타입
return 코드로 반환된 문자열을 viewName으로 적용
null값을 반환할 경우 void타입 리턴과 동일하게 동작

@RequestMapping("/member/login.do")
public String login() {
	return "strMember/strLogin";
}
➡ viewName : "strMember/strLogin"View : /WEB-INF/views/strMember/strLogin.jsp

3. ModelAndView 리턴타입
Model값 지정과 viewName설정을 하나의 객체로 처리
컨트롤러 메소드의 매개변수로 선언하여 사용할 수 있음
메소드 내에서 new ModelAndView()로 생성하여 사용할 수 있음

@RequestMapping("/member/login.do")
public ModelAndView login() {

	ModelAndView mav = new ModelAndView();

	mav.addObject("name", value);	//모델값 지정
    mav.setViewName("viewName");	//뷰네임 지정
    
    return mav;
}


@RequestMapping("/member/login.do")
public ModelAndView login(ModelAndView mav) {
	mav.addObject("name", value);	//모델값 지정
    mav.setViewName("viewName");	//뷰네임 지정
    
    return mav;
}

profile
IT꿈나무 댓츠미

0개의 댓글