Let's kick it
[플레이데이터]풀스택 백엔드 9기 3월 3주차 회고 본문
- 아티스트
- Stray Kids (스트레이 키즈)
- 앨범
- SKZ2020
- 발매일
- 2020.03.17
1주차 회고
1일차 Git과 GitHub
Git 설치하고 Git을 이용해 원격 저장소인 Github에 올리는 과정을 배웠다. 평소에도 깃허브에서 레포지토리(repository)를 쉽게 관리하고 싶어 도전했었지만 push 이후에 변경 사항을 찾지 못하는 도돌이표에 갇힌 상태였다. 언젠가 다시 git을 공부해서 연결해야지 생각이 무섭게 부트캠프에 들어온 첫날에 바로 시작했다. 역시 익숙하지 않다 보니 git 세팅부터 엄청 버벅대고 맞게 따라가고 있는지 의문이었다. 그래도 노션에 강사님께서 보기 쉽게 정리해 주신 내용도 있고 옆 짝꿍님과 강사님의 도움으로 연결은 성공했지만 이대로 다시 집에 가서 하라면 못할 것 같아서 남아서 이해 안 되는 부분을 다시 훑어보며 강사님 설명을 추가로 들었다. 들어도 모르겠는 부분을 다시 읽으면서 손으로 정리하면서 보니까 역시 이론을 조금 이해하니까 왜 그런 과정이 진행됐는지 알겠다. 역시 기본 명령어를 따라만 치지 말고 한번 읽고 직접 혼자 따라치며 하니까 조금은 이해할 수 있었다.
일단 파일을 생성하면 working directory가 있고 생성한 파일을 수정하고 저장하면 untracked 상태가 된다. 그 후 git add . 를 해주면 staging area로 옮겨진다. staging area에 갔다면 변경 사항을 저장하기 위해서 git commit -m 을 이용해 " " 큰 따옴표 사이에 코멘트를 작성하면 된다. 그리고 이걸 원격에도 보내고 싶다면 git push하고 github에 들어가 내 이름을 잘 확인하고 pull request를 누르면 끝이다.
당일 다 어려웠지만 제일 이해가 가지 않았던 부분은 역시 브랜치 & merge 부분이었다. checkout과 switch 모두 브랜치 전환에 사용되지만 checkout은 파일 복구 등의 다양한 용도로 사용된다. 새 브랜치를 생성하고 해당 브랜치로 전환하는 과정은 checkout은 git checkout -b를 사용하고, switch는 git switch -c를 이용한다. 그리고 새 브랜치 생성할 때 git branch branch명이 새 브랜치 생성인데 예시 코드로 사용된 git branch feature/login을 보고 /(슬래시) 뒤에 있는 글자가 branch 기능을 나타내는 단어인가 보다 어림잡아 이해했었다. 다시 읽어보니 그저 새로운 이름을 붙인 거였을 뿐이었다.
병합 방법 중 3-way merge는 두 브랜치 간 변경 사항이 충돌하거나 서로 다른 변경 기록이 있을 경우, 공통 조상을 기준으로 병합한다. 2개 다 필요할 수 있으니 다 합쳐도 되고, 한쪽으로 합쳐도 된다. 충돌이 발생하면 직접 코드를 수정해 어디를 합칠지 정하고 해결하면 된다.
2일 차 MySQL 설치
아침마다 강의실에 도착하면 꼭 싱크 포크를 해줘야 한다고 당부하시지만 싱크 포크의 위치가 어딨는지 매일 헤맨다. 싱크 포크를 찾았다면 파일을 열어 git bash를 통해 git pull을 해줘야 한다. pull을 해도 변경 사항을 찾지 못하고 pull을 받아도 어떻게 내 파일에 적용할지에 대해 몰라서 짝꿍님의 도움을 많이 받았다.
MySQL 설치했고 이론 설명과 함께 바로 실행하며 배웠다. MySQL이란 가장 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. SQL은 정처기 문제를 풀 때 봐서 조금은 익숙했다. MySQL이 제공하는 다양한 엔진 중 사용할 데이터베이스 엔진은 InnoDB였다. InnoDB는 트랜잭션 기능을 제공해 동시성과 무결성을 높이고 크래시 복구 기능을 지원해 시스템이 예기치 않게 중단되더라도 데이터의 일관성을 보장한다.
SQL 쿼리가 MySQL 서버로 전달되어 결과가 반환되는 과정이 중요하다고 하시면서 설명해 주신 게 기억에 남는다. 쿼리 파싱은 파서(parser)가 SQL 문장을 이해할 수 있는지, 문법이 유효한지, 키워드가 맞게 작성되었는지 확인하고 오류가 있다면 파서는 오류 메시지를 반환하고 프로세스를 중단한다.
쿼리 실행 과정의 중요 키워드는 역시 SQL 파싱(parsing). 파싱이라는 용어는 주로 컴퓨터 과학에서 사용되며, 일련의 문자열이나 데이터를 어떤 규칙에 따라 분석하고 이해하는 과정을 말한다. MySQL 서버는 쿼리를 파싱 하면 파서와 같이 검사하는데 파싱 순서가 렉시컬 분석 -> 구문 분석 -> 의미 분석 -> 캐싱되어있는지 확인 -> 되어있으면 소프트 파싱, 아니면 하드 파싱한다.
MySQL Workbench에서 connection 연결하는데 CREATE USER 'id'@'%' IDENTIFIED BY 'password'; -- 'localhost' 대신 '%'를 쓰면 외부 IP로 접속 가능하다. localhost는 127.0.0.1로 로컬호스트 IP와 같다. SQL 코드 작성 후 실행 방법은 단일 쿼리는 Ctrl + Enter, 전체 실행한다면 Ctrl + Shift + Enter.
DQL 구조 SELECT 컬럼명 (5) -- 필수 FROM 테이블명 (1) -- 필수 WHERE 조건절(필터링) (2) GROUP BY 그룹핑 (3) HAVING 조건절(그룹핑에 대해 필터링) (4) ORDER BY 정렬기준 (6)
WHERE 비교 연산자 중 같지 않다는 != 는 익숙했지만 <> 는 처음 봐서 낯설어서 기억에 남는다. 논리 연산자 중 AND와 OR 중 우선순위가 높은 것은 AND.
3일 차 MySQL
BETWEEN 연산자는 비교하려는 값이 지정한 특정 패턴을 만족시키면 TRUE를 리턴하는 연산자로, '%', '_'를 와일드카드로 사용할 수 있는데 와일드카드란? 다른 문자로 대체 가능한 특수한 의미를 가진 문자. %는 위치에 따라 검색되는 게 다르고, _는 개수에 따라 문자 1개를 의미한다.
%의 위치에 따라서 검색
- %문자 : 문자로 끝나는 내용만
- 문자% : 문자로 시작하는 내용만
- %문자% : 문자가 포함되어 있는 내용만
ORDER BY는 result set 행에 대해 정렬할 때 사용하는 구문으로 SELECT 문의 가장 마지막에 작성하며 default는 ASC(오름차순)이고, DESC(내림차순)도 있다.
LIMIT절은 SELECT문의 결과 집합에서 반환할 행의 수를 제한하는 데 사용되는데 TOP-n분석, 페이징 처리에 응용할 수 있다. 이해하기 쉽게 예시를 쓰자면 상위 3명이라고 콕 집어 말한다면 LIMIT 3을 하면 된다.
단축어 중 사용 중인 문장에 커서가 있을 때 Ctrl + D를 하면 현재 문장이 바로 아랫줄에 복사된다.
Alt+Shift+화살표 : 코드 움직이는 단축키
LPAD: 문자열을 길이만큼 왼쪽으로 늘린 후에 빈 곳을 문자열로 채운다.
RPAD: 문자열을 길이만큼 오른쪽으로 늘린 후에 빈 곳을 문자열로 채운다.
TRIM(문자열), TRIM(방향 자를_문자열 FROM 문자열)
- TRIM은 기본적으로 앞뒤 공백을 제거하지만
- 방향(LEADING(앞), BOTH(양쪽), TRAILING(뒤))이 있으면 해당 방향에 지정한 문자열을 제거할 수 있다.
- 방향 지정 가능
- 방향을 3가지 속성 중 하나 집어넣으면 됨.
RAND()
- RAND: 0 이상 1 미만의 실수를 구함.
- m <= 임의의 정수 < n
- FLOOR((RAND() * (n - m) + m)을 사용
- 1부터 10까지 난수 발생 : FLOOR(RAND() * 10 + 1)
CURDATE(), CURTIME(), NOW(), SYSDATE()
- CURDATE: 현재 연-월-일 추출
- CURTIME: 현재 시:분:초 추출
- NOW() 또는 SYSDATE() : 현재 연-월-일 시:분:초 추출
시간 함수로 디데이 만들어보기 DATEDIFF(날짜1, 날짜2), TIMEDIFF(날짜1 또는 시간1, 날짜1 또는 시간2)
- DATEDIFF: 날짜1 - 날짜2의 일수를 반환
- TIMEDIFF: 시간1 - 시간2의 결과를 구함
DAYOFWEEK(날짜), MONTHNAME(), DAYOFYEAR(날짜)
- DAYOFWEEK: 요일 반환(1이 일요일)
- MONTHNAME: 해당 달의 이름 반환
- DAYOFYEAR: 해당 년도에서 몇 일이 흘렀는지 반환.
COUNT는 여러 개 중에 하나의 집계 함수로, 행의 개수를 세는 데 사용.
- COUNT(*): NULL 값을 포함한 모든 행의 개수를 반환
- COUNT(컬럼명): 해당 컬럼에서 NULL이 아닌, 행의 개수만 반환
- COUNT(DISTINCT 컬럼명): 중복을 제외한 고유한 값의 개수를 반환
COUNT 함수는 주로 GROUP BY절과 함께 사용하여 특정 그룹별 행의 개수를 계산할 때 유용. 다른 집계 함수(SUM, AVG, MAX, MIN)와 달리 COUNT는 숫자 데이터뿐만 아니라 모든 데이터 타입에서 사용할 수 있음.
FACTS(사실, 객관) :이번 일주일 동안 갑자기 몰아치느라 준비가 되어있지 않았지만 일단 해보고 생각하자 해서 당일 지원하고 면접보고 일사천리로 진행되었다. 너무 빠르게 진행되어 맞는 선택을 한 게 맞는지 계속 불안했지만 그래도 어떡해 상황은 닥쳤고 한다고 했으니 수업에 늦지 않기 위해 새벽같이 나와서 1주 차 동안 미리미리 도착해 준비했다.
FEELINGS(느낌, 주관) : 밤낮이 바뀌어있기도 했고 급작스러워서 새로운 환경에 갑자기 맞부딪혀야 한다는 게 생각보다 더 큰 부담이긴 했는지 잠도 못 자고 멀미가 너무 심해서 밥도 못 먹을 정도였는데 공부할 때는 빠르게 진행하다 보니 따라가기 급급하고 혼자 너무 못하는 것 같아서 불안해서인지 집에 갈 때는 긴장이 풀려서 감정적으로도 힘들었다.
FINDINGS(배운 것) : 일단 뭔가 하고 싶다면 환경을 그렇게 세팅하는 게 맞다는 걸 다시 느꼈고, 처음부터 잘할 수 없으니 조바심 내지 말고 계속 익숙해질 수 있도록 자주 접하고 부딪히자. 처음에 너무 몰라서 어떡하지 했던 것도 계속 반복되니 조금은 늘었으니 말이다. 몸 건강 정신 건강을 챙기자.
FUTURE(미래) : 아프지 않게 건강 챙기고, 처음 배우는 내용에 너무 못한다고 불안에만 떨지 말고 이 과정이 있어야 성장할 수 있다는 점을 잊지 말고 못난 모습을 인정하고 배운 내용은 조금이라도 당일에 바로 복습하자.
'플레이데이터' 카테고리의 다른 글
[플레이데이터] 백엔드 개발 9기 1개월차 회고 (0) | 2025.03.31 |
---|---|
[플레이데이터]풀스택 백엔드 9기 3월 4주차 회고 (4) | 2025.03.31 |