해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)
수강 회고
2주간의 개인 학습 정리를 모두 마치며...
오늘로 벌써 2주간의 개인 학습 정리 주간이 모두 종료되었다. 개인 학습 정리 주간이 시작하기 전(정확히는 방학을 하기 전) 이후에 있을 팀 프로젝트를 위해 나름 야심차게 이거 해야지 저거 해야지 생각을 하고 있었지만, 결론적으로 절반도 하지 못했었던 것 같다..💦 (나의 이상과 현실간에 괴리가 상당히 크다...😅) 아무쪼록 이번 개인 학습 정리 주간을 마치면서 지난 2주간에 학습했었던 내용들을 정산하고자 한다.
이번 2주차 위클리 스케줄 역시 지난 1주차 위클리 스케줄과 동일하게 JPA 프로그래밍과 데이터 베이스를 중점적으로 학습하되, 꾸준하게 알고리즘 문제와 일일회고 그리고 운동(30분)을 실천하고자 하였다.
개인 학습 정리 정산 시간
앞서 지난 1주차 개인 학습 정리에 대해서는 자체적인 평가로 100점 만점 중 60점 정도는 달성한 것 같다고 했었다. JPA 프로그래밍 학습 부분이 가장 아쉬웠고, 당초 의도와는 다르게 데이터 베이스에 대해 좀 더 중점적으로 학습했었다. 반면에 규칙적으로 수행했었던 알고리즘 문제 풀이나 일일 회고 그리고 운동 같은 경우에는 원래 목표했었던 바를 이룰 수 있었다. 이번 2주차 개인 학습 정리의 경우 결론적으로 앞서 1주차 개인 학습 정리 기간 대비 더 잘했다라고 하기도 그렇고 더 못했다라고 하기도 그렇지만..😅 당초 목표했었던 것들을 바꾸어 다른 전략으로 학습을 했었다는 점에서 5점 상승한 65점으로 평가해보고 싶다.
JPA 프로그래밍 학습 (50점)
처음 목표는 JPA 기본편 이론 강의를 완강하는 것이었다. 하지만 강의를 들으면 들을수록 머리에 주입되는 지식은 많아지는데 마치 머리를 겉도는 느낌이 많아졌다. 공부는 하고 있는데, 뭔가 공부가 되지 않는 느낌이 들었다. 이를 통해서 "프로그래밍 학습은 실습을 기반으로 하되 그 위에 이론이 깔려야 하지 않을까?"라는 생각이 들었다. 이론의 범위는 무궁무진하다. 하지만 실습은 예를 들어 특정 프로젝트의 경우 정해진 요구사항만을 충족시키면 되기 때문에 상대적으로 범위가 넓은 편은 아니다. 주어진 문제들을 해결하면서 배울 수 있는 것들이 많고 흡수력 역시 이론만을 공부할 때 보다 더 나은 편이다.
그리하여 기존에 듣던 JPA 기본편 이론 강의를 절반만 들은채 곧바로 프로젝트를 만들어 JPA 프로그래밍 실습에 들어갔다. 실습은 마찬가지로 김영한님의 인프런 강의를 기반으로 진행했는데, 이전에 이론을 학습했었던 것들이 실습을 진행하면서 비로소 이해할 수 있게 된 것이 많았다. 최종적으로 처음 목표였던 기본편 이론 강의는 절반밖에 학습하지 못했지만 실습 강의 1편을 모두 따라가면서 저번주 보다 효과적인 학습을 할 수 있었던 것 같다. 조금이라도 일찍 프로젝트를 시작할 걸이라는 아쉬운 마음이 있지만 저번주 보다는 발전한 것 같아 지난 주 30점에서 20점 상승한 50점으로 자체적인 평가를 해보았다.
데이터 베이스 학습 (70점)
지난 주와 동일하게 호눅스의 강의를 기반으로(강의에 나오는 키워드 중심으로) 학습을 진행해보았다. 사실 지난 주에 JPA 학습을 제대로 하지 못했던 원인 중 하나로 데이터 베이스 학습에 너무 치중했었던 부분이 있었다. 그래도 지난 주에 복습을 해놓았었고 이번 주 강의에는 익숙한 내용들도 나와서 이번 주 호눅스 강의를 들을 때는 나름 잘 따라갈 수 있었던 것 같다. 종합적으로 그동안 웹 개발을 하면서 생각조차 못했었던 (나에게 있어) 다소 딥(Deep)했던 데이터 베이스 내용들을 학습할 수 있었고 굉장히 유익한 시간이었다.
하루에 알고리즘 1문제씩 풀기 (100점)
지난 주와 마찬가지로 하루에 알고리즘 1문제씩 풀기를 지킬 수 있었다. 🎉 아울러 이번에 알고리즘 문제를 풀면서 시간이 될 때 그동안 나의 지식으로 흡수하지 못했었던 최단 경로 알고리즘(다익스트라, 플로이드 워셜), 백트래킹 등에 대해 깊게 학습해보고 싶다는 생각이 들었다. 다음주부터는 다시 팀 프로젝트가 시작되는데 과연 지난 2주처럼 하루에 알고리즘 한 문제씩 풀기를 지킬 수 있을지는 의문이다..😅
일일 회고록 작성하기 (100점)
일일 회고록 작성하기 역시 지난 주에 동일하게(늘 그렇듯이) 지킬 수 있었다. 예전에는 주로 마스터즈 코스 과정을 하면서 느꼈던 점들을 위주로 작성했었다면 요즘에는 대외적으로라도 프로그래밍과 관련된 일들이라면 관련해서 느낀 점들도 작성하고 있다.
하루에 30분씩 운동하기 (100점)
마찬가지로 지킬 수 있었다. 가벼운 홈트레이닝 유튜브 영상을 보면서 운동을 하고 있는데, 개인적으로 간단한 웨이트 운동이라도 할 수 있게 집 주변에 철봉이 있었으면(철세권이었으면..) 하는 아쉬움이 들었다. 😥
2주간의 개인 학습 정리 주간을 통해 배운점
1. JPA 프로그래밍과 데이터 베이스 물리적 구조와 관련된 기초 지식을 학습할 수 있었다.
이번 개인 학습 정리 주간 전까지만 해도 JPA에 대한 개념 조차 모르고 있었는데, 2주간 김영한님의 인프런 강의를 통해 JPA를 아주 조금이나마 이해할 수 있었다. 가장 기억에 남았던 개념들은 JPA 패러다임과 영속성 컨텍스트 그리고 연관관계 매핑 등에 관한 것이었는데, 이후 팀 프로젝트를 하면서 다시 한 번 되새기고 싶은 내용들이었다. 또한 그동안 웹 프로그래밍 학습을 하면서 SQL을 사용하기만 했었지 데이터 베이스 물리적 구조에 대한 깊은 고민은 하지 않았었다. 이번 학습 정리 주간을 통해 하드디스크 구조부터 데이터 베이스 내부 구조까지의 흐름을 배우면서 생각의 범위를 넓힐 수 있었던 것 같다.
2. 알고리즘과 운동을 생활화할 수 있었다.
사실 마스터즈 코스 과정을 하면서 알고리즘 문제 풀이에 굉장히 소홀 했었다.(마음의 여유가 없었다. 💦) 그래도 알고리즘 스터디를 하는 덕분에 반강제적으로 일주일에 2문제 정도라도 풀고는 있었는데, 사실 매우 부족한 분량이었다. 그래도 이번 학습 정리 주간을 통해 하루에 한 문제씩 풀어보면서 이전 보다 알고리즘 문제를 푸는 게 자연스러워(습관화)졌다. 스터디에서 Jerry가 하루에 30분만 투자한다는 생각으로 한다고 했었는데, 사실 나 스스로 생각해봐도 하루에 30분을 투자하는 것은 무리가 아니었다. 개인적으로 그동안 미션 과제라는 핑계로(마음의 여유가 없었기에) 알고리즘 문제를 소홀히 했었던 스스로 반성하게되는 주간이기도 했다.
운동 역시 마찬가지이다. 운동 역시 더도 말고 덜도 말고 딱 30분만 투자해도 몸 상태(개운함)가 달라지는 것을 느낄 수 있었다. 비록 가벼운 운동일지라도 일단 하는 게 중요한 것 같다. 알고리즘처럼 그동안 마음의 여유가 없어 운동을 소홀히 했었는데, 앞으로 프로그래밍을 함에 있어서 운동에 유념해야겠다는 생각이 들었다.
3. 내가 할 수 있는 분량은 사실상 정해져있다. 기적은 (왠만하면) 일어나지 않는다.
이번 개인 학습 정리 주간을 통해 나름대로의 학습 계획을 세우고 이를 실행할 수 있었고 나름의 학습 체계를 잡을 수 있었던 것이 큰 수확이었다. 다만, 이상과 현실은 달랐다. 나의 목표(이상)는 이것도 하고 저것도 하고 원대한 것들로 가득차 있지만 실제로 내가 가용할 수 있었던 자원은 한정적이었다. 즉, 나의 수준과 내가 할 수 있는 분량을 제대로 메타 인지하여 보다 현실적인 계획을 세울 필요가 있었다. 오늘 마스터 피드백 시간에서 호눅스가 해준 말 중 "원래 목표했었던 거에 절반만 목표로 잡는 것도 방법 중 하나"라는 말이 인상깊었다. 욕심을 내려놓고 현실적으로 생각하여 선택과 집중을 하는 전략이 필요하다고 느껴진 지난 학습 정리 주간이었다.
학습 정리
관계형 데이터 베이스의 기본 저장 방식
관계형 데이터베이스가 레코드를 저장할 수 있는 방식으로는 Row Store가 있고 Column Store가 있다.(DB 파일이 페이지로 나뉘는 것은 동일) 이때 관계형 데이터베이스의 기본 저장 단위는 Row Store이다. 이때 Row Store은 테이블에 있는 한 행의 필드를 포함하는 레코드 시퀀스를 저장하며 Column Store에서는 하나의 열의 항목들이 연속적인 메모리로 저장된다.
Row Store는 페이지 안에 각 Row가 저장되게 되며 Column Store은 페이지 안에 각 Column별 항목들이 저장된다. 이것은 추후 쿼리 최적화와 트랜잭션을 이해하기 위한 기본이 된다.
예를 들어, 테이블에 50명의 회원 정보가 있다고 가정해보자. 이때 id가 35번인 회원을 조회하려고 할 때 Row Store의 경우 한번에 조회가 가능하다. 이는 온라인 트랜잭션 처리(OLTP, Online transaction processing) 등에 사용된다. 하지만 Column Store의 경우 컬럼의 개수만큼 조회해야 한다. 하지만 Column Store가 유리한 경우도 있다. 예를 들어 통계 산출 등 특정 Column의 값들에 대해서만 조회하는 경우(ex. 전체 직원 평균 급여 등)가 있다. 또한 GROUP BY 함수를 사용할 때도 Row Store 보다 훨씬 유리하다. 이러한 원리로 기존 Row Store 방식의 경우 더 나은 성능을 위해 GROUP BY 사용 시 인덱스를 만들어주는 것이다. Column Store의 경우 빅데이터 처리, 온라인 분석 처리(OLAP, On-Line Analytical Processing) 등에 사용된다.
학습 참고자료
- 위키북스 "Real MySQL 8.0 - 1"
- 호눅스 마스터 클래스 강의
좋았던 점
- 지난 2주간 학습했었던 내용들을 정리해놓고 보니 하루하루 쌓인 내용들이 모아보니 그래도 생각보다 많다는 느낌을 받았고 나름 보람있었던 것 같습니다. 👍
아쉬웠던 점
- 너무 나의 이상(욕심)에 취해 애초에 학습 목표를 너무 높이 잡았던 것이 아닌가 하는 아쉬움이 있었습니다. 보다 현실적인 계획을 세웠으면 더 나은 성과를 낼 수 있지 않았을까 하는 아쉬움이 듭니다. 💦
이전 보다 개선되었던 점
- 이번 2주간의 개인 학습 정리를 통해 JPA, MySQL, 알고리즘 등 다채로운 학습을 할 수 있었습니다. 또한 "목표는 현실적으로 잡자"라는 교훈을 얻을 수 있었습니다. 😅
'2022 Masters Course > Project Course' 카테고리의 다른 글
2022 마스터즈 코스(백엔드) 92일차 회고(2022. 5. 24.) - "할 수 있는 것부터 차근차근" (0) | 2022.05.24 |
---|---|
2022 마스터즈 코스(백엔드) 91일차 회고(2022. 5. 23.) - "네 번째 팀 프로젝트 시작" (0) | 2022.05.23 |
2022 마스터즈 코스(백엔드) 89일차 회고(2022. 5. 19.) - "시스템 속에서 살아가기" (0) | 2022.05.19 |
2022 마스터즈 코스(백엔드) 88일차 회고(2022. 5. 18.) - "이론과 실습의 균형" (2) | 2022.05.18 |
2022 마스터즈 코스(백엔드) 87일차 회고(2022. 5. 17.) - "프로그래밍의 매력" (0) | 2022.05.17 |