2022 Masters Course/Web Backend Course

2022 마스터즈 코스(백엔드) 42일차 회고(2022. 3. 8.) - "이해 안되는 것을 넘길 줄 아는 지혜"

ikjo 2022. 3. 9. 02:34

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

마스터즈 코스 과정을 하면서 만나는 수많은 미션 과제들과 개념들을 만날 때면 이해가 되는 것도 있지만 당연히 이해가 되지 않는 것들도 많이 만나게 된다. 나는 약간의 "강박(?)"이 있어 어떤 과제가 주어지거나 어떤 새로운 개념을 학습할 때면 항상 "이해가 되야 직성이 풀리는" 경향이 있는데 이러한 마인드는 대충(?) 학습을 하는 것을 방지해주는 효과가 있었지만 이해 안되는 것을 만났을 때 나의 리소스(예를 들어 시간, 체력 등)를 지나치게 많이 소모하는 문제가 있었다.

 

하지만 학습을 하다보면 생각보다 지금 당장은 이해할 수 없어도 시간이 지나고 경험과 지식이 충분히 쌓인 후에야 비로소 이해되는 것들이 상당히 많았다. 처음 학습하는데 이해가 안 된다고 많은 리소스를 썼다 해도 막상 이후에(어느 정도 경험과 지식이 쌓인 후) 다시 공부해보면 제대로 이해하지 못한 것들이 숱했었다.

 

대표적인 예로 내가 작년도에 혼자 학습했었던 부분들을 이번 마스터즈 코스 과정을 통해 다시 보면서 다시금 제대로 이해하는 시간을 가지고 있는 중이다. 물론, 작년도에 학습을 했었기 때문에 이번 과정에서 학습하는데 도움이 많이 되었던 것은 확실하다. 하지만 너무 딥(deep)하고 사소한 부분들에 지나치게 학습을 많이 했던 것은 지양할 필요가 있었다. 당시의 경험과 지식으로는 이해하지 못하는 부분들이었기 때문이다.

 

이러한 것들을 생각해보니 좀 더 여유를 가지고 지금 당장 이해가 되지 않더라도 다음으로 넘길 줄 아는 지혜가 필요하다는 생각이 들었다. 그동안 나의 강박으로 인해 이해가 안 되면 마치 내가 제대로 학습을 하지 않은 것처럼 생각이 들곤 했었지만 결과론적으로 보면 차라리 그때 나의 리소스를 지나치게 쓰지 않고 이해가 되는 것들 학습에 우선했었다면 더 생산적인 학습이 되지 않았을까라는 생각이 들었다.

 

과거에도 그랬듯이 현재 마스터즈 코스 과정 중에 학습을 하면서도 이해되지 않는 부분들에 많은 강박에 시달리고 있었는데 이처럼 앞으로는 지금 당장 내가 이해안되는 게 있더라도 지혜롭게 다음으로 넘겨보는 연습을 해야 할 필요성을 느꼈다. 물론 어느 정도의 "적당한" 강박은 필요하다고 생각한다. 🤣

 

 

학습 회고

  • 스프링 부트 관련 미션 과제 풀이
    • Java 웹 백엔드 클래스 내 소모임원과 zoom 회의실에서 학습

 

어제에 이어 오늘 역시 데이터 베이스에 대해 추가로 학습해보는 시간을 가졌다. 오늘 학습했었던 주요 내용으로는 다음과 같다.

 

ConnectionPool이란?

데이터 베이스 연결은 비용이 많이 드는데(시간이 오래 걸리거나 자원을 많이 소모함) 이를 개선하기 위해 DBMS와 커넥션을 미리 많이 맺어둔 객체를 사용하는데 이를 커넥션 풀(ConnectionPool)이라고 한다. 어떤 커넥션이 필요해지면 이 커넥션 풀로부터 빌려서 사용한 후에 반납하게 되는데 커넥션을 반납하지 않으면 커넥션 풀의 커넥션이 없어서 프로그램이 늦어지거나 심할 경우 장애 발생할 수 있다. 이때 DataSource 객체는 커넥션 풀을 관리하는 목적으로 사용되는 객체이다. DataSource를 이용해 커넥션을 얻어오고 반납(close 메소드 호출)하는 등의 작업을 수행할 수 있게 된다.

 

Transaction이란?

트랜잭션이란 데이터 베이스의 상태를 변화시키기 위해 수행하는 SQL(SELECT, INSERT, DELETE, UPDATE) 등 작업의 단위를 의미한다. 이러한 트랜잭션에는 아주 중요한 4가지 특징이 있는데 바로 "원자성", "일관성", "독립성", "지속성"이다.

 

원자성은 트랜잭션에 속하는 작업들이 모두 성공하거나 모두 실패해야하는 것을 의미한다. 예를 들어 insert 후 update가 되어야 하는데 insert는 성공하고 update가 실패하면 (insert 하는 테이블과 update 하는 테이블에 관계가 있을시) 데이터의 무결성이 보장되지 않기 때문에 update가 실패하면 insert 문으로 실행한 결과가 rollback(모두 반영되지 않음) 되어야한다. 반대로 모두 성공했을 때는 모든 정보를 반영하는데 이를 commit이라고 한다.

 

일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 트랜잭션이 진행되는 동안에 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터로 진행되어야 한다.

 

독립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을 때 어떤 트랜잭션의 작업 중간에 다른 트랜잭션이 끼어들 수 없는 것을 의미한다. 즉, A 트랜잭션의 작업이 완료될 때까지 B 트랜잭션은 A 트랜잭션 중간 작업 결과를 참조할 수 없다.

 

지속성은 트랜잭션이 성공적으로 완료되었을 경우, 그 결과가 영구적으로 반영되어야 한다는 것을 의미한다.

 

 

좋았던 점

  • 1~2월간 알고리즘 공부에 굉장히(?) 인색했었습니다. 그래도 3월 들어서 알고리즘 공부를 다시 조금씩 시작하면서 많이 배워가고 있습니다. 💪

 

 

아쉬웠던 점

  • 오늘 하루도 학습하면서 이해 안되는 것에 지나치게 많은 리소스를 소모했었는데 "그 시간에 다른 것을 학습했었다면"이라는 아쉬움이 있습니다.

 

 

이전 보다 개선되었던 점

  • 그동안 프로그래밍을 학습하면서 모르는 것 내지 이해 안되는 것을 만나면 "당장" 해결하려고 무리했었던 적이 많았었는데 이해 안되는 것들을 "다음으로 넘기는" 연습을 하기로 마음 가짐을 가질 수 있었습니다.