
<script>
listCall();
function listCall(){
$.ajax({
type: 'GET',
url: './getTeamList.ajax',
dataType: 'json',
success: function(data) {
var content = '';
data.list.forEach(function(item){
// class 안에 팀 이름과 컬럼명 정보를 담는다.
content = '<tr>';
content += '<td>'+item.team_name+'</td>';
content += '<td><input type="text" class="'+item.team_name+' project_name" value="'+item.project_name+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' team_leader" value="'+item.team_leader+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' staff1" value="'+item.staff1+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' staff2" value="'+item.staff2+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' staff3" value="'+item.staff3+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' staff4" value="'+item.staff4+'"/></td>';
content += '<td><input type="text" class="'+item.team_name+' staff5" value="'+item.staff5+'"/></td>';
content += '</tr>';
$('#list').append(content);
});
□ 항상 요소가 출력되고 나서 이벤트를 걸어줄 것!
$('input[type="text"]').focusin(function(){
$(this).css({"background-color":"white"});
});
$('input[type="text"]').focusout(function(e){
□ this : 이벤트를 당한 당사자 객체
□ e : 이벤트 그 자체
$(this).css({"background-color":"lightgray"});
□console.log(e.target.defaultValue,' -> ',e.target.value);
if(e.target.defaultValue != e.target.value){
console.log('서버에 변경 요청',e);
□ 팀이름(PK), 변경할 컬럼, 변경할 값
□ UPDATE team_project SET project_name = '강아지몰' WHERE team_name = '1조';
□ UPDATE team_project SET team_leader = '김영수' WHERE team_name = '3조';
□ column, value, pk
reqUdate(e.target.classList[1],e.target.value,e.target.classList[0]);
}
});
},
error: function(e) {
console.log(e);
}
});
}
function reqUdate(col,val,pk){
console.log('UPDATE team_project SET '+col+' = '+val+' WHERE team_name = '+pk);
□ 서버에 데이터를 보내는 방법
□ 1. 파라메터 형식 update?col=project_name&val=김영수&pk=3조
□ 2. url 방식 update/project_name/김영수/3조
$.ajax({
type:'PUT',
url:'update/'+col+'/'+val+'/'+pk,
data:{},
dataType:'JSON',
success:function(data){
console.log(data);
if(data.success==0){
location.reload();
}
},
error:function(e){
console.log(e);
location.reload();
}
});
}
</script>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
□ get 방식으로 서버로 데이터를 보내면 -> 받은 데이터를 다른 서버로 보낸다
다른서버에서는 받은 데이터를 -> 보낸 서버로 되돌려 보내고 -> 이것을 클라이언트로 되돌려준다
□ webClient 는 String 5.0 에서 부터 지원하는 라이브러리이다.
□ 이전에는 HTTPCOnnection(Spring 기본내장) -> RestTemplate 등을 사용 했었다.
□ Non-Blocking 방식을 지원하기 때문에 비동기 처리가 가능하여 속도면에서 우월하다[많은 통신이 이루어질때 유리함]
□ Non-Blocking 방식을 지원하기 때문에 비동기 처리가 가능하여 속도면에서 우월하다
□ get 방식 전송과 post 방식 전송이 조금 다르다.
public Map<String, String> getSend(String msg){
□ 1. 어디로 보낼지
WebClient client = WebClient.create("http://localhost:8080");
□ 2. 전송 방식 지정 + 상세 URL추가(있으면)+ 전송
□ retrieve() : 전송 후 body 값을 받아온다.
□ exchange() : 전송 후 상태값 헤더값을 받아온다.(테스트 이외에는 잘 사용하지 않음)
□ bodyToMono() : 동기 통신시 사용 (한번에 1개 요청 처리 시)
□ bodyToFlux() : 비동기 통신시 사용 (한번에 여러개 요청 처리 시)
Mono<Map> mono = client.get().uri("/return/"+msg).retrieve()
.bodyToMono(Map.class);
□ 3. 받아온 Mono로 부터 자바 객체를 빼 온다. [규격이 서로 맞아야 된다.]
Map<String, String> resp = mono.block();
logger.info("response : "+resp);
return resp;
}
Mono mono 방식 : 보낼 데이터가 하나일 경우 사용
public List<Map<String, Object>> postSend(String val, String key) {
□ 1. 어디로 보낼지
WebClient client = WebClient.create("http://localhost:8080");
□ 2. 파라메타 추가
FormInserter<String> form = BodyInserters.fromFormData("cnt", val);
□ 파라메타를 추가하고 싶다면 아래방법도 있다 (MultiValueMap에 담아서 한번에 보낸느게 더 낫다.)
□ form.with("name","value");
□ 3. 전송 방식 지정 + 상세 URL추가(있으면)+ 헤더값 + 파라메터를 담은 form추가 + 전송
Mono<List> mono = client.post().uri("/listReturn").header("authrorization", key).body(form).retrieve().bodyToMono(List.class);
□ List<Map<String, Object>> list = mono.block(); // 이 방식이 간단하기 하지만 속도면에서 다른 방식을 추천한다.▼
List<Map<String, Object>> list = mono.flux().toStream().findFirst().get();
logger.info("response : "+list);
return list;
}
□ Flux flux 방식 : json 형태로 파라메터를 보내고 싶을 경우 (복잡한 형태 및 데이터를 여러개 보낼 경우)
public List<Map<String, Object>> fluxTest() {
□ 1. 어디로 보낼지
WebClient client = WebClient.create("http://localhost:8080");
□ paeam 추가
Map<String, Object> json = new HashMap<String, Object>();
json.put("age", 40);
json.put("nama", "KIM");
json.put("married", false);
json.put("score", new int[] {30,40,50,60,70});
□ json 형태로 파라메터를 보내고 싶을 경우
□ bodyValue() 를 사용한다.
□ 받는곳에서는 @RequsetBody로 받아줘야 한다.
Flux<Map> flux = client.post().uri("/fluxReturn").bodyValue(json).retrieve().bodyToFlux(Map.class);
List<Map<String, Object>> list = flux.toStream().collect(Collectors.toList());
logger.info("response : "+ list);
return list;
}
□ 받는곳에서는 @RequsetBody로 받아줘야 한다. (13_Webclient/ RecvController)
@PostMapping(value="/fluxReturn")
public List<Map<String, Object>> fluxReturn(@RequestBody Map<String, Object> param){
logger.info("json params : {}",param);
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Map<String, Object> map = null;
for (int i = 0; i < 11; i++) {
map = new HashMap<String, Object>();
map.put("no", i);
map.put("name","LEE");
map.put("salary",i*100000);
list.add(map);
}
return list;
}
□ IPV6 -> IPV4 로 변환할 경우
□ application.properties 에서 관리자 계정 생성
[# user setting] user.id = userAdmin, user.pw = pass@Goodee, user.ip = 127.0.0.1
□ application.properties 에 있는 값을 가져오기
@Value("${user.id}")private String user_id;
@Value("${user.pw}")private String user_pw;
@Value("${user.ip}")private String user_ip;