해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)
수강 회고
개인 학습 정리 1주차를 마치며...
오늘로 1주차 개인 학습 정리 주간이 벌써 마무리되었다. 앞서 이번 자유 프로젝트에는 추후에 있을 팀 프로젝트를 위해(더 나은 웹 앱을 개발하기 위해) 바로 또 다른 프로젝트를 만들기 보다는 '개인 학습 정리'를 진행하여 부족한 점을 채우기로 했었다. 그리하여 이번 주 학습 목표는 JPA 프로그래밍 학습을 중점적으로 하면서 그 외에 호눅스 마스터 클래스 강의와 관련한 데이터 베이스 학습을 하는 것이었다. 이와 더불어 하루에 알고리즘 1 문제씩 풀기, 일일 회고록 작성하기, 하루에 30분씩 운동하기를 실천하고자 했다.
개인 학습 정리 정산 시간
결론적으로 이번 한 주간에 학습했었던 내용들을 정산해보면 종합적인 학습 목표치가 100점이라고 했을 때 60점 정도는 달성한 것 같다. 각각의 학습 목표별로 어느 정도 달성했는지 정산하고자 한다.
JPA 프로그래밍 학습 (30점)
일단 가장 아쉬웠던 부분은 JPA 프로그래밍 학습이었다. 사실 이번주 JPA 프로그래밍 학습의 목표는 김영한님의 인프런 강의인 "자바 ORM 표준 JPA 프로그래밍 - 기본편" 강의를 모두 완강하는 것을 목표로 했었지만 결과적으로 현재 30% 밖에 강의를 듣지 못했다. 💦
나름의 변명(?)을 하자면 JPA의 경우 한번도 다루어 보지 않았었던 기술이었기에 한번 배울 때 제대로 배우고 싶다는 욕심이 있어 강의를 들으면서 나름의 방식대로 정리를 하면서 듣고자 했다. 문제는 이렇게 정리하는 시간이 생각보다 많이 든다는 것이다.. 😂 아울러 월요일 예상치 못한 복병이 생겼는데 오후 호눅스의 데이터 베이스 관련 마스터 클래스 강의가 진행되었는데, 개인적으로 역대급 난이도였기에 당장 데이터 베이스 학습이 절실하게 느껴졌다. 그리하여 당초 중점 목표였던 JPA 학습 시간을 뒤로 미루고 데이터 베이스 학습 시간에 비중을 더 두었기 때문이었다.
데이터 베이스 학습 (70점)
그 다음은 데이터 베이스와 관련된 부분이다. 사실 데이터 베이스는 당초 학습 목표는 아니었으나 앞서 언급했듯이 호눅스의 마스터 클래스 강의로 데이터 베이스 학습의 필요성을 느끼게 되어 갑작스레 잡히게 된 학습 목표였다. 그리하여 이번 주 데이터 베이스에 대한 학습 목표는 호눅스의 강의를 다시 들었을 때 이해할 수 있는 정도의 상태를 만드는 것이었다.
이를 위해 하드디스크 구조, 데이터베이스의 논리적 저장단위, MySQL InnoDB 스토리지 엔진, B+Tree 등 평상시 공부했었던 것보다 다소 깊은 지식을 학습하였다. 결과적으로 현재 시점에서는 강의 내용의 70% 정도는 이해(자체적인 평가)할 수 있게 되었다. 강의를 여러 번 들어보면서 타 기술 블로그들과 데이터 베이스 관련 서적(Real MySQL 8.0 - 1)들을 참고하면서 나름대로 개념 정리를 하는 식으로 학습을 해보았는데, 그 과정에서 MySQL의 내부 동작들에 대해 많이 배울 수 있었던 것이 더 큰 수확이었다.
하루에 알고리즘 1문제씩 풀기 (100점)
하루에 알고리즘 1문제씩 풀기는 결론적으로 지킬 수 있었다. 🎉 알고리즘 문제의 경우 기존에 알고리즘 스터디에서 정기적으로 출제되는 2 문제와 스터디에서 다른 팀원들께서 추천해주시는 문제들을 골라 한 문제씩 풀어보았다. 나의 경우 알고리즘 문제를 풀고나면 기술 블로그를 통해 처음 해당 문제에 어떻게 접근했는지, 어떠한 삽질을 했는지, 미처 생각하지 못했던 점이 뭐였는지 등을 복기하곤 한다. 개인적으로 이렇게 한 번 복기를 하고나면 해당 문제에 대해 좀 더 이해하는데 도움이 된다.
[백준 - 1931] 회의실 배정 - Java(내용 확인 클릭)
[프로그래머스] 더 맵게 - Java(내용 확인 클릭)
[백준 - 1018] 체스판 다시 칠하기 - Java(내용 확인 클릭)
[백준 - 1238] 파티 - Java(내용 확인 클릭)
일일 회고록 작성하기 (100점)
그 다음은 일일 회고록 작성하기인데, 사실 이 부분은 이미 이전부터 항상 해왔었던 부분이라 특별한 건 없었다. 알고리즘 문제처럼 하루를 정리하는 일일 회고록(81~85일차, 85일차는 현재 글) 작성하기 역시 지킬 수 있었다. 수강 회고에는 마스터즈 코스 과정을 진행하면서 느낀 점이나 생각 등을 위주로 작성하고 학습 회고에는 오늘 학습했었던 것 중 가장 인상깊었던 것을 작성한다.
하루에 30분씩 운동하기 (100점)
마스터즈 코스 과정 한창이었던 지난 3~4월 운동량이 급격하게 감소했는데(거의 없다시피) 미션 과제 등에 쫓기다보니 단 30분이라는 운동하는 마음의 여유도 없었던 것 같았다. 그리하여 이번 개인 학습 정리 주간에는 저녁식사 후에 더도 말고 덜도 말고 30분씩만 운동(가벼운 유튜브 홈트레이닝 영상)하는 것을 목표로 했다. 결과적으로 이번주 5일 모두 운동을 할 수 있었고 운동을 하고나니 오히려 정신이 맑아지는 등 학습에도 많은 도움이 되었다. 👍
마무리 그리고 개인 학습 정리 2주차 계획
금요일인 오늘 오후 시간에 예상치 못했었던 일정이 있었는데, 같은 백엔드 클래스 수강생분들과 함께 "그룹 피어세션" 일정이었다. 이는 각자가 학습했었던 것들을 공유하는 시간이었는데, 이번 주에 학습했었던 내용들이 아직 정리가 제대로 되지 않았기에 부랴부랴 노션에 덕지덕지 자료들을 붙이고 세션에 참여하게 되었다. 프로젝트를 준비하시는 분들 그리고 개인 학습 정리를 하시는 분들 각자의 방식대로 학습하셨던 것들을 공유해주셨는데, 다들 자신의 환경에서 최선의 노력들을 하시는 것들을 보면서 많이 반성하게 되었다.
사실 개인적으로 개인 학습 정리 주간이기에 약간의 긴장감이 풀려 학습에 다소 소홀히 하는 감이 없지 않아 있었다. 뭔가 다른 사람들도 다 똑같겠지 하는 마음도 은연 중에 있었던 것 같은데, 역시 세상은 호락호락(?) 하지 않다는 것을 느낄 수 있었다. 😂 예전에 즐겨 봤었던 드라마 미생에서 장그래가 출근길에 독백을 했었던 대사가 생각이 났다.
아무리 빨리 이 새벽을 맞아도 어김없이 길에는 사람들이 있었다.
남들이 아직 꿈 속을 헤맬 거라고 생각했지만 언제나 그렇듯 세상은 나보다 빠르다.
- 드라마 미생 3화 中 장그래 -
나 역시 마찬가지로 마스터즈 코스 과정을 하면서 이만하면 됐지 하는 마음을 가질 때가 많았는데, 항상 주위를 살펴보면 모두가 다 최선의 삶을 살고 있는 것을 자주 볼 수 있었다.
다음주는 마스터즈 코스 과정에 있어 마지막 개인 학습 정리 주간이다. 어떻게 보면 과정상 굉장히 중요한 순간인데, 다음주 학습 목표는 보다 현실적으로 세울 필요성을 느낀다. JPA와 데이터 베이스라는 무거운 주제를 동시에 같이 학습하고 있기에 각각의 분야에 대해 너무 깊게 이해하려고 하기 보다는 가볍게 이해하는 정도로 해서 넘어가고 간단한 프로젝트와 같이 이를 적용하고 활용해볼 수 있는 시간을 좀 더 가지고자 한다. 아울러, 이번 주는 다소 긴장이 풀린 상태였지만 다음 주에는 분발하여 이번 주에 부족했었던 점들을 보완하고 더 나은 성과물을 만들어내고자 한다.
학습 회고
기본 키 매핑 시 자동 생성 전략
JPA를 이용하여 테이블에 기본 키를 직접 할당할 때는 단순히 Entity 클래스 기본 키 필드에 @Id를 붙이면 되는데, 자동 생성하는 방법으로는 @GeneratedValue의 strategy 속성을 활용할 수 있으며 다음과 같이 여러가지 전략이 있다.
IDENTITY 전략
- @GeneratedValue(strategy = GenerationType.IDENTITY)
IDENTITY 전략은 기본 키(PK) id에 별다른 값을 넣지 않고(null) 기본 키(PK) 생성을 데이터베이스에 위임하는 방식으로 주로 MySQL 등에 사용되는데, MySQL의 AUTO_INCREMENT와도 같은 기능이다. 하지만 JPA는 보통 persist 시 INSERT SQL을 쓰기 지연 저장소에 보관해놓았다가 트랜잭션 커밋 시점에 INSERT SQL을 실행한다. 이때 영속성 컨텍스트 내에서 관리가 되려면 해당 레코드의 PK 값이 필요할 수도 있다.
그래서 어쩔 수 없이 IDENTITY 전략을 사용하는 id 값이 있다면 persist 시 DB에 INSERT SQL을 전송하게 된다. SQL 전송 후에는 해당 객체는 내부적으로 DB로부터 PK 값을 반환받아와(조회하여) 가지고 있는다.
SEQUENCE 전략
- @GeneratedValue(strategy = GenerationType.SEQUENCE)
SEQUENCE 전략 역시 IDENTITY 전략과 같이 기본 키(PK) id에 별다른 값을 넣치 않고 기본 키(PK) 생성을 데이터베이스 시퀀스에 위임하도록 한다. 이때 데이터베이스 시퀀스란 유일한 값을 순서대로 생성하는 특별한 데이터베이스 객체로서 주로 오라클 등에 사용된다.
마찬가지로 영속성 컨텍스트 내에서 PK 값이 관리가 될 수 있도록 persist 시 DB에 SQL을 전송하여 데이터베이스 시퀀스로부터 PK 값을 가져온다. 다만 SEQUENCE 전략의 경우 IDENTITY 전략과 달리 SQL을 버퍼에 모았다가 한번에 전송하는 것이 가능하다. 또는 매번 SQL을 전송하는 것이 네트워크적으로 낭비가 될 수 있으므로 allocationSize 속성을 통해 한번에 여러 개의 PK 값을 가져올 수 있다.
권장하는 식별자 전략
기본 키 제약 조건에는 NOT NULL과 유일성 그리고 불변성이 있다. 이때 사용자의 주민등록번호의 경우도 이러한 기본 키 제약 조건을 충족시킬 수 있다. 다만, 이러한 자연키(비즈니스 모델에서 자연스레 나오는 속성으로 기본 키를 정함)의 경우 미래까지 이 조건을 만족한다는 보장을 할 수 없다. 예를 들어 주민등록번호의 경우 정부 지침에 따라 데이터베이스에 보관하는 것을 금지하는 지침이 있었다고 한다. 주로 Long형 타입 사용과 대체키 사용 그리고 키 생성전략을 사용하는 것이 권장되는 식별자 전략이다.
학습 참고자료
- 인프런 "자바 ORM 표준 JPA 프로그래밍 - 기본편"
좋았던 점
- 오늘 오후 그룹 피어세션을 통해서 좀 더 분발해야겠다는 생각이 들었고 다음 주에는 좀 더 현실적인 목표를 세워야 겠다는 생각이 들어 유익했습니다. 👍
아쉬웠던 점
- 당초 중점 학습 목표였었던 JPA 프로그래밍 학습에 소홀했었던 점이 아쉬웠습니다. 💦
이전 보다 개선되었던 점
- 학습을 하면서 처음으로 (비록 1주일 이지만) 하루에 알고리즘 1문제 풀기에 성공할 수 있었고 운동 역시 마스터즈 코스 과정을 하면서 처음으로 (마찬가지로 비록 1주일 이지만) 하루에 한 번씩 꾸준히 할 수 있었습니다. 🎉
'2022 Masters Course > Project Course' 카테고리의 다른 글
2022 마스터즈 코스(백엔드) 87일차 회고(2022. 5. 17.) - "프로그래밍의 매력" (0) | 2022.05.17 |
---|---|
2022 마스터즈 코스(백엔드) 86일차 회고(2022. 5. 16.) - "2주차 개인 학습 정리 주간 시작" (0) | 2022.05.17 |
2022 마스터즈 코스(백엔드) 84일차 회고(2022. 5. 12.) - "운동을 통한 하루 재충전" (0) | 2022.05.12 |
2022 마스터즈 코스(백엔드) 83일차 회고(2022. 5. 11.) - "인프라 구축에 대한 관심" (0) | 2022.05.11 |
2022 마스터즈 코스(백엔드) 82일차 회고(2022. 5. 10.) - "꾸준함의 중요성" (0) | 2022.05.10 |