Notes
μ΄λ² λ¦΄λ¦¬μ€ μμ΄μ νΈμλ λ€μμ λν μ§μμ΄ μΆκ°λμμ΅λλ€.
- κ°λ₯
- AWS λ² λλ½ μ»¨λ²μ€ μ€νΈλ¦¬λ°
- λ λμ€ λ©μλ
hybrid_searchλ°msetex - LLM μ΄λ²€νΈμ λν LangChain μν ν λΉ
- LLM μμ² μμ μ μΊ‘μ²λ LLM μ΄λ²€νΈ νμμ€ν¬ν
loop_factoryλ°μ, inasyncio.Runner
μ΄λ² 릴리μ€μμλ μΉ μλ²μμ ν€λκ° λ³΄κ³ λμ§ μλ ASGI μΈ‘μ λ° κ³μΈ‘μ λ²κ·Έλ ν΄κ²°λμμ΅λλ€.
easy_install/pip/distribute μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό μ€μΉνμΈμ. νμ΄μ¬ ν¨ν€μ§ μΈλ±μ€λ₯Ό ν΅ν΄ conda μ¬μ©νκ±°λ, Conda-Forge ν¨ν€μ§ μΈλ±μ€λ₯Ό ν΅ν΄ μ μ¬μ©νκ±°λ, λ΄λ λ¦ λ€μ΄λ‘λ μ¬μ΄νΈ μμ μ§μ λ€μ΄λ‘λνμΈμ.
νΉμ§
Strandsμ§μμ μΆκ°ν©λλ€.
- λ¨μΌ λ° λ€μ€ μμ΄μ νΈ(κ΅°μ§, κ·Έλν λ±) μ€μ μμ Strands λꡬ λ° μμ΄μ νΈμ λν μΈ‘μ , 리μμ€ μΆκ°
AWS Bedrock Converse Streamingμ§μμ μΆκ°ν©λλ€.
- Converse API μ€νΈλ¦¬λ°μ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ¬κΈ°μλ
converse_stream()μ μ¬μ©νμ¬ boto3 λ° aioboto3 ν΄λΌμ΄μΈνΈλ‘ μνλλ Converse μ±ν μλ£ νΈμΆμ λν μ§μμ΄ ν¬ν¨λ©λλ€.
- Converse API μ€νΈλ¦¬λ°μ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ¬κΈ°μλ
λ λμ€ λ©μλ μ§μμ μΆκ°ν©λλ€.
λ€μ λ©μλμ λν μ§μμ μΆκ°νμΈμ.
hybrid_searchmsetex
loop_factoryμ λν μ§μμ μΆκ°ν©λλ€.asyncio.Runner- λμ΄μ€κΈ° 3.11μμλ
asyncio.Runnerν΄λμ€μloop_factoryλͺ¨λμ΄ μΆκ°λμμ΅λλ€.loop_factoryμμλ 루ν μ μ± μ λν λ체 λ°©λ²μ μ 곡ν©λλ€. μ΄μ μμ±λ 루νλ μ μ μ΄λ²€νΈ 루ν μ€μ μ ν΅νλ μ¬μ©μ μ μ λμ보λ 루νλ₯Ό ν΅νλ μκ΄μμ΄ μΉμΈλ©λλ€.
- λμ΄μ€κΈ° 3.11μμλ
LLM μ΄λ²€νΈμμ LangChain μν ν λΉ μΊ‘μ²
- LangChain
LlmChatCompletionMessageμ΄λ²€νΈμλ μ΄μ LangChain μμ ν λΉλ μν μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
- LangChain
LLM μμ² μμ μ LLM μ΄λ²€νΈ νμμ€ν¬νλ₯Ό μΊ‘μ²ν©λλ€.
- μ΄μ μλ LLM μ΄λ²€νΈμ νμμ€ν¬νκ° μ΄λ²€νΈ μμ± μμ μ κΈ°λ‘λμμ΅λλ€. μ΄μ λ LLM μμ² μμ μ λμ± μ ννκ² κΈ°λ‘λ©λλ€.
λ²κ·Έ μμ
ASGI ν€λ μλΉ
ASGIWebTransactionμ΄http.response.startμ΄λ²€νΈμ ν€λλ₯Ό μλΉν λ, νμ©λλ μ λ ₯ μ νμ κ³ λ €νμ§ μκ³ κ·Έλ κ² νμ΅λλ€. ν€λκ° μμ±κΈ°μΈ κ²½μ° μμ±κΈ°λprocess_response()νΈμΆμ μν΄ μλΉλμ΄ μΉ μλ²κ° λ³΄λΌ ν€λκ° λ¨μ§ μμ΅λλ€. μ΄μ μ΄ λ¬Έμ λ ν΄κ²°λμμ΅λλ€.
μ§μ§ μ±λͺ
μ΅μ μμ΄μ νΈ λ²μ μ΄ μΆμλλ©΄ μ¦μ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€. μ΅μ λ²μ μΌλ‘ μ κ·Έλ μ΄λν μ μλ κ²½μ°, μμ΄μ νΈλ₯Ό 90μΌ μ΄λ΄ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ. μμ΄μ νΈμκ² μ΅μ μ 보λ₯Ό μ 곡νλ λ°©λ²μ λν΄ μμΈν μμ보μΈμ.
μμ΄μ νΈ λ¦΄λ¦¬μ€ λ° μ§μ λ μ§μ λν μ 보λ λ΄λ λ¦ λμ΄ λΉκΈ°λ μμ΄μ νΈ EOL μ μ± μ μ°Έμ‘°νμΈμ.
Notes
μ΄λ² λμ΄ λΉκΈ°λ μμ΄μ νΈ λ¦΄λ¦¬μ€μλ λμ΄λΉκΉ 3.14 μ§μ, μμ± νν° μ€μ μ μν μλ‘μ΄ νκ²½ λ³μ, νλ‘μΈμ λ°μ½λ μ΄ν°μ λΉλκΈ° μμ±κΈ° μ§μ, AWS Bedrock μ μΆκ° λͺ¨λΈ λ° AWS Kinesis μ μλ‘μ΄ λ°©λ²μ΄ μΆκ°λμμ΅λλ€. μ΄ λ¦΄λ¦¬μ€μμλ ConnectionPool μ¬λ¬ λ² λννμ¬ μ¬μ©ν λ RecursionError μ΄ λ°μνλ aiomysql μ λ²κ·Έ, kombu μ νλ‘λμμμ μμ±μ΄ μ λλ‘ μ λ¬λμ§ μλ λ²κ·Έ, νλ² μ€νΈ μ€λ λ λ΄μμ shutdown_agent νΈμΆλ λ λ°μνλ μ€λ₯λ₯Ό μμ ν©λλ€.
easy_install/pip/distribute μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό μ€μΉνμΈμ. νμ΄μ¬ ν¨ν€μ§ μΈλ±μ€λ₯Ό ν΅ν΄ conda μ¬μ©νκ±°λ, Conda-Forge ν¨ν€μ§ μΈλ±μ€λ₯Ό ν΅ν΄ μ μ¬μ©νκ±°λ, λ΄λ λ¦ λ€μ΄λ‘λ μ¬μ΄νΈ μμ μ§μ λ€μ΄λ‘λνμΈμ.
νΉμ§
λμ΄λΉκΉ 3.14 μ§μ μΆκ°
- λμ΄μ€κΈ° 3.14μ λν μ§μμ μΆκ°ν©λλ€.
μμ± νν° μ€μ μ λν νκ²½ λ³μ μΆκ°
λ€μ μ€μ μ μ΄μ νκ²½ λ³μλ₯Ό ν΅ν΄ μ€μ ν μ μλ μ΅μ μ΄ μκ²Όμ΅λλ€.
κ΅¬μ± μ€μ νκ²½ λ³μ attributes.enabledNEW_RELIC_ATTRIBUTES_ENABLEDattributes.excludeNEW_RELIC_ATTRIBUTES_EXCLUDEattributes.includeNEW_RELIC_ATTRIBUTES_INCLUDEbrowser_monitoring.attributes.enabledNEW_RELIC_BROWSER_MONITORING_ATTRIBUTES_ENABLEDbrowser_monitoring.attributes.excludeNEW_RELIC_BROWSER_MONITORING_ATTRIBUTES_EXCLUDEbrowser_monitoring.attributes.includeNEW_RELIC_BROWSER_MONITORING_ATTRIBUTES_INCLUDEerror_collector.attributes.enabledNEW_RELIC_ERROR_COLLECTOR_ATTRIBUTES_ENABLEDerror_collector.attributes.excludeNEW_RELIC_ERROR_COLLECTOR_ATTRIBUTES_EXCLUDEerror_collector.attributes.includeNEW_RELIC_ERROR_COLLECTOR_ATTRIBUTES_INCLUDEspan_events.attributes.enabledNEW_RELIC_SPAN_EVENTS_ATTRIBUTES_ENABLEDspan_events.attributes.excludeNEW_RELIC_SPAN_EVENTS_ATTRIBUTES_EXCLUDEspan_events.attributes.includeNEW_RELIC_SPAN_EVENTS_ATTRIBUTES_INCLUDEtransaction_events.attributes.enabledNEW_RELIC_TRANSACTION_EVENTS_ATTRIBUTES_ENABLEDtransaction_events.attributes.excludeNEW_RELIC_TRANSACTION_EVENTS_ATTRIBUTES_EXCLUDEtransaction_events.attributes.includeNEW_RELIC_TRANSACTION_EVENTS_ATTRIBUTES_INCLUDEtransaction_segments.attributes.enabledNEW_RELIC_TRANSACTION_SEGMENTS_ATTRIBUTES_ENABLEDtransaction_segments.attributes.excludeNEW_RELIC_TRANSACTION_SEGMENTS_ATTRIBUTES_EXCLUDEtransaction_segments.attributes.includeNEW_RELIC_TRANSACTION_SEGMENTS_ATTRIBUTES_INCLUDEtransaction_tracer.attributes.enabledNEW_RELIC_TRANSACTION_TRACER_ATTRIBUTES_ENABLEDtransaction_tracer.attributes.excludeNEW_RELIC_TRANSACTION_TRACER_ATTRIBUTES_EXCLUDEtransaction_tracer.attributes.includeNEW_RELIC_TRANSACTION_TRACER_ATTRIBUTES_INCLUDE
νΈλμμ λ°μ½λ μ΄ν°μ λΉλκΈ° μμ±κΈ° μ§μ μΆκ°
- μ΄μ μλ νΈλμμ λ°μ½λ μ΄ν°κ° λΉλκΈ° μμ±κΈ°λ₯Ό κ°μΈλ κ²μ μ§μνμ§ μμμ΅λλ€. μ΄ μ§μμ΄ μΆκ°λμ΄ μ΄μ λΉλκΈ° μμ±κΈ° νΈλμμ μ΄ μ΄λ²€νΈ 루ν λκΈ° μκ°κ³Ό κΈ°ν ν΅κ³λ₯Ό μλμΌλ‘ μΈ‘μ ν©λλ€.
AWS Bedrock μΈ‘μ , λ‘κ·Έμ μΆκ° λͺ¨λΈμ λν μ§μ μΆκ°
λ€μ μΆκ° λͺ¨λΈμ μ§μνλλ‘ botocore λ° aiobotocore ν΅ν΄ AWS Bedrock μΈ‘μ , κ³μΈ‘μ μ λ°μ΄νΈν©λλ€.
- ν΄λ‘λ μλ€νΈ 3+ λͺ¨λΈ
- μ§μμΌλ‘ μ λμ¬κ° λΆμ λͺ¨λΈ(μ§μ μΈμ)
μλ‘μ΄ Kinesis λ©μλμ λν μΈ‘μ , λ‘κ·Έ μΆκ°
μλ‘μ΄ AWS Kinesis λ©μλλ₯Ό μ§μνκΈ° μν΄ botocore μΈ‘μ , 리μμ€ μΆκ°
describe_account_settingsupdate_account_settingsupdate_max_record_sizeupdate_stream_warm_throughput
λ²κ·Έ μμ
aiomysql ConnectionPoolμμ RecursionError λ°©μ§
- μ΄μ μλ ν μ°κ²°μ μ¬μ©ν λ aiomysql μμ
RecursionErrorμ΄ λ°μνμ΅λλ€. λ°λ³΅μ μΈ λνμΌλ‘ μΈν΄ νλ§λ μ°κ²° μ£Όμμ κΉμObjectProxy체μΈμ΄ μμ±λμμ΅λλ€. μ΄ λ¬Έμ λ ν΄κ²°λμμ΅λλ€.
- μ΄μ μλ ν μ°κ²°μ μ¬μ©ν λ aiomysql μμ
kombu μ νλ‘λμμμ μμ±μ΄ μ λλ‘ μ λ¬λμ§ μλ λ²κ·Έλ₯Ό μμ νμ΅λλ€.
kombu.messaging.Producer.publish()μ λν μΈ‘μ , κ³μΈ‘μΌλ‘ μΈν΄ μμ±μ΄ μ€μλ‘ μ¬μ λ΄λΆμ μ€μ²©λμ΄ μμ±μ΄ μλͺ»λ μμΉμ μκ³ λ€μ΄μ€νΈλ¦Ό ν¨ν€μ§μμ μ½νμ§ μλ λ²κ·Έλ₯Ό μμ νμ΅λλ€.
shutdown_agentμ΄ μν μ€λ λ λ΄μμ νΈμΆλ λ λ°μνλ μ€λ₯λ₯Ό μμ ν©λλ€.- μ΄μ μλ
shutdown_agentμν μ€λ λ λ΄μμ νΈμΆλλ©΄RuntimeErrorμ΄ λ°μν μ μμμ΅λλ€. μ΄λ κ² νλ©΄ μΆ©λμ λ°©μ§νκΈ° μν λ³΄νΈ μ₯μΉκ° μΆκ°λμ΄ λ¬Έμ κ° ν΄κ²°λ©λλ€.
- μ΄μ μλ
μ§μ§ μ±λͺ
μ΅μ μμ΄μ νΈ λ²μ μ΄ μΆμλλ©΄ μ¦μ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€. μ΅μ λ²μ μΌλ‘ μ κ·Έλ μ΄λν μ μλ κ²½μ°, μμ΄μ νΈλ₯Ό 90μΌ μ΄λ΄ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ. μμ΄μ νΈμκ² μ΅μ μ 보λ₯Ό μ 곡νλ λ°©λ²μ λν΄ μμΈν μμ보μΈμ.
μμ΄μ νΈ λ¦΄λ¦¬μ€ λ° μ§μ λ μ§μ λν μ 보λ λ΄λ λ¦ λμ΄ λΉκΈ°λ μμ΄μ νΈ EOL μ μ± μ μ°Έμ‘°νμΈμ.
Notes
μ΄ λμ΄ λΉκΈ°λ μμ΄μ νΈ λ¦΄λ¦¬μ€λ Django μΈ‘μ μ μ΄κΈ° νμ±ν, μμ€, 무μλλ max_samples_stored μ λν μλ² μΈ‘ μ¬μ μ λ° Python trace_cache.pop() μ μΆ©λ λ°©μ§μ λν μμ μ¬νμ μ 곡ν©λλ€.
λμ΄μ€κΈ° ν¨ν€μ§ μμΈμ ν΅ν΄ easy_install/pip/distribute μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό μ€μΉνκ±°λ λ΄λ λ¦ λ€μ΄λ‘λ μ¬μ΄νΈ μμ μ§μ λ€μ΄λ‘λνμΈμ.
λ²κ·Έ μμ
Django μΈ‘μ , λ‘κ·Έμ μ‘°κΈ° νμ±ν λ°©μ§
- Django μΈ‘μ μμ
application_settings()μ λν νΈμΆμ μ κ±°νμ¬ pre-forkμ μ΄κΈ° νμ±ν κ΄λ ¨ λ¬Έμ λ₯Ό λ°©μ§ν©λλ€.
- Django μΈ‘μ μμ
μλ² μ€μ μ λ‘컬 μ€μ λκΈ°ν λ¬Έμ μμ
- μ΄λ
event_harvest_config.harvest_limits.*μ€μ μ΄*.max_samples_storedμ€μ μΌλ‘ μΈν΄ λ μ΄μ μ¬μ©λμ§ μμ λ λ°μν λ²κ·Έλ₯Ό μμ ν©λλ€. μΌλΆ μλ²μΈ‘ μ€μ μ΄ ν΄λΌμ΄μΈνΈμΈ‘ μ€μ μ μ¬μ μνμ§ μμ μ¬μ©μκ° μ΄λ₯Ό λΉνμ±ννμμλ λΆκ΅¬νκ³ λ°μ΄ν°κ° μμ§κΈ°λ‘ μ μ‘λμμ΅λλ€.
- μ΄λ
μΆ©λλ‘λΆν° 보νΈνμΈμ
trace_cache.pop()ContextOfν΄λμ€μμ κΈ°λ³Έκ° μμ΄pop(key)ν΅ν΄trace_cacheμ μμ νμ§ μμ μ‘μΈμ€κ° λ°μνμ΅λλ€. μ¬μ μweakrefμ΄ μ΄λ―Έ κ°λΉμ§ μμ§λ κ²½μ° μΆ©λμ΄ λ°μνμ΅λλ€.
μ§μ§ μ±λͺ
μ΅μ μμ΄μ νΈ λ²μ μ΄ μΆμλλ©΄ μ¦μ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€. μ΅μ λ²μ μΌλ‘ μ κ·Έλ μ΄λν μ μλ κ²½μ°, μμ΄μ νΈλ₯Ό 90μΌ μ΄λ΄ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ. μμ΄μ νΈμκ² μ΅μ μ 보λ₯Ό μ 곡νλ λ°©λ²μ λν΄ μμΈν μμ보μΈμ.
μμ΄μ νΈ λ¦΄λ¦¬μ€ λ° μ§μ λ μ§μ λν μ 보λ λ΄λ λ¦ λμ΄ λΉκΈ°λ μμ΄μ νΈ EOL μ μ± μ μ°Έμ‘°νμΈμ.
Notes
Caution
μ΄ λ²μ μ μμ΄μ νΈλ μ² νλμμ΅λλ€.
μ΄λ² λ¦΄λ¦¬μ€ μμ΄μ νΈμλ λ€μκ³Ό κ°μ λ³κ²½ μ¬νμ΄ μ μ©λ©λλ€.
- λμ΄λΉκΉ 3.7μ λν μ§μ μ κ±°
- λ€μν API λ° μ€μ μ μ κ±°νκ±°λ λ μ΄μ μ¬μ©νμ§ μμ΅λλ€.
- aioredis μΈ‘μ , λ‘κ·Έ μ¬μ© μ€λ¨
setuptoolsμ μ΅μ μ§μ λ²μ μ μ¬λ¦½λλ€.setuptools_scm- AutoGenμ λν μ μΈ‘μ , λ‘κ·Έλ₯Ό μΆκ°ν©λλ€.
- Pyzeebeμ λν μλ‘μ΄ μΈ‘μ , λ‘κ·Έλ₯Ό μΆκ°ν©λλ€.
- μλ‘μ΄ MCP(λͺ¨λΈ 컨ν μ€νΈ νλ‘ν μ½)λΌλ μ΄λ¦μ spanμ μΆκ°ν©λλ€.
- psycopgμμ μΆ©λμ΄ λ°μνλ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
- AI λͺ¨λν°λ§μ΄ νμ±νλ κ²½μ°μλ§ MCP μ€ν¬μ΄ κΈ°λ‘λλλ‘ λ³΄μ₯ν©λλ€.
λμ΄μ€κΈ° ν¨ν€μ§ μμΈμ ν΅ν΄ easy_install/pip/distribute μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό μ€μΉνκ±°λ λ΄λ λ¦ λ€μ΄λ‘λ μ¬μ΄νΈ μμ μ§μ λ€μ΄λ‘λνμΈμ.
μ κ±°λ κΈ°λ₯
λμ΄λΉκΉ 3.7μ λν μ§μ μ κ±°
- λμ΄3.7μ 2023λ 6μ 27μΌμ λ¨μ’ λμμ΅λλ€. μ μ°©μ μμ΄μ νΈκ° μ΄μ λν μ§μμ μ€λ¨νμ΅λλ€.
λ€μν λ μ΄μ μ¬μ©λμ§ μλ APIλ₯Ό μ κ±°ν©λλ€.
λ€μ APIκ° μ κ±°λμμ΅λλ€.
ꡬν API λ체 API accept_distributed_trace_payloadaccept_distributed_trace_headersadd_custom_parameteradd_custom_attributeadd_custom_parametersadd_custom_attributescreate_distributed_trace_payloadinsert_distributed_trace_headersget_browser_timing_footerμ΄ κΈ°λ₯μ get_browser_timing_header()μ λνλμμ΅λλ€.record_exceptionnotice_error()NewRelicLogHandlerNewRelicLogForwardingHandlerlambda_handler&LambdaHandlerWrapperμ΄λ¬ν APIλ newrelic-lambdaν¨ν€μ§λ‘ μ΄λλμμ΅λλ€.
λ€μν λ μ΄μ μ¬μ©λμ§ μλ μ€μ μ μ κ±°ν©λλ€.
λ€μ μ€μ μ΄ μ κ±°λμμ΅λλ€.
ꡬν μ€μ κ΅μ²΄ μ€μ transaction_tracer.capture_attributestransaction_tracer.attributes.enablederror_collector.capture_attributeserror_collector.attributes.enabledbrowser_monitoring.capture_attributesbrowser_monitoring.attributes.enabledanalytics_events.enabledtransaction_events.enabledanalytics_events.capture_attributestransaction_events.attributes.enablederror_collector.ignore_errorserror_collector.ignore_classesstrip_exception_messages.whiteliststrip_exception_messages.allowlistsslμ΄μ μ΄ νλͺ©μ trueμ νλμ½λ©λμ΄ μ€μ μ΅μ μμ μ κ±°λμμ΅λλ€.ignored_paramsλμ newrelic.attributes.exclude = request.parameters.{name}μ¬μ©νμΈμ. κ° μμ² ν νλ¦Ώ, ν€λ₯Ό μΌνλ‘ κ΅¬λΆνμ¬newrelic.attributes.excludeλͺ©λ‘μ μΆκ°ν©λλ€. ν€ μμrequest.parametersκΌ μΆκ°νμΈμ.agent_limits.merge_stats_maximumμ΄μ μλ² μΈ‘ ꡬμ±μ μ νΈνμ¬ μ΄ λ¬Έμ λ μμ ν 무μλμμ΅λλ€.
λ μ΄μ μ¬μ©λμ§ μλ κΈ°λ₯
aioredis μ λν μΈ‘μ , μ¬μ©μ΄ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€.
- aioredis ν¨ν€μ§λ λ μ΄μ μ¬μ©λμ§ μμΌλ©°, μ΄μ νμ λͺ¨λ
redis.asyncioν¬ν¨λ redisκ° μ¬μ©λ©λλ€. κ²°κ³Όμ μΌλ‘aioredisμ λν μΈ‘μ , κ³μΈ‘λ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€. λμredisλΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμΈμ. μ΄ μΈ‘μ , λ‘κ·Έλ ν₯ν 릴리μ€μμ μ κ±°λ μμ μ λλ€.
- aioredis ν¨ν€μ§λ λ μ΄μ μ¬μ©λμ§ μμΌλ©°, μ΄μ νμ λͺ¨λ
λ€λ₯Έ μΈμ΄ μμ΄μ νΈμ μΌμΉνλλ‘ μΌλΆ κΈ°μ‘΄ μν μ€μ μ λ μ΄μ μ¬μ©νμ§ μμ΅λλ€.
λ€λ₯Έ μΈμ΄ μμ΄μ νΈμ κ·μΉκ³Ό μΌκ΄μ±μ μ μ§νκΈ° μν΄ λ€μ μν μ€μ μ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€.
ꡬν μ€μ κ΅μ²΄ μ€μ event_harvest_config.harvest_limits.analytic_event_datatransaction_events.max_samples_storedevent_harvest_config.harvest_limits.span_event_dataspan_events.max_samples_storedevent_harvest_config.harvest_limits.error_event_dataerror_collector.max_event_samples_storedevent_harvest_config.harvest_limits.custom_event_datacustom_insights_events.max_samples_storedevent_harvest_config.harvest_limits.log_event_dataapplication_logging.forwarding.max_samples_storedμ΄λ μ΄λ¬ν μ€μ μ μ΄λ¦μ
*.max_samples_storedμμevent_harvest_config.harvest_limits.*νμμΌλ‘ λ³κ²½ν μ΄μ λ³κ²½ μ¬νμ λλλ¦° κ²μ λλ€. μ΄ κ²°μ μ λ€μ§νκ³ , μλ μ€μ μ μ΄λ¬ν μ€μ μ΄λ¦μ λ³κ²½νμ§ μμ λ€λ₯Έ μΈμ΄ μμ΄μ νΈμ μΌμΉνλλ‘ λ³΅μλμμ΅λλ€. λ μ΄μ μ¬μ©λμ§ μλ μ€μ μ νμ¬λ‘λ κ³μ μλνμ§λ§, ν₯ν 릴리μ€μμλ μ κ±°λ μμ μ λλ€.
WSGI νκ²½ μ¬μ μ ν΅ν΄ μμ΄μ νΈ μ€μ μ λ μ΄μ μ¬μ©νμ§ μμ΅λλ€.
μ΄μ μλ WSGI environ μ¬μ μ ν΅ν΄ ꡬμ±ν μ μμλ λ€μ μ€μ μ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€. νκ²½ λ³μλ κ΅¬μ± νμΌμ ν΅ν΄ μ΄λ¬ν μ€μ μ ꡬμ±νμΈμ.
newrelic.set_background_tasknewrelic.suppress_apdex_metricnewrelic.suppress_transaction_tracenewrelic.capture_request_paramsnewrelic.disable_browser_autorum
setuptools<61.2λλ λ₯Ό μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό λΉλνλ λ° λν μ§μμ λ μ΄μ μ¬μ©νμ§ μμ΅λλ€.setuptools_scm<6.4setuptoolsλ°setuptools_scmμ μ΅μ μ§μ λ²μ μ΄ κ°κ°61.2λ°6.4μΌλ‘ μ¦κ°νμ΅λλ€. μ΄λ ν¨ν€μ§ λ©νλ°μ΄ν° κ΅¬μ± λ° λΉλ μ§μΉ¨μpyproject.tomlλ₯Ό μ¬μ©ν μ μλλ‘ μ§μνκΈ° μν κ²μ λλ€. μ΄μ μμ΄μ νΈλ λ νλμ μΈ λΉλ λκ΅¬λ‘ λΉλλ μ μμΌλ©°, λ μ΄μpyproject.tomlνμΌμ΄ μλ€λ κ²½κ³ λ₯Ό λ°μμν€μ§ μμ΅λλ€.- μ΄ λ³κ²½ μ¬νμ ν¨ν€μ§
newrelic.__version__λ°newrelic.__version_tuple__μ μλ‘μ΄ λ²μ μμ±μ μΆκ°ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°νμμ μμ΄μ νΈ λ²μ μ νλ‘κ·Έλλ° λ°©μμΌλ‘ νμΈν μ μμ΅λλ€.
μλ‘μ΄ κΈ°λ₯
AutoGenμ λν μ μΈ‘μ , λ‘κ·Έλ₯Ό μΆκ°ν©λλ€.
- AutoGenμ μμ΄μ νΈ λ° λꡬμ λν μΈ‘μ , λ‘κ·Έ(λͺ
λͺ
λ λ²μ λ° μ¬μ©μ μ μ
Llmμ΄λ²€νΈ)λ₯Ό μΆκ°ν©λλ€.
- AutoGenμ μμ΄μ νΈ λ° λꡬμ λν μΈ‘μ , λ‘κ·Έ(λͺ
λͺ
λ λ²μ λ° μ¬μ©μ μ μ
Pyzeebeμ λν μλ‘μ΄ μΈ‘μ , λ‘κ·Έλ₯Ό μΆκ°ν©λλ€.
- Pyzeebeμ λν μλ μΈ‘μ , 리μμ€ λ° νλ μμν¬ κ΄λ ¨ μμ΄μ νΈ μμ±μ μΆκ°ν©λλ€.
μλ‘μ΄ MCP(λͺ¨λΈ 컨ν μ€νΈ νλ‘ν μ½)λΌλ μ΄λ¦μ spanμ μΆκ°ν©λλ€.
- Streamable HTTPλ₯Ό μ§μνκΈ° μν΄ λꡬ κ΄λ¦¬μλ₯Ό ν΅ν΄ μνλ MCP(λͺ¨λΈ 컨ν μ€νΈ νλ‘ν μ½) λꡬ νΈμΆμ λν μλ‘μ΄ λͺ λͺ λ μ€ν¬μ μΆκ°ν©λλ€.
λ²κ·Έ μμ
psycopg>=3.2.0μμ νΈμΆ μ λ°μνλ μΆ©λμ μμ ν©λλ€.as_string()as_string()λ©μλκ° λ μ΄μ μΈμλ₯Ό νμλ‘ νμ§ μμ μ μ¬μ μΈ μΆ©λμ μΌμΌν€λpsycopg>=3.2.0μ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. μ΄ λ¬Έμ λ ν΄κ²°λμμΌλ©°, μ΄ λ©μλμ λ κ°μ§ μλͺ μ΄ λͺ¨λ μ§μλ©λλ€.
AI λͺ¨λν°λ§μ΄ νμ±νλ κ²½μ°μλ§ MCP(λͺ¨λΈ 컨ν μ€νΈ νλ‘ν μ½) μ€ν¬μ΄ κΈ°λ‘λλλ‘ λ³΄μ₯ν©λλ€.
- MCP(λͺ¨λΈ 컨ν
μ€νΈ νλ‘ν μ½) μ€ν¬μ μ€μ
ai_monitoring.enabledνμ±νλ κ²½μ°μλ§ κΈ°λ‘λ©λλ€.
- MCP(λͺ¨λΈ 컨ν
μ€νΈ νλ‘ν μ½) μ€ν¬μ μ€μ
μ§μ§ μ±λͺ
μ΅μ μμ΄μ νΈ λ²μ μ΄ μΆμλλ©΄ μ¦μ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€. μ΅μ λ²μ μΌλ‘ μ κ·Έλ μ΄λν μ μλ κ²½μ°, μμ΄μ νΈλ₯Ό 90μΌ μ΄λ΄ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ. μμ΄μ νΈμκ² μ΅μ μ 보λ₯Ό μ 곡νλ λ°©λ²μ λν΄ μμΈν μμ보μΈμ.
μμ΄μ νΈ λ¦΄λ¦¬μ€ λ° μ§μ λ μ§μ λν μ 보λ λ΄λ λ¦ λμ΄ λΉκΈ°λ μμ΄μ νΈ EOL μ μ± μ μ°Έμ‘°νμΈμ.
Notes
μ΄λ² λ¦΄λ¦¬μ€ μμ΄μ νΈμλ λ€μμ λν μ§μμ΄ μΆκ°λμμ΅λλ€.
- Celeryμ μ¬μ©μ μ μ μμ
- κ·Έλν-Django λͺ¨λν°λ§
- Djangoμ λ―Έλ€μ¨μ΄ νν°λ§
- AWS Bedrock Converse API
- W3CTraceParent ν€λ μνλ§ νλκ·Έ
μ΄ λ¦΄λ¦¬μ€μμλ λ€μκ³Ό κ°μ μμ μ¬νλ μ 곡λ©λλ€.
- GraphQLμμ κ°μ₯ κΉμ κ³ μ κ²½λ‘μ λν λ³΄νΈ μ₯μΉ
- μΉ URL μμ² κ΅¬λ¬Έ λΆμμ μν 보μ μ‘°μΉ
- ElasticSearch λ° GraphQLμ λν λ체
trace.settings==None - λΉλκΈ° ElasticSearch ν΄λΌμ΄μΈνΈ λͺ©λ‘μμ
optionsλ©μλ μ κ±°
λμ΄μ€κΈ° ν¨ν€μ§ μμΈμ ν΅ν΄ easy_install/pip/distribute μ¬μ©νμ¬ μμ΄μ νΈλ₯Ό μ€μΉνκ±°λ λ΄λ λ¦ λ€μ΄λ‘λ μ¬μ΄νΈ μμ μ§μ λ€μ΄λ‘λνμΈμ.
μλ‘μ΄ κΈ°λ₯
Celeryμμ μ¬μ©μ μ μ μμ μ λν μ§μμ μΆκ°ν©λλ€.
- Celery μμ μ¬μ©μ μ μ μμ ν΄λμ€μ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ΄μ μλ κΈ°λ³Έ μμ ν΄λμ€λ₯Ό μ¬μ©νλ μμ λ§ λͺ¨λν°λ§ν μ μμμ΅λλ€. μ°Έκ³ : μ΄ λ²μ μ λμ΄λΉκΉ μμ΄μ νΈλ λ μ΄μ v5.2.0 λ―Έλ§μ Celery λ²μ μ μ§μνμ§ μμ΅λλ€.
Graphene-Djangoμ λν μ§μμ μΆκ°ν©λλ€.
- Graphene-Django λ‘ μμ±λ λκΈ° μ€ν€λ§μ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ΄μ μλ Graphene-Djangoλ‘ μμ±λ μ€ν€λ§κ° λΆλΆμ μΌλ‘λ§ λͺ¨λν°λ§λμ΄ GraphQL κ΄λ ¨ μμ±μ΄ λλ½λμμ΅λλ€.
Djangoμμ λ―Έλ€μ¨μ΄ νν°λ§μ λν μ§μμ μΆκ°ν©λλ€.
μ΄μ μ¬μ©μλ λͺ¨λν°λ§ν Django λ―Έλ€μ¨μ΄λ₯Ό νν°λ§ν μ μμ΅λλ€. μ΄μ μΈ κ°μ§ μΆκ° μ€μ μ΄ μμ΅λλ€.
instrumentation.middleware.django.enabled(κΈ°λ³Έκ°μtrueμ λλ€)instrumentation.middleware.django.excludeinstrumentation.middleware.django.include
μμΈν λ΄μ©κ³Ό μμ λ Django λ―Έλ€μ¨μ΄ νν°λ§ νμ΄μ§λ₯Ό μ°Έμ‘°νμΈμ.
AWS Bedrock Converse APIμ λν μ§μμ μΆκ°ν©λλ€.
- μ€νΈλ¦¬λ°μ΄ μλ Converse APIμ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ¬κΈ°μλ
boto3λ°aioboto3ν΄λΌμ΄μΈνΈλ₯Ό μ¬μ©νμ¬ μνλconverseμ±ν μλ£ νΈμΆμ λν μ§μμ΄ ν¬ν¨λ©λλ€.
- μ€νΈλ¦¬λ°μ΄ μλ Converse APIμ λν λͺ¨λν°λ§ μ§μμ μΆκ°ν©λλ€. μ¬κΈ°μλ
W3CTraceParent ν€λ μνλ§ νλκ·Έμ λν μ§μμ μΆκ°ν©λλ€.
- μ μ€νΈλ¦Ό μλΉμ€κ° μνλ§ νλκ·Έκ° μ€μ λ W3CTraceParent ν€λλ₯Ό 보λ΄λ©΄ λ΄λ λ¦μ currentResourcesλ₯Ό μνλ§ν μ§ μ¬λΆλ₯Ό κ²°μ ν λ ν΄λΉ μνλ§ κ²°μ μ κ³ λ €ν©λλ€.
μ격 λΆλͺ¨κ° μνλ§λμλμ§ μ¬λΆμ λ°λΌ μνλ§ κ²°μ μ λν μ§μμ΄ μΆκ°λμμ΅λλ€.
λ κ°μ§ μλ‘μ΄ μ€μ μ΅μ μ λν μ§μμ΄ μΆκ°λμμ΅λλ€.
distributed_tracing.sampler.remote_parent_sampleddistributed_tracing.sampler.remote_parent_not_sampled
defaultκΈ°λ³Έ λμμ΄λ©° μ΄ λ³κ²½ μ΄μ κ³Ό λμΌνκ² λμν©λλ€(νΈλμμ μ μνλ§ν μ§ μ¬λΆλ₯Ό κ²°μ νκΈ° μν΄ μνλ§ κ²°μ μ μ μν μνλ§ μκ³ λ¦¬μ¦μ μ λ¬ν¨).always_onμ¦, μ격 λΆλͺ¨κ° μνλ§λμκ±°λ μνλ§λμ§ μμ νΈλ μ΄μ€λ νμ μνλ§λ©λλ€.always_offμ¦, μ격 λΆλͺ¨κ° μνλ§λμκ±°λ μνλ§λμ§ μμ μ격 λΆλͺ¨κ° μλ νΈλ μ΄μ€λ μ λ μνλ§λμ§ μμ΅λλ€.
λ²κ·Έ μμ
GraphQLμμ κ°μ₯ κΉμ κ³ μ κ²½λ‘μ λν λ³΄νΈ κΈ°λ₯ μΆκ°
- μΌλΆ μ¬μ©μλ GraphQL μμ νλ μ΄λ¦μ΄
Noneλ°ννμ¬ κ°μ₯ κΉμ κ³ μ κ²½λ‘κ° μμ±λμ§ μλ λ¬Έμ λ₯Ό κ²½ννμ΅λλ€. μ΄ λ¬Έμ λ ν΄κ²°λμμ΅λλ€.
- μΌλΆ μ¬μ©μλ GraphQL μμ νλ μ΄λ¦μ΄
μΉ μμ² κ΅¬λ¬Έ λΆμμ μν λ³΄νΈ κΈ°λ₯ μΆκ°
- μΌλΆ μ¬μ©μλ
request_uriμλͺ» νμνλμκ±°λ μλͺ»λ λ¬Έμλ₯Ό ν¬ν¨νκ³ μμ΄ κ΅¬λ¬Έ λΆμ μ€λ₯λ₯Ό κ²½ννμ΅λλ€. μμ² ν€λμrequest_uriμ΄ μ ν¨νμ§ μκ³ μλ μ 곡λ (μ ν¨ν) URLκ³Ό μΌμΉνμ§ μλ κ²½μ° μ΄ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μ΄ λ³΄νΈ μ₯μΉλ νμ¬ λ΄λ λ¦μ μ μ©λμμ§λ§,urllibμμλ 2025λ 1μ 31μΌ μ΄νμ μΆμλ λ²μ μ λν μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
- μΌλΆ μ¬μ©μλ
ElasticSearch λ° GraphQLμμ μΆ©λμ μμ ν©λλ€.
trace.settings==Nonetrace.settingsμ΄NoneμΈ κ²½μ° ElasticSearchμ λν μΈ‘μ , 리μμ€κ° μλμ μ€λ¨νμ΅λλ€.global_settingsλμμ΄ λ§λ ¨λμμ΅λλ€. μ΄λ GraphQLμμ λ°κ²¬λλ λμΌν λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
λΉλκΈ° ElasticSearch ν΄λΌμ΄μΈνΈ λͺ©λ‘μμ
optionsλ©μλ μ κ±°- μ΄μ μΈ‘μ , ElasticSearchμ κ³μΈ‘μ
optionsλΉλκΈ° λ©μλ λͺ©λ‘μ μκΈ° λλ¬Έμ μΆ©λμ΄ λ°μνμ΅λλ€. μ΄ λ©μλλ μ΄λ ν λ°μ΄ν°μ€ν μ΄ μμ /requests λ μννμ§ μμΌλ―λ‘ λ μ΄μDatastoreTraceμ λνλμ§ μμ΅λλ€.
- μ΄μ μΈ‘μ , ElasticSearchμ κ³μΈ‘μ
μ§μ§ μ±λͺ
μ΅μ μμ΄μ νΈ λ²μ μ΄ μΆμλλ©΄ μ¦μ μ λ°μ΄νΈνλ κ²μ΄ μ’μ΅λλ€. μ΅μ λ²μ μΌλ‘ μ κ·Έλ μ΄λν μ μλ κ²½μ°, μμ΄μ νΈλ₯Ό 90μΌ μ΄λ΄ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ. μμ΄μ νΈμκ² μ΅μ μ 보λ₯Ό μ 곡νλ λ°©λ²μ λν΄ μμΈν μμ보μΈμ.
μμ΄μ νΈ λ¦΄λ¦¬μ€ λ° μ§μ λ μ§μ λν μ 보λ λ΄λ λ¦ λμ΄ λΉκΈ°λ μμ΄μ νΈ EOL μ μ± μ μ°Έμ‘°νμΈμ.