onnnzeoz
Published 2023. 5. 31. 17:24
WebClient Spring Boot

classList는 자바스크립트에서 사용가능함

그래서 속성들에 직접접근은 힘들고 배열에서 꺼내와야함 ex) console.log($(this).[0]);

 

받아올 요청의 경로안에 변수가 있는경우

파라메터 자리에 @pathvariable 사용해줌

	@PutMapping(value="/update/{col}/{val}/{no}")
	public HashMap<String, Object> update(@PathVariable HashMap<String, String>params){
		logger.info("update params : {}",params);
		return null;
	}

<update id="update" parameterType="hashmap">
    UPDATE team_project SET ${col} = #{val} where No=${no};
    </update>

위처럼 UPDATE하면 안되는 이유 : 저렇게 하면 코드 한 줄만 나오고 아주 깔끔하고 좋지만 보안상 매우 취약함, col 자리에 No을 넣어두면  No이라는 이름의 칼럼이 바뀌어지게 되는데 여기엔 pk가 걸려있어서 pk값이 바뀔 수 있음(->코드 인젝션 )

-> 이렇게 바꿔줘

<update id="update" parameterType="hashmap">
      UPDATE team_project set 
         <if test="col.equals('team')">team=#{val}</if>
         <if test="col.equals('leader')">leader=#{val}</if>
         <if test="col.equals('staff1')">staff1=#{val}</if>
         <if test="col.equals('staff2')">staff2=#{val}</if>
         <if test="col.equals('staff3')">staff3=#{val}</if>
         <if test="col.equals('staff4')">staff4=#{val}</if>
         <if test="col.equals('staff5')">staff5=#{val}</if>
         <if test="col.equals('staff6')">staff6=#{val}</if>
         <if test="col.equals('project')">project=#{val}</if>
      where no = #{no}
   </update>

WebClient

외부 서버와 통신할 때 사용함

webclient는 spring 5.0부터 지원한다
전에는 외부서버와 통신할 때 HttpConnection을 사용했었음 ->  RestTemplate로 바뀜 -> 지금은 WebClient(=webflux : 비동기라 속도면에서 우월, 순서없이 날라가는게 문제)
webClient는 non-blocking(비동기) 방식을 지원하며, 속도가 빠르다

함수지향형 프로그램(메서드 체인 사용한 것 처럼 그냥 다 함수로 이루어져있음)

인터페이스라 객체화 못함 -> 인터페이스는 본인 메서드 갖지 못함 -> but 디폴트메서드와 스태틱 메서드는 가질 수 있음

 

retrieve() : 응답해주는 것 중에서 responsebody값만 가져온다

exchange() : body + header + status 등도 가져온다 ( 너무 많이 가져오는게 문제)

 

bodyToMono : 데이터가 0~1개 처리될 경우 (동기식)

bodyToFlux : 데이터가 한번에 여러개 처리될 경우 (비동기식)

profile

onnnzeoz

@onnnzeoz

비전공자의 개발 공부 일지입니다 💦 국비 풀스택 과정 수강중