-
[백엔드 기술 면접] #7 Server (3)
#7 Server (3) Q. Java 17 버전을 사용한 이유는 무엇인가?A. Java 17은 LTS(Long-Term Support) 버전으로, 안정성과 장기적인 지원을 제공합니다. 또한, 성능 향상과 새로운 기능들, 특히 텍스트 블록을 통한 코드 가독성을 향상시킬 수 있었으며, record 객체를 이용하여 보일러플레이트 코드를 크게 줄일 수 있습니다. Q. GraphQL과 REST의 차이는 무엇인가?A. GraphQL은 클라이언트가 필요한 데이터만 요청할 수 있게 해주어 오버페칭과 언더페칭을 줄일 수 있으며, REST는 정형화된 HTTP 메서드를 사용해 리소스를 처리합니다. GraphQL은 하나의 엔드포인트로 다양한 쿼리를 처리할 수 있지만, REST는 리소스마다 별도의 엔드포인트를 가집니다. Q...
2024.11.22
-
[DB] ElasticSearch의 Suggest API
Suggest API SuggestAPI에서 사용되는 Suggester는 색인이 된 대상을 FST(유한상태 변화기)라는 데이터 구조를 만들어 In-Memory에 올려 일반 검색 API보다 훨씬 응답이 빠르다. 이때, 인메모리에 올라가니 변경이 적은 것이 좋다. FST Type을 사용하고 싶으면 mapping에서 completion type으로 지정하면 된다. Completion field type | Elasticsearch Guide [8.16] | ElasticCompletion field type edit To use the completion suggester, map the field from which you want to generate suggestions as type completion..
2024.11.21
-
[백엔드 기술 면접] #6 시스템 설계
Q. SNS에서 친구 관계에 대해 기록을 하고 싶다. 어떤 종류의 DB를 사용하는 것이 적절할까? 그 이유는?A. 그래프 데이터베이스(예: Neo4j)가 적절합니다. 이유는 친구 관계를 노드(사용자)와 엣지(친구 관계)로 모델링할 수 있으며, 관계를 빠르게 탐색하고 쿼리하는 데 최적화되어 있기 때문입니다. Q. 사용자의 위치 정보를 기반으로 근처의 상점을 추천하는 기능을 구현하려고 한다. 어떤 데이터베이스를 사용할 것이며, 어떻게 구현할 것인가?A. 사용자의 위치 정보를 기반으로 근처의 상점을 추천하는 기능을 구현하기 위해 PostgreSQL 데이터베이스를 사용하는 것이 적합합니다. 그 이유는 PostgreSQL의 PostGIS 확장이 지리적 데이터를 효율적으로 처리하고 쿼리하는 데 최적화되어 있기 때문..
2024.11.20
-
[DB] ElasticSearch의 Search API
SearchAPI란?SearchAPI는 ElasticSearch에서 데이터 검색과 필터링을 위한 API입니다. 특정 조건으로 데이터를 검색하고, 정렬, 페이징, 집계 등에 적용할 수 있습니다. 크게 두가지 방법으로 전달할 수 있습니다. 첫번째가 URI Search인데 이건 우리가 ?query=”hello” 이런식으로 REST에서 보내는 방법입니다. 간단한 검색이면 몰라도, 사실 크게 자주 쓰지 않습니다. 두번째가 Query DSL인데 아래처럼 Body에 넣어서 보내는 것입니다. 대부분 후자 방법을 이용합니다. (더 상세한 표현이 가능하고 재사용성이 좋기 때문입니다.)QueryDSL에는 위 사진과 같은 옵션을 넣을 수 있습니다. 특히, query부분이 중요한데, 이 곳에 우리가 SQL로 작성해서 DB에서 ..
2024.11.19
-
[네트워크] HTTP와 HTTPS
HTTP란?Hypertext Transfer Protocol의 의 줄임말로 웹 상에서 브라우저와 서버가 데이터를 주고 받을때 사용하는 프로토콜입니다. 애플리케이션 계층에서 작동됩니다.HTTP 1.X 버전Persistent connection과 Parallel connection Persistent Connection이란 TCP Connection을 요청마다 Close하지 않고 재사용하여 통신하는 방법을 말한다. 보통 클라이언트는 웹페이지 내의 여러 데이터를 가져오기 위해 같은 서버에 여러 번 요청을 하게 되는 경우가 많다. (Site Locality) parallel connection이란 병렬적으로 동시에 여러 connection을 맺는 것을 의미한다. 물론 parallel connection은 thr..
2024.11.18
-
[DB] 백엔드 개발자를 위한 효율적인 데이터베이스 선택 가이드
1. 데이터베이스의 구분데이터베이스는 크게 SQL DB와 NoSQL DB로 나눌 수 있다. SQL DB는 스키마 기반의 테이블 구조를 가지고 있으며 ACID 특성을 보장하며, 금융 시스템과 같이 데이터 무결성과 트랜잭션 관리가 중요한 경우 사용된다. 게다가 40년 넘게 사용되고 있는 만큼 높은 안정성과 신뢰성을 자랑한다. 하지만, NoSQL DB에 비해서 확장성과 샤딩이 어렵다는 단점이 있다. 반면에, NoSQL DB는 스키마가 유연하고 대규모 데이터 분산 저장 및 처리에 최적화되어 있으며, BASE 특성을 가집니다. 또한, 빅데이터 분석을 처리하는데 탁월하며, 확장성도 훨씬 좋다. 하지만, 각각 DB마다 다르겠지만 호환성, 자료 부족 등의 문제가 있다. 실제로 위 그래프처럼, SQL DB가 거의 메..
2024.11.17
-
[백엔드 기술 면접] #5 Security
#5 Security Q. TLS와 mTLS의 차이에 대해서 이야기 해보아라.A. TLS는 서버 인증을 통해 클라이언트와 서버 간의 통신을 암호화하는 프로토콜이다. mTLS는 TLS의 확장으로, 서버와 클라이언트가 서로를 인증하는 양방향 인증을 제공한다. TLS는 서버만 인증하지만, mTLS는 클라이언트도 인증하여 보안을 강화한다. Q. HTTP와 HTTPS의 차이를 설명하고, HTTPS의 작동 과정에 대해서 서술해 보아라.A. HTTP는 데이터를 평문으로 전송하는 프로토콜이며 보안에 취약하다. HTTPS는 HTTP에 TLS 암호화를 추가하여 데이터를 안전하게 전송한다. HTTPS는 클라이언트가 서버의 인증서를 검증한 후 세션 키를 생성하여 암호화된 통신을 수행한다. Q. 세션과 쿠키의 차이에 대해서 설..
2024.11.16
-
[대규모 시스템 설계] Kafka의 기초
Kafka 기본 개념 정리1. Kafka Cluster와 BrokerCluster: 여러 Kafka Broker가 모여서 이루어지는 것. Broker는 하나의 Kafka 서버를 의미.Broker: 데이터를 저장하고, Producer로부터 데이터를 받아와 Consumer에게 전달하는 역할을 수행.2. Consumer LagLag: Producer가 데이터를 추가하는 속도가 Consumer가 데이터를 소비하는 속도보다 빠를 때, 마지막으로 소비된 오프셋(offset)과 마지막으로 추가된 오프셋 간의 차이. Consumer의 상태를 파악하는 데 중요한 지표로 사용됨.3. Topic과 PartitionTopic: Kafka에서 데이터를 저장하고 관리하는 단위.Partition: Topic을 분할한 단위. 각 P..
2024.11.15
-
[백엔드 기술 면접] #4 Server (2)
#4 Server (2)Q. API Rate Limiter를 구현할 수 있는 알고리즘 4가지를 설명해보아라.A. 첫 번째는 토큰 버킷 알고리즘입니다. 요청을 처리할 때마다 버킷에서 토큰을 꺼내 사용하는 방식으로, 토큰이 남아있으면 요청이 처리되고 없으면 요청이 버려집니다. 짧은 시간에 집중되는 트래픽을 처리할 수 있어 유용하지만, 버킷 크기와 토큰 공급률 설정이 까다로울 수 있습니다. 두 번째는 누출 버킷 알고리즘으로, 고정된 크기의 FIFO 큐를 사용해 요청을 관리합니다. 큐에 자리가 있으면 요청이 추가되고, 큐가 가득 차면 요청이 버려지며, 안정적인 처리율을 보장하지만 트래픽이 몰리면 새로운 요청이 처리되지 않을 수 있습니다. 세 번째는 고정 윈도 카운터 알고리즘입니다. 타임라인을 고정된 간격의 윈도..
2024.11.14
-
[DB] CSV 파일 데이터 DB에 업로드
CSV 파일을 사용하는 이유초기 데이터를 몇 개만 추가해야 한다면, 그냥 우리가 직접 DB 콘솔에 접속해서 하나하나 데이터를 넣거나 하면 된다. 하지만, 사실 우리가 데이터가 한두개일리가 절대 없다. 예를 들어, 공공데이터 포탈에서 데이터를 받아올 경우, 데이터가 수천, 수만건이 될 것이다. 이때, 이 데이터들을 하나씩 직접 입력하는 것은 비효율적일 뿐 아니라 시간이 많이 소요된다. 또, 만약 테이블이 통째로 삭제되는 문제가 발생한다면,수만개의 데이터를 다시 입력해야 하므로 상당한 노력이 필요하게 된다. CSV 파일을 활용하면 이런 문제를 해결할 수 있다. 한 번에 많은 데이터를 가져와 데이터베이스에 바로 삽입할 수 있기 때문에, 대량의 데이터 처리가 필요한 경우 CSV 파일 업로드는 훨씬 더 효율적이고..
2024.11.13