>백엔드 개발 >파이썬 튜토리얼 >Reflective 블로그: 부동산 목록 API를 구축하는 나의 여정

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

WBOY
WBOY원래의
2024-09-03 10:53:061057검색

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/<int:id>', 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를 사용한 직렬화

Another important learning experience was using Flask-Marshmallow to serialize my SQLAlchemy models into JSON format. Serialization converts complex data types into a format that can be easily transferred over the network, which is essential for building APIs. I used Marshmallow schemas to define how my models should be converted to JSON. Here's an example schema for my Property model:

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

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

Using Marshmallow simplified the process of converting my models to JSON, allowing me to focus on building out the core functionality of the API.


Looking Back: Reflecting on the Journey

Looking back, I realize how far I've come in just a short time. When I started, I barely knew the basics of Python. Now, I've built a full-fledged API that uses Flask, SQLAlchemy, and Marshmallow, and I have a much deeper understanding of web development.

One of the most rewarding aspects of this journey was the feeling of solving problems. Every error message, every bug, and every unexpected behavior taught me something new. Whether it was figuring out why a route wasn't working, debugging a database connection issue, or learning how to properly handle CORS, each challenge helped me grow as a developer.

But perhaps the most important lesson I've learned is the value of persistence. There were times when I felt stuck or frustrated, but I kept pushing forward. I learned to break problems down into smaller, more manageable pieces and tackle them one by one.


A Useful Technical Insight: Flask CORS Configuration

One technical aspect I found particularly useful was configuring Cross-Origin Resource Sharing (CORS) in my Flask application. CORS is crucial for allowing web applications hosted on different domains to communicate with each other. In my case, it allowed the frontend (built with React) to make requests to the backend API without getting blocked by the browser's same-origin policy.

Here's how I set up CORS in my Flask app:

from flask_cors import CORS

app = Flask(__name__)
CORS(app)

By simply adding CORS(app), I enabled cross-origin requests for all routes in my app, which made the integration between my frontend and backend much smoother. This is a small but powerful feature that every web developer should know.


Conclusion

Building the Real Estate Listing API was a challenging but immensely rewarding experience. I learned so much about Python, SQL, and web development, and I feel much more confident in my abilities as a developer. I'm excited to continue building, learning, and growing in this field, and I can't wait to see what the future holds.

For anyone just starting out, my advice is simple: keep learning, keep experimenting, and don't be afraid to make mistakes. Every challenge is an opportunity to grow, and every project is a step forward on your journey as a developer.

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

위 내용은 Reflective 블로그: 부동산 목록 API를 구축하는 나의 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.