카테고리 없음
[인프런 수강일기#4] 기출로 대비하는 개발자 전공면접 [CS 완전정복]
ヽ(°ᴥ°)ノ
2024. 1. 6. 19:53
3주차에는 "데이터베이스"를 배우고, 예상 질문과 답변을 작성해보고 서로 피드백하는 시간을 가졌습니다!!
강의에서 다루는 데이터베이스 내용은 전반적인 DB테이블 구조, 관계형 DB, SQL쿼리문, 인덱스, 데이터 탐색시 시간복잡도였습니다.
저는 거의 모든 프로젝트에서 백엔드 개발을 담당했어서 상대적으로 다른 개념들보다 이해하기 쉬웠습니다. 그럼에도 깔끔한 면접 답변을 위해서는 어느정도 개념 복습이 필요하다고 느꼈습니다.
스터디 후기
스터디 팀원들의 대부분이 백엔드 개발자였기 때문에 더 좋은 답변을 공유받을 수 있었습니다. 특히, Java로 개발하는 경우 이런 면접 질문이 들어올 수 있다라는 조언도 받았습니다.
이번 섹션은 강의를 통해 배운 것보다 스터디를 통해 배운 내용이 더 많았습니다. 생각보다 강의에서 많은 내용을 다루고 있지 않아서 팀원들이 올린 질문들을 보며 찾아서 공부하는 과정이 더 유익했습니다.
그리고 같은 질문에도 팀원들이 달아주신 ✨깔끔한✨ 답변을 보면서 나중에 참고하기에도 좋겠다라는 생각과 동시에 나도 저렇게 답변할 수 있도록 해야지!!라는 생각이 저절로 들었습니다 ㅎㅎ
이게 바로 스터디의 묘미?
아래는 제가 예상 질문에 작성한 답변입니다.
Q. Redis에 대해서 간단하게 설명해주세요.
A.
레디스는 key-value 형태로 데이터를 저장하며, 다양한 자료구조를 지원합니다. 또한, 인메모리DB로, 모든 데이터를 메모리에 저장하고 조회하기 때문에 기존의 디스크에 데이터를 저장하는 관계형DB보다 빠른 속도를 제공합니다. 보통 빠른 속도가 필요한 캐시 용도로 자주 쓰입니다.
Q. 동시성 문제(데이터 정합성 깨지는 문제)를 해결하는 방법 3가지에 대해 말하시오
A.
Lock 의 유형을 중심으로 설명
DB lock
동시성 문제를 DB에서 제공하는 방법으로 해결할 수 있습니다.
비관적 lock
자원을 요청할때 동시성 문제가 발생할 것이라고 가정하고 미리 락을 걸어버리는 방식입니다. 하나의 트랜잭션이 자원에 접근하면 락을 걸어 다른 트랜잭션이 접근하기 못하게 막습니다.
낙관적 lock
자원에 락을 걸어서 선점하지 말고, 동시성 문제가 발생하면 그때 처리하는 방식입니다. 보통 version의 상태를 보고 충돌을 확인하고, 충돌이 확인된 경우 롤백을 진행하는 방식으로 실행됩니다.
분산락
분산락이란, 분산 환경 속에서 상호 배제를 구현하여 동시성 문제를 해결하는 방법입니다. 분산락은 보통 락에 대한 정보를 한 곳에 공통적으로 보관하며, 분산 환경에서 여러 대의 서버들은 공통된 락에 대한 정보가 저장되있는 곳을 바라보며 접근할 수 있는지 확인하는 방식으로 동시성 문제를 해결합니다.
MySQL의 Named lock
테이블이나 레코드, 데이터베이스 객체가 아닌 사용자가 지정한 문자열에 대해 락을 획득하고 반납하는 잠금으로, 한 세션이 Lock을 획득한다면, 다른 세션은 해당 세션이 Lock을 해제한 이후 획득할 수 있다. Lock에 이름을 지정하여 어플리케이션 단에서 제어가 가능하다.
Redis lock
lock에 대한 정보를 redis에 보관하는 방식입니다.
참고
https://velog.io/@hyojhand/named-lock-distributed-lock-with-redis https://ksh-coding.tistory.com/125
이상 스터디 후기였습니다
위 내용은 아래 강의를 듣고 작성한 내용입니다