해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)
수강 회고
오늘 오전에는 도커 및 데이터베이스 미션 관련하여 오랜만에 호눅스의 강의가 진행되었다. 오늘 호눅스의 강의 중 인상깊었던 말은 "여러분 지금 즐기고 있죠?"라는 말이었다. 생각해보니 근래에 나를 되돌아 보았을 때 내가 과연 프로그래밍을 즐기고 있는 중일까 생각이 들었다. 물론 이번 주는 수면 패턴에 적응하느라 수면이 부족한 상태로 컨디션이 안좋은 상태이기 때문에 그런 생각이 들었을수도 있지만 현재 조급한 마음으로 프로그래밍을 하고 있다는 느낌을 받았기 때문이다. 이러한 마음의 근원에는 "혹시 내가 뒤처지고 있는 것은 아닐까?"라는 생각이 있기 때문이다.
이러한 생각을 아에 지우는 것은 불가능하지만 이러한 생각에 점점 취하게 된다면 나의 페이스를 지속적으로 유지할 수 없을뿐만 아니라 내가 지속적으로 성장하는 데 있어 걸림돌이 될 것이라는 생각이 들었다. 나의 경험상 그리고 보고 들었던 기억상 무슨 일이든지 조급한 마음을 갖는 사람보다 즐기는 사람이 좋은 성과를 낼 수 있었기 때문이다. 그래서 이번 기회에 내가 즐겁기 때문에 프로그래밍을 하고 있는 것인지 또는 누군가로부터 뒤처지지 않기 위해 프로그래밍을 하고 있는 것인지 점검해봐야겠다는 생각이 들었다. 아울러 학습 과정을 통해 알아가는 즐거움과 성장하는 즐거움에 초점을 더 맞추기로 했다.
또한 프로그래밍에 대한 공부는 끝이 없다. 정확히는 끝을 낼 수가 없다. 기존의 쌓아올려진 영역들을 모두 학습하기란 불가능한데다가 기존에 있었던 영역도 계속 변화하기 때문이다. 나는 지금이나 앞으로나 모든 것을 다 알 수는 없다고 인정할 수밖에 없다. 하지만 단지 "어제의 나" 보다 오늘의 내가 조금 더 성장하는 데 집중하기로 했다.
학습 회고
- 도커 및 데이터베이스 관련 학습
- Java 웹 백엔드 클래스 내 소모임원들과 zoom 회의실에서 학습
어제에 이어 오늘도 도커와 데이터베이스에 대해 학습을 지속했다. 데이터베이스는 어느 정도는 안다고 생각했었지만 이번 미션을 진행하면서 모르는 것들이 너무 많았었기에 나의 현재 수준이 발가 벗겨진 느낌이었다. CS 과정을 통해 매번 나의 부족한 점들을 확인하게 된다.
또한 오늘 오후에는 그룹 리뷰를 통해 소모임원들과 지금까지 미션 과제를 진행했던 내용들에 대해 공유하는 시간을 가졌다. 그룹 리뷰 시간을 통해 각각의 소모임원들의 풀이 방법들을 보면서 기존에 내가 생각하지 못했던 방식에 대해 많은 영감을 받을 수 있었다.
오늘 개인적으로 또한 그룹 리뷰 시간을 통해 학습했었던 주요 내용으로는 다음과 같다.
autocommit
MySQL 데이터베이스에는 autocommit이라는 옵션이 존재한다. autocommit은 말 그대로 자동으로 커밋한다는 의미이고 이 옵션이 true로 설정되어 있으면 각각의 SQL 구문 작업들이 그 자체로 하나의 트랜잭션 형태를 이루게 된다. 예를 들어 insert 작업이 연속으로 3번이 들어오게 된다고 가정해보자. 이때 첫 번째와 두 번째 insert 작업이 성공하고 세 번째 insert 작업이 실패하면 첫 번째와 두 번째 insert 작업이 롤백되지 않고 그대로 테이블에 반영이 되는 것이다.
5.7 버전의 MySQL의 경우 기본적으로 autocommit은 true로 설정되어 있는데 만일 대용량의 데이터 주입을 위해 굉장히 많고 동시반복적인 insert 작업을 하는 경우에는 이를 잠시 false로 해주는 것이 좋다. 왜냐하면 처리 속도가 확연히 차이나기 때문이다. autocommit이 true로 되어 있으면 insert 구문 하나하나를 트랜잭션으로 보고 커밋(성공 시)을 하기 때문에 시간 차이가 나는 것이다. 이러한 시간 차이는 데이터 개수가 많아질수록 기하급수적으로 커진다.
도커(Docker) 네트워크
도커를 통해 이미지를 다운로드하고 컨테이너를 생성 및 실행하다 보면 여러개의 컨테이너가 실행될 수 있다. 이처럼 도커를 통해 여러개의 컨테이너가 실행되고 있는 이 환경을 "도커 호스트"라고 하며 도커를 동작시키는 하나의 서버이다. 이때 실행되는 컨테이너들은 도커 호스트의 내부 로직에 따라 자동으로 172.17.XX.YY IP 대역으로 IP를 하나씩 배정받게 된다.
자기 자신의 컴퓨터를 가리키는 IP는 127.0.0.1 또는 localhost(루프백 호스트명)이다. 만일 자기 컴퓨터에 설치된 도커 위에 MySQL 데이터베이스 컨테이너를 실행하고 있다고 해보자. 이때 Java와 연동시키기 위해서는 어떻게 할까? 일단 mysql connector 라이브러리를 설치하는 작업은 로컬에 설치된 MySQL과 연동하는 것과 동일하다.
이후 자바 프로그래밍 시 접속 할 DB URL을 작성해주어야 하는데 도커 호스트에 접근해야하므로 도메인 역시 (로컬 MySQL 연동과) 동일하게 localhost일 것이다. 하지만 이 경우 당초 MySQL에서는 접속할 사용자 계정에 대해 권한을 부여할 때 도메인에 localhost을 부여해도 됐었지만 이번에는 도커에 의해 자동적으로 배정되는 IP(172.17.0.1 등)를 부여해야한다.
왜냐하면 localhost는 도커 호스트를 가리킬 뿐 MySQL 컨테이너와는 무관하기 때문인데 사용자는 도커 호스트에 요청(접속)을 보내지만 요청이 설정된 포트 포워딩에 의해 해당 MySQL 컨테이너로 가게 된다. 최종적으로 요청이 컨테이너에 배정된 IP 주소로 가게 되어 접속할 사용자 계정의 도메인에는 해당 IP 주소를 부여해야하는 것이다.
좋았던 점
- 어제 오늘 익숙치 않았던 도커와 기존에 안다고는 했었지만 많이 부족했었던 데이터베이스에 대해 알아가면서 이전보다 더 많이 알게 된(성장하게 된) 느낌을 받을 수 있었다.
아쉬웠던 점
- 어제에 이어 하루 종일 굉장히 사소했던 부분 때문에 삽질(?)을 많이 했는데, 개인적으로 삽질하는 과정에서 많은 것을 배우기에 긍정적으로 생각하는 것도 있지만 이로 인해 많은 시간이 할애되었기에 시간 관리가 제대로 안된 점이 아쉬웠다.
참고자료
- https://velog.io/@brslover/Docker-compose-%EC%9D%B4%ED%95%B4%EB%A5%BC-%EC%9C%84%ED%95%9C-Docker-Network
- https://phantasmicmeans.tistory.com/entry/Docker-Container-Network%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4
'2022 Masters Course > CS 10 Course' 카테고리의 다른 글
2022 마스터즈 코스(백엔드) 24일차 회고(2022. 2. 10.) - "학습 정리의 필요성" (0) | 2022.02.11 |
---|---|
2022 마스터즈 코스(백엔드) 23일차 회고(2022. 2. 9.) - "페어 프로그래밍" (0) | 2022.02.09 |
2022 마스터즈 코스(백엔드) 21일차 회고(2022. 2. 7.) - "마침내 접하게 된 Docker" (0) | 2022.02.07 |
2022 마스터즈 코스(백엔드) 20일차 회고(2022. 1. 28.) - "지난 1월 되돌아 보기" (0) | 2022.01.28 |
2022 마스터즈 코스(백엔드) 19일차 회고(2022. 1. 27.) - "체력의 중요성" (2) | 2022.01.27 |