Spring.DB (14) 썸네일형 리스트형 Spring DI(Dependency Injection) -(2) Spring DI(Dependency Injection) -(2) 1. Bean → Spring Container가 관리하는 객체 예시) XML 문서가 있고 태그를 사용한다. 이것을 Spring Container가 읽어서 bean에 정의된 클래스 객체를 생성한다. Spring Container - Bean 저장소, Bean을 저장, 관리(생성, 소멸, 연결) BeanFactory Bean을 생성, 연결 등의 기본 기능 정의(interface) ApplicationContext BeanFactory를 확장해서 여러 기능을 추가 정의(interface) cf. ApplicationContext는 Spring Container와 거의 같다고 이해할 수 있다. 1) ApplicationContext의 종류 AC.. Spring DI(Dependency Injection) -(1) Spring DI(Dependency Injection) -(1) 1. 변경에 유리한 코드 - 다형성, factory method 기본 가정 ① Car car =new SportsCar(); Car car =new Truck(); ② Car car=getCar(); static Car getCar() { //기능 제공하는 메서드, SportsCar 객체 반환 return new SportsCar(); } ①과 달리 ②에서는 SportsCar 부분만 수정하면 된다. 예를 들어 return new Truck();으로 변경하면 된다. 더 편리해진 코드다. 2. 변경에 유리한 코드 - ③ Map과 외부 파일 ** Properties은 Map처럼 로 반환한다. 단, Map은, or인 반면, Properties인 .. 데이터의 변환과 검증 데이터의 변환과 검증 WebDataBinder WebDataBinder는 타입이 불일치할 경우, 타입변환을 먼저 수행합니다. 그 변환 결과나 에러를 BindingResult에 저장합니다. 그후 데이터 검증을 수행합니다. 또 그 결과와 에러를 BindingResult에 저장합니다. BindingResult는 Error 인터페이스의 자손입니다. 이것을 컨트롤러에게 넘겨줄 경우, 컨트롤러는 이것을 바탕으로 작업을 진행할 수 있습니다. BindingResult는 Binding할 객체 바로 뒤에 와야만 합니다. 1. 데이터 변환 User 클래스의 birth의 타입을 String이 아닌 Date로 설정해보겠습니다. User 클래스 String birth를 ctrl+f 하여 Date birth로 전부 바꾸었습니다.(.. 예외 처리 예외 처리 ExceptionController 500번대 에러, 서버 에러가 발생했습니다. 예외처리를 해보겠습니다. 1.예외처리 1) 예외처리 종류 ① 컨트롤러 메서드 내에서 try -catch 문 ② @ExceptionHandler 메서드 ③ @ControllerAdvice클래스의 Exception 메서드가 처리 으로 분류 가능합니다. ① 컨트롤러 메서드 내에서 try -catch 문 을 통해 예외처리를 해보겠습니다. 이전과 달리 404 에러가 나왔습니다. 예외가 잡혔지만 뷰를 찾을 수 없는 상황입니다. 메서드의 반환타입이 void이기 때문에 ex.jsp를 찾는데 못찾고 있는 것입니다. error.jsp 뷰를 반환하도록 하겠습니다. ② @ExceptionHandler 메서드를 통해 예외처리를 해보겠습니.. 쿠키(Cookie) 와 세션(Session) 쿠키(Cookie) 와 세션(Session) 쿠키(Cookie) 를 실습하기 전에 로그인 화면을 구축해보겠습니다. LoginController LoginController -id,pwd 일치 여부 확인 id, pwd 틀리게 했을 때 화면 입니다. id ‘asdf’ pwd ‘1234’ 했을 때는 홈 화면이 나왔습니다. 이제, 쿠키를 배우고 ‘아이디 기억’ 기능을 구현해보겠습니다. 1. 쿠키(Cookie)란? 이름과 값의 쌍으로 구성된 작은 정보 아이디는 name이고 , asdf는 value 입니다. 이를 한쌍으로 저장하는 게 쿠키입니다. 이 외에도 도메인, 패스를 포함하며 max-Age: 60*60*24(유효기간) 등이 있습니다. 아스키 문자로만 저장할 수 있습니다. 따라서 한글도 URL 인코딩을 해야 합.. @RequestMapping 그리고 redirect/ forward @RequestMapping 그리고 redirect/ forward 1. @GetMapping 과 @PostMapping @RequestMapping에 별도의 표기가 없으면 메서드의 전송 방식은 get과 post 모두 가능합니다. 이때 @GetMapping은 get 메서드만, @PostMapping은 post메서드만 허용하는 애너테이션 입니다. 아래와 같이 사용할 수 있습니다. 특징① 메서드에 의해 구분되므로, URL의 주소가 동일해도 문제되지 않습니다. register() 메서드와 save()메서드의 URL이 같습니다. URL이 같으면 URL 맵핑 충돌이 발생합니다. 그러나 get, post 각각 메서드를 통해 구별되고 있습니다. 즉 메서드가 다를 때 URL이 같아도 충돌이 나지 않습니다. 특징② 맵핑.. @RequestParam과 @ModelAttribute @RequestParam과 @ModelAttribute 1.@RequestParam @RequestParam ➝ 요청할 때 넘어온 파라미터를 매개변수에 연결할 때 쓰는 애너테이션 보통 위처럼 사용합니다. 사실 첫번째 문장과 두번째 문장은 같습니다. String 앞 부분은 생략 가능한 부분이라 생략된 것입니다. 이때 ‘year’는 파라미터(Parameter)의 이름입니다. required는 필수 여부를 의미합니다. 예시1) required=false( 입력이 필수가 아닐 때) required=false 이므로 입력이 필수가 아닙니다. 그리고 year의 타입이 int인 것에 유의해야 합니다. ① http://localhost/ch2/requestParam8 의 경우 필수 입력이 아니라 입력값을 주지 않았습니.. Spring 관심사의 분리- MVC 패턴 Spring MVC 패턴 Model-View-Controller 1. 관심사의 분리와 MVC 패턴 관심사(concern)는 해야할 작업을 의미한다. 아래의 예시에서 main() 메서드는 ①입력 / ②처리/ ③출력 3개의 관심사를 가지고 있다. ①입력 / ②처리/ ③출력으로 분리하는 것을 '관심사의 분리'라고 한다. ②처리와 ③출력이 별도의 메서드로 분리될 경우 처리의 yoil을 출력에서 읽을 수 없는 문제가 발생한다. 다른 year, month도 마찬가지다. 이를 해결하기 위해 Model 객체가 필요하다. (코드를 분리했기 때문에 분리된 코드를 전달하기 위해서 Model이 필요하다.) Model은 ②처리에서 결과를 출력하는데 필요한 값들을 저장한다. Model은 그 값들을(처리에서의 값들) ③출력에 전달.. HTTP 요청과 응답 HTTP 요청과 응답 원격 프로그램을 어떻게 실행시킬 수 있을까? 브라우저 - 톰캣(Web Application Service)을 통해 실행시킨다. how to execute? ① 호출할 프로그램을 등록한다. ② URL과 프로그램을 연결한다. 예제) 그런데 브라우저에서 출력되지 않았다. System.out.println("Hello"); 이라 톰캣 콘솔에 출력 되었다. 브라우저에 출력하고 싶은데 어떻게 해야 할까? 1) HTTP 요청과 응답 ①브라우저에 URL을 입력해서 원격 프로그램을 호출 ②톰캣이 HttpServletRequest 객체를 형성 후, 요청한 정보를 담는다 ③메인 메서드의 매개변수로 넘겨준다 ④ request 객체를 통해 요청 정보를 얻을 수 있다. 2) HttpServletRequest.. SQL 스토어드 프로시저와 트리거 스토어드 프로시저와 트리거 1.스토어드 프로시저 스토어드 프로시저(Stored Procedure)는 MySQL에서 제공하는 프로그래밍 기능 스토어드 프로시저 형식 예제 ) 스토어드 프로시저 생성 스토어드 프로시저 삭제 1) 스토어드 프로시저 실습 매개변수의 사용 - 입력 매개 변수 매개변수의 사용 - 입력 매개 변수 2개 매개변수의 사용 - 출력 매개변수 2) SQL 프로그래밍 활용 cf. 날짜와 관련된 함수 YEAR(), MONTH(), DAY() YEAR(CURDATE()) MONTH(CURDATE()) DAY(CURDATE()) CURDATE() 함수는 현재 날짜를 알려준다 3) 동적 SQL 동적 SQL ? 변경되는 내용을 실시간으로 적용시켜 사용 동적 SQL + 스토어드 프로시저 2. 스토어드 함.. 이전 1 2 다음