백엔드감자's Today I Learned : 부트캠프 전 사놓았던 엄청 좋은 책 발견.

BE_{Potato.}·2023년 2월 13일
0
post-thumbnail

🙂 오늘 집에서 저녁을 먹다가 문득 부트캠프 전에 사놓았던 코딩관련 책을 펼쳐보았다. 근데 웬걸, 부트캠프 전에는 무슨 소리인지도 모르겠던 것들이 어느정도 알거나 들어본 개념들로 바뀌어 있었고, 목차를 슥 훑어보니 내용들도 정말 알차다고 느껴졌다. 그리고 밥을 먹으면서 생각했다. 서브공부로 이책을 한번 읽고 컴공기본공부인 데이터베이스, 자료구조와 알고리즘, 운영체제, 네트워크를 해보는 게 좋겠다는 생각. 그래서 오늘부터 이 '혼공얄코' 책도 진도나가듯이 같이 읽어보며 블로그에 써보려고 한다.


📖 '혼자 공부하는 얄팍한 코딩지식' 공부내용

  • 라이브러리: '하나 이상의 프로그램에서 공통으로 사용할 수 있는 함수들을 모듈로 만들어놓은 집합'
    라이브러리 사용하면 프로그램 만들 때 기존 만들어진 기능 활용해 프로그램 제작 시간과 노력 줄일 수 있음.
  • 좋은 백엔드 개발자가 되기 위해서는 프로그래밍 언어, 프레임워크 외에도 서버와 네트워크, 데이터베이스 등의 다양한 지식이 필요함.
  • 소스코드 : 컴퓨터에 어떤 명령을 내리기 위해 컴퓨터가 이해할 수 있는 언어로 작성한 정보.
  • 순서도를 컴퓨터가 수행할 절차대로, 어떤 순서대로, 발생할 수 있는 상황은 무엇이고 그에 따른 행동은 어떻게 할지, 어떤 과정을 몇 번 반복할지 등을 설계하는 것을 '알고리즘'이라고하고, 이걸 프로그래밍 언어로 작성하는 과정을 '프로그래밍', 이 결과물을 '소스코드'라고 한다.
< 개발 >

개발은 코딩이나 프로그래밍보다 더 포괄적인 개념으로 소프트웨어의 기술적인 계획부터 제작, 사후관리까지 모두 포함.

1. 요구사항 분석: 기획팀에서 '~~~'을 만들어달라고 주문.
2. 시스템 명세: 요구사항을 구체화.
3. 구조 설계: 이를 어떻게 구현할지 전반적인 구상함.(어떤 종류 앱 만들지, 프로그래밍 언어 뭐 쓸지, 데이터는 어떤 방식으로 저장하고 관리할지, 어떤 서버에서 구축할지 등)
4. 구현: 본격적인 제작. 프로그래밍과 코딩이 이 단계에 포함.
5. 테스트: 오류 점검과 기능테스트, 코드 수정.
6. 유지 보수: 출시한 후에도 버그 찾아 해결, 기능 업데이터하면서 앱이 안정적으로 운영되도록 관리함.                                                                                                                                                 
개발자의 업무는 프로그램 코딩해 소프트웨어 만드는 것 뿐만 아니라 서비스 제대로 작동하는지 모니터링하고, 기존 소프트웨어 문제점이나 비효율적인 부분 개선, 데이터베이스 체계 구축, 개발과정을 자동화하고 설계를 문서로 정리하는 것 등 여러 역할이 있고, 모두 소프트웨어 개발에 있어 중요함.
  • 프로그래밍 언어마다 설계 목적과 철학,강점이 있다.

  • 통합 개발환경(IDE): 입력한 코드를 자동완성시켜 미리보기해주는 기능이나 코드가 틀리면 빨간 줄을 띄우는 등 개발을 도우는 프로그램.(비주얼스튜디오 코드가 여기에 해당.정확하게 말하면 코드 에디터이긴 함.)

  • 디버깅: 개발에서 80%는 디버깅이라는 말이 있음, 오류를 찾아 제거하는 행동.
    컴퓨터 프로그램 개발 중 발생하는 오류나 비정상적인 작업을 분석하고 원인을 찾아 제거하는 작업. 실무에서는 이를 확장해 코드를 작성하는 내내 프로그램을 돌려보는 것도 포함시킴.
    개발자들은 코드입력보다 작성한 코드를 계속해서 실행하고 테스트해 프로그램 작동 제대로 하는지, 기존 기능에 영향을 주지 않는지 살펴보는 디버깅에 더 많은 시간 할애. 규모 큰 소프트웨어일수록 디버깅에 더 시간 씀.

  • 소프트웨어 기획단계는 프로그램 개발 뿐만 아니라 향후 유지보수를 어떻게 해 나갈지에 대한 고민까지 같이 해아 함.(어느 코드를 어떻게 고쳐야 할지 쉽게 알아볼 수 있고, 설계가 변경되도 최소한으로 코드를 수정할 수 있게 해야함, 오류발생 시 원인을 쉽게 파악하고 대응할 수 있어야함.)
    => 사용자가 늘어남에 따라 트래픽을 감당할 수 있도록 설계와 코드를 수정해야하고, 제품 발전으로 계속 수정. 프로그램 개발 뒤 버그 대응 및 기능 업데이트 등을 유지보수라고 하고 개발자는 소프트웨어 개발보다 기존제품 유지보수에 시간을 더 씀.

  • 리팩토링: 결과는 바꾸지 않으면서 코드를 더 아름답게 리모델링하는 것. 각 프로그래밍 언어의 강점을 살리고, 본인만 말고 전체가 알 수 있는 코드를 지향해야 함.

  • 코딩 컨벤션: 변수명 짓는 법, 코드 줄 맞추는 법 등 회사 내 정한 코딩 스타일 규칙을 정하는 것. 협업에 매우 중요.

  • 문서화(명세서=Docs) : 주석으로 본인코드에 대한 설명. 더 나아가 Docs로 코드 전반요약해 설명하고, 각 기능 어느 코드에서 사용하면 되는지 정리한 문서. 소프트웨어를 사용할 사람, 이를 수정/개선 등 작업 이어나갈 사람들을 위한 설명서. 일정 단위 개발이 완료되면 해당 코드,설계에 대해 문서화하는 것을 습관화해야 함.

< 서버와 클라이언트 >

- 서버: 정보나 서비스를 저장하고 있다가 필요한 경우 네트워크를 이용해 사용자의 컴퓨터로 전달해주는데, 이 컴퓨터를 서버라고 부름.
=> 서버는 역할의 개념. 컴퓨터가 인터넷을 이용해 정보나 기능을 제공하는지, 제공받는지에 따라 서버와 클라이언트가 나뉨.

- 클라이언트: 웹 서핑을 할 때 사용하는 컴퓨터 등 해당 정보를 서버 컴퓨터로부터 받아오는 역할이면 클라이언트.
  • 클라우드 컴퓨팅: 서버, 저장소, 데이터베이스,네트워킹, 소프트웨어 등과 같은 컴퓨팅 서비스를 인터넷(클라우드)으로 제공하는 방식. AWS,GCP가 이에 해당.

  • 프론트엔드에서 많이 쓰는 단어로 '반응형 웹'이라는 단어가 있는데, 페이지 내 요소들을 신축성 있게 만들어 기기나 화면 크기에 맞게 너비나 높이, 위치 등을 자동으로 조절하는 웹사이트.
    -> 적응형 웹은 이와 반대로 PC용과 모바일용 웹 따로 만드는 것.(복잡한 웹 서비스일수록 적응형 웹이 더 좋은 방법.)

< 데이터가 저장되는 다섯 가지 개념 >

웹 환경에서는 반복적으로 사용되는 데이터나 정보를 종류와 특성에 맞게 저장하고 재활용하기 위해 여러가지 방식을 사용함.

-쿠키: 크롬 같은 브라우저에 저장되는 작은 텍스트 조각. 사용자가 갖고 있는 정보.
(ex.장바구니,검색기록 등) => 당사자 뿐만 아니라 남도 볼 수 있으므로 민감한 정보 넣으면 안 됨.
-세션: 사용자가 사이트에 한번 로그인하면 유효가건 끝날 때까지 더이상 로그인 안해도 이미 인증되었는 인가과정에 세션이 필요함. 서버가 사용자에게서 요청을 받으면 그 요청안에 세션 아이디가 있는지 확인 후에, 서버의 세션 아이디와 동일한지 보고, 누구 계정인지 확인한 후 응답함.
=> 세션은 로그인 여부 등 사용자와 서버의 관계가 기억되어 보존되고 있는 상태를 말함.
-토큰: 세션방식은 메모리 위에서 동작하는데 양이 많아지면 메모리가 부족해짐.그래서 나온 것이 토큰방식. 토큰을 발행해 사용자애게 주고 필요할 때마다 사용자가 제시하면 사용자의 요청을 허가해준다. 이미 로그인한 사용자의 상태를 메모리에 올려둘 필요가 없어 서버부하 줄일 수 있음.
그러나 세션에 비해 토큰을 탈취당할 가능성이 높고, 여러기기에서의 로그인 제한으로 다른 기기 아이디 접속 강제종료가 안 됨. 이러한 단점은 토큰의 만료시간을 짧게 설정해 해결.
-캐시: 한번 전송받은 데이터를 저장해 놨다가 다시 사용할 때 다시 꺼내쓰는 방식. 이 덕분에 같은 것을 할 때 추가통신비가 안들고 로딩없이 사용가능.
(쿠키는 사용자의 수고를 덜어주는 목적, 캐시는 데이터의 전송량을 줄이고 서비스 이용속도를 높이는 목적. 둘 다 정보를 저장해 재활용하는 기술이다.)
-CDN: 콘텐츠 전송 네트워크. 지리적으로 분산된 여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에서 전송함으로써 전송속도를 높임. 각지에 캐시 서버를 두어 부하를 분산시키는 기술.
  • 백엔드: 브라우저가 요청하는 부분, 즉 서버에서 작동하는 부분. 브라우저가 수행하는 프론트엔드 부분을 제외한 웹사이트의 모든 기능은 서버단계인 백엔드에서 이루어진다. 백엔드 개발자를 서버 개발자라고도 함.
< 라이브러리와 프레임워크 >
- 라이브러리: 특정 기능을 수행하는 소프트웨어 조각이자 여러 프로그램에 들어갈 수 있는 부품.
- 프레임워크: 라이브러리와 자체 코드를 엮어 필요한 소스코드를 추가하는 것만으로 원하는 프로그램을 개발할 수 있도록 만들어진 키트.
=> 개발자가 프로그램을 만들기 위해 가져다 쓰면 '라이브러리', 무언가를 기반으로 그 위에 프로그램을 만들면 '프레임워크'
  • API: 예를 들어 '가-나-다'라고 신호 보내면 '1-2-3' 수행한다라고 정한 약속. 프론트엔드와 백엔드 간의 약속이고, 브라우저에서 보낸 요철을 서버가 알아채기 위해 둘 사이에 약속된 신호. 어떤 주제에 대한 프로그램 간의 소통을 위한 신호 체계. 합의된 API 목록에 따라 프론트엔드 개발자는 요청을 보내고 응답으로 반환된 결과를 화면에 반영하는 기능을 다루고, 백엔드 개발자는 요청된 작업을 수행하는 기능을 다룸. 공공 API를 통해 공공데이터포털,네이버지도,구글지도 등을 API를 활용해 사용할 수 있다.
  • REST API? 개발자 사이에 보편적으로 공유되는 API 방식.
< 컴퓨터에 정보를 전달하는 방법 >
- XML: HTML과 같은 마크업언어로 작성하는 방법.
- JSON: 객체 형식의 작성방법.
- YAML: 프로그램 설정파일처럼 개발자가 편리하게 읽고 작성하기 위한 용도.
- AJAX: 자바스크립트를 이용해 서버에 데이터를 비동기 방식으로 요청하는 것을 의미. 비동기 방식은 서버에 데이터를 요청한 다음 멈춰 있는 것이 아니라 요청한 상태와 별개로 프로그램이 계속 돌아간다는 의미.

🧐 "혼공얄코" 공부 1일차 느낀 점?

오늘 예전에 샀던 혼공얄코 책을 반 정도 봤다. 부트캠프를 하면서 들었던 지식들이 나와서 재미있어서 쉬지 않고 반을 본 것 같다. 읽다보면 수업내용이 겹치는 것도 좀 있고, 뭔가 작가의 철학이 담긴 책인 것 같다. 내용은 쉽게 얘기하지만 중요한 내용을 다 알려주는, 어려운 일을 툭툭 해내는 고수의 내공이 느껴졌다.
이 책을 읽으면서 가장 좋았던 점은 개발자의 업무를 전체적으로 볼 수 있고, 탄탄한 기본기와 전체적으로 폭넓게 볼 수 있는 시야를 제공해주는 것이 너무 좋았다.
가장 인상적인 것은 개발의 단계소개와 유지보수, 문서화 부분이였는데 프로그래밍과 코딩으로 대표되는 구현에만 치우쳐 있던 마인드를 소개한 개발과정 중 한가지도 소홀하면 안 된다라는 진짜 개발자의 덕목을 알게 되어 좋았다. 내일도 책 반 남은 거 블로그에 또 남겨봐야겠다.
예전에 사놓고 몰랐는데 너무 좋은 책이라는 게 느껴진다. 지금이라도 알게 되어 다행이다.


⛹️‍♂️ 프로젝트에 대한 이야기. : "당근소알"

ERD 설계가 시작이다. 너무 완벽한 ERD를 짜려고 하니까 몸이 안 움직이는 것 같다. 가장 큰 난제가 어떤 테이블을 만들어야 하는가이다. 우선 채팅 이런 것까지 너무 깊게 생각하지 말고 작은 관계를 다른 것을 참고하면서 적어봐야겠다.

profile
항상 '기본'을 중요시하는 예비 백엔드개발자입니다!

0개의 댓글