728x90
반응형
- 시스템 간 비동기 연동 방식에는 무엇이 있나요?2025-03-04 10:48:44분리된 시스템 간의 비동기 연동은 시스템 간의 결합도를 낮출 수 있으며, 호출된 시스템의 응답을 기다리지 않으므로 더욱 빨리 사용자의 요청에 응답할 수 있다는 장점이 있습니다. 비동기 연동 방식으로 메시징 시스템 활용, 데이터베이스 활용, CDC 활용 방식을 알고 있습니다.각 방식에 대한 설명과 고려 사항을 설명해 주세요. 😀메시징 시스템 활용 방식은 두 시스템 사이에 메시징 시스템을 두어 비동기로 연동하는 방식입니다. 해당 방식은 한 시스템에서 메시지를 생성해서 메시징 시스템에 송신한 이후, 다른 시스템에서 메시징 시스템으로부터 메시지를 읽어와 메시지를 처리합니다. KafKa, RabbitMQ가 주로 메시징 시스템으로 활용됩니다. 해당 방식은 처리량이 높은 것이 장점입니다. 하지만, 메시지 유실, 메..
- 캐시 스탬피드 현상에 대하여 설명해주세요.2025-03-03 17:02:22그림과 함께 설명해 주시겠어요? 😀대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.이 문제는 어떻게 풀어볼 수 있을까요? 🤓해당 방식은 크게 잠금, 외부 재계산, 확률적 조기 재계산 방식으로 풀어볼 수 있습니다. 잠금(Locking) 방식 은 한 요청 처리 스레드가 해당 캐시 키에 대한 잠금을 획득합니다. 이로인해 다른 요청 처리 스레드들은 잠..
- 관계형 데이터베이스와 비 관계형 데이터베이스의 차이점은 무엇인가요?2025-02-26 09:22:42관계형 데이터베이스는 고정된 로우와 컬럼으로 구성된 테이블에 데이터를 저장합니다. 그리고 SQL을 사용하여 여러 테이블에 존재하는 데이터와 관계에 따라서 조인하여 합칠 수도 있습니다. 관계형 데이터베이스는 데이터를 중복 없이 한 번만 저장하고, 데이터 무결성을 보장합니다. 관계형 데이터베이스의 경우 일반적으로 스케일 업을 사용하여 확장합니다. 관계형 데이터베이스는 스키마를 유연하게 바꾸기 어렵다는 한계가 존재합니다. 또한, 관계가 존재하기 때문에 비즈니스 요구사항이 더욱 발전하면 복잡한 쿼리가 생기게 됩니다. 반면, 비 관계형 데이터베이스는 NoSQL이라고 불리기도 하는데요. 정해진 스키마가 존재하지 않으며 자유롭게 데이터를 저장하고 조회할 수 있습니다. 문서, 키-값, 와이드 컬럼, 그래프 유형이 존재..
- HTTP/1.1과 HTTP/2.0에 대해서 설명해주세요.2025-02-25 10:53:16HTTP/1.1에 대해서 설명해주세요.HTTP는 웹상에서 클라이언트와 서버 간 통신을 위한 프로토콜입니다.HTTP/1.0의 경우에는 한 개의 요청과 응답마다 TCP 커넥션을 생성하여 사용됐습니다.하지만, 이러한 방식은 매 요청마다 연결을 생성하는 오버헤드가 발생합니다. HTTP/1.1은 이러한 문제를 지속 커넥션(Persistent Connection) 이라는 지정한 타임아웃만큼 커넥션을 종료하지 않는 방식으로 해결합니다. 또한 파이프라이닝(Pipelining) 을 지원하여 요청의 응답 지연을 감소시킵니다.파이프라이닝에서 HTTP 요청은 연속적이며, 순차적으로 전달됩니다.기존에는 요청한 이후에 응답을 기다리고 그 다음 요청을 보냈는데요.파이프라이닝에서는 필요한 모든 자원에 대한 요청을 순차적으로 서버로 ..
- 프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유는 무엇인가요?2025-02-24 21:46:54컨텍스트 스위칭(Context Switching)이란?컨텍스트 스위칭은 CPU나 코어에서 실행 중이던 프로세스나 스레드가 다른 프로세스나 스레드로 교체되는 과정을 말합니다.이는 멀티태스킹 시스템에서 여러 작업을 효율적으로 관리하기 위해 필수적인 메커니즘입니다.컨텍스트(Context)란?컨텍스트는 프로세스나 스레드의 현재 상태를 의미합니다.여기에는 CPU의 레지스터 상태(프로그램 카운터, 스택 포인터 등)와 메모리 상태가 포함됩니다.컨텍스트는 프로세스나 스레드가 실행을 중단하고 나중에 다시 시작할 때 필요한 모든 정보를 담고 있습니다.컨텍스트 스위칭이 필요한 이유멀티태스킹 시스템에서는 여러 프로세스나 스레드가 동시에 실행되는 것처럼 보이도록, CPU가 짧은 시간 단위로 작업을 전환하며 여러 작업을 처리합니..
- K6로 토큰 인증 절차가 필요한 API 테스트 하기2025-02-24 20:39:36부하 및 성능 테스트 도구인 k6를 사용해서 api 테스트를 진행하려던 중 JWT access token을 필요로 하는 api를 테스트하기 위해서 k6에서 어떤 식으로 토큰을 처리해야할 지 알아보자.k6 사용법 일단 기존 코드에서 access token을 어떻게 생성하는지 부터 알아보았다. JwtProvider.classprivate Key key;@Value("${jwt.accessTokenExpireTime}")private long accessTokenExpireTime;@Value("${jwt.refreshTokenExpireTime}")private long refreshTokenExpireTime;@Value("${jwt.secret}")private String secretKey;...@P..
- 성능테스트를 위한 K6 사용법2025-02-24 18:45:56k6란 성능 테스트 및 부하 테스트를 위한 오픈 소스 도구이다.웹 어플리케이션의 API 성능을 측정하는데 사용된다.동시 접속, 가상의 유저, 반복 횟수 등을 설정해서 서버 응답 시간, 처리량 등을 확인 할 수 있습니다.또한 가장 큰 장접은 Javascript 코드를 통해 테스트 시나리오를 작성 할 수 있다는 것이고 Grafana 진영에서 개발되어 연동이 수월해진다. 정리하자면grafana에서 제공javascript로 테스트 작성가상 유저, 반복, 서버 응답 시간, 처리량 등 확인 가능Docker를 통해 k6를 사용해보겠다.그냥 인텔리제이 터미널에서 진행했다.1. 설치docker image 다운로드 docker pull grafana/k6 2. 스크립트 작성초기 생성 시 존재하는 기본 코드import h..
- [feature] 댓글 공개 여부 기능 추가(1)2025-02-21 16:49:10댓글 기능을 구현한 뒤에 댓글에 비밀 댓글 기능도 있어야 한다고 판단되어서 추가하게 되었다. 댓글 공개 여부 기능을 추가하기 위해서 어떤 것들을 변경해야할까?Entity 컬럼에 boolean 타입으로 isPublic 변수 추가하기isPublic 컬럼을 통해 비밀 댓글인지 아닌지 판단하는 로직을 프론트에서 진행할건지 백엔드에서 진행할건지에 대해 큰 고민을 하게 되었다. 프론트에서만 진행할 경우 isPublic 컬럼을 포함함 응답 dto를 받은 프론트가 비밀 댓글로 나타내야하는 경우 본문 내용을 "비밀 댓글입니다."로만 바꿔주면 된다.하지만 프론트에서만 로직을 수행하는 만큼 보안상 취약하다. 백엔드에서 로직을 진행할 경우 findAll()메서드를 통해 전체 조회를 한 후조회된 댓글 리스트를 for문을 돌면서..
728x90
반응형