-
API에서 유효성 검증은 어떤 status로 응답해야할까
API 개발을 하다 보면 클라이언트 요청을 어떻게 처리할지, 특히 실패했을 때 어떤 HTTP 상태 코드를 반환할지 고민할 때가 많다. 현재는 대부분이 400 으로 응답하고 있다. 이번에 여러 상황을 정리해보면서 어떤 코드를 써야 하는지 생각해봤다. 1. 필수 파라미터가 없을 때 API 호출할 때 필수 값이 빠졌다. (ex. Id) 서버에서 이걸 검증하고 걸러낸다면? 이건 클라이언트가 잘못 보낸 요청이다. API 문제라기보다는, 잘못된 요청을 서버가 빠르게 걸러낸 것. 이렇게 잘못된 요청 파라미터로 인해 서버가 요청을 처리할 수 없는 경우. 400 Bad Request 이 적절하다고 생각한다. 2. 비... Read More
-
ORA-01745와 JDBC의 변수 바인딩 최대 갯수
오류 ORA-01745: 호스트/바인드 변수명이 부적합합니다. 원인 대부분 ,를 잘못넣으면 생긴다. 하지만 JDBC를 통해서 쿼리를 실행하는 경우 또 다른 원인이 존재한다. PreparedStatement를 사용 할 때 ? 가 너무 많으면 발생한다. 즉, 바인딩 할 변수가 너무 많으면 ORA-01745 가 발생하기도 한다. JDBC는 2의 16승인 65,536개까지만 바인딩 가능하다고 한다. 실제로 10만개가량 바인딩을 시도했을 때 해당 에러가 발생했다. 참고 https://dzone.com/articles/too-many-preparedstatement-placeholders-in-oracle Read More
-
URL 도메인의 @ 기호
모의해킹 진행 중 처음보는 피싱 방법을 알게되었다. (실제로 언제부터 사용된지는 모르겠다..) 바로 callbackURL에 @를 넣어서 피싱 사이트로 연결시키는것. (혹은 리다이덱트 URL 등등) 예를 들면 ?callbackURL=https://www.naver.com@google.com 이런식이다. 네이버 링크처럼 보이지만 https://www.naver.com@google.com를 호출해보면 네이버가 아닌 구글로 연결된다. 이렇게 정상적인 도메인 뒤에 @를 넣고 피싱 도메인을 넣으면 피싱 사이트로 연결이 된다. @는 무엇일까? HTTP URL은 URI 문법을 따른다. 그럼 URI에서 @는 어떻게 인... Read More
-
[Spring] RequestContextHolder의 getRequestAttribute가 null이다?
Spring이 제공해주는 RequestContextHolder는 Request 정보를 쉽게 갖고올 수 있는 참 좋은 유틸이다. 일반적으로 ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest()로 요청 정보를 가져온다. 하지만 getRequestAttributes()이 null이라 오류가 나는 경우가 있다. 가장 많이 겪은 원인은 메서드의 주석을 보면 알 수 있다. Return the RequestAttributes currently bound to the thread or null if none bound ... Read More
-
[Spring] request의 inputstream (body) 재활용
Spring에서 @RequestBody 를 이용해 body 데이터를 받을 떈 내부적으로 HttpServletRequest의 inputStream에서 값을 가져온다. inputStream은 흐름이기때문에 미리 마킹해놓지 않으면 read()로 한 번 읽은 내용을 다시 읽을 수 없다. 때문에 @RequestBody로 선언한 객체가 만들어지기 전에 먼저 inputStream.read()를 실행시키면 이 후 값을 읽을 수 없어서 Required request body missing 이라는 에러가 나온다. 그래서 inputStream에 있는 body의 내용을 다시 사용 할 수 있게 request를 수정했다. Http... Read More