본문 바로가기

분류 전체보기

(60)
8. 전통적인 방식의 로그인 로그인 폼부터, Username Password 로그인 get방식 로그인은 id, pw가 주소에 남으니 위험, post방식 user.js let index = { init: function(){ $("#btn-save").on("click", ()=>{ // function(){} 아니고 ()=>{}? this를 바인딩하기 위해서!! // 그냥 function 쓰면 this 는 window객체를 가리킴 this.save(); }); $("#btn-update").on("click", ()=>{ this.update(); }); }, save: function(){ //alert('user의 save함수 호출됨'); let data = { username: $("#username").val(), passw..
스프링부트의 트랜잭션, 스프링 jpa의 osiv전략 전통적인 스프링의 트랜잭션. 여기엔 문제점이 있음! OSIV(Open Session In View) OSIV는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 위의 경우 LAZY전략으로 조회시 롯데팀에 대한 정보가 조회되지 않는다. 이유는 서비스에서 영속성 컨텍스트가 종료되었기 때문이다. 이와 같은 경우를 해결하기 위해 영속성 컨텍스트 종료를 컨트롤러에서 종료하게 하여, 컨트롤러에서도 롯데팀에 대해서 조회 할 수 있게 한다. 단, 이때 프록시를 통해 정보를 조회(s) 할 수는 있으나, I, U, D와 같은 기능은 할 수 없다.(트랜잭션이 종료되었기 때문에) 정리해서 다시 그리면 아래와 같음 - 세션의 시작(사용자가 request한 시점)은 서블릿이 시작되는 시점 부터~ (세션은 영속성 컨텍스트를 포함) - ..
왜 SELECT를 할때도 @Transactional을 붙이는게 좋은가? 트랜잭션 : 일이 처리되기 위한 가장 작은 단위 - DB 격리 수준 1. 오라클 READ COMMIT 오라클의 경우는 변경하려고하는 데이터가 커밋이 되기 전까지는 undo영역의 데이터를 읽어옴 좌측의 A트랜잭션이 업데이트 후 커밋 직전에 B트랜잭션에서 empno=11을 조회하게 되면, 장보고가 아닌 임꺽정이 조회됩니다. COMMIT 된 후 장보고를 읽어올 수 있다 이것을 READ COMMIT이라고함! READ COMMIT의 정합성 문제 - 일어날 수 있는 문제의 경우 SELECT 를 했을때 항상 동일하게 가격이 10000원일테니, 예상 정산 결과는(SELECT 3번 한 결과물)3만원인데, COMMIT후 가격이 변해 2만원이 나타났다?! 위와같이 정산 서비스에 대해서 조회시 만원의 결과를 보여주다가 어느순..
7. 회원가입 세팅+ api없는 회원가입 이 전글에서 이야기 했듯 이번 프로젝트에서는 모든 데이터를 json 방식으로 넘겨 ajax로 처리할것 이유! 더보기 Ajax를 사용하는 첫번째 이유 : 일반적으로 서버로 부터 응답받을때 웹은 HTML파일을 받고 앱은 데이터(JSON)를 받는다. 이것은 서버를 이원화하여 구축한 것을 의미하며 이때 '서버를 통합하여 각각의 클라이언트에게 응답해줄순 없을까?'라는 의문점에서 고안된 방법이 Ajax통신이다. Ajax통신을 사용하면 웹은 서버로부터 데이터(JSON)를 리턴받을 수 있으며 그렇게 되면 서버의 분리 필요없이 하나의 서버로 각각의 클라이언트 요청을 받아 응답해줄수 있게된다. 대신 웹클라이언트는 추가적인 요청을 통해 HTML파일을 받아야한다. Ajax를 사용하는 두번째 이유 : 비동기 통신을 하기 위해서..
6. 프론트 (bootstrap4)- 화면 만드는 대로 수정 https://www.w3schools.com/bootstrap4/bootstrap_navbar.asp Bootstrap 4 Navigation Bar W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more. www.w3schools.com 1. 메뉴와 푸터 package com.cos.blog.controller; import org.springframework.data.domain.Pageable; impor..
스프링 기본파싱전략과 json통신 1. Get요청(select) 주소에 데이터를 담아 보낸다. 데이터 형태는 key=value 특징 : body로 데이터를 담아 보내지 않음. 2. Post, Put, Delete 요청(데이터를 변경) Body에 데이터를 담아 보낸다. 데이터 형태는 json으로 통일하는 것이 좋다. post의 경우 : form method ="post"로 보내면 됨 그러나 form태그의 한계 : get.post 요청만 가능 Put, Delete : 자바스크립트로 요청해야됨 그럼 저거두개는 form, 나머지 자바스크립트로 쓰면 로직이 지저분해짐 => 통일 필요 =>자바스크립트로 ajax요청 + 데이터는 json으로 통일! 태그라이브러리를 사용해서 태그를 사용하면 delete, put도 가능하긴한데 통일하는게 더 낫다. 3...
5. 더미데이터 delete테스트+exception처리+ 무한참조방지 1.더미 데이터 delete @DeleteMapping("/dummy/user/{id}") public String delete(@PathVariable int id){ try { userRepository.deleteById(id); // } catch (Exception e){ // 좀 더 정확한 exception 확인 } catch (EmptyResultDataAccessException e){ return "삭제에 실패하였습니다. 해당 id는 db에 없습니다."; } return "삭제되었습니다. id :"+id; } 삭제에서 일어날 수 있는 오류 중 대표: 없는 데이터 넣었을 때 그래서 정확한 오류를 적으려면 EmptyResultDataAccessException 귀찮으면 그냥 EXCEPTION..
jpa의 영속성 컨텍스트와 update 1. save함수로 update할때 jpa의 영속성 컨텍스트 안 1차 캐시에 있는 user객체가 있다. 여기서 이 user를 db에 업로드 함 그럼 그 객체는 => 영속화 된 객체 그리고 그 캐시에서 db로 값을 넣는 행위를 => flush(우리가 버퍼 비울때 쓴 그거) 이게 save함수로 값을 바꾸어서 update할때 일어나는 과정 2. @Transactional 로 update @Transactional이 종료되는 시점 = 그 함수가 종료되는 시점 종료시 commit이 되는거, 값이 변경된걸 감지해서 update한 결과를 수정해줌(=더티체킹) 영속성 컨텍스트는 깃의 스테이징 같은거고 transactional 이 종료된 뒤 db에 값 날아가는게 commit같은 느낌