Transaction이란? 더 이상 나눌 수 없는 작업의 단위를 일컫는다.(Tx) insert, update, select 처럼 명령 하나하나가 트랜잭션이다. 트랜잭션의 속성 - ACID 1️⃣ 원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄져야 한다. 2️⃣ 일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다. 3️⃣ 고립성(Isolation) - 각 Tx는 독립적으로 수행되어야 한다. 4️⃣ 영속성(Durability) - 성공한 Tx의 결과는 유지되어야 한다. 커밋과 롤백 - 커밋(commit) - 작업 내용을 DB에 영구적으로 저장 - 롤백(rollback) - 최근 변경사항을 취소(마지막 커밋으로 복귀) 자동 커밋과 수동 커밋 - 자동 커밋 - ..
✏️ Junit이란?TestFramework로 Test의 자동화를 도와주는 프레임워크이다.TDD(Test-Driven-Development)라고도 불리며 '테스트 주도 개발'이라는 의미를 가진다.Junit이라는 테스트 프레임워크를 이용하여 테스트를 자동화하면 테스트할 코드가 많아도 일괄적으로 실행하여어떤 테스트가 실패했고 성공했는지 한 번에 여부를 확인할 수 있다는 이점을 지닌다.예제를 통해서 학습해보자. 아래의 코드는 root-context.xml이다. 아래의 코드는 DBConnectionTest.java이다.public class DBConnectionTest2Test { @Test public void springJdbcConnectionTest() throws Ex..
@RequestMapping을 사용할 때 @RequestMapping("/add")와 같이 사용하였다. 이 문장의 원래 형태는 @RequestMapping(value="/add", method={RequestMethod.GET, RequestMethod.POST})이다. 즉 RequestMapping에 method 부분을 생략하면 배열의 형태로 GET과 POST방식 둘 다 허용한다는 의미가 된다. 만약 GET방식만 허용 하고 싶은 경우에는 @RequestMapping(value="/add", method=RequestMethod.GET) 와 같이 명시적으로 적어야한다. 하지만 위의 코드가 번잡하기 때문에 Spring 4.3 이후 부터 @GetMapping / @PostMapping을 지원하게 되었다. 즉..
WebDataBinder란? 클라이언트가 만약 http://localhost/ch2/getYoilMVC5?year=2021&month=10&day=1 이라고 요청을 보내오면 이 값이 컨트롤러 메서드에게 전달이 된다. 그 값을 받는 매개변수의 데이터 타입이 MyDate이기 때문에 MyDate타입의 객체가 만들어지고 쿼리 스트링으로 전달받은 요청할 때 받은 값들이 객체에 채워져야 한다. 하지만 쿼리스트링은 무조건 문자열로만 취급해서 문자열이지만 MyDate에 선언된 필드들은 모두 int형이다. 그렇기 때문에 쿼리스트링으로 받은 문자열을 MyDate의 필드 타입인 int형으로 형변환이 필요한데 이 중간에서 그 작업을 해주는 것이 WebDataBinder이다. WebDatBinder의 역할 1️⃣ 타입변환 위의..
@ModelAttribute란? 적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션을 의미한다. 즉 파라미터로 넘겨받은 값을 Model에 자동 저장해주는 기능을 한다. 밑의 코드를 통해 살펴보자. @RequestMapping("/getYoilMVC5") // http://localhost/ch2/getYoilMVC6 //public String main(@ModelAttribute("myDate") MyDate date, Model model) { // 아래와 동일 public String main(MyDate date, BindingResult result) { System.out.println("result="+result); // 1. 유효성 검사 if(!isValid(date)) retu..
1. RequestParam RequestParam이란 요청할 때 넘어온 파라미터를 매개변수에 연결할 때 사용하는 애너테이션이다. 위의 그림에서 main2(String year) 부분이 원래는 main2(@RequestParam(name="year", required=false) String year)이지만 앞의 파란 소괄호 부분은 생략 가능하다. name은 파라미터 이름이고, required는 필수 여부를 의미한다. 즉 두 문장은 같은 의미인데 보통은 생략해서 main2(String year)로 사용한다. 사용자가 http://localhost/ch2/reuestParam2 와 같이 year가 없이 넘어오면 year 값은 null이 된다. 사용자가 http://localhost/ch2/reuestPar..