- Tomcat
- conf - Web.xml 설정
- path 가 '/' 이면 모든 요청을 처리한다는 뜻이다.
- / -> DefaultServlet이 처리 (모든 요청이 이미 예약되어있다. 정적인 파일을 처리하는 로직이 있다.)
- x.jsp, x.jspx -> JSPSerlvet이 처리
- 프로젝트
- Web.xml 설정
- path를 '/' 으로 설정하면 설정이 오버라이딩 되어 DispatcherServlet가 모든요청을 처리한다.
- @Controller, @RestController(@RequestMapping)을 처리
- 요청이 오면 DispatcherServlet이 요청받은 path를 찾고나서 없으면 Tomcat의 DefaultServlet한테 넘기고 없으면 404에러가 나온다.
- 동적인 파일은 DispatcherServlet 에서 처리하고 정적인 파일은 DefaultServlet에서 처리한다.
- DispatcherServlet에서 요청온 path를 찾고 없으면 DefaultServlet을 사용한다는 설정
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.test.controller" })
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
// default servlet handler를 사용하게 합니다.
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
- Spring 과 HTTP Protocol
- 브라우저에서는 get, post만 사용할 수 있다.(@GetMapping, @PostMapping)
하지만 hidden 태그와 Spring HiddenHttpMethodFilter를 통해 @PutMapping, @DeleteMapping 을 사용할수 있다.
- GET(@GetMapping)
- GET 방식은 HTTP 헤더에 값을 담아서 보낸다. 그래서 용량이 제한이 있다.
- POST(@PostMapping)
- POST방식은 HTTP body에 담아서 보낸다.
- 등록할때 사용한다.
- PUT(@PutMapping)
- 수정할때 사용한다. HTTP body에 담아서 보낸다.
- post방식으로 input hidden을 만들고 put 값을 넣은후 요청한다.
<form method="post" action="update">
name : <input type="text" name="name">
<input type="hidden" name="_method" value="put">
<input type="submit">
</form>
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
DELTE(@DeleteMapping)
- 삭제할때 사용한다. HTTP body에 담아서 보낸다.
- post방식으로 input hidden을 만들고 delete 값을 넣은후 요청한다.
<form method="post" action="delete">
name : <input type="text" name="name">
<input type="hidden" name="_method" value="put">
<input type="submit">
</form>
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- GitHub 코드리뷰 방법
- Feature로 로컬에서 Commit를 실행하다가 Push한다. (Merge를 하지 않는다!!!)
- Pull Request를 눌러서 기본 브랜치를 develop로 선언하고 pull request를 만든다.
- 댓글 및 의견 수렴후 close pull request를 한다.
- 코드 Merge 가능한 상태면 Merge pull request 버튼을 누르고 Confirm Merge 를 한다.
- 깃허브에서 작성한 Feature 브랜치를 제거한다.
- 로컬에서도 Feature 브랜치를 제거한다.
- 오픈소스를 Fork를 하면 내 저장소로 복사가 된다.
- Clone을 받고 수정후 push하고
- 오픈소스 저장소에 Pull request를 작성하며 내용을 적는다.
- Spring Jdbc
- 아래와 같은 반복적이고 바뀌는 코드로 인하여 Spring Jdbc가 등장하였다.
- java datasoure방식으로 0건 or 1건 Select 할때
- 접속
- SQL문 문자열 준비( select ......... where id = ? )
- DB에 준비(Prepared Statement)
- ?에 값을 설정(바인딩)
- SQL실행(ResultSet)
- ResultSet의 next() : 1건의 Recod(다수의 컬럼으로 구성)
- 1개의 Record에서 컬럼별로 값을 읽는다. getInt(1), getString(2)
- Junit
- system out println는 테스트코드에서 쓰지 않는다.
- @Junit을 선언하고 @Transactional을 선언하면 Rollback이 된다.
- 테스트 코드는 Given - When - Then 형식으로 작성한다.
- Trancation
- @Trancational
- 트랜잭션 레벨을 알아두자.
- 읽기만 할때는 @Transactional(readOnly = true) 을 사용
- 어노테이션이 적용된 메소드 안에서는 트랜잭션 처리된다.
- transactionManger
- DataSource에 의존적이다.
- transactionManger가 AOP를 통해 트랜잭션을 제어한다.
- AutoCommit이 fasle상태다.
- transactionManger의 Bean이 등록되어 있고 @Trancational어노테이션이 되어있으면 메소드가 실행될때 트랜잭션이 실행되고 완료후 Commit을 해준다.
- runtimeException이 발생되면 rollBack 된다.
- Test
- Service 단계에서 Mockito을 통해 테스트하자.
- Service 단계에서 Mockito를 사용하지 않고 테스트 하는 경우는 dao가 완벽한 경우이다.(db도연결해야한다.)
0 개의 댓글:
댓글 쓰기