"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Reflective 블로그: 부동산 목록 API를 구축하는 나의 여정

Reflective 블로그: 부동산 목록 API를 구축하는 나의 여정

2024-11-03에 게시됨
검색:561

Reflective Blog: My Journey Building a Real Estate Listing API

Reflective 블로그: 부동산 목록 API를 구축하는 나의 여정


소개

처음 Real Estate Listing API 구축을 시작했을 때는 무슨 일을 하게 될지 잘 몰랐습니다. 초보 소프트웨어 개발자로서 처음부터 API를 개발한다는 생각은 두려운 일이었습니다. 하지만 저는 제 자신에게 도전하고 싶었고 Python과 SQL 지식을 시험해 보고 싶었습니다. 이제 이 여정을 되돌아보면 코딩뿐만 아니라 인내의 중요성, 문제 해결의 기쁨, 프로젝트가 실제로 구현되는 것을 보는 스릴에 대해 내가 얼마나 많이 배웠는지 놀랍습니다. .

이 블로그 게시물은 초보 Real Estate Listing API 앱을 구축한 경험을 반영한 것입니다. 이 프로젝트를 도전적이고 보람 있게 만든 Python 및 SQL에 대한 좋은 점과 나쁜 점, 주요 학습 순간, 몇 가지 유용한 기술 통찰력을 공유하겠습니다.


시작: Python의 기초 학습

제 여정은 Python의 기본부터 시작되었습니다. 저는 데이터 유형, 제어 흐름, 함수, 객체 지향 프로그래밍 등 기본 사항을 배우는 것부터 시작했습니다. Python의 단순성과 가독성 덕분에 이러한 개념을 더 쉽고 빠르게 이해할 수 있었습니다. 하지만 실제 문제를 해결하기 위해 이러한 기본 사항을 적용해야 했을 때 진정한 어려움이 찾아왔습니다.

객체 지향 프로그래밍(OOP)을 이해하는 것은 중요한 이정표였습니다. 저는 클래스와 개체를 사용하여 Real Estate Listing API에서 사용자 및 속성과 같은 다양한 엔터티를 처리하는 구조화된 방법을 만들 수 있다는 것을 깨달았습니다. 이는 사용자, 속성, 애플리케이션과 같은 실제 엔터티를 모델링해야 하는 내 프로젝트의 기반을 마련했습니다.

예를 들어 API에서 Python 클래스를 사용하여 사용자 모델을 정의했는데, 이는 서로 다른 엔터티 간의 관계와 시스템 내에서 상호 작용하는 방식을 이해하는 데 도움이 되었습니다. 다음은 내 사용자 모델의 단순화된 버전입니다.

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, nullable=False)
    email = db.Column(db.String, nullable=False, unique=True)
    password = db.Column(db.String, nullable=False)
    role = db.Column(db.Enum('agent', 'property_owner', 'buyer', name='user_roles'), nullable=False)

    properties = db.relationship('Property', backref='owner', lazy=True)
    applications = db.relationship('Application', backref='applicant', lazy=True)
    favorites = db.relationship('Property', secondary='wishlist', backref='favorited_by', lazy='dynamic')

이것은 Python을 사용하여 코드에서 실제 개체를 표현하는 방법에 대한 첫 번째 실제 노출이었으며 완전히 새로운 가능성의 세계를 열었습니다.


더 자세히 알아보기: 부동산 API 구축

Python과 객체 지향 프로그래밍에 대한 기본적인 이해를 마친 후 Real Estate Listing API 구축을 시작하기로 결정했습니다. 목표는 간단했습니다. 부동산 소유자가 부동산을 나열하고 잠재적 임차인/구매자가 자신이 좋아하는 부동산을 검색, 적용 및 관리할 수 있는 API를 만드는 것입니다. 그러나 이 목표를 달성하려면 기본적인 것 이상의 것이 필요했습니다.

RESTful API 개발을 위해 Flask 사용

Python용 경량 웹 프레임워크인 Flask는 API 구축을 위해 제가 꼭 사용하는 도구가 되었습니다. 저는 Flask의 단순성과 유연성을 좋아했습니다. 불필요한 복잡성으로 인해 부담을 느끼지 않으면서 시작하는 데 도움이 되는 충분한 구조를 제공했습니다.

저는 GET, POST, PATCH, DELETE와 같은 다양한 HTTP 메서드를 처리하기 위한 경로를 설정하는 것부터 시작했습니다. 이를 통해 속성, 사용자, 애플리케이션 및 위시리스트에 대한 핵심 CRUD(만들기, 읽기, 업데이트, 삭제) 작업을 구현할 수 있었습니다. 제가 빨리 배운 것 중 하나는 응답과 함께 적절한 HTTP 상태 코드를 반환하는 것의 중요성이었습니다. 예를 들어, 성공적인 POST 요청은 201 Created 상태를 반환해야 하고, 존재하지 않는 리소스에 대한 요청은 404 Not Found를 반환해야 합니다.

다음은 ID로 속성을 가져오기 위해 만든 경로의 예입니다.

@app.route('/properties/', methods=['GET'])
def get_property(id):
    property = Property.query.get(id)
    if property:
        return jsonify(property_schema.dump(property)), 200
    else:
        return jsonify({'error': 'Property not found'}), 404

이 스니펫은 다양한 시나리오를 처리하는 방법을 이해하고 API가 클라이언트에게 의미 있는 피드백을 제공하는지 확인하는 데 도움이 되었습니다.

데이터베이스 상호 작용을 위한 SQLAlchemy 구현

이 API 구축의 또 다른 중요한 부분은 Python 클래스와 SQL 데이터베이스를 연결하는 ORM(객체 관계형 매핑) 도구인 SQLAlchemy를 사용하여 데이터베이스와 상호 작용하는 방법을 배우는 것이었습니다. 제가 SQLAlchemy를 선택한 이유는 Flask와 잘 통합되고 테이블 간 관계 생성 및 관리와 같은 SQL의 복잡한 측면을 단순화하기 때문입니다.

제가 사용한 SQLAlchemy의 가장 유용한 기술적 측면 중 하나는 다대다 관계를 생성하는 것이었습니다. 예를 들어 내 Real Estate API에서 사용자는 여러 부동산을 즐겨찾기에 추가할 수 있으며, 각 부동산은 많은 사용자가 즐겨찾기에 추가할 수 있습니다. 이를 모델링하기 위해 Wishlist라는 링크 테이블을 사용하여 다대다 관계를 관리했습니다.

wishlist_table = db.Table('wishlist',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('property_id', db.Integer, db.ForeignKey('property.id'), primary_key=True)
)

이 스니펫을 사용하면 중복 데이터를 생성하지 않고도 사용자-속성 관계를 효율적으로 관리할 수 있었습니다. SQLAlchemy의 관계 기능을 사용하면 이러한 연결을 쉽게 쿼리하고 관리할 수 있습니다.

Flask-Marshmallow를 사용한 직렬화

또 다른 중요한 학습 경험은 Flask-Marshmallow를 사용하여 SQLAlchemy 모델을 JSON 형식으로 직렬화하는 것이었습니다. 직렬화는 복잡한 데이터 유형을 네트워크를 통해 쉽게 전송할 수 있는 형식으로 변환하며, 이는 API 구축에 필수적입니다. 저는 Marshmallow 스키마를 사용하여 모델을 JSON으로 변환하는 방법을 정의했습니다. 내 속성 모델에 대한 예제 스키마는 다음과 같습니다.

class PropertySchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Property
        load_instance = True

property_schema = PropertySchema()
properties_schema = PropertySchema(many=True)

Marshmallow를 사용하면 모델을 JSON으로 변환하는 프로세스가 단순화되어 API의 핵심 기능을 구축하는 데 집중할 수 있습니다.


되돌아보기: 여행에 대한 성찰

돌아보면 짧은 시간 안에 내가 얼마나 여기까지 왔는지 실감하게 된다. 처음 시작할 때는 Python의 기본을 거의 알지 못했습니다. 이제 Flask, SQLAlchemy, Marshmallow를 사용하는 본격적인 API를 구축했으며 웹 개발에 대해 훨씬 더 깊은 이해를 갖게 되었습니다.

이번 여정에서 가장 보람찬 측면 중 하나는 문제를 해결했다는 느낌이었습니다. 모든 오류 메시지, 모든 버그, 모든 예상치 못한 행동은 나에게 새로운 것을 가르쳐주었습니다. 경로가 작동하지 않는 이유를 알아내는 것, 데이터베이스 연결 문제를 디버깅하는 것, CORS를 올바르게 처리하는 방법을 배우는 것 등 각 과제는 제가 개발자로서 성장하는 데 도움이 되었습니다.

하지만 아마도 제가 배운 가장 중요한 교훈은 끈기의 가치일 것입니다. 막히거나 답답할 때도 있었지만 계속해서 앞으로 나아갔습니다. 저는 문제를 더 작고 관리하기 쉬운 조각으로 나누고 하나씩 해결하는 방법을 배웠습니다.


유용한 기술적 통찰력: Flask CORS 구성

특히 유용하다고 생각한 기술적 측면 중 하나는 Flask 애플리케이션에서 CORS(Cross-Origin Resource Sharing)를 구성하는 것이었습니다. CORS는 서로 다른 도메인에 호스팅된 웹 애플리케이션이 서로 통신할 수 있도록 하는 데 중요합니다. 내 경우에는 브라우저의 동일 출처 정책에 의해 차단되지 않고 프런트엔드(React로 구축됨)가 백엔드 API에 요청할 수 있도록 허용했습니다.

Flask 앱에서 CORS를 설정하는 방법은 다음과 같습니다.

from flask_cors import CORS

app = Flask(__name__)
CORS(app)

CORS(앱)를 추가함으로써 앱의 모든 경로에 대해 교차 출처 요청을 활성화했고, 이로 인해 프런트엔드와 백엔드 간의 통합이 훨씬 더 원활해졌습니다. 웹 개발자라면 누구나 알아야 할 작지만 강력한 기능입니다.


결론

부동산 목록 API를 구축하는 것은 어려웠지만 매우 보람 있는 경험이었습니다. 저는 Python, SQL, 웹 개발에 대해 많은 것을 배웠고, 개발자로서의 능력에 훨씬 더 자신감을 갖게 되었습니다. 저는 이 분야에서 계속해서 구축하고, 배우고, 성장할 수 있게 되어 기쁘게 생각하며, 미래가 어떻게 될지 무척 기대됩니다.

이제 막 시작하는 사람을 위한 제 조언은 간단합니다. 계속 배우고, 계속 실험하고, 실수하는 것을 두려워하지 마세요. 모든 도전은 성장할 수 있는 기회이며, 모든 프로젝트는 개발자로서의 여정에서 한 단계 더 나아가는 단계입니다.

https://github.com/migsldev/real-estate-api

릴리스 선언문 이 기사는 https://dev.to/migsldev/reflective-blog-my-journey-building-a-real-estate-listing-api-390o?1에 복제되어 있습니다. 침해가 있는 경우, Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3