게시글 보기
index.jsp
타이틀을 누르면 해당글의 상세보기로 간다.
PostController.java
컨트롤러에 상세보기 누를때 id값으로 이동하게 한다.
이때 model을 이용하면 view까지 dto를 들고 갈 수 있음.
PostDetailRespDto
모델명+하는일+리퀘스트or리스펀스+Dto
dto는 컨트롤러 패키지안에서 만든다.
model도 아니고 데이터를 왔다갔다 하기때문에
안드로이드는 PostApiController로 만들고
/v1/posts/로 짠다
만약 v2 넘어가더라도 v1은 남겨뒀다가
나중에 완벽해지면 삭제를 한다.
PostService.java
서비스의 함수 이름은 가독성 때문에 매우 중요하다.
post.xml
Controller에 API
글 상세보기는 Post하나의 테이블로만 데이터를 보여 줄 수 없다.
그래서 Join을 사용하는데 먼저 MySQL에서 만들어본다.
주의할점 : 드라이빙 테이블!
driving table은 forienkey를 가집니다.
SELECT p.id, p.title, p.content, u.username
FROM post p
INNER JOIN user u
ON p.userId = u.id
where p.id = #{id}
Repository에서 Join을 이용한 dto를 return 받는 함수를 만들어 둔다.
사용할 데이터를 필드명으로 적고
콤포지션보다는 위 방식을 위주로한다. 하지만 써야할때도 있음!
한 칸씩 띄어쓰기 습관적으로 하자! 해야할때도 있고 안해도 될 때도 있지만
xml파일에서 아까 만들었던 SQL Join을 넣어둔다.
이때 dto은 model과 다르므로 controller안의 패키지에 놔둔다.
detail
받았던 dto를 그대로 뿌리기만 하면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@include file="../layout/header.jsp"%>
<div class="container">
<table class="table table-hover">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>내용</th>
<th>작성자</th>
</tr>
</thead>
<tbody>
<tr>
<td><input id="id" type="text" value="${postDetailRespDto.id}" readonly/></td>
<td><input id="title" type="text" value="${postDetailRespDto.title}" readonly/></td>
<td><input id="content" type="text" value="${postDetailRespDto.content}" readonly/></td>
<td><input id="username" type="text" value="${postDetailRespDto.username}" readonly/></td>
</tr>
</tbody>
</table>
<button id="btn-update" class="btn btn-warning">수정</button>
<button id="btn-delete" class="btn btn-danger">삭제</button>
</div>
<script src="/js/post.js"></script>
<%@include file="../layout/footer.jsp"%>
삭제하기
post.js
post.js에서 삭제버튼을 눌렀을때 작동하게 코드를 추가한다.
contentType은 내가 데이터를 들고 갈때 넣는것이다.
Controller
Service
Repository
Mapper
CommonRespDto
OSI 7계층
L7 응용 계층(응용 계층은 밑 3개가 아니라 여러개가 될 수있음)
ex)책상에 wi-if달아서
웹브라우저 -> 서버
웹브라우저 <- 서버
(HTML or Data)
안드로이드 -> 서버
안드로이드 <- 서버
(Data)
리액트 머신 -> 서버
리액트 머신 <- 서버
(state)
HTML 응답 방법, DATA 응답 방법 2개를 만들어야한다.
->두가지 방법을 만들기는 힘드니까 DATA만 사용함
관광지 가면 비콘이 설치되어있는데 app을 하나 설치하라고함
블루투스를 깔아두고 움직이면 핸드폰에 자동으로 나오게함.
->데이터를 요청하는애가 비콘일수도 있음
->JSON 데이터가 표준이 되어있다.
수정하기
detail.jsp
postController
postRepository
postService
postMapper
post.js
수정하기 할때는 원래
RequestDto를 만들어서 데이터를 담고 id를 따로 받았으니
Post Object를 만들어서 Mybatis에 요청해도 된다.
수정하기 할때는 원래
RequestDto를 만들어서 데이터를 담고 id를 따로 받았으니
Post Object를 만들어서 Mybatis에 요청해도 된다.
//세션 값 확인, 글의 주인
delete 쪽
------
AOP 공통 관심사라는것은 함수 앞뒤로 사용할것을 등록함
한번쓰고 말것은 구현해놓을 필요는 없다.
------
session
REDIS(레디스) RAM만 있는 세션 서버
하드에 저장하고 싶으면 데이터베이스 서버 (I/O때문에 느려짐)
위와 같은 세션방식을 안쓰고 JWT를 쓰게 되면 엄청 편하고
돈도 안든다.
위에 설명했던 세션서버, 데이터베이스서버가 필요없어짐
ex) 안드로이드
세션을쓰면 강제로 응답시에 담아줘야함
요청시 강제로 쿠키를 담아줘야한다.
Rest Template
->결론 session 쓰지말자
관광지 비콘(블루투스)
jsondata가 표준
앞으로 더 배울 내용 정리
오전수업 + 숙제
spring
기본(필수)
1. 스프링부트 반복 2~3번 -> 토이 프로젝트
고급(선택)
2. 스프링부트
-> 시큐리티
-> OATH 2.0(구글 로그인, 페이스북로그인)
-> Rest API 서버(JWT), CSRF, CORS
한번 세팅만 하면 셀렉트해서 주고 하면 되니까 세팅 한거 다른 팀꺼 써도 된다.
-> Validation 체크(인터셉터)
-> Log(AOP)
-> 배포
안드로이드
Restrofit2 - 포스트맨같은거(쓰레드 개념)
서비스
FCM(push하느거)
GPS-map
MVVM-AAC(라이브데이터) 옵저버패턴 : 데이터 변경됐네 UI 바꿔주고 stream.
React
1. 라우팅!
2. 리덕스 : 상태관리 - 기본은 데이터가 단방향흐름인데 자식에서도 부모에 stat에 접근하기 힘드니까 이 부분을 관리해주는 곳이다.
3. hooks
서버마다 세션 저장소가 있음. 하지만 서버가 여러 개 있을 수도 있음.
레디스서버 = 세션서버 = RAM메모리
세션 안쓰고 토큰 방식을 쓰면 따로 세션서버를 따로 돈주고 안사도 되고 엄청 좋음.
안드로이드면 request
http url connection
'Spring Boot' 카테고리의 다른 글
스프링 시큐리티 롤 권한 가져오기 (0) | 2020.07.31 |
---|---|
Spring Boot - Security (0) | 2020.07.31 |
글쓰기/주소 설계/@Autowired DI하는 방법3가지 (0) | 2020.07.26 |
InterceptorHandler (0) | 2020.07.24 |
spring boot - blog - 회원가입 (0) | 2020.07.20 |