2023.02.23 / Spring

기가지니·2023년 2월 23일
1

Application context
XML annotation
Bean
을 배웠어요

이제,
Spring Web MVC project생성하고
서블릿과 jsp비교해서 차이점을 이해하자

프로젝트 설정

1) Servlet-Context.xml 설정파일
(ApplicationContext/Bean Factory/IoC container/Spring Container/Servlet Web application context)

<context:component-scan .../>
➡️annotation방식 설정이 가능하도록 해주는 설정
class에 @Component를 찾아서 Bean으로 등록

@Conponent (Bean으로 등록해주는 annotation)
- @Controller
- @Service
- @Repository
- @Configration

Servlet-Context.xml파일은
Servlet Web Applicationcontext
=>@Controller를 관리
Root Web Applicationcontext(
=> 웹과 관련이 없는 @Service, @Repositoty를 관리

  • Spring의 Web project형태

    1) 계층형
    src/main/java -> my -> spring -> springweb
    -> controller 패키지
    -> service 패키지
    -> vo 패키지
    -> dao 패키지
    방식의 하위로 내려가는 계층형 구조
    ✔️구조가 심플하나, 관리가 힘들다

    2) domain형
    src/main/java -> my -> spring -> springweb
    -> member패키지 -> controller/dao/vo/service
    -> board패키지 ->controller/dao/vo/service
    ✔️ 분업하기 좋으나 프로젝트 구조가 복잡하고 구조를 이해하기 어려울 수 있음.
    하지만 주로 도메인을 많이씀


  • web.xml

  • servlet-context.xml
    :view resolver설정
    핸들러로부터 만약 string이 리턴되면
    request > dispacher serclet > controller method

  • dafault servlet handler 설정

  • model class type의 객체가 handler parameter로 주입

Servlet을 생성할때
/hello
/hi
/haha
각각 서블릿이 생성되어 로직 처리되었으나
하나의 서블릿이 받아 분배시킬 수 있도록 처리
=> Front controller
=> dispatcher servlet 공동처리
=> controller를 만들때 servlet을 안만들어도 됨(http를 상속받지 않아도 됨 확장성이 늘어남)

web client(browser) request

Spring Web MVC

(그림첨부)
세부적으로 다시 한 번 그려보자
request->dispatcherservlet이 받음
이 url에 대해 어떤 컨트롤러 이용해야돼? > handler mapping > handler adpter> 얘를 통해서 사용> controller > 비즈니스 로직처리해야하기 떄문에> service > (dao)repository >
DB > 결과리턴 > model객체한테 결과를 담는ㄴ다. 어댑터가
어댑터는 뷰의 이름을 문자ㅕㄹ 형태로 저장 > resrolver 를 이용 뷰 객체라고 함

객체를 완성해요 dispather서블ㄹ릿를 이용해
(그림첨부 사이ㅏ사이에 뭐가 더 추가된건지 알기)

사실 handler mapping은 인터페이스이다
request mapping handler
@RequestMapping 사용할 수 있다
handler를 클래스가 아닌 method로 잡을 수도 있음
다른 구현체보다 사용하기 좋다

handler Adapter

@RequestMapping annotation으로 사용자가 정의한 method를 특정 request URL에 대한 handler method로 지정

View 객체⭐

-View interface를 구현한 객체
-Model이 가진 정보를 어떻게 표현해야하는지에 대한 로직을 갖고있는 컴포넌트
-View interface 구현한 구현 클래스가 여러개 있어요
왜? 보여줄 데이터가 제각각이라서
-가장 대표적인것은 InternalResourseView => JSP

View view = new InternalResourseView("hello.jsp");
//이렇게 뷰 객체를 만든다. 컨트롤럴가 dispatcher servlet에 리턴해줌
return new ModelAndView(view+model);

직접적으로 뷰를 만들기 싫다면 뷰 이름에 jsp이름을 리턴함

서블릿에서는

response.sendRedirect();

특정 값으로 다시 접속하세요 라는 뜻
sendRedirect를 사용하기위해서는
controller에서 new redirectView(~);

@MashallingView -> xml
@MappingJacksonJsonViewClass -> Json

클라이언트가 컨트롤러가 선택되고 컨트롤러 내가 만들고
컨트롤러를 requestmapping을 통해 지정

코드를 만들어보자
컨르롤러 먼저>

연습
1) log4j
2) @Controller
3) @RequestMapping
4) InternalResourceView class
5) Model 객체

  • log4j

    우리가 지금까지 사용했던, 콘솔에 sysout을 통해 출력하는것은 성능/관리의 측면에서 좋지 않음
    운영 시 log생성은 필수이다
    Spring에서는 log4j를 쉽게 이용할 수 있어요
    (기본적인 설정도 잡혀있음)
    확장버전이 있는데
    -log4j2 (상위버전)
    -logback(스트링부트 버전)
    먼저 log4j부어 시작되고 log4j2로 변경(log4j.xml)
    src/main/resources

log4j의 태그들
<appender></appender>
: 로그의 출력 위치를 지정해주는것(콘솔출력, db출력, file출력)
<layout></layout>
로그의 출력 형태를 지정. 부가적인 정보를 지정해서~
<logger></logger>
로깅메세지를 appender에 전달하는 역할
log의 출력레벨에 따라서 출력여부를 결정
로그의 레벨에 맞춰서 내가 설정한 조건이 맞으면 로그가 출력됨

Appender의 종류

Console Appender(console)
File Appender(file)
RollingFile Appender(용량 제한 file을 이용)
⭐DailyRolling Appender(일자별로 처리) 젤 많이 써요!

layout

%P : 로그레벨을 같이 출력
%M : 로그 메시지를 출력
%D : 로그 발생 시간을 출력
%C : 어떤 파일에서 발생했는지 출력

loglevel 6단계

FATAL (가장 높은 레벨)
: 시스템에 심각한 문제가 있음을 지적하는 레벨
ERROR
: 실행 중 발행한 에러
WARN
: 오류의 원인이 될 수 있는 내용을 출력
INFO⭐
: 운영에 관련된 application. 운영할때 필요한 레벨
DEBUG⭐
: 개발 시 디버깅 용도(sysout대신 사용)
TRACE
: DEBUG의 상세버전

profile
지니야 코딩 해줘

0개의 댓글