Dao 클래스에 DB연결과 관련된 직접적 코드 전개는 없음. 이것은 공통 코드에 작성됨.
쿼리문은 mapper의 xml에 저장.
그렇다면 왜 Dao클래스에 @Autowired SqlSessionTemplate이 있었을까??
DatabaseConfiguration.java를 확인해보자
각 메소드별 리턴이 생성자 호출 -> 그 상위 클래스의 상위 클래스 생성자가 먼저 호출된다는 것이 중요한 포인트임
DatabaseConfiguration.java에 있는 공통 코드를 통해 연동한다(이름 생성) => Application Context에 생성하여 스프링이 이름이나, 타입으로 생성하여 관리(@Configuration)
hikariConfig()
yml의 hikari 정보를 읽어서 DB의 url, user 정보, 커밋 등 내용을 dataSource에 넘겨줌(DB 환경설정 정보)
이 dataSource를 통해 쿼리문 처리 가능해짐
dataSource()
- 데이터 소스를 생성하기 위해 나는 오라클 서버 정보가 필요함.
- 그 값을 갖고 있는 hikari 객체를 파라미터로 넣어서 환경설정 정보를 얻어 커넥션을 맺는데 사용
기존과의 큰 차이점은 javax.sql.DataSource는 원격에 있는 객체를 호출할 수 있는 API에 있음.
sqlsessionFactory()
- 커넥션에 대한 정보 담김.
매핑 패턴 소개 - React Router사용하는 컨셉
아래 번호는 순번을 의미하므로 1번을 따져서 없으면 2번이 또 없으면 3번이 적용됨
exact mapping - /basic/hello.do -> http://localhost/basic/hello.do
path mapping - /basic/* ->
-> http://localhost/basic/hello.do
-> http://localhost/basic/hello
-> http://localhost/basic/
-> http://localhost/basic/test
extension mapping - .do, .gd
:확장자가 do로 끝나기만 한다면 내가 가로챌께
-> http://localhost/basic/hello.do
-> http://localhost/basic/login.do
-> http://localhost/basic/logout.do
default mapping - / - spring legacy 기본
:위에서 부터 따져보다가 어디에도 해당되지 않으면 디폴트가 적용됨
-> http://localhost/basic/hello.do
-> http://localhost/basic/hello
-> http://localhost/basic/
-> http://localhost/basic/test
객체를 Json 문자열로 반환
외부 API 연동시 반드시 필요한 메소드
JSON.stringify(value[, replacer[, space]])
JSON 문자열을 분석하여 객체를 생성
JSON.parse(JSON.stringify(data))
백엔드에서 처리된 결과를 받아오는 장면에서 사용됨.
Array 형태로 처리됨.(배열은 객체다.)
get 방식
- 주소에 데이터 담아 보내기
- 데이터 형태 Key = value
post 방식
- body에 담아 보내기
- form태그 요청은 get요청과 Post 요청만 가능
- put, delete는 자바스크립트로 요청함.(단, 테스트 번거로움)
- 통일 : 자바스크립트로 ajax로 요청 + 데이터는 json으로 통일하기
리액트 사용시(템플릿 엔진)
- js로 요청하는 것 필요(ajax, fetch)
- 리액트(axios)비동기 처리 지원 api & @RequestBody
- 자바스크립트는 기본적으로 동기가 기본상태이기 때문에 비동기 처리 필요 (예 : setTimeout)
- 자바스크립트에서 {}로 묶여 있으면 오브젝트이다.
스프링 컨트롤러는 key=value 데이터를 자동으로 파싱하여 변수에 담아준다.
가령 get요청은 key=value이고 post요청 중 x-www-form-urlencoded (form태그를 만들어서 데이터 전송) 시에도 key=value 이기 때문에 @RequestParam으로 받아올 수 있다.
PostMapping("/home")
public String home(@RequestParam String username, @ReqestParam String email){
return "home"; //@Controller home.jsp로 발생
}
스프링은 key=value 형태의 데이터를 오브젝트로 파싱해서 받아주는 역할도 한다.
이때 주의 할점은 setter가 없으면 key=value 데이터를 스프링이 파싱해서 넣어주지 못한다.
json 데이터나 일반 text데이터는 스프링 컨트롤러에서 받기 위해서는 @RequestBody 어노테이션이 필요
그래서 @RequestBody 어노테이션을 붙이면 MessageConverter 클래스를 구현한 Jackson 라이브러리가 발동하면서 json 데이터를 자바 오브젝트로 파싱하여 받아준다.
key=value 데이터가 아니라 json데이터를 어떻게 전송할 수 있을까?
jsp에선 태그 안에서 메소드 및 페이지 표시
js에선 script안에서 ajax(리액트는 axios) 통하여 진행(함수 처리 성공시 설정, 실패시 설정 등)
ActionForward -> String으로 변경
FrontMVC -> 필요없음 (서블릿 추가 설정 없이 객체 주입 가능) 어떻게? 스프링 프레임워크 컨테이너 사용
- "/" 디폴트 설정
- 객체를 미리 인스턴스화 빈 등록 & 매핑하여 사용
- @Controller
- @RequestMapping("/notice/*") & @GetMapping
서블릿 외의 방법 등장(spring 2.0, 2.5, 3.0은 자유롭지 못 함) [[Dev/개념정리/어노테이션|어노테이션]]!!
- 서블릿에 상속을 받는다? 제약조건, 메소드 오버라이딩, 추상클래스, 인터페이스
- req,res로 전달 -> nope, @RequestParam 제공
- res.sendRedirect("a.jsp") res 있어야 페이지 이동 가능 -> return "redirect:a.jsp"로 가능
- req.getRequestDispatcher("a.jsp") & view.forward(req,res) -> return "forward:a.jsp"
동적, 정적페이지 이관작업 - 주의 : 배포위치
- 정적페이지 : resources
계속해서 8000번 포트를 사용중이라는 아래와 같은 에러가 뜰 때가 있다.
자세한 해결방법 참고(https://adjh54.tistory.com/112)
![[Pasted image 20231221153739.png]]