스프링

dawn·2021년 5월 15일
0

프로젝트 구동 시 관여하는 XML은 web.xml, root-context.xml, servlet-context.xml파일 이다. 이 파일들 중 web.xml은 Tomcat 구동과 관련된 설정이고, 나머지 두 파일은 스프링과 관련된 설정이다.
프로젝트의 구동은 web.xml에서 시작한다. web.xml의 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있다.

web.xml을 통해 root-context.xml이 처리되면 정의도니 객체들은 스프링영역(context) 안에 생성되고 객체들 간의 의존성이 처리된다. root-context.xml이 처리된 후에는 스프링 MVC에서 사용하는 DispatcherServlet라는 서블릿과 관련된 설정이 동작한다.

DispatcherServlet클래스는 스프링 MVX의 구조에서 가장 핵심적인 역할은 하는 클래스이다. 내부적으로 웹 관련 처리의 준비작업을 진행하는데 이때 사용하는 파일이 servlet-context.xml이다.
모델 2방식에서 사용자의 Request는 특별한 상황이 아닌 이상 먼저 Controller를 호출하게 되는데 그 이유는 나중에 View를 교체하더라도 사용자가 호출하는 URL자체에 변화가 없게 만들어 주기 때문이다.
DispatcherServlet을 통해서 모든 request가 controller를 거치게 처리한다.


어노테이션

@WebMvcTest
MVC를 위한 테스트.
웹에서 테스트하기 힘든 컨트롤러를 테스트하는 데 적합.
웹상에서 요청과 응답에 대해 테스트할 수 있음.
시큐리티, 필터까지 자동으로 테스트하며, 수동으로 추가/삭제 가능.
@SpringBootTest 어노테이션보다 가볍게 테스트할 수 있음.
다음과 같은 내용만 스캔하도록 제한함.
@Controller, @ControllerAdvice, @JsonComponent, Converter, GenericConverter, Filter, HandlerInterceptor,

GET,POST방식을 모두 사용해야 할때, PUT, DELETE를 사용할 때는 @requestMapping를 쓰자


2021-05-15


Application 클래스는 앞으로 만들 프로젝트의 메인클래스가 된다.
@SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정된다.
특히나 @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야만 한다.


jsonPath : Json 응답값을 필드별로 검증할 수 있는 메소드이다.
$를 기준으로 필드명을 명시한다.

application.properties vs application.yml

-application.properties 혹은 application.yml은 외부 설정값을 관리하는 파일

-차이점

.yml을 이용함으로써 계층 구조로 설정값을 표현할 수 있고 prefix의 중복 제거가 가능해진다..properties vs yml


파일 업로드

?? 그러면 application.yml에 설정한 파일 위치랑 controller단에서 설정하는 경로설정이랑 뭐가 다른거야?
application.yml은 용량이 큰 파일을 전송할 때 한번에 보낼 수 없으니까 임시저장했다가 그거를 서버한테 보내주는거고
controller단에서 설정하는 경로는 다운로드 되는 경로인건가?

파일에 관한거 출력하는법
System.getProperty("user.dir") //현재 실행중인 프로그램의 디렉터리 경로
System.getProperty("sun.boot.class.path") //시스템 속성으로 기본적으로 지정된 CLASSPATH
System.getProperty("java.io.tmpdir") //시스템 속성으로 임시 디렉터리 경로
출처: https://dololak.tistory.com/440?category=636500 [코끼리를 냉장고에 넣는 방법]

application.yml 설정

file-size-threadhold 보다 전송하는 파일의 크기가 낮으면 임시파일에 저장되지 않고 바로 전송할 수 있다. 근데 이거 크기를 높게 잡으면 스레드가 작업을 수행하는 동안 부담이 된다.
??location: 에 앞에 file:/붙이는 이유가 절대 경로 이용하려면 url형태로 제공해야 하기 때문에 file:/로 시작해야 된다는데 이해가 잘 안된다...다른 블로그들 보면 안쓰던데..
링크텍스트

2021-05-16 : 파일 업로드 관한 설정 완료, 파일 업로드할 jsp랑 controller만들기
mybatis는 언제 연동,,,?


2021/05/16

IOException 에러



임시파일이 생성되지 않아서 생기는 오류라고 한다. 재부팅을 하라고 해서 해봤는데 안되서
location: ${java.io.tmpdir}로 설정했다. 근데 앞에 "file:/"은 못넣음. 넣으면
java.io.IOException: The temporary upload location [C:\Users\gusdl\AppData\Local\Temp\tomcat.8189259908694005405.8080\work\Tomcat\localhost\ROOT\file:\C:\Users\gusdl\AppData\Local\Temp] is not valid에러 뜸

@ControllerAdvice

AOP를 이용하는 방식이다. 공통적인 예외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리하는 방식

profile
안녕하세요

0개의 댓글