지난주에는 개발 환경을 설정하고 Git과 Python의 아주 기초적인 내용을 배웠다면, 이번 주에는 직접 코드를 작성하고 여러 파일을 연결하는 단계로 넘어갔다.
Python 함수와 클래스부터 Git 브랜치를 활용한 협업, 프론트엔드와 백엔드의 관계, HTTP를 통해 서버와 데이터를 주고받는 흐름까지 배웠다.
수업 내용이 점점 많아지면서 단순히 강사님의 코드를 따라 입력하는 것만으로는 부족하다는 것도 느꼈다. 이번 주에는 코드를 직접 나누고 합쳐보면서, 개발에서는 각각의 문법보다 전체적인 연결 구조를 이해하는 것이 중요하다는 것을 배웠다.
이번 주에 배운 내용
이번 주의 주요 학습 내용은 다음과 같다.
- Python 함수 작성과 코드 분리
- 매개변수와 반환값
- lambda 함수의 기본 개념
- sorted()의 key와 reverse 사용법
- Python 클래스와 객체
- 속성과 메서드의 역할
- Git 브랜치를 이용한 팀 협업
- 프론트엔드와 백엔드의 역할
- HTTP 요청과 응답
- 서버 실행과 데이터 처리 흐름
- 팀 프로젝트의 파일 구조와 작업 통합 방법
지난주에는 하나의 Python 파일 안에서 문법을 연습했다면, 이번 주에는 기능에 따라 코드를 나누고 여러 사람이 함께 작업하는 방법까지 배우기 시작했다.
함수를 배우며 느낀 점
함수는 반복해서 사용하는 코드를 하나로 묶어놓는 기능이다.
처음에는 기존에 작성했던 코드를 여러 함수로 나누는 것이 오히려 더 복잡하게 느껴졌다. 코드가 한곳에 있을 때는 위에서부터 읽으면 됐지만, 함수로 분리한 뒤에는 어떤 함수가 언제 실행되고 어떤 값을 돌려주는지 확인해야 했기 때문이다.
하지만 학생의 점수를 확인하고, 합격 여부를 판단하고, 평균을 계산하는 기능을 각각의 함수로 나누어 보니 함수가 필요한 이유를 조금씩 이해할 수 있었다.
하나의 긴 코드로 작성하면 수정할 부분을 찾기 어렵지만, 기능별로 함수를 나누면 문제가 생긴 위치를 찾기 쉬워진다. 같은 기능을 다시 사용할 때 코드를 새로 작성할 필요도 없다.
이번 주에는 특히 다음과 같은 부분이 처음에는 헷갈렸다.
sorted(students, key=lambda x: x["score"], reverse=True)
이 코드는 학생 목록을 점수가 높은 순서대로 정렬하는 코드다.
- sorted()는 데이터를 정렬한다.
- key는 어떤 값을 기준으로 정렬할지 정한다.
- lambda x: x["score"]는 각 학생의 점수를 꺼낸다.
- reverse=True는 큰 값부터 작은 값 순서로 정렬한다.
처음에는 한 줄에 여러 기능이 들어 있어 어렵게 보였지만, 각 부분을 나누어 살펴보니 이해할 수 있었다.
앞으로도 복잡해 보이는 코드를 만나면 한 번에 이해하려 하기보다, 코드를 작은 부분으로 나누어 보는 습관을 들여야겠다.
클래스와 객체 이해하기
함수 다음에는 Python의 클래스를 배웠다.
함수가 특정 행동을 묶어놓은 것이라면, 클래스는 관련된 데이터와 행동을 하나로 묶어놓은 설계도라고 이해했다.
예를 들어 학생을 표현하는 클래스를 만든다면 학생의 이름과 점수는 속성이 되고, 학생의 정보를 출력하거나 성적을 계산하는 기능은 메서드가 될 수 있다.
처음에는 클래스, 객체, 인스턴스, 속성, 메서드 같은 용어가 한꺼번에 등장해 헷갈렸다.
아직 모든 개념을 정확하게 설명할 수 있는 단계는 아니지만, 다음과 같이 이해하고 있다.
- 클래스는 물건을 만들기 위한 설계도다.
- 객체는 설계도를 이용해 실제로 만든 결과물이다.
- 속성은 객체가 가지고 있는 정보다.
- 메서드는 객체가 할 수 있는 행동이다.
문법을 외우는 것보다 실제 예시를 만들어 보는 것이 이해에 도움이 됐다.
앞으로 프로젝트를 진행하면서 클래스가 실제로 어떤 상황에서 사용되는지 더 살펴봐야겠다.
Git 브랜치를 이용한 팀 협업
이번 주에는 팀원들과 GitHub를 이용해 코드를 함께 관리하는 방법도 연습했다.
혼자 개발할 때는 하나의 브랜치에서 작업해도 큰 문제가 없지만, 여러 명이 같은 파일을 동시에 수정하면 코드가 충돌할 수 있다.
이를 줄이기 위해 각자 브랜치를 만들어 작업하고, 완성된 내용을 하나의 기준 브랜치에 합치는 방식으로 진행했다.
팀원의 원격 브랜치가 바로 보이지 않는 문제도 있었는데, 다음 명령어를 실행한 뒤 확인할 수 있었다.
git fetch --all --prune
각 명령어의 의미는 다음과 같다.
- git fetch는 원격 저장소의 최신 정보를 가져온다.
- --all은 등록된 모든 원격 저장소의 정보를 가져온다.
- --prune은 원격 저장소에서 이미 삭제된 브랜치 정보를 로컬에서도 정리한다.
즉, 원격 저장소의 최신 브랜치 상태를 다시 받아오면서 필요 없는 정보까지 정리하는 명령어다.
명령어를 실행해 문제가 해결되었지만, 명령어만 외우면 비슷한 문제가 발생했을 때 다시 막힐 수 있다. 앞으로는 현재 로컬 저장소와 원격 저장소의 상태가 어떻게 다른지 먼저 생각해 보려고 한다.
프론트엔드와 백엔드의 연결
이번 주 후반에는 프론트엔드와 백엔드가 HTTP를 통해 어떻게 연결되는지 배웠다.
프론트엔드는 사용자가 보는 화면이고, 백엔드는 화면에서 전달받은 요청을 처리하는 서버라고 이해할 수 있다.
예를 들어 사용자가 회원가입 화면에 정보를 입력하면 다음과 같은 과정이 진행된다.
- 사용자가 화면에 이름과 이메일 등을 입력한다.
- 프론트엔드가 입력한 정보를 서버에 전달한다.
- 백엔드 서버가 전달받은 정보를 확인한다.
- 필요한 작업을 처리하고 데이터를 저장한다.
- 처리 결과를 다시 프론트엔드에 전달한다.
- 화면에는 회원가입 성공 또는 실패 결과가 표시된다.
상품 조회도 비슷하다.
사용자가 상품 조회 버튼을 누르면 프론트엔드가 서버에 상품 정보를 요청한다. 서버는 데이터를 찾아서 보내주고, 프론트엔드는 받은 데이터를 화면에 보여준다.
수업에서는 서버를 실행하고 직접 요청을 보내면서 데이터가 어떻게 바뀌는지 확인했다.
처음에는 서버가 눈에 보이지 않아 이해하기 어려웠지만, 회원가입과 상품 조회 같은 실제 서비스의 기능으로 생각하니 조금 더 쉽게 이해할 수 있었다.
가장 인상 깊었던 배움
이번 주에 가장 인상 깊었던 것은 개발은 각각의 기술이 따로 움직이는 것이 아니라 모두 연결되어 있다는 점이었다.
Python 함수와 클래스는 코드를 정리하기 위해 사용된다. 정리된 코드는 프로젝트의 여러 파일에 나누어 작성된다. 팀원들은 각자의 브랜치에서 파일을 수정하고 GitHub를 통해 하나로 합친다.
이렇게 만든 백엔드 프로그램은 서버에서 실행되고, 프론트엔드는 HTTP를 통해 서버에 필요한 기능을 요청한다.
처음에는 함수, 클래스, Git, HTTP가 각각 다른 내용처럼 느껴졌다. 하지만 프로젝트의 전체 흐름으로 생각해 보니 모두 하나의 서비스를 만들기 위해 필요한 도구였다.
아직은 각각의 개념을 배우는 단계지만, 앞으로 수업이 진행될수록 지금 배운 내용들이 어떻게 연결되는지 더 분명하게 보일 것 같다.
KPT 회고
Keep|계속 유지할 점
이번 주에도 수업 내용을 전사한 뒤, 교시별로 정리하고 일일 회고를 작성했다.
수업 시간에는 이해했다고 생각했던 내용도 글로 설명하려고 하면 막히는 경우가 많았다. 이런 부분을 다시 질문하고 쉬운 표현으로 정리하면서 내가 정확히 모르는 부분을 확인할 수 있었다.
앞으로도 다음과 같은 방법은 계속 유지하려고 한다.
- 수업 내용을 그날 바로 정리하기
- 이해되지 않는 코드만 따로 질문하기
- 복잡한 코드를 작은 단위로 나누어 보기
- 오류 화면과 해결 방법을 함께 기록하기
- Git 명령어의 결과뿐 아니라 의미까지 확인하기
- 팀원들과 프로젝트 구조를 함께 논의하기
특히 배운 내용을 블로그 글로 작성하는 과정은 단순한 기록보다 복습에 가까웠다.
앞으로도 수업 내용을 그대로 옮기기보다, 내가 이해한 방식으로 다시 설명하는 연습을 이어가야겠다.
Problem|어려웠던 점
이번 주부터 학습 내용이 빠르게 많아졌다.
Python 함수와 클래스도 완전히 익숙하지 않은 상태에서 Git 브랜치와 백엔드 서버까지 함께 배우다 보니, 수업 시간에는 따라갔지만 혼자 다시 작성하려면 순서가 기억나지 않는 경우가 있었다.
특히 어려웠던 부분은 다음과 같다.
- 함수로 코드를 나누는 기준
- lambda처럼 짧게 작성된 코드 해석
- 클래스와 객체 관련 용어 구분
- 로컬 브랜치와 원격 브랜치의 차이
- 팀원들이 작업한 코드를 하나로 합치는 과정
- 프론트엔드가 서버에 요청을 보내는 흐름
- 서버 프로젝트의 여러 파일이 연결되는 구조
또한 수요일과 목요일에는 수업이 끝난 뒤 실용음악학원 출강이 있어 팀 스터디에 끝까지 참여하기 어렵다.
학원까지 지하철로 약 1시간이 걸리기 때문에 이동 시간을 잘 활용하지 못하면 팀에서 진행된 내용을 놓칠 수 있다는 점도 고민이다.
Try|다음 주에 시도할 점
다음 주에는 모든 코드를 완벽하게 외우기보다, 전체 흐름을 설명할 수 있도록 복습해 보려고 한다.
구체적으로는 다음과 같이 실천할 계획이다.
- 수업에서 작성한 함수를 보지 않고 다시 만들어 보기
- 클래스 예제를 하나 직접 만들어 보기
- Git 브랜치를 생성하고 변경 사항을 합치는 과정을 반복하기
- 브라우저에서 요청을 보냈을 때 서버에서 일어나는 일을 그림으로 정리하기
- 수업이 끝난 뒤 핵심 내용을 세 문장으로 요약하기
- 지하철 이동 시간에 팀 채팅과 GitHub 변경 사항 확인하기
- 팀 스터디에 참여하지 못하는 날에는 맡은 작업과 진행 상황을 미리 공유하기
- 집에 도착한 뒤 팀에서 결정된 내용을 짧게 확인하기
이동 중에는 직접 코드를 오래 작성하기 어렵기 때문에, GitHub의 변경 사항을 읽거나 팀원의 코드를 확인하는 시간으로 활용하려고 한다.
직접 작성해야 하는 작업은 미리 작은 단위로 나누고, 수업 전이나 주말에 처리하는 방식도 시도해 볼 생각이다.
현재 나의 상태
지난주에는 개발 환경을 준비하고 Python 문법을 다시 시작하는 단계였다.
이번 주에는 함수와 클래스를 배우고, GitHub를 통해 다른 사람의 코드와 연결하기 시작했다. 백엔드 서버가 프론트엔드의 요청을 처리하는 흐름도 조금씩 보이기 시작했다.
아직 혼자서 전체 프로젝트를 만들 수 있는 단계는 아니다. 하지만 코드를 보았을 때 어떤 역할을 하는지 조금씩 구분할 수 있게 됐다.
현재 상태를 정리하면 다음과 같다.
- 간단한 함수는 작성할 수 있지만 기능별로 나누는 연습이 더 필요하다.
- 클래스의 기본 구조는 배웠지만 직접 활용하는 연습이 부족하다.
- Git 브랜치를 사용할 수 있지만 협업 과정은 아직 익숙하지 않다.
- 프론트엔드와 백엔드의 역할은 이해했지만 실제 요청과 응답 코드는 복습이 필요하다.
- 오류가 발생했을 때 해결 방법을 바로 검색하기보다 원인을 먼저 생각하는 연습이 필요하다.
모르는 내용이 많지만, 적어도 무엇을 모르는지는 지난주보다 분명해졌다.
다음 주 목표
다음 주 목표는 수업에서 작성한 코드를 혼자 다시 실행하고, 각 코드가 왜 필요한지 설명할 수 있도록 만드는 것이다.
코드를 똑같이 따라 작성하는 것만으로는 실제 프로젝트에서 활용하기 어렵다.
함수가 왜 분리되었는지, 클래스가 어떤 데이터를 관리하는지, 브랜치를 왜 나누는지, 프론트엔드의 요청을 서버가 어떻게 처리하는지 내 말로 설명할 수 있어야 한다.
다음 주에는 새로운 내용을 배우는 것과 함께 이번 주에 배운 내용을 짧게라도 반복해서 작성해 보려고 한다.
2주차를 마치며
이번 주에는 Python 문법을 배우는 것에서 한 단계 더 나아가, 여러 기능과 사람이 연결되는 개발 과정을 경험했다.
함수와 클래스를 통해 코드를 정리하고, Git 브랜치를 이용해 각자의 작업을 나누고, HTTP를 통해 프론트엔드와 백엔드가 데이터를 주고받는 흐름을 배웠다.
각각의 개념은 아직 어렵지만, 하나의 서비스를 만들기 위해 왜 필요한지는 조금씩 이해되고 있다.
수업 진도가 빨라지면서 복습해야 할 내용도 많아졌지만, 모든 내용을 한 번에 완벽하게 이해하려고 조급해하지 않으려고 한다.
매일 배운 내용을 기록하고 직접 다시 실행하면서, 따라 작성한 코드를 내가 이해한 코드로 바꾸는 것이 다음 주의 가장 중요한 목표다.
댓글