Logochar-yb

[디프만] 14기 X 인프런 CS 스터디 - CS 완전정복 스터디 수강일기 2편

디프만 14기에서 참여한 CS 완전정복 스터디, 후기 2편을 작성했습니다.

짧지만 길었던 CS 스터디가 끝났습니다..! ⭐️ 이전 1편에 이은 2편 이야기를 작성해보았습니다:) 3주차는 데이터베이스, 4주차는 네트워크에 대한 내용을 다룹니다. 3, 4주차 학습한 내용이 면접에서 자주 등장하여 수강 후 정리한 내용을 바탕으로 작성하였습니다.


3주차 데이터베이스

image

다루는 내용은 위와 같이 데이터베이스에서 기본적으로 묻는 질문들입니다. 그중 left outer joininner join의 차이에 대해서는 항상 벤다이어그램으로 표현하며 학습하였지만, 하지만 강의에서 다음과 같이 명확하게 정리할 수 있었습니다.

inner join은 두 테이블의 공통된 데이터를 조회하며, on 절에서 null인 데이터는 포함되지 않습니다. 반면 left outer join은 왼쪽 테이블을 기준으로 오른쪽 테이블의 데이터가 null이어도 조회가 가능합니다.

이처럼 깔끔하게 정리하여 언제든 명확히 답할 수 있게 되었습니다.

다음으로 자주 등장하는 트랜잭션에 대해서도 다시 정리할 기회를 가졌습니다. 단순히 "트랜잭션이란 무엇인가요?"라는 질문에 데이터베이스의 작은 작업 단위라는 짧은 답변 정도는 다들 하실 수 있을 것입니다. 하지만 "트랜잭션의 ACID 특성에 대해 설명해주세요"라는 질문은 조금 더 깊이 있는 답변이 필요합니다. ACID는 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 약자로, 트랜잭션이 안전하게 수행되기 위한 특성을 의미합니다. 이 특성들은 데이터베이스의 무결성을 유지하는 데 중요한 역할을 합니다.

  • 원자성(Atomicity): 트랜잭션이 완전히 수행되거나 전혀 수행되지 않아야 함
  • 일관성(Consistency): 트랜잭션이 완료된 후 데이터베이스는 일관된 상태여야 함
  • 독립성(Isolation): 트랜잭션은 서로 독립적으로 수행되어야 함
  • 지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 함

이 스터디를 통해 무결성 유지 및 트랜잭션의 ACID 특성 등 깊이 있는 내용을 학습할 수 있었습니다. 또한 스터디 당일 예상 질문을 받아 답하는 시간에서 트랜잭션 격리 수준이 필요한 이유에 대해 유익한 토론을 할 수 있었는데요.

image

트랜잭션 격리 수준이란? 트랜잭션이 서로 독립적으로 수행되도록 보장하는 방법으로, 데이터베이스에서 트랜잭션 간의 상호작용을 제어하는 수준을 의미합니다. 격리 수준은 트랜잭션이 다른 트랜잭션의 변경 사항을 얼마나 볼 수 있는지를 결정합니다. 격리 수준은 다음과 같이 4가지로 나뉩니다.

  1. Read Uncommitted: 다른 트랜잭션의 변경 사항을 읽을 수 있으며, Dirty Read가 발생할 수 있습니다.
  2. Read Committed: 다른 트랜잭션의 커밋된 변경 사항만 읽을 수 있으며, Non-Repeatable Read가 발생할 수 있습니다.
  3. Repeatable Read: 트랜잭션이 시작된 시점의 데이터만 읽을 수 있으며, Phantom Read가 발생할 수 있습니다.
  4. Serializable: 트랜잭션이 완전히 격리되어 실행되며, 다른 트랜잭션의 영향을 받지 않습니다.

위 이미지와 같이 일관성을 유지하고 독립성을 보장하기 위해 단계별 격리 수준에 대해 학습했습니다. 실제로 넥슨에서 받은 질문이어서 이 내용을 꾸준히 상기하였고, 자투리 시간을 활용하여 리마인드하고 있습니다.

데이터베이스 분야는 백엔드 개발자에게 필수적인 지식입니다. 스터디를 통해 다시 정리할 수 있었고, 스터디원들과의 토론을 통해 더 깊이 있는 내용을 학습할 수 있었습니다. 또한, 예상 질문을 통해 면접에서 자주 등장하는 질문들을 연습할 수 있어 큰 도움이 되었습니다. 흥미로운 분야라 앞으로도 지속적으로 공부할 계획입니다:)


4주차 네트워크

네트워크 챕터는 조금 당황스러웠습니다. 지금까지 면접을 보면서 OSI 7계층에 대한 질문을 받은 적이 없었기 때문입니다. 대학생 때 전공 수업으로 잠깐 학습하였지만 현업자로서 OSI 7계층을 깊게 공부할 필요성을 당시 느끼지 못했었습니다.

하지만 쿠키/세션, HTTP 메서드 등은 경력자에게도 자주 묻는 질문들이었고, 실제로 면접에서도 받았던 질문들입니다. 그만큼 위의 토픽들은 중요하며 실무에서도 자주 접하게 됩니다.

쿠키와 세션을 이용한 로그인 방식에 대한 강의도 유익했습니다.

위 이미지처럼 단계적으로 학습하여 세션을 통한 인증(auth) 절차는 다음과 같이 정리했습니다.

  1. 클라이언트가 로그인을 하면 서버가 회원 정보를 대조하여 인증(authentication)
  2. 서버는 회원 정보를 세션 스토리지에 저장하고 session ID 발급
  3. HTTP response header의 쿠키에 session ID를 포함하여 응답
  4. 클라이언트는 session ID를 쿠키에 저장하고 이후 요청마다 쿠키에 session ID를 담아 전송
  5. 서버는 쿠키에 담긴 session ID로 세션 스토리지에서 회원 정보를 조회(authorization)
  6. 서버는 조회된 정보를 바탕으로 처리된 데이터를 클라이언트에 응답
  7. 클라이언트는 서버로부터 받은 데이터를 화면에 출력
  8. 클라이언트가 로그아웃하면 서버는 세션 스토리지에서 해당 session ID를 삭제
  9. 클라이언트는 쿠키에서 session ID를 삭제
  10. 클라이언트는 로그아웃 상태로 서버에 요청 시 인증되지 않은 사용자로 처리

이처럼 단계별로 정리하여 스터디원들과 함께 학습했습니다. 쿠키와 세션은 웹 개발에서 자주 사용되는 개념으로, 클라이언트와 서버 간의 상태를 유지하는 데 중요한 역할을 합니다. 이 챕터에서는 쿠키와 세션의 차이점과 각각의 장단점에 대해서도 학습했습니다.

네트워크 챕터는 프론트/백엔드 개발자 모두에게 필수적인 지식이며, 강의에서도 상세히 설명하여 면접 준비에 큰 도움이 되었습니다.


후기

1~4주차까지 스터디를 성공적으로 마쳤습니다. 스터디 전의 저와 비교하면 많은 성장을 이루었다고 생각해요. CS 지식은 백엔드 개발의 기반이 되며 필수적으로 알아야 하는 내용이라 매주 스터디원들과 질문을 주고받으며 많은 것을 배울 수 있었습니다. 서로 질문하며 깊이 있는 토론과 유익한 아티클을 공유하는 것이 새로운 인사이트를 얻은 시간이라 생각해요:) 배우고 공부할 것이 많지만 이번 스터디처럼 앞으로도 서로의 지식을 공유하고 토론하는 시간을 가지며 성장할 수 있는 기회를 만들고 싶습니다☺️ (어디 재밌는 스터디 없을까~~~)

image

끄읕 >__<

On this page