"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 풀스택 개발: JavaScript 개발자로서 Python 배우기

풀스택 개발: JavaScript 개발자로서 Python 배우기

2024-09-02에 게시됨
검색:471

Fullstack Development: Learning Python as JavaScript Developers

여행이 시작됩니다

저는 8년 넘게 프론트엔드 개발자로 일해 왔으며 지난 2년 동안 제 경력과 제가 어떻게 성장할 수 있는지 다시 생각해 보기로 결심했습니다. 저는 프론트엔드 기술이 자주 바뀌는 것을 발견했습니다. 다양한 프레임워크, 개념, React 클래스 구성 요소와 후크 간의 격차 등이 있었습니다. 나는 이 모든 것이 비즈니스 요구와 개인적인 비전을 표현하기 위해 사용되는 추상화에 불과하다는 것을 깨달았습니다. 이때부터 진로를 바꿔 조금은 풀스택 개발자가 되기로 결심했습니다.

우리 모두 알고 있듯이 요즘 프론트엔드 개발은 JavaScript에 관한 것입니다. 그래서 저는 Node.js와 그 주요 프레임워크를 배우기로 결정했습니다. 모든 프런트엔드 개발자는 어떤 방식으로든 Node.js를 접하게 되며, 선임 프런트엔드 개발자라면 Express나 다른 라이브러리를 사용하여 Node.js에 기본 엔드포인트를 작성할 수 있어야 합니다. Node.js 측에서 2년 동안 활발한 개발을 한 후, 내 직업이 프런트엔드와 백엔드 사이에서 50/50이 되었을 때, 나는 대부분의 프로젝트가 단지 하나의 언어에만 국한되지 않는다는 것을 발견했습니다.

Node.js는 모든 것에 이상적인 도구는 아닙니다. 특히 대규모 회사에서 일할 때는 더욱 그렇습니다. 다양한 언어는 다양한 솔루션을 제공하거나 특정 비즈니스 사례를 해결하는 데 더 적합합니다. 그래서 두 번째 백엔드 언어로 무엇을 배울 수 있는지, 앞으로 어떻게 활용할 수 있을지 연구하기 시작했습니다.

내 경험과 Rust(주로 웹 개발용이 아님), Swift(주로 모바일 우선 솔루션), Golang을 배우려고 노력한 후 Python을 계속 사용하기로 결정한 이유를 공유하고 싶습니다. 여기에서 제가 Python이 프론트엔드 개발자에게 Python을 배울 수 있는 좋은 기회라고 생각하는 이유와 Python 사용 방법을 알아보실 수 있습니다.

왜 파이썬인가?

요즘 AI는 모두의 화두입니다. 경험의 일부로 인터뷰에서 이를 언급하면 ​​항상 추가 포인트를 얻을 수 있습니다. 거의 모든 회사가 AI를 제품에 통합하려고 노력하고 있으며 Python은 AI 및 기계 학습과 함께 사용됩니다. Python을 배우면 Django, Flask, FastAPI와 같은 프레임워크를 사용하여 웹 애플리케이션을 작성할 기회를 얻을 수 있을 뿐만 아니라 기계 학습 및 AI 서비스 작업을 시작할 수도 있습니다.
한편으로는 더 나은 프로그래머가 되고 싶다면 Rust, Go 또는 Elixir와 같은 더 복잡한 언어를 배우는 것이 좋은 생각입니다. 하지만 경력 관점에서 보면 익숙하지 않은 전혀 다른 언어를 사용하는 백엔드 개발자로의 전환은 쉽지 않습니다.

파이썬(Python)은 동적으로 유형이 지정되는 프로그래밍 언어입니다. 유사한 환경에서 경력의 상당 부분을 보낸 JavaScript 개발자로서 코드에서 어떤 종류의 문제가 예상되는지 이미 알고 있으므로 이것이 겁나서는 안 됩니다.
Python을 사용하면 웹 애플리케이션 작성을 시작할 수 있을 뿐만 아니라 AI 관련 분야의 기술을 활용할 수도 있으므로 Python이 제2 언어로서 상당한 이점을 얻을 수 있습니다.

학습 곡선

학습 곡선은 간단했습니다. Python에서는 몇 가지 기본 개념을 확실히 배워야 합니다. JavaScript를 사용해 본 경험이 있다면 별 문제가 되지 않습니다.

다음은 Python의 코드 예제입니다.

import random

def guess_the_number():
    number_to_guess = random.randint(1, 100)
    attempts = 0
    guessed = False

    print("Welcome to the Number Guessing Game!")
    print("I'm thinking of a number between 1 and 100. Can you guess what it is?")

    while not guessed:
        user_guess = int(input("Enter your guess: "))
        attempts  = 1

        if user_guess  number_to_guess:
            print("Too high! Try again.")
        else:
            print(f"Congratulations! You guessed the number {number_to_guess} in {attempts} attempts.")
            guessed = True

guess_the_number()

여기에서는 그다지 복잡한 내용을 찾을 수 없을 것 같습니다. 이전에 Python을 배운 적이 없더라도 설명서를 읽지 않고도 거의 모든 줄을 이해할 수 있습니다.

가장 큰 차이점은 Python이 중괄호 대신 코드 블록을 정의하기 위해 들여쓰기를 사용한다는 것입니다. 이상하게 보일 수도 있고 여전히 조금 이상하다고 생각하지만, 시간이 지나면 익숙해지고 코드를 읽는 것이 더 쉬워집니다.

그 외에도 Python의 많은 개념은 JavaScript의 개념과 유사합니다. console.log 대신 print를 사용할 수 있고, 문자열 보간을 위해 문자열 시작 부분에 f를 추가하면 JavaScript와 거의 동일한 구문을 사용할 수 있습니다.

위 코드의 JavaScript 버전은 다음과 같습니다.

function guessTheNumber() {
    const numberToGuess = Math.floor(Math.random() * 100)   1;
    let attempts = 0;
    let guessed = false;

    console.log("Welcome to the Number Guessing Game!");
    console.log("I'm thinking of a number between 1 and 100. Can you guess what it is?");

    while (!guessed) {
        const userGuess = parseInt(prompt("Enter your guess: "), 10);
        attempts  ;

        if (userGuess  numberToGuess) {
            console.log("Too high! Try again.");
        } else {
            console.log(`Congratulations! You guessed the number ${numberToGuess} in ${attempts} attempts.`);
            guessed = true;
        }
    }
}

guessTheNumber();

장애물 극복: 주요 개념

파이썬에서는 다양한 개념을 배울 수 있습니다. 자바스크립트 개발자로서 가장 헷갈리는 모습을 보여드렸습니다.

들여쓰기 기반 구문

JavaScript 개발자라면 if/else 및 기타 연산자와 함께 코드 블록을 사용하는 방법에 익숙할 것입니다. 대부분의 경우에는 {}만 추가하면 됩니다. Python의 들여쓰기 기반 시스템은 까다로울 수 있습니다.

자바스크립트 코드를 살펴보겠습니다:

if (role === "admin") {
    const posts = getDraftPosts()

    if (posts.length === 0) {
        throw NotFound()
    }   

    return posts
}

파이썬 아날로그:

if role == "admin":
    posts = get_draft_posts()

    if posts.length == 0:
        raise NotFound()

    return posts

보시다시피 Python에서 블록의 가독성은 첫 번째 관점에서 어려울 수 있습니다. 이것이 바로 나에게 깊이 중첩된 블록을 피하는 것이 중요한 이유입니다. 블록은 읽기 어렵고 올바른 들여쓰기를 놓치기 쉽기 때문입니다. 들여쓰기가 누락되어 Python이 잘못된 코드 블록에 코드를 첨부할 수 있다는 점을 명심하세요.

유형 시스템

Python은 동적 타이핑 언어이지만 Python에 내장된 Types 주석을 발견하고 놀랐습니다.

def add(x: int, y: int) -> int:
    return x   y

추가 기능을 설치할 필요는 없으며 Python *3.5 이상에서 필요한 기능만 설치하면 됩니다.*

더 복잡한 유형은 Typescript와 동일하다고 설명할 수 있습니다.

# enums
from enum import Enum # import enum for built in lib

class Season(Enum): # extend class to mark it as enum
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 4

print(Season.SPRING.name) # SPRING
print(Season.SPRING.value) # 1

# or generics
def first(container: List[T]) -> T:
    return container[0]

list_two: List[int] = [1, 2, 3]
print(first(list_two)) # 1

이러한 유형을 사용하기 위해 무언가를 설치하거나 이 코드를 트랜스파일할 필요가 없습니다. 이것은 제가 JavaScript, 적어도 Node.js에서 놓친 부분입니다. Node.js가 가장 가까운 버전에 몇 가지 기본 유형을 추가하고 있다는 것을 알고 있지만(node.js 내장 유형 지원에 대한 중간 게시물 참조) Python과 비교해 보면 지금은 좋지 않은 것 같습니다.

Python의 GIL(Global Interpreter Lock)

JavaScript는 이벤트 중심의 비차단 모델을 사용하는 반면 Python의 GIL(Global Interpreter Lock)은 다중 스레드 프로그램에서 혼란스러운 개념일 수 있습니다.
Python GIL(Global Interpreter Lock)은 한 번에 하나의 스레드만 Python 코드를 실행하도록 보장하는 메커니즘입니다. Python 프로그램에 여러 스레드가 있더라도 GIL로 인해 한 번에 하나의 스레드만 Python 코드를 실행할 수 있습니다.
JavaScript를 사용하면 웹 워커로 멀티스레딩을 달성할 수 있지만 Python에서는 이를 달성하려면 추가 라이브러리를 사용해야 합니다.

Python적인 사고 방식

JavaScript의 "다양한 방법" 철학은 Python에서 잘 작동하지 않습니다. 왜냐하면 Python은 "이를 수행하는 방법은 하나이어야 하고 가급적이면 단 하나의 분명한 방법이 있어야 한다"는 개념을 더 밀접하게 고수하기 때문입니다.
JavaScript 세계에서는 모든 회사가 자체 코드 스타일 가이드를 만드는 경우가 많으며 기본 JavaScript 스타일 권장 사항을 따르는 것이 다행입니다. 실제로 세미콜론을 사용하는 것과 같은 관행은 한 프로젝트에서 세미콜론을 사용하고 다른 프로젝트에서는 사용하지 않을 정도로 매우 다양할 수 있습니다.
Python에서는 PEP 8(Python 스타일 가이드)의 Python 원칙을 따르는 것이 좋습니다. 이 가이드는 Python 코드 작성 방법에 대한 기본 규칙을 간략하게 설명합니다.
더 나은 코드를 작성하려면 커뮤니티에 참여하고 명확성과 단순성을 우선시하는 관용적인 Python 사례를 배우는 것이 중요합니다.

종속성 및 가상 환경 관리

이 부분도 헷갈릴 수 있어요. JavaScript에서는 일반적으로 패키지 관리자를 추가하고 문제 없이 종속성 설치를 시작할 수 있습니다. 그러나 Python의 pip 및 가상 환경은 새로운 개념일 수 있습니다.

Python에서는 추가 종속성을 사용할 때 별도의 가상 환경을 사용하는 것이 좋습니다. 사용자 환경에서 pip(JavaScript의 npm에 해당하는 Python)를 사용하여 종속성을 설치하면 시스템 Python 인터프리터(운영 체제에 사전 설치되어 제공되는 것)가 OS에서 사용되기 때문에 잠재적으로 시스템 유틸리티나 OS 자체가 중단될 수 있습니다. 기타 시스템 유틸리티.

솔루션으로 venv 모듈을 사용하여 가상 환경을 생성할 수 있습니다.

python -m venv myenv
myenv\Scripts\activate # for windows
source myenv/bin/activate # for Mac

가상 환경에 들어간 후에는 루트 환경에 대한 문제나 위험 없이 모든 종속성을 설치할 수 있습니다.

지원 및 리소스 찾기

내가 파이썬을 배운 방법

새로운 언어를 배우는 것은 언제나 어려운 일입니다. 저는 온라인 플랫폼에서 Python 기본을 배우기 시작했고, 그곳에서 몇 가지 작은 프로젝트도 완료했습니다. 학습 과정에서 사용한 계획은 다음과 같습니다.

  • 파이썬 기초.
  • 고급 Python 개념(모듈 시스템, 유형, 환경, 비동기 코드).
  • Django, Flask, FastAPI 등 가장 널리 사용되는 프레임워크의 기본 사항을 학습합니다.
  • FastAPI를 사용하여 첫 번째 API 서버를 작성했습니다.
  • 데이터베이스를 추가하고 Python에서 데이터베이스 작업 방법을 학습합니다.
  • 무료 호스팅 서비스에 애플리케이션을 배포합니다.

도움말을 찾을 수 있는 곳

배우는 동안 Reddit 커뮤니티나 Discord 서버에서 많은 도움을 얻을 수 있습니다. 저는 대부분 Reddit 사용자이므로 첫 번째 애플리케이션에 사용하기로 결정한 Python 및 프레임워크에 대한 하위 레딧을 찾는 것이 좋습니다.

공식 문서를 사용하는 것을 잊지 마세요. 제 생각엔 너무 부담스러워 보이는데, 컨셉이 막히면 관련 글을 찾아보는 경우가 대부분이에요.

PEP 8 — Python 코드 작성 방법에 대한 기본 규칙을 찾을 수 있는 Python 코드 스타일 가이드를 꼭 읽어보세요.

뒤돌아보고 앞으로

JavaScript 개발자에서 Python을 수용하기까지의 여정을 되돌아보면 후회하지 않습니다. 이러한 전환으로 인해 특히 AI 및 기계 학습 영역에서 흥미로운 기회가 열렸으며 이제는 내 프로젝트, 특히 백엔드에서 이를 광범위하게 활용하고 있습니다.

앞으로 Python의 가능성은 무궁무진합니다. 웹 개발, 데이터 과학, 자동화, AI 및 기계 학습에 대한 심층 탐구 등 Python은 새로운 지평을 구축하고 탐색할 수 있는 강력하고 다양한 기반을 제공합니다.

릴리스 선언문 이 글은 https://dev.to/oversec/fullstack-development-learning-python-as-javascript-developers-l6l?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3