없어도 잘돌아 간다고함
깃에 커밋하면서 하자
만들어두자
디비 구조에 따라 모델을 만들어주자
jsp때 만든 ui를 가져다 사용하자
header.jsp로 가서 회원가입과 로그인 주소를 만들자
(스크립트)1번유저정보는 1번유저만 볼수 있다 - 로그인이 되어있어야한다 - 2가지가 필요 ( 인증 + 권한 )
1번유저정보 (인증 + 권한)
1번유저수정 (인증 + 권한)
1번유저삭제 (인증 + 권한)
-> /user/~~~~~~
2번 회원가입 페이지 이동, 회원가입시 ()
2번 로그인 페이지 이동 ()
-> /auth/~~~~~~
라이브러리를 사용할 때 이해하게 된다
DataSourceConfig.java 삭제
fail to refresh live data from process 에러가 뜰 경우
pom.xml에
<!-- 스프링부트 스타터 액츄에이터 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
을 추가해보자
SPA 싱글페이지 애플리케이션 내부적으로 ajax
웹브라우저 안드로이드 리액트 공용 서버를 만들려면
페이지가 아닌 데이터를 리턴받는 서버를 만들어야한다
get요청을 제외한 모든 요청을 데이터를 리턴하는 서버로 제작
자바스크립트를 줬으니 아이디를 주고 타입을 버튼으로 바꾸자
앞에 /를 붙여주면 static 으로 이동한다
-----------------------
디스 바인딩
화살표함수로 디스 바인딩
context-path 를 /로 해주자
포트도 8080
----------------------
get방식 빼고는 자바스크립트 방식으로 통일
모든 요청은 자바스크립트 !
폼태그 내용을 지우자
폼 인풋에 name 을 적는 것은 옛날방식이다
자바스크립트 로직 추가
let index = { //여기서는 이벤트 리스너를 바인딩만 하고
init : function() {
$("#btn-save").on("click", ()=> {
this.save();
});
$("#btn-update").on("click", ()=> {
this.update();
});
},
save: function() { // 실제 로직은 여기서 실행
alert("btn-save 로직 실행");
let data ={
username : $("#username").val(),
password : $("#password").val(),
email : $("#email").val()
};
alert("btn-save data");
$.ajax({ // 공식!
type:"post",
url: "/auth/joinProc",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8", //http에서는 Content-Type 라고 씀
dataType: "json" // 스프링은 응답할때 스트링일 경우 무조건 json으로 응답한다
}).done((resp)=>{
console.log(resp);
}).fail((error)=>{
console.log(error);
});
},
update: function() { // 실제 로직은 여기서 실행
alert("btn-update 로직 실행");
}
}
index.init();
----------
web.xml 에는 스프링 필터가 있다
종류가 많은데 중요한 것만 확인하자
message converter -> 기본전략이 xxx-from-urlencoded 즉 key=value 데이터만 파싱하려고한다
@RequestBody 를 걸어두면 들어오는 데이터를 확인하여 제이슨이면 메세지 컨버터를 체인지 한다
gson과 비슷한 오브젝트 매퍼가 동작된다 (그것을 동작시켜주는 것이 jackson이다)
추후에 메시지컨버터를 직접 바꿀 수도 있다
----------------
컨트롤러는 무조건 서비스를 호출해야한다 (리파지토리 안됨)
----------------
디스패쳐 서블릿 - 프론트컨트롤러 - 컨트롤러들
-----------------
Controller는 뷰리졸버가 가능하다 (데이터를 주고받을 때 @ResponseBody)
RestController는 데이터만 리턴한다
----------------
// Controller, Repository, Configuration, Service, Component
// RestController, Bean
------------------
Service를 이용하면 트랜잭션이 발동함
Component는 특별한 역할이 없다
Bean은 클래스가 아닌 메서드에 묶인다
-------------------
https://private.tistory.com/39
-----------------
이해하기위해서 이렇게 테스트해보자 (나중에는 response 엔티티를 사용)
#{ } 변수명만적으면 알아서 getter를 호출할 수 있다
redayState가 4면 잘 들어갔다는 뜻
select가 아닌 delete insert update를 사용할 때
ok가 아닌 엔티티를 하나 만들어서 항상 같은 값을 리턴해주자
ResponseEntity<?> 를 사용해도된다 // 나중에 쓸 것
결과
try catch를 안만들어두면 ajax자체를 실패하여 fail로 가게된다
그렇게 처리해도 되지만 fail에서 처리하지않고 done에서 처리하려면 try catch를 사용해본다
나중에는 핸들러를 이용할 것이다
트라이캐치를 쓰면 오류를 찾기 어려워지기 때문에 로그를 남겨야한다
그렇기 때문에 쓰지않는 것이 좋다
우리는 에러가 터질 때 낚아 채서 처리할 것이다
리턴을 보이드로
result 를 없애고
fail로 이동
----------------------------
login도 폼에서 메소드와 액션을 지우고 인풋의 name 속성을 지운다
----------------
컨텍스트 - 이벤트를 받을 수 있다
-------------
리파지토리
맵퍼
서비스
컨트롤러
----------------
마이바티스 설정들 나중에 공부! 확인
https://mybatis.org/mybatis-3/ko/index.html
-------------------
-----------------------
데이터베이스에는
undo
redo
[홍길동 5000원] 일경우
10000원으로 업데이트하고 커밋을 아직 안했을 경우
undo 로그에는 [홍길동 5000원]의 값이 저장되어 있다 (커밋하기 전의 데이터)
롤백하면 undo로그에서 값을 가져온다
1번유저가 트랜잭션중
2번유저가 들어오면
select를 처음 끝 두번하게되면
처음엔 커밋전이라 5000원
끝엔 커밋후라 10000원을 보게된다
oracle은 READ COMMITTED
MySql은 Repeatable Read
한번 undo를 봤다면 끝까지 같은 값을 본다 - 정합성 문제가 발생하지 않는다
커밋 리드
언커밋 리드
겟인데어 41~ 강
--------------------------
퍼시스턴스란 rs를 자바 객체에 넣어 주는 것
----------------------------
--------------------------
@Controller는 요청이 오면 생성됨
즉, 컨트롤러가 떴을경우에는 request, response 를 불러 올 수 있다
나머지 어노테이션들은 미리 생성 되어 있고
@Controller는 요청이 오면 생성되니 순서를 잘기억하자
------------------------
----------------
ObjectUtils.isEmpty(persistUser)
널 또는 빈객체인지 확인
'Server > Spring Boot' 카테고리의 다른 글
spring boot // 200727 // 블로그 글목록보기 / 삭제하기 / 수정하기 (0) | 2020.07.27 |
---|---|
spring boot // 200724 // RestController / webMvcConfigurer / 인터셉터 / 인증 / 권한 / 익셉션 예외 / 글쓰기 / (0) | 2020.07.24 |
MyBatis vs JPA (0) | 2020.07.17 |
200717// jsp와 spring의 url요청차이, 톰캣 / dispatherServlet / 서비스 / 스프링부트 작업 세팅 (0) | 2020.07.17 |
200713 / ViewResolver /mustache / DI autowired / DB연결방법 (0) | 2020.07.13 |