yon11b

[SK 쉴더스 루키즈] 애플리케이션: Flask, Opensearch 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 애플리케이션: Flask, Opensearch

yon11b 2026. 4. 29. 01:38
반응형

Flask

- 경량 프레임 워크

- 기본은 요청/응답만 담당

- ORM, 인증, 폼은 확장 라이브러리 이용

- MVT 모델

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    '''
    ('/hello')로 접속하면 'Hello World!' 문자열을 응답한다.
    '''
    return 'Hello World!'

@app.route('/profile/<username>/')
def get_profile(username):
    """URL에 포함된 사용자 이름을 꺼내서 응답합니다."""
    return 'profile : ' + username

@app.route('/hello/<string:name>/', methods=["GET"])
def hello_name(name):
    """/hello/이름 형태로 접속하면 이름을 포함한 인사말을 응답합니다."""
    return f"Hello, {name}!"

if __name__ == '__main__':
    with app.test_request_context():
        print(url_for('get_profile', username='flask'))
    app.run()

 

- Rest API 형태

 

 

OpenSearch

검색 엔진, 로그 분석용

 

RDB의 문제점. (왜 opensearch를 써야 할까?)

RDB가 못하는 일: 텍스트 검색

예시: query: 블투 이어폰 흰색 ——→ DB: ????

결과: 아무것도 못 찾음

 

(구버전)elasticsearch ⇒ opensearch

kibana ⇒ opensearch dashboards(시각화)

 

실습: Docker를 사용해서 Opensearch 3대 + dashboard 1개 구조를 만들어보자! 

web: static

frontend: templates

backend: restX

DB: docker compose -> opensearch index에 저장

 

 

1. docker compose up -d

2. python3 app.py

 

 

docker compose 파일에는 어떤 것들이 있나?

 

1. opensearch 3대(아래 과정을 3번 반복)

- opensearch docker image 파일을 받아온다.

- data를 컨테이너 외부에 마운트한다.

- opensearch 초기 pw 설정을 명시한다.

 

2. dashboard 1개

- dashboard image를 받아온다.

 

app.py 파일에는 무슨 내용이 있나?

- 자동차 브랜드 생성, 조회, 삭제, 수정

- 자동차 모델명 생성, 조회, 삭제 수정

 

OpenSearch Dashboards

devtools를 사용해서 쿼리문을 실행시키고 결과를 볼 수 있다.

 

 

예제: post 로 데이터 넣기

 

Car 실습 예제

 

데이터 넣어주기

# 1) 브랜드 생성
curl -X POST http://127.0.0.1:5001/api/v1/brands/ \
  -H "Content-Type: application/json" \
  -d '{"name": "bentz"}'

# 2) 모델 추가
curl -X POST http://127.0.0.1:5001/api/v1/brands/bentz/models \
  -H "Content-Type: application/json" \
  -d '{"model_id":0,"name":"e-class","price":1000000,"fuel_type":"gasoline","fuel_efficiency":"9.1~13.2km/l","engine_power":"367hp","engine_cylinder":"I6"}'

 

 

내가 넣은 데이터 검색하기.

 

OpenSearch는 REST API 기반이고, _(언더스코어)로 시작하는 경로는 OpenSearch가 미리 정의해 둔 API 엔드포인트이다. 사용자가 만든 인덱스 이름이나 문서 ID와 구분하기 위해 언더스코어를 prefix로 붙이는 규칙이다.

 

몇 가지 사용예시들

 

  • GET /my-index/_search → 검색 API
  • GET /my-index/_count → 문서 개수 조회
  • GET /_cat/indices → 인덱스 목록 조회
  • GET /_cluster/health → 클러스터 상태 확인
  • POST /my-index/_doc → 문서 색인
  • GET /my-index/_search → 인덱스에 저장된 문서를 검색

 

 

 

 

 

 

 

 

728x90