일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 컨설팅
- GPT
- 머신러닝
- LLaMa
- fast api
- 컨설턴트
- vue.js
- vuejs
- Machine Learning
- fastapi
- POD
- 생성형
- 생성형 AI
- kubernetes
- 로깅
- BFS
- SpringBoot
- 메세지큐
- k8s
- LeetCode
- OpenShift
- Docker
- Python
- Redis
- 오픈시프트
- jpa
- 쿠버네티스
- 도커
- 리트코드
- 솔루션조사
- Today
- Total
목록전체 글 (77)
수 많은 우문은 현답을 만든다
안녕하세요, 조영호입니다. 프론트엔드 프로젝트에서 yarn build만 하면 js heap out of memory 오류가 발생하는 이슈가 있었습니다. 해당 이슈를 해결하는데 나름 고생을 많이해서 경험을 글로 공유하고자 합니다. 우선 보안과 빌드 속도 측면에서 yarn이 npm 보다 우수하다는 글들을 보고 yarn을 사용하고 있었습니다. 빌드를 하기위해 yarn build를 치면 아래와 같은 오류가 발생했습니다. node:internal/event_target:969 process.nextTick(()=> {throw err;}); Error [ERR_UNHANDLED_ERROR]: unhandled error. error Command failed with exit code 1. 원인 파악 과정 폐쇄망..
안녕하세요, 조영호입니다. Spring에서는 공통 설정이나 숨겨야하는 내용들을 properties 또는 yml 파일에 적어놓고 그 값들을 호출해서 애플리케이션에서 사용합니다. 오늘은 이 설정값들을 불러오는 두 방법에 대해서 알아보겠습니다. 1. @Value 어노테이션 @Value("${api.url}") private String url; 2. @ConfigurationProperties 어노테이션 @Component @ConfigurationProperties(prefix = "api") @Data public class urlManager{ private String url; } 3. @Value vs @ConfigurationProperties 비교 한 두가지의 간단한 설정을 가져올때는 @Value..
안녕하세요 조영호입니다. 오늘은 한글 인코딩으로 이틀간 고생했던 경험을 공유하고자 합니다. 혹시라도 누군가에게 도움이 되시길 바라면서.. 상황 설명 저는 VM 2개와 Rabbitmq 1개 사이에서 데이터를 주고받는 서비스를 개발하고 있었습니다. VM들에는 각각 A서비스, B서비스가 실행되고 있는 상태였습니다. 한글 인코딩 문제는, A서비스에서 "message" : "한글메세지" 형태로 메세지를 Rabbitmq로 보내서 B서비스에서 메세지를 Json Parsing 할때 예외가 발생했습니다. 예외 내용 예외의 내용은 대략 아래와 같았습니다. Json Parsing Exception : ':' is not expected value on "message" : "+#)!#*(":#(@". 메세지가 전달되는 과정..
안녕하세요 조영호입니다. 오늘은 업무 중 세마포어와 관련된 질문을 받았고 바로 명쾌하게 대답하지 못했던 것이 아쉬워서 글로 남겨봅니다. 받은 질문과 대답 Q :"현 프로젝트에서 세마포어 구조를 쓰고있나요? 가령, 캐시 사용 같은 부분에서요" A : "프로세스 간에 함께 공유하는 자원이 없어 세마포어를 쓰고있지 않습니다" 자 우선 OS 이론에서 자주 등장하는 세마포어, 뮤텍스, 동기화의 차이에 대해서 알아보겠습니다. 세마포어(Semaphore) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 여러 Process 혹은 Thread가 접근하는 것을 막아줍니다(즉, 동기화 대상이 하나 이상) 뮤텍스(Mutex) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) ..
안녕하세요~ 조영호입니다. 오늘은 Rabbitmq의 고가용성을 보장하기 위해서 클러스터를 구성한 경험을 공유하겠습니다. Rabbitmq Cluster는 Active-StandBy 구성입니다. Active 큐의 내용을 StandBy가 복제받는 형태입니다. 클러스터는 아래 스펙의 3대 서버로 구성 해보겠습니다. OS : Ubuntu-18.04-KEP SPEC : vCPU: 4개, Memory: 16GB Volume : 50GB 1. Rabbitmq 설치 sudo apt-get install -y rabbitmq-server sudo rabbitmq-plugins enable rabbitmq_management (삭제는 apt purge -y rabbitmq-server 를 수행한다. remove는 설정파일이..
로드밸런서란? 로드밸런서는 트래픽을 받아서 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어 입니다. L4부터 Port를 다룰 수 있기 때문에 부하 분산에 L4 Load Balancer와 L7 Load Balancer가 많이 사용됩니다. Load Balancer는 한 대 서버의 각각의 포트에 여러개의 서비스들을 운영할 수 있도록 합니다. L4 LB vs L7 LB L4 Load Balancer는 IP, Port 를 기준으로 스케줄링 알고리즘을 통해 부하를 분산합니다. 클라이언트에서 로드밸런서(DNS)로 요청을 보냈을 때 최적의 서버로 요청을 전송하고 결과를 클라이언트에게 줍니다. L7 Load Balancer는 L7 위에서 동작하기 때문에 IP, Port 이외에도 URI, Payload, Http H..
VIP란? VIP 는 가상 아이피를 의미하고 VIP의 목적은 이중화 환경에서의 로드밸런싱에 있습니다. VM이 2대가 있고 각각 IP가 할당되었다고 가정하겠습니다. 2대는 같은 서비스를 제공하고 있는데 누구에게 패킷을 전달해야 할까요? 이때, 가상IP를 들고 있는 VM 이 Master가 되고 다른 VM은 Slave가 되는 것 입니다. 방화벽 이중화 예시 그리고 Master장비로 부터 응답을 받지 못하면 Slave가 VIP를 소유하게 됩니다. VIP 종류? VIP의 종류는 2가지 (Public VIP, Private VIP) 가 있습니다. 공인 아이피(Public VIP) 를 사용하면 외부에서 내부 보안 존으로 접근하도록 할 수 있습니다. Private VIP는 말 그대로 내부에서만 사용되는 용도입니다. 만..
우리는 보통 난수를 생성할때 Random() 을 사용합니다. 그러나 Random() 함수는 치명적인 문제가 있어서 운영 프로그램을 짤때는 SecureRandom()을 사용해야한다는 것을 알게되어 공유하고자 합니다. 스프링 부트를 이용해서 웹 애플리케이션을 만들 때 우리는 기본적으로 톰캣을 이용합니다. 그리고 톰캣이 리눅스 환경에서 난수를 생성할 수 있도록 다음 옵션을 줘야합니다. JAVA_OPTS='-Djava.security.egd=file:///dev/urandom 실제로 Random() 함수를 사용하면 소나큐브에서 아래와같은 Critical 버그가 발생합니다. Random 값이 필요할 때마다 새 개체를 만드는 것은 비효율적이며 JDK에 따라 임의의 숫자가 생성되지 않을 수 있습니다. 무심코 사용했던..
요즘에는 디비 구성을 할때 FK(Foreign Key) 사용을 최대한 지양하라고들 한다. 그러면 JPA 에서는 FK 없이 어떻게 처리할 수 있을까? -> ggregate에서 어플리케이션 레벨에서 관계를 지어서 각각의 연결된 엔티티를 처리되게 구성할 수 있다. 그럼 어쩔 수 없이 jpa에서 select가 여러번일어나게 어플리케이션을 짜야 하지 않을까? 아니면 jpa에 특별한 기능이 있는건가 ?? -> 이런 케이스에선 QueryDSL을 사용해서 여러번 IO를 발생하기 않게 구성하면 된다.
안녕하세요, 조영호입니다. 오늘은 개발 이후 PR(Pull Reqeust)를 올린 다음 사수로부터 개선을 요청받은 사항과 어떻게 개선했는지 그 과정을 공유하고 합니다. 기본적인 문제부터 의미있는 문제도 있으니 주니어분들은 눈여겨 보시면 좋을 것 같습니다. 우선 로그 수집 시스템은 ELK(ElasticSearch, Logstash, Kibana) 를 선택했고 3가지 서비스와 Java Application을 포함한 4가지 서비스를 Docker Container 로 구성했습니다. Java 애플리케이션에서 발생하는 예외나 로그 메세지들은 Logstash 에서 적절히 수집하고, Kibana 대시보드로 로그 모니터링을 할 수 있습니다. 이제 개선 사항을 살펴보겠습니다. AOP를 통한 MDC처리시 추적번호(Trans..