Coding History/Team Project

팀플) Python 설치 및 Skyfield 설치 적용. REST API 설계 시작.

BlackBirdIT 2024. 10. 9. 04:43

우선 AstromyAPI 폐기를 결정했고 차선책으로 Python 라이브러리 Skyfield를 사용하자고 결정했다.

Skyfield를 사용해서 데이터를 직접 계산, 가공해서 천문 데이터를 만들고, 이를 배포할 생각이다.

해야할 일

  • Python 설치

  • Skyfield 라이브러리 설치
  • Skyfield 데이터 생상 로직

그러니까 결론은 Python으로 API를 직접 만들겠다는 내용이다.

일단 설치부터 하자.

본인은 맥 환경이라.

brew install python3

이렇게 설치했다.

잘 설치 됐군.

설치 후 Python 패키지 관리자(PIP)를 확인해보니까 설치가 되지 않아서 직접 설치해줬다.

가 아니고, 알아보니까 mac 환경에서 설치 진행을 homebrew로 진행해서 가상환경이 필요하다고 해서 가상환경을 만들어 주고 pip을 실행시켰다.

pip install skyfield

skyfield 다운!

이제 프로젝트를 생성할건데, 생성전에 나는 Python에 대한 정보가 아무것도 없다. VSCode도 다루는게 익숙하지는 않지만 한번 해보자고.

우선 생성하기전에 Python개발에 도움이 될만한 확장자들을 설치해주자.

일단은 Python개발에 앞서 필수 확장자, 당연 Python을 설치해주었고, REST API를 만드는게 목적이니, Flask Snippets을 설치해주었다.

다음으로 또 유용할 수 있는게 뭐가 있을까 살펴보고,

Prettier(코드 정렬도구)와 GitLens(깃에 대한 도구), Docker(개발 배포 환경 관리 용이)를 추가로 설치해주었다.

이제 프로젝트를 생성.

인텔리제이랑 다르게 휑한게 뭔가 잘못된 것 같다. ㅋㅋㅋㅋㅋㅋ

알아보니까 React처럼 터미널로 프로젝트를 생성한다고 한다. 오케이 절차를 따라보자.

만들었던 파일은 지우고.

이렇게 프로젝트를 생성 했다.

소소한 팁인데 code . 명령어가 듣지 않아서 알아보니까 저렇게 하면 먹는다!

프로젝트가 열렸는데

이거 뭐냐 무섭게
알아보니까 별거 아니네, 별거 아닌걸로 놀래키고 있어; 여튼 부모 폴더까지 i'm 신뢰~ 했고

이제는 본격적인 구현을... 시작하면 되나?

여튼 이건 flask로 API를 만드는게 목적이고 난 python을 모른다... 그래도 뭐 해보자.

일단 뭐 휑하니까 helloworld 출력문 쓰고 깃에 올리는 것 부터 해야겠다.

오 터미널에 출력하는구나 신기하다. 여튼 git 연결 해보자.

푸시까지 문제 없이 성공!

gitignore까지 정상적으로 올라갔는지 확인하고! 이제 진짜 준비준비는 끝!

로컬호스트 서버로 간단하게 별의 정보를 불러올 수 있게끔 해봤다.

이제 진짜 이걸 어떻게 만들어낼지 고민을 해봐야한다.

일단 필요한게 뭘까 고민을 해보자.

를 고민하다가 문득 이런 생각이 들었다. 이렇게 강력한 라이브러리가 있는데 이걸 사용한 누군가의 git이 있지 않을까?

"훔쳐오자"

난 이제 루팡이다. git 뒤져보자고?

엄... 지금 일단 여러 사람이 만들어 놓은 것을 보고 오긴 했는데 너무 무겁다. 석사 학위정도는 있는 사람들이 만든 것 같다. (그러니까 프로그래머라기 보다는 진짜 천문학 석사, 박사 과정에 있는 사람들 얘기하는거다.) 여기서 뭔가 뽑아오기는 힘들 것 같은데.

그래서 그냥 내가 생각하기로 결정했다..

일단은 어떤 정보를 제공할 것인가를 고민해야한다, 우리 프로젝트에 맞는 정보.

그래서 어떤 정보를 제공할 것인가?

일단 프로젝트 목표를 정의해보자.

프로젝트 목표 정리

  • 실시간 천문 예보: 미래의 특정 날짜에 일식/월식이나 별자리 등의 정보를 예측해서 제공.

  • 가벼운 데이터: 복잡하거나 방대한 과학 데이터를 사용하지 않고, 필요한 정보만 간결하게 제공.
  • 관측 정보: 사용자가 어디서 관측해야 가장 좋은지 같은 실용적인 정보도 제공.
  • 예보 범위: 앞으로 6개월, 1년 내에 발생할 유성우, 일식/월식 등의 이벤트를 예측할 수 있다.

1. 일식/월식 정보

  • 예측할 수 있는 범위: NASASkyfield 데이터를 활용해서, 앞으로 몇 년 내에 발생할 일식/월식을 계산하고 그 날짜와 시간을 제공.
  • 제공할 정보:예시 응답:
    • 발생 일자시간.
    • 관측 가능 지역 (어디서 관측할 수 있는지).
    • 가장 잘 보이는 시간대.

필요한 정보:

  • 위도(Latitude)*경도(Longitude) 입력
  • 날짜는 보통 사전에 결정된 이벤트 정보로 제공 가능 (예: 1년 내 일어나는 일식/월식 예보)

예시 응답:

{
  "type": "solar",
  "date": "2024-04-08",
  "best_time": "12:35",
  "location": {
    "latitude": 40.7128,
    "longitude": -74.0060
  },
  "visible": true
}

2. 별자리 정보

  • 미래의 특정 날짜에 사용자가 어디에서 어떤 별자리를 볼 수 있는지를 제공.
  • 사용자의 위치를 기반으로, 해당 위치에서 관측 가능한 별자리 목록별의 위치를 예측.
  • 별자리 정보는 실시간으로 변화하지만, 간단히 보이는 별자리 목록관측 최적 시간 정도만 제공해도 충분.

필요한 정보:

  • 위도, 경도: 사용자의 위치

  • 날짜: 특정한 날짜 또는 시간대

    예시 응답:

    {
    "date": "2024-10-10",
    "location": {
      "latitude": 37.5665,
      "longitude": 126.9780
    },
    "constellations": [
      {
        "name": "Orion",
        "visible": true,
        "best_time": "22:00"
      },
      {
        "name": "Taurus",
        "visible": false
      }
    ]
    }

3. 행성 정보 (Planet Info)

  • 미래의 특정 날짜행성의 위치관측 가능성을 예측.
  • 예를 들어, 2024년 10월 10일화성(Mars)이 어디에 위치하는지를 계산하고, 해당 위치에서 볼 수 있는지 여부를 제공.

필요한 정보:

  • 위도, 경도: 사용자의 위치
  • 날짜: 특정한 날짜

예시 응답:

{
  "planet": "Mars",
  "date": "2024-10-10",
  "location": {
    "latitude": 51.5074,
    "longitude": -0.1278
  },
  "visible": true,
  "best_time": "03:00",
  "right_ascension": "5h 55m",
  "declination": "-6° 23′"
  }

4. 유성우 예보

  • 유성우(예: 페르세우스 유성우)*발생 시기최적 관측 지역을 예측.
  • 유성우는 정기적으로 발생하는 현상이므로, 고정된 데이터를 사용.
  • 관측 최적 시간이나 어떤 방향을 바라보면 되는지 같은 실용적인 정보도 제공.

필요한 정보:

  • 위도, 경도: 사용자의 위치

  • 유성우 이름 또는 특정 날짜

    예시 응답:

{
  "meteor_shower": "Perseids",
  "peak_date": "2024-08-12",
  "location": {
    "latitude": 34.0522,
    "longitude": -118.2437
  },
  "best_time": "02:00",
  "expected_rate": "60 meteors per hour"
}

흠 일단 이렇게 정리해두자.