본문 바로가기

파이썬으로 로또 1등 도전기

16일차) 생성한 로또번호 당첨통계 확인 기능추가

 

안녕하세요, 여러분! 오늘은 우리 로또 번호 관리 웹 애플리케이션에서 로또 번호를 가져오는 API의 동작을 살펴보려고 해요. 이 API는 사용자가 특정 회차의 로또 번호를 쉽게 조회할 수 있게 도와줍니다. 자, 그럼 코드의 각 부분을 재미있게 설명해볼까요?

#### API 엔드포인트: `/get_lotto_numbers`

이 API는 로또 번호를 요청할 수 있는 엔드포인트입니다. 사용자가 특정 회차의 번호를 조회할 때 호출됩니다. **이제 코드의 주인공을 만나볼까요!**

@app.route('/get_lotto_numbers')
def get_lotto_numbers():



여기서 `@app.route('/get_lotto_numbers')`는 이 URL로 요청이 들어오면 `get_lotto_numbers()` 함수를 실행하라는 의미예요. 마치 로또 번호를 요청하는 손님이 들어왔을 때, 마법처럼 그에 맞는 서비스를 제공하는 것과 같죠!

#### 회차 정보 가져오기

이제 사용자가 요청한 회차를 받아볼게요. 사용자가 웹에서 입력한 회차 정보를 `round`라는 변수에 저장합니다.

round = request.args.get('round')



여기서는 사용자가 선택한 회차 정보를 가져오는데, 마치 여러분이 "이번 주 로또 몇 회차?"라고 물어보는 것과 같아요.

#### 데이터베이스 연결하기

이제 로또 번호를 가져오기 위해 데이터베이스에 연결해야 해요. `connect_to_db()` 함수를 호출하여 데이터베이스와 연결합니다.

connect_to_db()



이 단계에서는 마치 로또 번호가 담긴 금고에 접근하는 것과 비슷해요. 이제 금고 안에 들어있는 소중한 번호들을 꺼낼 준비가 되었네요!

#### SQL 쿼리로 로또 번호 조회하기

이제 본격적으로 SQL 쿼리를 사용해서 데이터베이스에서 로또 번호를 가져올 차례입니다. 다음 코드에서 우리의 주인공 SQL 쿼리를 살펴볼까요?

sql = """
SELECT seq, lucky_numbers, lotto_rank, lucky_yn 
FROM lotto_lucky_numbers 
WHERE target_lotto_round = %s
ORDER BY 
    CASE lotto_rank 
        WHEN 1 THEN 1
        WHEN 2 THEN 2
        WHEN 3 THEN 3
        WHEN 4 THEN 4
        WHEN 5 THEN 5
        ELSE 6
    END,
    seq ASC
"""



이 쿼리는 `lotto_lucky_numbers` 테이블에서 특정 회차에 해당하는 번호들을 가져옵니다. 그리고 `lotto_rank`에 따라 정렬한 다음, 동일한 순서로 번호를 보여줍니다. 즉, 1등, 2등, 3등, ... 의 순서로 정리되죠. 마치 로또 순위에 따라 번호들이 줄 서 있는 것처럼요!

#### 데이터 가져오기 및 반환하기

데이터를 가져온 후, 결과를 JSON 형식으로 변환해 반환합니다.

numbers = [
    {"seq": row[0], "luck_numbers": row[1], "lotto_rank": row[2], "lucky_yn": row[3]}
    for row in cursor.fetchall()
]
return jsonify({"numbers": numbers})



각 번호의 `seq`, `luck_numbers`, `lotto_rank`, `lucky_yn` 정보를 담아 리스트로 만들고, 이를 JSON 형태로 변환해 클라이언트에 전달합니다. 웹 애플리케이션이 원하는 정보를 간편하게 받을 수 있도록 준비하는 거죠!

#### 에러 처리

마지막으로, 만약 코드 실행 중에 문제가 생기면 오류 메시지를 반환합니다.

except Exception as e:
    return jsonify({"error": str(e)}), 500



이렇게 함으로써, 사용자에게 문제의 원인을 알려주고, 더 나은 경험을 제공하려고 합니다.

#### 마무리

오늘 살펴본 `/get_lotto_numbers` API는 사용자가 원하는 로또 번호를 간편하게 가져올 수 있도록 돕는 멋진 기능이었습니다. 데이터베이스와의 소통, SQL 쿼리의 힘, 그리고 JSON 포맷의 활용까지, 모두가 함께 어우러져 훌륭한 서비스를 만들어내는 과정이었어요. 다음에는 또 다른 흥미로운 API를 살펴보도록 해요! 🚀🎉