기본 콘텐츠로 건너뛰기

글

DB mysql acl check

in terminal input ``` nc -zv [mysql host] [mysql port] ``` then  ``` connection to [mysql host] port 3306 succeeded! ``` netcat(nc) 명령어는 tcp or udp 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 읽고 쓰는 명령줄 유틸리티 telnet, ping은 네트워크 관련 도구로, telnet은 원격 시스템에 접속하거나 특정 포트로의 연결을 확인하는데 사용 ``` telnet [host] [port] ``` ping은 주로 네트워크 연결 상태를 확인하는데 사용 ``` ping [host] ```

Native Query, JPQL

1) Native query   흔히 사용한 쿼리문을 순수하게 가져온 것 @Query(value = “select * from user”, nativeQuery = true) List<User> findAllCustom(); 2) JPQL(Java Persistence Query Language) 엔티티 객체를 조회하는 객체지향 쿼리다. 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. SQL과 비슷한 문법을 가지며 JPQL은 결국 SQL로 변환된다. JPA 에서 제공하는 메소드 호출만으로 섬세한 쿼리 작성이 어렵다는 문제에서 JPQL 이 탄생된 것이다 .  

블로킹을 비동기로

 블로킹 작업을 비동기적으로 수행하고 싶을 때, Mono.fromCallable은 subscribeOn 메소드와 함께 사용하여 블로킹 작업을 별도의 스레드에서 실행할 수 있습니다. Schedulers.elastic() 과 Schedulers.boundedElastic() 은 블로킹 IO 태스크와 같은 생명주기가 긴 태스크들에 적합하다. elastic 은 요청 할때마다 제한 없이 스레드를 생성한다. 최근에 도입된 boundedElastic 은 같은 기능을 하지만 스레드 수가 제한된다.  Mono.fromCallable(() -> blockingCall()) .subscribeOn(Schedulers.boundedElastic())

멀리 보는 거, 좋은 설계는 아무리 강조해도 지나치지 않다.

 같이 일하던 주니어 친구가 제법 컨텐츠 시스템 설계를 잘 만들어놓았다. redis + hystrix 를 쉽게 적용하게 만들고 퇴사했다. 그리고 최근에 관련 작업을 할 일이 있어, 관련 쪽을 내가 개발하고 있는데,  개발하면서 예상되는 문제들을 아주 쉽게 해결할 수 있었다. 그 친구가 잘 만들어 놓은 아스팔트 길에 달리는거 같은 느낌이다.

validation date range

  @Valid @RequestBody Form form , Errors errors if (errors.hasErrors()) { return Response. badRequest (errors.getAllErrors().get( 0 ).getDefaultMessage()) ; } @AssertTrue (message = " 시작일은 종료일보다 반드시 작아야 합니다 ." ) public boolean isValidDateRange () { return startedAt .before( endedAt ) ; }