일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- Git
- 생성
- 코틀린
- Spring
- IntelliJ
- Java
- jquery
- 넥사크로
- error
- db
- kotlin
- 에러
- 시큐리티
- 방법
- GitHub
- 알고리즘
- aws
- Vue
- JavaScript
- 쿼리
- Security
- oracle
- Eclipse
- 프로그래머스
- 스프링
- JPA
- 오라클
- mybatis
- 함수
- Today
- Total
송민준의 개발노트
Spring 간단 정리 본문
1. Spring Framework의 Annotation 중 @RequestMapping
RequestMapping 어노테이션을 사용해서 메서드에 처리할 요청 경로를 지정한다. * value="요청 경로", method는 전송 방식 지정한다. @RequestMapping 뒤에는 반드시 메서드가 나와야 하고 자동 호출 된다. * 이름은 다른 메서드들과 중복되지 않게만 작성한다.
@RequestMapping(value = "/login_ok.do", method=RequestMethod.POST)
- member로 시작하고 확장자가 .net으로 끝나는 모든 경로
@RequestMapping("/member/?.net")
- 중간에 글자가 바뀌는 경우 ? 로 표시(ex. SMMJ, SJMJ 등...)
@RequestMapping("/member/S?MJ.net")
- 앞뒤 경로가 정해져 있고 중간 경로만 다를 경우(ex. member/file, member/1/file, member/2/file 등)
@RequestMapping("/member/**/file")
- ajax응답의 한글이 깨지는 경우 produces 추가
@RequestMapping(value="/json.do", produces = "application/text; charset=utf-8")
2. @RequestMapping 이용한 POST 요청 방식 처리
1번 참고
3. @ResponseBody
ResponseBody, RequestBody 어노테이션을 사용하면 컨트롤러에서 JSON 데이터를 주고 받을 수 있다.
- RequestBody로 JSON 정보 받기
var obj = {"name": "SONG", "age": 26};
$.ajax({
url: "/test",
type: "post",
data: JSON.stringify(obj),
contentType: "application/json",
success: function(data) {
alert("json 성공");
},
error: function(errorThrown) {
alert(errorThrown.statusText);
}
});
// MAP 형태로 변환
@Controller
public class MainController {
@ResponseBody
@RequestMapping("/test")
public void test(@RequestBody HashMap<String, Object> map) {
System.out.println(map);
// {name=SONG, age=26} 출력
}
}
// 객체 형태로 변환( 객체가 선언되어 있어야 하며 getter, setter가 있어야함)
@Controller
public class MainController {
@ResponseBody
@RequestMapping("/test")
public void test(@RequestBody UserVO userVO) {
userVO.getName(); // "SONG"
userVO.getAge(); // 26
}
}
- ResponseBody로 JSON 정보 전달
// String으로
public class LoginController6 {
@ResponseBody
@RequestMapping(value="/test", produces = "application/text; charset=utf-8")
public String test(userVO vo) throws Exception {
System.out.println("여기는 json");
JsonObject obj = new JsonObject();
obj.addProperty("data1", vo.getId() + "여기는 json 이다.");
obj.addProperty("data2", vo.getPass());
return new Gson().toJson(obj);
}
}
// MAP으로 전송하기
@Controller
public class MainController {
@ResponseBody
@RequestMapping("/test")
public HashMap<String, Object> test(@RequestBody HashMap<String, Object> map) {
map.put("phone", "6666-7777");
return map;
// {"name": "SONG", "age": 26, "phone": "6666-7777"}가 data로 바인딩
}
}
// MAP에 객체 담아서
@Controller
public class MainController {
@ResponseBody
@RequestMapping("/test")
public HashMap<String, Object> test(@RequestBody UserVO userVO) {
HashMap<String, Object> map = HashMap<String, Object>();
map.put("userVO", userVO);
return map;
// {"userVO": {name: "SONG", age: 26}}가 data로 바인딩
}
}
4. @Controller, @Repository, @Service
- Controller
@Controller 어노테이션을 사용한 컨트롤러 클래스를 이용해서 특정 요청 URL을 처리한다.
@Component를 상속한 @Controller는 @Controller가 붙은 클래스의 객체를 메모리에 생성하는 기능을 제공함
단순히 객체를 생성하는 것에 그치지 않고 DispatcherServlet이 인식하는 Controller객체로 만들어 준다.
만약 @Controller를 사용하지 않으면 SpringMVC프로젝트의 BbsWriteController.java HandleRequestInternal() 메서드를 반드시 재정의 해서 작성해야 한다.
이렇게 구현한 Controller는 스프링 프레임워크가 지향하는 POJO 스타일의 클래스가 아니다.
따라서 Controller를 POJO 스타일의 클래스로 구현하려면 "extends AbstractController"를 제거하고 클래스 위에 @Controller를 선언한다. 스프링 컨테이너는 @Controller가 선언된 객체를 자동으로 Controller 객체로 인식한다.
Controller 종류
1) Controller(interface)
2) AbstractController
3) AbstractCommandController
4) MultiActionController 위의 interface/class를 상속하여 Controller를 작성 가장 기본이 되는 Controller 작성함 AbstractController를 상속 받고 오버라이딩 해서 코드를 구현 결과의 자료형은 ModelAndView로 view에서 사용할 객체와 view에 대한 id와 비밀번호를 저장한 후 return 합니다.
- Service
Service 계층은 컨트롤러의 호출에 따라서 적합한 DAO를 대신 호출해 주는 중간 단계의 객체입니다. 이 과정에서 컨트롤러로부터 전달받은 값을 DAO에 전달하기 전에 파라미터를 가공하거나, DAO로부터 리턴 받은 값을 컨트롤러에게 리턴하기 전에 값을 가공할 수 있습니다. 이러한 처리를 비지니스 로직이라고 합니다. 비즈니스 로직은 컨트롤러가 클라이언트의 요청을 식별하고, 응답을 구성하는 역할에만 집중할 수 있도록 데이터 연동에 필요한 각종 처리를 모두 분리해 낸 형태라고 볼 수 있을 겁니다. Service 계층은 구현하고자 하는 기능의 목록을 Interface 형태로 나열하고, 구현체 클래스를 별도로 두어 구성합니다.
5. MVC 구성요소 중 Dispatcher Servlet
Servlet Container에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층의 제일 앞에 둬서 중앙집중식으로 처리해주는 프론트 컨트롤러. 즉, 클라이언트로부터 어떤 요청이 오면 톰캣과 같은 서블릿컨테이너가 요청을 받는데, 이 때 제일 앞에서 서버로 들어오는 모든 요청을 처리하는 프론트 컨트롤러를 Spring에서 정의하였고 이를 Dispatcher-Servlet이라고 한다.
장점으로는 DispatcherServlet이 등장함에 따라 web.xml의 역할을 상당히 축소시켜주었다. 다만 모든 요청을 처리하다보니 이미지나 HTML파일을 불러오는 요청마저 전부 Controller로 넘겨버린다. 이에 대해 Spring은 <mvc:resources/>를 이용한다. 만약 Dispatcher Servlet에서 해당 요청에 대한 컨트롤러를 찾을 수 없는 경우에 2차적으로 설정된 경로에서 요청을 탐색하여 자원을 찾아내는 것이다.
6. MVC 구조의 요청 처리 순서
1) 클라이언트의 요청의 최초 진입지점은 DispatcherServlet이 담당.
2) DispatcherServlet은 Spring Bean Definition에 설정되어 있는 Handler Mapping 정보를 참조하여 해당 요청을 처리하기 위한 Controller를 찾음.
3) DispatcherServlet은 선택된 Controller를 호출하여 클라이언트가 요청한 작업을 처리함.
4) Controller는 Business Layer와의 통신을 통하여 원하는 작업을 처리한 다음, 요청에 대한 성공유무에 따라 ModelAndView 인스턴스를 반환한다. ModelAndView 클래스에는 UI Layer에서 사용할 Model 데이터와 UI Layer로 사용할 View에 대한 정보가 포함되어 있다.
5) DispatcherServlet은 ModelAndView의 View의 이름이 논리적인 View 정보이면 ViewResolve를 참조하여 이 논리적인 View정보를 실질적으로 처리해야 할 View를 생성하게 된다.
6) DispatcherServlet은 ViewResolver를 통하여 전달된 View에게 ModelAndView를 전달하여 마지막으로 클라이언트에게 원하는 UI를 제공할 수 있도록 한다. 마지막으로 클라이언트에게 UI를 제공할 책임은 View 클래스가 담당하게 된다.
7. Ajax(Asynchronous JavaScript and XML)란 무엇인가
브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법이며 Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이라고 할 수 있다. 여기서 비동기식이란 웹페이지를 리로드 안하고 데이터를 불러오는 방식이다. 이는 전체 리소스를 다시 안불러오고 특정 필요부분만 불러와 사용할 수 있으므로 매우 큰 장점이다.
8. 마이바티스란?
퍼시스턴스 프레임워크의 일종이며 자바 메서드와 SQL문을 연결하는 매핑 프레임워크이다. JDBC 코드를 캡슐화하여 DB프로그래밍을 단순화 시키고 자바 소스와 SQL을 분리하여 관리한다.
https://song8420.tistory.com/147
9 Maven Framework?
아파치 소프트웨어 재단에서 개발하는 JAVA 기반 프로젝트의 라이프사이클 관리를 위한 빌드 도구. 이에 따라 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나 서버 측 Deploy 자원을 관리할 수 있는 환경을 제공한다. 또한 라이브러리 관리 기능을 내포하고 있다. JAVA로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다.
10. DI, DL< IOC 개념
- DI(의존성 주입, Dependency Injection)
객체 간의 의존 관계를 객체 자신이 아닌 외부 조립기가 수행한다.
Spring Container가 DI조립기(Assembler) 제공, 스프링 설정파일을 통해 의존관계를 설정한다.
- IOC(역제어, Inversion of Control)
계층 간의 의존관계의 결합도를 낮추기 위해 적용. 개발자가 직접 객체를 생성을 하지 않고 객체의 생성에서 소멸까지 컨테이너 관리하게끔 한다.
- DL(의존성, Dependency Lookup)
JNDI 같은 저장소에 의하여 관리되고 있는 bean을 개발자들이 직접 컨테이너에서 제공하는 API를 이용하여 lookup 하는 것을 말함. 따라서 container와의 종속성이 생김.
11. @Component
Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 어노테이션이다. component-scan을 선언에 의해 특정 패키지 안의 클래스들을 스캔하고, 해당 클래스에 대하여 bean 인스턴스를 생성한다. 이름을 사용하지 않으면 지정한 클래스의 이름에서 첫글자를 소문자로 바꾼 이름으로 bean이 생성된다.
'웹 > Spring Framework' 카테고리의 다른 글
404 에러, Exception 처리 (0) | 2019.12.30 |
---|---|
Spring lombok 설치(이클립스, STS) (0) | 2019.12.25 |
Spring MVC 로그인(간단)-AJAX JSON 활용 (0) | 2019.12.19 |
Spring MVC 로그인(간단)-ModelAttribute 활용 (0) | 2019.12.19 |
Spring MVC 로그인(간단)-command활용 (0) | 2019.12.19 |