일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 생성형
- 솔루션조사
- 도커
- Python
- 컨설팅
- fast api
- 생성형 AI
- 머신러닝
- 컨설턴트
- kubernetes
- 쿠버네티스
- Redis
- jpa
- 로깅
- vue.js
- fastapi
- GPT
- Docker
- LeetCode
- 오픈시프트
- vuejs
- 메세지큐
- Machine Learning
- k8s
- POD
- OpenShift
- 리트코드
- SpringBoot
- BFS
- LLaMa
- Today
- Total
목록개발지식 (29)
수 많은 우문은 현답을 만든다
안녕하세요 조영호입니다. 오늘은 Transational 어노테이션을 사용하면서 발생했던 한 가지 문제에 대해서 공유하고자 합니다. @Transactional 이 선언된 하나의 메소드에서 내부적으로 3개의 메소드를 호출하고 있는 메소드에서 아래 오류가 발생했습니다. 오류내용 Aborted connection - Error enlisting in transaction - connection might be broken? Please check the logs for more information... - nested exception is org.apache.ibatis.executor.ExecutorException: Error preparing statement: the XA resource has be..
High Performance Browser Networking The "High Performance Browser Networking" aims to improve the loading speed of web pages. Network Techniques to improve browser performance HTTP/2: a single connection can handle multiple requests and responses Caching: a technique of storing resources from servers in browser to reuse. DNS Prefetch : a technique to reduce the time for translating DNS in websi..
Trade Off We can understand Trade Off as a process of balancing different factors. Somtimes we may have to sacrifice somthing in order to gain others. Let's explore three examples of the Trade off in software development. 1. Performance & Resource Higher performance, Higher Resources and Prices. 2. Security & Conveinence Higher Security, Lower Coveinence 3. Accuracy & Time Higher Accuracy, more ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/rZ2Fz/btsitHpzICn/NF9ZxNvqeTklQXfeD2KEo0/img.png)
안녕하세요, 조영호입니다. 오늘은 Mybatis를 쓰면서 캐싱과 관련해서 고민했던 내용을 공유하고자 합니다. 백엔드 개발을 하시는 분들이라면 한 번 쯤은 아래와 같은 고민을 해보셨을 것 같습니다. "API들이 호출될때마다 특정 query를 매번 호출해야 하는 경우, 과연 이대로 성능은 괜찮을까?" 예를들어 제공하려는 조회 API가 100개인데, 각 API를 호출할때 마다 사용자의 상태가 바뀌었는지 DB에서 조회를 해야하는 상황이 있다고 가정해보자. 그러면 우리는 수 천명의 동시 접속자가 각각 API를 호출하게 되면 엄청난 성능 저하가 발생할 것으로 예상할 수 있다. 위와같은 경우 우리는 Redis 같은 메모리디비나, 자체적으로 Bean으로 등록한다거나 해서 비용을 줄일 수 있다. 하지만, JPA나 Myb..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cibWra/btrZ6jNbiMY/p1FPbdcznflIOYxVv1aJ91/img.png)
안녕하세요 조영호입니다. 오늘은 고객사와 제 회사간의 네트워크를 전용선으로 연결했던 경험에 대해 소개하고자 합니다. 구분 출발지 SNAT DNAT 도착지 고객사 10.10.10.123 (폐쇄망) 192.168.10.123 192.168.128.1 내회사 192.168.128.456 192.168.128.2 서비스 환경을 먼저 설명드리자면, 고객사는 내부망(폐쇄망)을 사용하고 있었고 내부망에 구축한 JAVA 서비스에서 제 회사로 API 요청을 보내야하는 상황이었습니다. 우선, 사설 IP를 사용하고있는 고객사에서는 NAT 변환을 통해 사설 IP 공인 IP의 연결 구간을 준비했고 제 회사는 외부망 용 로드밸런서를 통해 서비스를 제공하고자 했습니다. 위에서 사용한 개념들에 대한 설명입니다. 사설 IP : 인터넷..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cZ64vo/btsivSp6QHq/sCfk31kkZahLUpnHxcflBK/img.jpg)
안녕하세요 조영호입니다. 오늘은 성능테스트 당시 발견한 CPU 사용률이 100%까지 올라가는 현상을 해결한 경험을 공유하고자 합니다. 다른 웹 페이지들과는 다르게 빅데이터(약 80,000,000건)를 조회하는 페이지에서 TPS가 너무 낮게 나오는 현상이 있었습니다. 이슈 내용 Database 조회 Table에는 적절한 Index를 설정했다 조회 API에서 Index 검색을 탈 수 있도록 필요한 컬럼들을 파라미터로 보냈다 동시접속자 30명이 넘어가면 CPU가 100%를 치면서 서비스가 마비되는 현상이 발생했다. 테스트 내용 Jmeter로 동시 접속 사용자를 기준으로 웹 사이트의 부하테스트를 수행했습니다. 일반적으로 데이터가 많지 않은 Back-end API는 호출시 300 tps 이상의 빠른 응답을 보였지..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mD3hi/btsitFyxV64/fed4Q0QW2ligEaBedWJYM1/img.png)
안녕하세요, 조영호입니다. 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..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cEXeaG/btsivhp71Rs/d1gSLyIh2gAhPb84pQjRrk/img.jpg)
안녕하세요 조영호입니다. 오늘은 한글 인코딩으로 이틀간 고생했던 경험을 공유하고자 합니다. 혹시라도 누군가에게 도움이 되시길 바라면서.. 상황 설명 저는 VM 2개와 Rabbitmq 1개 사이에서 데이터를 주고받는 서비스를 개발하고 있었습니다. VM들에는 각각 A서비스, B서비스가 실행되고 있는 상태였습니다. 한글 인코딩 문제는, A서비스에서 "message" : "한글메세지" 형태로 메세지를 Rabbitmq로 보내서 B서비스에서 메세지를 Json Parsing 할때 예외가 발생했습니다. 예외 내용 예외의 내용은 대략 아래와 같았습니다. Json Parsing Exception : ':' is not expected value on "message" : "+#)!#*(":#(@". 메세지가 전달되는 과정..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VZ7sz/btsitGK4cbz/Pc20hCMbHbJOzLFYMy3os0/img.png)
안녕하세요 조영호입니다. 오늘은 업무 중 세마포어와 관련된 질문을 받았고 바로 명쾌하게 대답하지 못했던 것이 아쉬워서 글로 남겨봅니다. 받은 질문과 대답 Q :"현 프로젝트에서 세마포어 구조를 쓰고있나요? 가령, 캐시 사용 같은 부분에서요" A : "프로세스 간에 함께 공유하는 자원이 없어 세마포어를 쓰고있지 않습니다" 자 우선 OS 이론에서 자주 등장하는 세마포어, 뮤텍스, 동기화의 차이에 대해서 알아보겠습니다. 세마포어(Semaphore) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 여러 Process 혹은 Thread가 접근하는 것을 막아줍니다(즉, 동기화 대상이 하나 이상) 뮤텍스(Mutex) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cm3D69/btrGEieXjdN/olQaEajxK4noKY7ZS3mFW0/img.png)
안녕하세요~ 조영호입니다. 오늘은 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는 설정파일이..