전체 글 100

Node.js > 설치

기존에 설치된 것을 삭제하고 싶으면 참고https://junsikshim.github.io/2016/01/29/Mac%EC%97%90%EC%84%9C-Node.js-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0.html nvm 설치여러 Node 버전을 사용하기 위해 nvm을 사용하는 것이 좋다 https://github.com/nvm-sh/nvm#install--update-script nvm으로 Node 설치특정 버전의 Node.js 설치nvm install 16.2.0nvm i 16.2.0설치된 Node.js 목록 확인nvm ls특정 버전을 사용하도록 설정npm use 22.12.0 노드 버전 확인node -v

Tomcat > Servlet > 내장(Built in) 서블릿

Servlet요즘에는 자바 웹 애플리케이션을 만들 때 스프링 사용이 기본이 되기 때문에 서블릿을 등록하고 사용할 일이 거의 없다. DispatcherServlet 정도만 사용할 것이다 따라서 우리가 사용하는 서블릿은 DispatcherServlet이 유일하다고 생각할 수 있는데 그렇지 않다  Built In Servlets톰캣 바이너리의 conf 폴더에는 web.xml이 있는데, 내용을 살펴보면 내장 서블릿 2개를 정의하고 있다 Default Servlet default org.apache.catalina.servlets.DefaultServlet debug 0 listings false 1 default / 주석에는 아래와 같이 적혀 있다정적 자원을 제공하는..

Linux > Bash > awk

awk는 기본적으로 공백을 기준으로 필드를 나눈다 Nginx 액세스 로그에서 값 추출열은 기본적으로 공백 기준으로 나뉨 grep /a/b/c access.log | awk '{ print $열번호 }' $0: 전체 출력$1: 1번째 열 출력 예를 들어 log_format의 처음에 $remote_addr를 출력하도록 했다면, grep /a/b/c access.log | awk '{ print $1 }' | sort | uniq와 같이 사용하여 해당 경로로 호출하는 출발지 IP를 쉽게 확인할 수 있게 된다 Nginx 액세스 로그에서 요청 경로 추출중복 제거, 요청 파라미터 제거 cat access.log | awk '{ gsub(/\?.*/, "", $5); print $5 }' | sort | uniq ..

OS/Linux 2024.11.07

Java > Docker 컨테이너로 실행 시 bash: warning: setlocale: LC_ALL: cannot change locale (ko_KR.UTF-8)

문제compose.yml 설정에 LC_ALL: ko_KR.UTF-8 설정을 하였는데, 컨테이너 진입 시 아래 경고 발생bash: warning: setlocale: LC_ALL: cannot change locale (ko_KR.UTF-8)  원인컨테이너 내 ko_KR.UTF-8 로우캘 미설치  해결방법 1Dockerfile 생성하여 ko_KR.UTF-8 로우캘 설치방법 2compose.yml에 ko_KR.UTF-8 설정 environment: LANG: ko_KR.UTF-8방법 3compose.yml에 en_US.UTF-8 설정 environment: LANG: en_US.UTF-8 TZ: Asia/Seoul en_US.UTF-8 로캘은 기본적으로 UTF-8 인코딩..

Java 2024.10.29

Linux > Ubuntu > Locale

로우캘 환경 변수 확인localeLANG=en_US.UTF-8LANGUAGE=LC_CTYPE="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_COLLATE="en_US.UTF-8"LC_MONETARY="en_US.UTF-8"LC_MESSAGES="en_US.UTF-8"LC_PAPER="en_US.UTF-8"LC_NAME="en_US.UTF-8"LC_ADDRESS="en_US.UTF-8"LC_TELEPHONE="en_US.UTF-8"LC_MEASUREMENT="en_US.UTF-8"LC_IDENTIFICATION="en_US.UTF-8"LC_ALL=en_US.UTF-8  LANG시스템의 기본 로우캘을 지정하는 가장 일반적인 변수. 언어, 시간, ..

OS/Linux 2024.10.29

Spring Boot > Kafka > 카프카 시작하기

https://spring.io/projects/spring-kafka  사용 기술GradleJava 8Spring Boot 2여기서는 2.4.13 사용Spring Kafka위 버전을 사용하면 spring-kafka 2.6.12가 사용된다https://docs.spring.io/spring-kafka/docs/2.6.12/reference/html/Spring Kafka Test내장 카프카 브로커 사용을 위함  설치https://docs.spring.io/spring-kafka/docs/2.6.12/reference/html/#introduction build.gradleplugins { id "java" id "org.springframework.boot" version "2.4.13" ..

Spring/Kafka 2024.10.28

Security > 웹 브라우저에서 특정 사이트 접속 시 (failed)net::ERR_UNSAFE_PORT 에러 발생

크롬에서 이전에는 잘 되었던 요청이 정상적으로 처리되지 않는 현상이 발생했다 해당 서버는 API 서버였고 크롬에서 아래와 같이 접속 시 JSON 응답을 보여준다http://a.b.com:10080/d/e 위와 같이 접속했을 때 아래와 같은 에러 페이지가 보여졌다사이트에 연결할 수 없음http://a.b.com:10080/d/e의 웹페이지가 일시적으로 다운되었거나 새 웹 주소로 완전히 이동했을 수 있습니다.ERR_UNSAFE_PORT 처음에는 네트워크 방화벽 수준에서 해당 포트 접근을 막는 것인가 했는데, 아니였다 그럼 평소에 쓰던 호스트 변조 프로그램의 설정에 문제인가 했는데, 그것도 아니었다 터미널에서 curl로 접속했을 때는 정상적으로 접속이 되었다 어떤 문제일까 고민하다 구글링을 했는데 아래와 같은..

Security 2024.10.25

Java > Concurrency > 10. Thread pool, Executor framework

스레드 직접 사용할 때의 문제점1. 스레드 생성 비용으로 인한 성능 문제메모리 할당각 스레드는 자신만의 호출 스택을 가진다보통 1MB 이상의 메모리를 사용한다OS 자원 사용스레드 생성은 OS 커널 수준에서 이루어지며, 시스템 호출을 통해 처리된다OS 스케줄러 설정OS 스케줄러가 스레드를 관리하고 실행 순서를 조정한다 스레드를 생성하는 작업은 상대적으로 무겁다. 아주 가벼운 작업이라면 작업의 실행 시간보다 생성 시간이 더 오래 걸릴 수도 있다 이러한 문제는 스레드 재사용을 통해 해결할 수 있다2. 스레드 관리 문제서버의 CPU, 메모리 자원은 한정되어 있기에 스레드는 무한히 만들 수 없다 사용자의 요청을 처리하는 스레드가 평소에는 100개면 충분했는데, 10,000명의 사용자가 몰려 10,000개의 스레드..

Java/Concurrency 2024.10.14

Java > Concurrency > 9. Concurrent Collections

java.util 패키지의 컬렉션 프레임워크대부분 Thread safe하지 않음 단일 스레드가 컬렉션 사용 시 성능이 좋다  Collections.synchronized~ 동기화 메서드스레드 안전하지 않은 많은 컬렉션들을 편리하게 스레드 안전한 컬렉션으로 변경해준다 단점동기화 오버헤드잠금 범위가 넓어져 잠금 경합(Lock contention) 증가, 병렬 처리 효율 저하모든 메서드에 동기화 적용정교한 동기화 불가과도한 동기화  java.util.concurrent 패키지의 컬렉션 프레임워크위 방식의 단점 보완자바 1.5부터 제공 스레드 안전하며 고성능 멀티 스레드 환경을 지원하는 다양한 동시성 컬렉션 클래스 제공 다양한 성능 최적화 기법이 적용되어 있다synchronizedLock (ReentrantLo..

Java/Concurrency 2024.10.14