- 작업 상태

그레이들에 종속성은 설정 한 후였고, HttpClient를 사용하려고 하는 중에 ClassNotFoundException이 발생했습니다.

HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
 
에러 메시지 
org/apache/hc/client5/http/classic/HttpClient] with root causejava.lang.ClassNotFoundException: org.apache.hc.client5.http.classic.HttpClient


원인

- 의존성 설정을 했는데 ClassNotFoundException이 발생해서 gradle의존성을 확인했습니다.

- 에러를 발생시키는 의존성입니다. 그레이들 설정입니다.

implementation 'org.apache.httpcomponents:httpclient:5.1.4' 

 

gradle 의존성을 확인해 봅니다.

./gradlew :projectName:dependencies

처리

Maven Repository: org.apache.httpcomponents.client5 » httpclient5 » 5.1.4 (mvnrepository.com)

기존 버전인데.종속성 문제가 해결이 안되어서 

버전을 변경해봤습니다.

Maven Repository: org.apache.httpcomponents.client5 » httpclient5 » 5.2.1 (mvnrepository.com)

    // implementation 'org.apache.httpcomponents:httpclient:5.1.4'
    implementation 'org.apache.httpcomponents.client5:httpclient5:5.2.1'

 

참고

그레이들 의존성 확인 명령어

./gradlew :projectName:dependencies

 ./gradlew :projectName:dependencies --configuration runtimeClasspath      

작업 상태

- express로 작성된 프로그램을 서버에서 실행시키던 중 발생한 에러입니다.

- 브라우저에서 확인한 인증서는 정상상태였습니다.
 
에러 메시지 

AxiosError: unable to verify the first certificate


원인

- SSL/TLS 인증서의 유효성 검사에 실패하여 발생합니다. 

처리

- 보안상 안전하지 않다고 하는데, local에서만 동작하는 프로그램이라서 추가했습니다.

const agent = new https.Agent({
    rejectUnauthorized: false
  });
 
  const api = axios.create({
    baseURL: "https://example.com/api",
    httpsAgent: agent
  });

 

const https = require('https');
const fs = require('fs');
const axios = require('axios');

const agent = new https.Agent({
    ca: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem', 'utf8')
});

const instance = axios.create({
  baseURL: "https://example.com/api",
  httpsAgent: agent
});

node.js - How to configure axios to use SSL certificate? - Stack Overflow

작업 상태

express로 만든 node server.js를 서버에서 실행할때 나온 에러입니다.
 
에러 메시지 

Error: listen EACCES: permission denied 0.0.0.0:443

원인

- 1024 미만의 포트는 특권 포트로 간주되며 루트 또는 슈퍼유저 권한을 가진 프로세스만 바인드할 수 있습니다. 
포트 80, 443에 바인드하려는 경우 프로세스가 충분한 권한을 가지도록 해야합니다.

처리

- 관리자 권한으로 node에게 포트 접근 권한을 부여합니다.

 

]# setcap 'cap_net_bind_service=+ep' /usr/bin/node

~$ getcap /usr/bin/node
/usr/bin/node = cap_net_bind_service+ep

참고

 

setcap은 파일에 특정 권한을 부여하는 명령어입니다.


-e : effective  효력 부여
-p : Permitted  허용
-i : Inheritable  권한 상속 여부(execve)

-r: is used to remove a capability set from a file.

cap_net_bind_service : 특정 포트에 대한 바인딩 권한을 부여
cap_chown: 파일 소유자 변경 권한
cap_dac_override: 파일 권한 무시 권한
cap_fowner: 파일 소유자 변경 권한
cap_setgid: 그룹 ID 변경 권한
cap_setuid: 사용자 ID 변경 권한
cap_sys_admin: 시스템 관리 권한
cap_sys_chroot: chroot() 시스템 호출을 사용하여 디렉토리를 변경할 수 있는 권한
cap_sys_ptrace: 다른 프로세스를 추적할 수 있는 권한

작업 상태

- react 코드를 tsx코드로 변환하던 중에 발생했습니다.
 


에러 메시지 

- Property 'focus' does not exist on type 'never'.ts(2339)

    const liRef = useRef(null);
...
    useEffect(() => {
        if (qna && qna.id === question.id && liRef.current) {
            liRef.current.focus();  //문제 발생 메시지
        }
    }, [qna, question.id]);
    return (
        <li ref={liRef} tabIndex={0}

원인

- 타입스크립트가 해당 요소에 대한 속성을 인식하지 못하는 것을 나타냅니다. 해당 요소의 타입을 명시적으로 지정하거나 해당 요소에 대한 타입 정의를 확실히 하는 것이 필요합니다. 
- useRef를 사용할 때 타입을 명시하지 않으면 타입추론이 이루어지지 않아서 never 타입으로 간주될 수 있습니다.


처리

    const liRef = useRef<HTMLLIElement>(null);


참고

문서 객체 모델(DOM) - Web API | MDN (mozilla.org)

 

문서 객체 모델(DOM) - Web API | MDN

문서 객체 모델(DOM)은 메모리에 웹 페이지 문서 구조를 표현함으로써 스크립트 및 프로그래밍 언어와 페이지를 연결합니다. 이때 스크립트는 주로 JavaScript를 의미하나 HTML, SVG, XML 객체를 문서로

developer.mozilla.org

never 타입은 절대 발생할 수 없는 타입을 나타냅니다. 예를 들어, never는 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰입니다. 변수 또한 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never 타입을 얻게 될 수 있습니다

소개 · GitBook (typescript-kr.github.io)

 

TypeScript 한글 문서

TypeScript 한글 번역 문서입니다

typescript-kr.github.io

 

+ Recent posts