2023-02-04

강혜성·2023년 2월 5일
0

ZZALU 프로젝트

목록 보기
4/11

EC2 SSH 문제 발생

  • ssh -i "I8C109T.pem" ubuntu@####
  • 응답 : ssh: connect to host #### port 22: Connection refused
  • 현상 : ssh 연결은 안되지만, Jenkins는 살아있다.
  • 가설1 : 공유 와이파이 -> 핫스팟으로 네트워크를 변경하면서 발생한 Connection refuesed => 와이파이 환경에서는 제대로 접속이 안될 수 있다 함. + 핫스팟으로 네트워크를 변경하는 과정에서 문제가 발생했을수도 있다고 생각함. 고정 IP가 부여된 환경에서 접근이 가능할까...?
  • 가설2 : Jenkins Pipeline build 구성을 하면서 시도한 kill 명령어가 ssh-server를 죽여서 ssh를 수신할 수 없는 경우 => 서버를 껐다 켜야하지만 가능한건 초기화 뿐...

REST API Parameter

  • header : 인증 / 권한 부여 목적으로 사용된다.
  • path : 정제되지 않은 데이터를 호출
  • query : path에 비해 조금 더 복잡한 조건으로 데이터 호출 (filtering, search 등)
  • body : JSON Object를 받을 때 사용한다.

REST API RequestParam, Map

  • RequestParam 사용 시 필수 인자가 빠지게 되면 Bad Reqeust 발생한다. 하지만 많은 인자를 받을 경우 코드가 지저분해진다.
  • Map을 사용할 경우 파라미터 컨트롤에는 편하지만 유지보수 및 가독성이 떨어진다.
  • 인자가 많을경우 dto를 정의해 데이터 커맨드 객체를 생성한다.

JPA contains, containing, isConataining

  • 세 개의 차이점은 없다고 한다.

  • Like, StartingWith, EndingWith, Containing의 차이점은 스택 오버플로우에서 확인할 수 있다.
    https://stackoverflow.com/questions/21456494/spring-jpa-query-with-like


 List<User> findByUsernameLike(String username);
StartingWith: select ... like :username%

 List<User> findByUsernameStartingWith(String username);
EndingWith: select ... like %:username

 List<User> findByUsernameEndingWith(String username);
Containing: select ... like %:username%

 List<User> findByUsernameContaining(String username);

JPA 랜덤 검색 구현

  • Gif 파일을 랜덤하게 전송해야 한다.
  • 요구 사항은 다음과 같다.
1. 한번에 30개씩 Random한 Gif 데이터를 전송한다.
2. 스크롤을 내려 끝에 도달할 경우 겹치지 않는 30개의 Random Gif를 전송한다.
  • 중복 체크를 위해서 HashMap에 ID를 저장했다.
  • 기존에 생성된 ID를 제외하면서 30개를 랜덤하게 추출한다.
 @GetMapping("/randoms")
    public ResponseEntity<List<Gifs>> randomGifs(@RequestParam("exceptIds") List<Long> exceptIds) {
        Long columnCount = gifsService.counyBy();

        HashMap<Long, Boolean> duplicateCheck = new HashMap<>();
        HashMap<Long, Boolean> randomGifIds = new HashMap<>();

        for (long index = 0; index < exceptIds.size(); ++index) {
            duplicateCheck.put(exceptIds.get((int) index), true);
        }

        while (randomGifIds.size() < 30) {
            long randomId = (long) (Math.random() * columnCount + 1);
            if(!duplicateCheck.containsKey(randomId))
                randomGifIds.put(randomId, true);
        }

        List<Long> gifIds = new ArrayList<>(randomGifIds.keySet());
        List<Gifs> gifsList = gifsService.findByIdIn(gifIds);
        System.out.println("gifList : " + gifsList);
        return ResponseEntity.ok().body(gifsList);
    }
  • 생성한 랜덤 ID를 사용하여 조회한다.
    List<Gifs> findByIdIn(List<Long> gifIds);

0개의 댓글