[디프만] 14기 X 인프런 CS 스터디 - CS 완전정복 스터디 수강일기 2편
디프만 14기에서 참여한 CS 완전정복 스터디, 후기 2편을 작성했습니다.
짧지만 길었던 CS 스터디가 끝났습니다..! ⭐️
이전 1편에 이은 2편 이야기를 작성해보았습니다:)
3주차는 데이터베이스
, 4주차는 네트워크
에 대한 내용을 다룹니다.
3, 4주차 학습한 내용이 면접에서 자주 등장하여 수강 후 정리한 내용을 바탕으로 작성하였습니다.
3주차 데이터베이스
다루는 내용은 위와 같이 데이터베이스에서 기본적으로 묻는 질문들입니다.
그중 left outer join
과 inner join
의 차이에 대해서는 항상 벤다이어그램으로 표현하며 학습하였지만, 하지만 강의에서 다음과 같이 명확하게 정리할 수 있었습니다.
inner join은 두 테이블의 공통된 데이터를 조회하며, on 절에서 null인 데이터는 포함되지 않습니다. 반면 left outer join은 왼쪽 테이블을 기준으로 오른쪽 테이블의 데이터가 null이어도 조회가 가능합니다.
이처럼 깔끔하게 정리하여 언제든 명확히 답할 수 있게 되었습니다.
다음으로 자주 등장하는 트랜잭션에 대해서도 다시 정리할 기회를 가졌습니다. 단순히 "트랜잭션이란 무엇인가요?"
라는 질문에 데이터베이스의 작은 작업 단위라는 짧은 답변 정도는 다들 하실 수 있을 것입니다. 하지만 "트랜잭션의 ACID 특성에 대해 설명해주세요"
라는 질문은 조금 더 깊이 있는 답변이 필요합니다.
ACID는 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 약자로, 트랜잭션이 안전하게 수행되기 위한 특성을 의미합니다. 이 특성들은 데이터베이스의 무결성을 유지하는 데 중요한 역할을 합니다.
- 원자성(Atomicity): 트랜잭션이 완전히 수행되거나 전혀 수행되지 않아야 함
- 일관성(Consistency): 트랜잭션이 완료된 후 데이터베이스는 일관된 상태여야 함
- 독립성(Isolation): 트랜잭션은 서로 독립적으로 수행되어야 함
- 지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 함
이 스터디를 통해 무결성 유지 및 트랜잭션의 ACID 특성 등 깊이 있는 내용을 학습할 수 있었습니다. 또한 스터디 당일 예상 질문을 받아 답하는 시간에서 트랜잭션 격리 수준이 필요한 이유에 대해 유익한 토론을 할 수 있었는데요.

트랜잭션 격리 수준이란? 트랜잭션이 서로 독립적으로 수행되도록 보장하는 방법으로, 데이터베이스에서 트랜잭션 간의 상호작용을 제어하는 수준을 의미합니다. 격리 수준은 트랜잭션이 다른 트랜잭션의 변경 사항을 얼마나 볼 수 있는지를 결정합니다. 격리 수준은 다음과 같이 4가지로 나뉩니다.
- Read Uncommitted: 다른 트랜잭션의 변경 사항을 읽을 수 있으며, Dirty Read가 발생할 수 있습니다.
- Read Committed: 다른 트랜잭션의 커밋된 변경 사항만 읽을 수 있으며, Non-Repeatable Read가 발생할 수 있습니다.
- Repeatable Read: 트랜잭션이 시작된 시점의 데이터만 읽을 수 있으며, Phantom Read가 발생할 수 있습니다.
- Serializable: 트랜잭션이 완전히 격리되어 실행되며, 다른 트랜잭션의 영향을 받지 않습니다.
위 이미지와 같이 일관성을 유지하고 독립성을 보장하기 위해 단계별 격리 수준에 대해 학습했습니다. 실제로 넥슨에서 받은 질문이어서 이 내용을 꾸준히 상기하였고, 자투리 시간을 활용하여 리마인드하고 있습니다.
데이터베이스 분야는 백엔드 개발자에게 필수적인 지식입니다. 스터디를 통해 다시 정리할 수 있었고, 스터디원들과의 토론을 통해 더 깊이 있는 내용을 학습할 수 있었습니다. 또한, 예상 질문을 통해 면접에서 자주 등장하는 질문들을 연습할 수 있어 큰 도움이 되었습니다. 흥미로운 분야라 앞으로도 지속적으로 공부할 계획입니다:)
4주차 네트워크
네트워크 챕터는 조금 당황스러웠습니다. 지금까지 면접을 보면서 OSI 7계층에 대한 질문을 받은 적이 없었기 때문입니다. 대학생 때 전공 수업으로 잠깐 학습하였지만 현업자로서 OSI 7계층을 깊게 공부할 필요성을 당시 느끼지 못했었습니다.
하지만 쿠키/세션, HTTP 메서드 등은 경력자에게도 자주 묻는 질문들이었고, 실제로 면접에서도 받았던 질문들입니다. 그만큼 위의 토픽들은 중요하며 실무에서도 자주 접하게 됩니다.
쿠키와 세션을 이용한 로그인 방식에 대한 강의도 유익했습니다.
위 이미지처럼 단계적으로 학습하여 세션을 통한 인증(auth) 절차는 다음과 같이 정리했습니다.
- 클라이언트가 로그인을 하면 서버가 회원 정보를 대조하여 인증(authentication)
- 서버는 회원 정보를 세션 스토리지에 저장하고 session ID 발급
- HTTP response header의 쿠키에 session ID를 포함하여 응답
- 클라이언트는 session ID를 쿠키에 저장하고 이후 요청마다 쿠키에 session ID를 담아 전송
- 서버는 쿠키에 담긴 session ID로 세션 스토리지에서 회원 정보를 조회(authorization)
- 서버는 조회된 정보를 바탕으로 처리된 데이터를 클라이언트에 응답
- 클라이언트는 서버로부터 받은 데이터를 화면에 출력
- 클라이언트가 로그아웃하면 서버는 세션 스토리지에서 해당 session ID를 삭제
- 클라이언트는 쿠키에서 session ID를 삭제
- 클라이언트는 로그아웃 상태로 서버에 요청 시 인증되지 않은 사용자로 처리
이처럼 단계별로 정리하여 스터디원들과 함께 학습했습니다. 쿠키와 세션은 웹 개발에서 자주 사용되는 개념으로, 클라이언트와 서버 간의 상태를 유지하는 데 중요한 역할을 합니다. 이 챕터에서는 쿠키와 세션의 차이점과 각각의 장단점에 대해서도 학습했습니다.
네트워크 챕터는 프론트/백엔드 개발자 모두에게 필수적인 지식이며, 강의에서도 상세히 설명하여 면접 준비에 큰 도움이 되었습니다.
후기
1~4주차까지 스터디를 성공적으로 마쳤습니다. 스터디 전의 저와 비교하면 많은 성장을 이루었다고 생각해요. CS 지식은 백엔드 개발의 기반이 되며 필수적으로 알아야 하는 내용이라 매주 스터디원들과 질문을 주고받으며 많은 것을 배울 수 있었습니다. 서로 질문하며 깊이 있는 토론과 유익한 아티클을 공유하는 것이 새로운 인사이트를 얻은 시간이라 생각해요:) 배우고 공부할 것이 많지만 이번 스터디처럼 앞으로도 서로의 지식을 공유하고 토론하는 시간을 가지며 성장할 수 있는 기회를 만들고 싶습니다☺️ (어디 재밌는 스터디 없을까~~~)
끄읕 >__<