반응형

빈부 격차의 불가피한 연결고리

by netcanis

주변 사람들 중에 종종 "물가가 올라서 걱정이다", "요즘 생활비가 너무 많이 든다", "왜 집값이 계속 오르는지 모르겠다", "집값이 떨어져서 힘들다."는 말을 한다. 이러한 고민은 단순히 개인의 문제가 아니라 현대 금융 시스템이 안고 있는 구조적 문제에서 비롯된 것이다.
 
많은 사람들이 정부가 화폐를 대량으로 발행하고 시장에 유동성을 공급하는 것이 경제에 어떠한 영향을 미치는지 잘 알지 못한다. 예를 들어, 소규모 자영업자나 저소득층 가정은 이러한 유동성 공급이 왜 생활비와 자산 가격 상승으로 이어지는지 정확히 알지 못하는 경우가 많다. 국제통화기금(IMF)의 보고서에 따르면, 과도한 유동성 공급은 단기적으로 경제 성장을 부추길 수 있으나 장기적으로는 인플레이션과 자산 거품을 초래할 위험이 크다고 경고한다. 2008년 금융위기 이후 주요국 중앙은행들이 시행한 양적 완화(QE)로 인해 글로벌 부채는 2023년 기준으로 약 300조 달러에 이르렀다(IIF, 2023). 글로벌 부채 증가는 주요 자산(주식, 부동산 등)의 가격 급등과 국가 간 경제 불안정을 초래하며, 이는 전 세계적으로 중산층과 저소득층에 불리한 환경을 만든다. 이러한 정부 주도의 인플레이션 정책은 '스텔스 세금'이라고 볼 수 있다. 이는 세금처럼 눈에 보이지 않지만, 실질적으로 모든 국민의 구매력을 갉아먹는 간접적인 세금이다.
 
정부가 경제를 살리겠다는 명목으로 돈을 찍어내고 시장에 유입하면, 이 돈은 대기업이나 부유층에 먼저 도달한다. Richard Cantillon(리샤르 캉티용)의 이론에 따르면, 화폐의 초기 수혜자는 자산 가격 상승으로 이득을 보지만, 시간이 지나 일반 국민에게 도달할 때는 이미 가격이 상승한 상태여서 오히려 피해를 본다. 실제로 미국 연방준비제도(연준)가 발표한 자료에 따르면, 2020년부터 2022년 사이에 미국의 M2 통화량은 40% 이상 증가(2025년 1월 기준 39.61%)했다. 이러한 유동성 증가는 주식과 부동산 가격을 급격히 끌어올렸으며, 2022년 기준 미국 주택 가격은 코로나19 팬데믹 이전 대비 평균 35% 상승했다(S&P CoreLogic Case-Shiller 지수). 이들은 이러한 유동성을 활용해 주식, 부동산 등 자산을 매입하여 자산가치를 높인다. 하지만 그 돈이 일반 국민에게 도달했을 때쯤에는 이미 인플레이션이 시장 전반에 반영된 상태가 된다. 그 결과, 중앙은행은 인플레이션을 잡기 위해 금리를 올려 통화량을 줄이게 되고 경기는 침체되며 자산가치는 하락하게 된다. 이러한 금리 인상은 가계 대출 부담을 가중시키고 소비 위축을 불러와 중산층과 저소득층에 더 큰 타격을 준다. 이로 인하여 일반 국민들은 물가 상승에 따른 피해를 고스란히 감당하게 된다.
 
결국, 대다수의 국민들은 물가 상승으로 인해 생활비 부담이 커지고 자산을 제대로 축적하지 못하는 반면, 부자들은 자산 가치 상승의 혜택을 누린다. 특히 중산층 가정은 자산 축적의 기회를 잃고, 부의 축적은 상위 계층에 집중된다. 2024년 기준, 미국 상위 10%의 가구가 전체 부의 약 70%를 보유하고 있다는 통계가 이를 뒷받침한다(연준, 2024). 이처럼 빈부 격차가 구조적으로 심화되는 이유는 단순히 개인의 경제적 선택 때문이 아니라, 금융 시스템 자체가 불평등을 초래하는 구조적 문제에 있다는 점을 이해해야 한다.

 


 

이러한 구조는 세계 경제에서도 동일하게 적용된다. 현재 기축통화를 보유한 미국은 이러한 금융 시스템 속에서 마치 ‘부자의 역할’을 수행하며, 세계 경제를 대상으로 ’양털 깎기(Dollar Milkshake Theory)’를 실행하고 있다. 

예를 들어, 경기 침체 시에는 양적 완화를 통해 막대한 달러를 풀어 자산 가격을 부양하고, 이후 인플레이션을 이유로 금리를 급격히 인상하여 신흥국을 비롯한 글로벌 경제에 부담을 준다. 이러한 과정에서 신흥국의 통화 가치는 하락하고 외채 부담이 커지면서 금융 위기가 반복된다. 결국, 달러 강세로 인해 미국의 자산가들은 헐값이 된 해외 자산을 매입하고, 다시 저금리 정책을 통해 유동성을 확대하며 자산 가격을 상승시키는 사이클을 지속하는 것이다.

이는 마치 양을 키우다가 때가 되면 양털을 깎아가는 것과 같다. 글로벌 경제의 주도권을 쥐고 있는 미국은 기축통화라는 무기를 통해 국제적인 부의 흐름을 자신들에게 유리한 방향으로 조정한다. 이로 인해 신흥국을 포함한 다수의 국가는 지속적으로 경제적 불안정에 시달리며, 중산층과 저소득층은 점점 더 큰 경제적 부담을 지게 된다.

따라서, 우리가 직면한 물가 상승과 자산 불평등 문제는 국내 경제 이슈뿐만 아니라, 큰 틀에서 글로벌 금융 시스템 속에서 반복되는 ‘양털 깎기’의 과정도 포함된다는 것을 인식해야 한다.

 

 


 

 

참고자료 및 출처 

1. 국제금융협회(IIF) 글로벌 부채 보고서
   - 출처: IIF 보고서 (International Institute of Finance, 2023)  
   - 내용: 2023 글로벌 부채 규모는 307 달러로 추정됨.  
   - 링크: [IIF Global Debt Monitor](https://www.iif.com/portals/0/Files/content/Global%20Debt%20Monitor_Feb2023_vf.pdf)

2. 미국 연방준비제도(Fed) M2 통화량 
   - 출처: 미국 연방준비제도(Fed) 공식 데이터  
   - 내용: 2020 2 15.4 달러에서 2022 2 21.7 달러로 40% 이상 증가.  
   - 링크: [Federal Reserve Economic Data (FRED)](https://fred.stlouisfed.org/series/WM2NS)

3. 미국 주택 가격 상승 (S&P CoreLogic Case-Shiller 지수)
   - 출처: S&P Dow Jones Indices  
   - 내용: 2020 2월부터 2022 2월까지 미국 주택 가격이 34% 상승함.  
   - 링크: [S&P Case-Shiller Home Price Indices](https://www.spglobal.com/spdji/en/indices/indicators/sp-corelogic-case-shiller-us-national-home-price-nsa-index/#overview)

4. 미국 상위 10% 부의 비중 (연준의 가계 금융 보고서
   - 출처: 미국 연방준비제도(Fed) 가계 금융 보고서  
   - 내용: 2021~2024 기준 미국 상위 10% 가구가 전체 부의 70% 보유함.  
   - 링크: [Federal Reserve Household Wealth Data](https://www.federalreserve.gov/releases/z1/dataviz/dfa/distribute/chart/)

5. 국제통화기금(IMF) 보고서 - 2025 세계 3.3%, 한국 2.0% 성장 전망
   - 출처: IMF 보고서 경제 전망  
   - 내용: 세계 경제 위험요인이 하방으로 기울어져 있다고 진단하면서, 미국 신정부의 보호무역주의 확대, 확장적 재정정책, 이민 정책 등을 위험요인으로 제시.  
   - 링크: [국제통화기금(IMF), 1 세계경제전망 발표](https://eiec.kdi.re.kr/policy/materialView.do?num=262486)

6. 리처드 칸티용의 이론 
   - 출처: 경제학 개론 화폐론 자료  
   - 내용: 화폐의 초기 수혜자가 경제적 혜택을 크게 누리는 현상을 설명하는 이론.  
   - 참고 도서: An Essay on Economic Theory by Richard Cantillon  

7. ' 그들만 부자가 되는가' - 필립 바구스, 안드레아스 마르크바르트
   - 출처: ' 그들만 부자가 되는가' (필립 바구스, 안드레아스 마르크바르트)  
   - 내용: 정부의 화폐 정책과 중앙은행의 유동성 공급이 부의 불평등을 심화하는 과정을 설명하며, 새로운 화폐가 대기업과 부유층에게 먼저 도달하여 자산 가격이 상승하고 일반 국민은 인플레이션의 피해를 본다는 메커니즘을 다룸.  
   - 링크: [ 정보 보기](https://product.kyobobook.co.kr/detail/S000215067855)

 

 

M2 M1, M3 차이

 M1: 현금 + 요구불 예금 즉시 사용 가능한 돈만 포함한 지표 (단기 유동성 측정에 초점)

 M2: M1 + 저축성 예금, 단기 금융 상품 (일반적으로 가장 많이 사용되는 통화 지표)

 M3: M2 + 장기 금융 상품(대규모 예금, 기관 예금 포함) (장기적인 유동성 측정)

 

Dollar Milkshake Theory

  • 미국의 금융 시스템이 글로벌 유동성을 흡수하는 방식을 설명하는 개념으로, 투자 매니저 Brent Johnson(브렌트 존슨)이 제안한 이론.
  • 미국은 먼저 글로벌 시장에 달러를 뿌린 뒤, 금리 인상과 달러 강세를 통해 다시 유동성을 빨아들이며 경제적 이득을 얻음.
  • 마치 밀크셰이크(글로벌 유동성)를 미국이 빨대로 빨아들이는 것과 같다고 해서 'Milkshake Theory'라는 이름이 붙음.

 

 

반응형

'생각의 조각들' 카테고리의 다른 글

사랑받는 사람들의 숨겨진 비밀  (0) 2025.01.24
조선시대 과거시험 문제  (0) 2025.01.23
MOON MUSiC - Coldplay & Jon Hopkins -  (1) 2024.12.19
진정한 용기  (4) 2024.11.16
미래의 한국  (0) 2024.10.30
블로그 이미지

SKY STORY

,
반응형

사랑받는 사람들의 숨겨진 비밀

by netcanis

 

인기 있는 사람들의 공통된 비밀은 조건 없는 베풂에 있다. 그들은 대가를 기대하지 않고, 진정성 있는 태도로 타인에게 기쁨과 감동을 선사한다. 예를 들어, 아름다운 노래를 부르는 가수는 자신을 알지 못하는 사람들에게도 감동을 전하며, 사람들은 자연스럽게 그 가수를 좋아하게 된다. 외모가 아름다운 사람 역시 별다른 의도 없이도 타인에게 긍정적인 에너지를 전달하며 많은 이들의 사랑을 받는다.

이처럼 조건 없는 베풂은 진정성을 바탕으로 하기 때문에 사람들에게 깊은 신뢰와 호감을 준다. 사람들은 본능적으로 자신에게 행복을 주는 존재를 좋아하게 되고, 그들에게 감사와 애정을 느끼게 된다. 결국, 인기 있는 사람들은 자신이 가진 것들을 자연스럽게 베풀며, 다른 사람들과 긍정적인 관계를 형성하는 데 탁월하다.
 
사람들이 누군가를 좋아하는 이유는 그들이 어떤 요구 없이도 우리에게 기쁨과 행복을 주기 때문이다. 조건 없는 베풂은 타인의 관심과 사랑을 이끄는 가장 강력한 비밀이며, 진정한 인기와 사랑을 얻는 핵심이다.
 
 

반응형

'생각의 조각들' 카테고리의 다른 글

부의 불평등 심화 이유  (2) 2025.02.05
조선시대 과거시험 문제  (0) 2025.01.23
MOON MUSiC - Coldplay & Jon Hopkins -  (1) 2024.12.19
진정한 용기  (4) 2024.11.16
미래의 한국  (0) 2024.10.30
블로그 이미지

SKY STORY

,
반응형

Google Cloud 사이트 접속

https://console.cloud.google.com/

 

1번 클릭하여 프로젝트 선택

 

 

2번 IAM 및 관리자 클릭

 

 

3번 서비스 계정 클릭4번 서비스 계정 클릭

 

 

4번 서비스 계정 클릭

 

 

5번 키 클릭6번 키 추가 / 새 키 만들기 클릭

 

 

6번 키 추가 / 새 키 만들기 클릭

 

 

7번과 같이 키 생성 되고 ‘service-account.json’ 파일이 다운로드 됨.

주의사항 : 해당 파일은 다시 다운로드가 불가능하다.

반응형
블로그 이미지

SKY STORY

,
반응형

조선시대 과거시험에서 출제된 문제 중, 현대 사회에 빗대어 논의할 수 있는 독특한 문제들을 왕별로 정리하였다. 이는 마치 오늘날 대학 논술시험에 출제되어도 손색이 없을 만큼 시의성과 깊이를 지닌 문제들이다.

1. 태종(재위 1400년~1418년)
   • 문제: “관리들의 근무 태만을 방지하고, 효율적인 행정 운영을 위해 어떤 방안을 제시할 수 있는가?”
   • 연도: 1415년

2. 세종(재위 1418년~1450년)
   • 문제: “땅이 있고 백성이 있으면 염치를 기르게 되는데, 우리나라의 노비 제도는 어느 대에 시작하였는가? 노비 또한 하늘이 내린 백성인데 그처럼 대대로 천한 일을 해서 되겠는가? 어느 집안은 노비가 많은 경우 수천, 수백인데 한계를 둘 수 없는가?”
   • 연도: 미상(추정 1426년)

3. 연산군(재위 1494년~1506년)
   • 문제: “언론의 자유와 그 한계를 어떻게 설정할 것인가?”
   • 연도: 1500년

4. 중종(재위 1506년~1544년)
   • 문제: “부정부패를 근절하기 위한 효과적인 대책은 무엇인가?”
   • 연도: 1520년

5. 명종(재위 1545년~1567년)
   • 문제: “해와 달이 하늘에 걸려서 한 번은 낮이 되고 한 번은 밤이 되는데, 더디고 빠른 것은 누가 그렇게 한 것인가?”
   • 연도: 1550년

6. 광해군(재위 1608년~1623년)
   • 문제: “어렸을 때는 새해가 오는 것을 기뻐했지만, 점차 나이를 먹으면 모두 서글픈 마음이 드는 것은 무엇 때문인가?”
   • 연도: 1616년

7. 영조(재위 1724년~1776년)
   • 문제: “형벌을 시행함에 있어 신분에 따라 차별을 두는 것이 정의로운가?”
   • 연도: 1740년

8. 정조(재위 1776년~1800년)
   • 문제: “서얼에 대한 차별을 철폐하는 것이 사회 통합에 어떠한 영향을 미칠 것인가?”
   • 연도: 1779년

 


 


광해군 시기에 출제된 과거시험 문제에 대한 답안을 작성해 보았다.

문제 :

“어렸을 때는 새해가 오는 것을 기뻐했지만, 점차 나이를 먹으면 모두 서글픈 마음이 드는 것은 무엇 때문인가?” (광해군, 1616년)

답안 :

새해를 맞이하는 감정이 기쁨에서 서글픔으로 변하는 이유는 인간이 시간의 흐름을 통해 자신의 한계를 자각하고, 삶의 유한성을 체감하기 때문입니다. 이러한 감정의 변화는 단순히 나이와 관련된 생리적 변화가 아니라, 경험의 축적과 가치관의 전환에서 비롯됩니다.

어린 시절에는 시간의 개념이 명확하지 않아 하루하루가 길게 느껴지고, 경험하지 않은 것들로 가득 차 있습니다. 새해는 새로운 기회와 가능성을 상징하며, 미지의 세계를 탐험할 수 있다는 기대감으로 가득 차게 됩니다. 이는 목표를 이루기 위한 충분한 시간이 있다는 믿음과 함께 설렘과 희망을 가져다줍니다.

반면, 나이가 들수록 시간은 점점 빠르게 흐르는 것처럼 느껴지며, 이미 많은 경험이 축적됨에 따라 “새로운 것”이 줄어들고 삶이 단조롭게 느껴지기 쉽습니다. 또한, 개인적인 성취와 관계, 건강 등에서 미처 이루지 못한 것들에 대한 아쉬움이 더해지며, 새해는 과거의 시간이 더해지는 만큼 남은 시간에 대한 인식이 깊어지는 순간이 됩니다. 결국, 새해를 맞이하는 감정은 단순히 축하의 순간이 아니라 삶의 중요한 시점이 지나갔음을 깨닫게 하는 계기가 됩니다.

이러한 서글픈 감정을 극복하기 위해서는 먼저 매일 또는 매년 작지만 의미 있는 목표를 설정하고 이를 성취해 나가는 것이 중요합니다. 이러한 목표는 단순히 물질적 성취가 아니라, 관계 개선, 건강 관리, 새로운 기술 습득 등 삶의 질을 향상시키는 방향으로 설정해야 합니다. 또한, 새로운 경험을 적극적으로 추구함으로써 삶의 활력을 되찾을 수 있습니다. 새로운 취미나 도전 과제를 통해 자신의 관점을 넓히고 삶을 새롭게 바라보는 기회를 가져야 합니다.

새해를 나이 들어감을 아쉬워하는 시간이 아니라, 자신을 돌아보고 앞으로 나아갈 기회를 얻는 시점으로 인식하는 긍정적 태도도 필요합니다. 일과 삶의 균형을 맞추고 자신에게 여유와 성찰의 시간을 제공함으로써 보다 풍요로운 내면을 가질 수 있습니다. 이와 함께, 가족, 친구, 동료와의 관계를 통해 삶의 기쁨을 찾는 것도 중요합니다. 의미 있는 관계는 개인의 감정적 안정과 만족감을 증대시키며, 서글픔을 희망으로 전환하는 데 큰 도움을 줄 수 있습니다.

결국, 새해를 맞이하며 느끼는 서글픔은 시간의 유한성을 깨닫게 하는 자연스러운 감정이지만, 이를 긍정적으로 전환하고 스스로 삶의 의미를 재구성한다면 새해는 새로운 시작과 도전을 의미하는 특별한 기회가 있습니다.

 

반응형

'생각의 조각들' 카테고리의 다른 글

부의 불평등 심화 이유  (2) 2025.02.05
사랑받는 사람들의 숨겨진 비밀  (0) 2025.01.24
MOON MUSiC - Coldplay & Jon Hopkins -  (1) 2024.12.19
진정한 용기  (4) 2024.11.16
미래의 한국  (0) 2024.10.30
블로그 이미지

SKY STORY

,
반응형

MOON MUSiC

- Coldplay & Jon Hopkins -

 

Once upon a time, I tried to get myself together

한때는 혼란스러운 나를 다잡으려 애썼었지.

 

Be more like the sky and welcome every kind of weather

하늘처럼 넓은 마음으로 어떤 상황(날씨)도 받아들이려고 했어.

 

Be more eagle-like and find the flight in every feather

독수리처럼 작은 깃털 속에서도 비상의 기회를 찾으려고 했어.

 

Once upon a time, but I’m still trying to get better

그때도 그랬지만, 나는 여전히 더 나아지려고 노력 중이야.

 

Maybe I’m just crazy, I should just be a brick in the wall

어쩌면 내가 정말 미친 걸지도 몰라. 그냥 벽 속에 묻힌 작은 조각으로 살아야 할까?

 

Sit and watch the TV, blame everyone else for it all

그냥 TV나 보며 모든 걸 남 탓으로 돌리는 게 맞는 걸까?

 

But I’m trying to trust in the heavens above

하지만 나는 하늘 위에 있는 신을 믿으려 하고

 

And I’m trying to trust in a world full of love

사랑으로 가득한 세상을 믿어보려고 해.

 

Fire and water and constantly dream

불과 물(강함과 부드러운), 그리고 끊임없이 꿈꾸며

 

Of the balance of things and the music between

사물(세상 모든 것)의 균형 사이에서 흐르는 음악에 대해

 

If there's anyone out there, I'm close to the end

누군가 거기 있다면, 나는 끝에 다다른 것 같아.

 

If there's anyone out there, I just need a friend

누군가 거기 있다면, 나는 그저 친구가 필요할 뿐이야.

 

 

이 곡은 삶의 다양한 경험과 감정을 받아들이며, 내면의 성장을 추구하는 메시지를 담고 있다.

또한, 사회의 획일성에 순응하는 것에 대한 고민과 신에 대한 믿음, 사랑으로 가득한 세상에 대한 희망을 표현하고 있다.

 

https://www.youtube.com/watch?v=MkhCTsgSYBk

 

 

 

반응형

'생각의 조각들' 카테고리의 다른 글

사랑받는 사람들의 숨겨진 비밀  (0) 2025.01.24
조선시대 과거시험 문제  (0) 2025.01.23
진정한 용기  (4) 2024.11.16
미래의 한국  (0) 2024.10.30
인공지능의 학습 한계  (0) 2024.10.10
블로그 이미지

SKY STORY

,
반응형

진정한 용기

by netcanis

 

1985년 3월 6일, 미국 뉴욕주 올버니(Albany, New York)에 있는 엠파이어 스테이트 플라자 컨벤션 센터(Empire State Plaza Convention Center)에서 프로 데뷔전을 앞둔 마이크 타이슨은 겨우 18살의 청년이었다. 링 위에서 누구보다 강력해 보였던 그였지만, 시합 전 대기실에서는 한없이 떨고 있는 소년에 불과했다. 극도의 긴장감과 공포가 그를 압도했고, 결국 그는 눈물을 흘리며 두려움에 몸을 떨었다.그때 그의 스승이자 인생의 멘토였던 커스 다마토(Cus D’Amato)는 그에게 다가와 진심 어린 조언을 건넸다.

 

“두려움은 친구이자 적이다. 마치 타오르는 불과 같지. 조절만 잘하면 널 따뜻하게 해주지만, 그렇지 못하면 너의 모든 것을 태워버릴 것이다.”

이 말은 단순한 위로가 아니었다. 다마토는 타이슨에게 두려움을 억누르거나 외면하지 말고, 오히려 그것을 인정하고 받아들여야 한다고 가르쳤습니다. 그는 이어서 이렇게 말했다.

“위대한 전사로 남고 싶으면 두려움을 인정하고 받아들여라. 영웅은 두려움을 정면으로 맞서지만, 소인배는 도망친다.”

다마토의 가르침은 타이슨에게 단순히 권투 기술을 가르치는 것 이상이었다. 그는 두려움이란 누구에게나 존재하는 감정이며, 그것을 어떻게 다루느냐가 진정한 강함을 결정짓는 열쇠라는 사실을 타이슨에게 심어주었다. 타이슨이 경기를 앞두고 두려움에 떨 때마다 다마토는 이러한 철학적인 가르침을 반복해서 전했다. 이 과정에서 타이슨은 두려움을 피하는 대신 그 감정을 에너지로 전환하는 법을 배웠다.

 

두려움, 그리고 그를 초월한 챔피언

 

사람들은 흔히 세계 최고의 해비급 챔피언으로서 링 위에서 상대를 압도했던 마이크 타이슨을 기억한다. 하지만 그 화려한 모습 뒤에는 경기 전마다 두려움에 눈물 흘리던 청년의 모습이 있었다. 타이슨은 훗날 인터뷰에서 커스 다마토의 가르침 덕분에 자신의 두려움을 극복할 수 있었으며, 그 덕분에 링 위에서 무적의 파이터로 거듭날 수 있었다고 회상했다.

타이슨은 다음과 같이 말했다.

“나는 매 경기마다 두려웠다. 하지만 커스의 가르침 덕분에 두려움을 힘으로 바꾸는 법을 배웠다. 두려움을 정면으로 마주했기 때문에 지금의 내가 있을 수 있었다.”

결국, 타이슨은 두려움을 피하지 않고 정면으로 맞섰기 때문에 세계 최강의 복서로 성장할 수 있었다. 다마토는 그를 단순한 권투 선수가 아니라, 자신의 내면과 싸워 이겨낸 진정한 전사로 만들었다.

이 일화는 우리에게도 중요한 교훈을 남긴다. 누구나 두려움을 느낄 수 있다. 중요한 것은 그 두려움을 어떻게 다루느냐이다. 타이슨처럼 두려움을 인정하고, 그것을 나아가는 원동력으로 삼는다면, 우리는 더 큰 도전에서도 승리할 수 있을 것이다.


 


 

 


제이크 폴 vs 마이크 타이슨: 판정 결과와 경기 내용

2024년 11월 15일(미국 시간), 미국 텍사스주 댈러스의 AT&T 스타디움에서 열린 ‘넷플릭스 라이브 이벤트: 제이크 폴 vs 마이크 타이슨’ 경기에서 제이크 폴이 8라운드 종료 후 3-0 판정승을 거두었다. 이번 경기는 통상적인 3분 라운드와는 달리, 라운드당 2분으로 진행되었다. 이는 환갑에 가까운 나이의 타이슨을 고려한 규정이었다.

경기 결과에 대한 평가

비록 공식 판정으로는 제이크 폴이 승리했으나, 타이슨이 실질적으로 더 나은 경기력을 보여주었다는 평가도 존재한다. 

고령의 타이슨은 젊은 폴과의 장기전에서 체력적으로 불리할 수밖에 없었으며, 폴은 이를 전략적으로 활용하여 승리를 거머쥔 것으로 보인다. 타이슨은 비록 전성기 시절의 기량에는 미치지 못했으나, 여전히 강력한 공격력과 기술을 선보였으며, 팬들에게는 그가 여전히 ‘철의 남자’로서 건재함을 입증한 경기로 기억될 것이다.

 

반응형

'생각의 조각들' 카테고리의 다른 글

조선시대 과거시험 문제  (0) 2025.01.23
MOON MUSiC - Coldplay & Jon Hopkins -  (1) 2024.12.19
미래의 한국  (0) 2024.10.30
인공지능의 학습 한계  (0) 2024.10.10
Breaking Free from Musical Conventions  (0) 2024.10.06
블로그 이미지

SKY STORY

,
반응형

두가지 모두 비동기 프로그래밍을 위해 사용되는 기술로, 멀티 스레딩 및 동시성 처리를 할때 사용된다.

두 기술에 대한 비교는 다음과 같다.

 

  1. 비동기 작업 처리:
    • 두 기술 모두 비동기적으로 작업을 수행할 수 있다. 이를 통해 메인 스레드가 블로킹되지 않으며, 사용자 인터페이스가 멈추지 않게 할 수 있다.
  2. 멀티 스레딩 지원:
    • GCD는 작업을 비동기적으로 다양한 큐에서 실행하고, Swift Concurrency는 태스크를 사용하여 비동기 코드를 스케줄링한다.
    • 둘 다 멀티코어 CPU의 성능을 활용해 병렬 처리가 가능하다.
  3. 스레드 관리 자동화:
    • GCD는 스레드 풀을 관리하여 시스템 리소스를 효율적으로 사용한다.
    • Swift Concurrency도 내부적으로 Task Scheduler를 사용하여 스레드 관리와 태스크 스케줄링을 자동으로 최적화한다.
  4. QoS (Quality of Service):
    • 두 기술 모두 작업의 우선 순위를 지정할 수 있습니다.
      • GCD에서는 DispatchQoS를 사용해 작업 우선 순위를 설정한다.
      • Swift Concurrency에서는 Task의 우선 순위를 조정할 수 있다 (Task(priority: .high) 등).
  5. 캔슬 가능한 작업:
    • GCD에서 작업을 수동으로 취소할 수 있는 것은 아니지만, Swift Concurrency에서는 Task를 취소할 수 있다. 다만, GCD에서도 DispatchWorkItem을 사용하여 작업을 취소할 수 있는 형태로 구현할 수 있다.
    • Swift Concurrency에서는 Task.checkCancellation() 등을 사용해 비동기 태스크 내에서 취소 상태를 확인할 수 있다.

 

요약

공통점 GCD (Grand Central Dispatch) Swift Concurrency (Async/Await)
비동기 작업 처리 DispatchQueue.async {} async/await, Task
멀티 스레딩 지원 다양한 DispatchQueue Task 스케줄러
스레드 관리 자동화 자동으로 스레드 풀 관리 Task 스케줄러로 자동 최적화
우선 순위 제어 DispatchQoS Task(priority:)
작업 취소 지원 DispatchWorkItem (부분적으로 지원) Task.cancel(), Task.checkCancellation()

 

특징 GCD (Grand Central Dispatch) Swift Concurrency (Async/Await)
개념 스레드 풀을 사용해 작업을 비동기적으로 처리하기 위한 API. Swift 5.5에서 도입된 구조화된 비동기 프로그래밍 모델.
도입 시기 iOS 4 iOS 15, macOS 12
사용 방식 큐를 사용해 작업을 비동기적으로 추가하고, 콜백을 사용해 결과 처리. async/await 키워드를 사용해 코드 흐름을 동기적으로 작성.
코드 가독성 콜백 지옥 (Callback Hell) 발생 가능 코드 흐름이 동기 코드와 유사하여 가독성이 높음
성능 최적화 스레드 풀 관리, 우선순위 조정 등 수동으로 최적화 가능 시스템이 자동으로 최적화 (더 나은 스케줄링)
에러 처리 콜백 내에서 수동으로 에러 처리 do-catch 블록을 통한 구조화된 에러 처리
캔슬레이션 지원 수동으로 작업 취소 관리 Task 객체를 통한 내장된 캔슬레이션 지원
메모리 관리 클로저 캡처에 주의해야 하며, weak self를 사용해 메모리 누수 방지 async/await는 메모리 안전성을 자동으로 보장
주요 사용 사례 레거시 코드, iOS 14 이하 호환성 최신 iOS 프로젝트, 비동기 코드 리팩토링

 

GCD (Grand Central Dispatch) 샘플 코드

import UIKit

func fetchDataWithGCD() {
    let url = URL(string: "https://www.apple.com")!
    
    // 네트워크 요청을 백그라운드에서 수행하고, 메인 스레드에서 UI 업데이트를 수행
    DispatchQueue.global(qos: .userInitiated).async {
        // 클로저 내부에서 self를 캡처하기 때문에 메모리 누수 방지를 위해 [weak self]를 사용해야 한다.
        guard let data = try? Data(contentsOf: url) else { return }
        DispatchQueue.main.async {
            print("Data fetched: \(data)")
        }
    }
}

fetchDataWithGCD()

 

Swift Concurrency (Async/Await) 샘플 코드

import Foundation

func fetchData() async {
    let url = URL(string: "https://www.apple.com")!
    
    do {
        // async/await를 사용해 네트워크 요청을 수행하고 결과를 처리 (비동기 방식)
        let (data, _) = try await URLSession.shared.data(from: url)
        print("Data fetched: \(data)")
    } catch {
        print("Error fetching data: \(error)")
    }
}

// Task를 생성하여 비동기 함수 호출
Task {
    await fetchData()
}

 

iOS 15 이상을 타겟으로 하는 프로젝트에서는 Swift Concurrency (async/await)를 사용하는 것이 코드 가독성, 자동 메모리 관리, 에러 처리 등에서 GCD에 비해 이점이 있다.

 

반응형
블로그 이미지

SKY STORY

,
반응형

GitHub에서 포크한 저장소를 삭제하는 방법은 다음과 같다:

  1. GitHub에 로그인: GitHub 계정으로 로그인한다.
  2. 저장소 페이지로 이동: 삭제하려는 포크된 저장소 페이지로 이동한다.
  3. Settings (설정) 메뉴로 이동:
    • 저장소의 상단 메뉴에서 Settings 탭을 클릭한다.
  4. 저장소 삭제 옵션으로 이동:
    • Settings 페이지의 하단으로 스크롤하여 Danger Zone 섹션에서 Delete this repository 버튼을 클릭한다.
  5. 확인 및 삭제:
    • 나타나는 팝업 창에 저장소 이름을 정확히 입력한 후, 삭제 확인을 위해 다시 한 번 I understand the consequences, delete this repository 버튼을 클릭한다.

이 과정을 완료하면 포크한 저장소가 삭제된다. 

만약 포크한 저장소가 너무 많아서 일일이 삭제하기 어려운 경우, GitHub CLI를 사용하면 쉽게 일괄 삭제할 수 있다.

  1. GitHub CLI 설치: GitHub CLI가 설치되어 있지 않다면 GitHubCLI설치가이드에 따라 설치한다.
  2. GitHub 로그인:명령어를 입력하고, 지시에 따라 GitHub 계정으로 로그인한다.
    gh auth login
  3. 포크된 저장소 리스트 확인: 모든 포크된 저장소를 확인하려면 다음 명령어를 사용한다.
    gh repo list YOUR_USERNAME --fork --json name
  4. 포크된 저장소 일괄 삭제: 특정 조건을 만족하는 포크만 삭제하려면, 스크립트를 이용해 필터링하여 삭제할 수 있다. 아래는 모든 포크된 저장소를 삭제하는 예제이다.  주의: 이 스크립트는 본인 계정의 모든 포크된 저장소를 반복적으로 삭제한다.
    gh repo list YOUR_USERNAME --fork --json name -q '.[].name' | while read repo; do gh repo delete YOUR_USERNAME/$repo --confirm done

 

다른 방법으로 GitHub 개발자 설정에서 토큰을 발급 받은 후 아래와 같이 python 코드를 사용하여 삭제도 가능하다.

import requests
import time

# GitHub 개인 액세스 토큰과 사용자 이름
TOKEN = 'github_pat_11ABHO ... Q5L5R6ly7vhP'
USERNAME = 'YOUR USERNAME'

# GitHub API URL 설정
API_URL = f'https://api.github.com/users/{USERNAME}/repos'

# 요청 헤더 설정
headers = {
    'Authorization': f'token {TOKEN}'
}

# 저장소 목록 가져오기
response = requests.get(API_URL, headers=headers)

# 응답 상태 코드 확인
if response.status_code != 200:
    print(f"API 요청 실패: {response.status_code}, {response.text}")
else:
    repos = response.json()

    # 포크된 저장소만 필터링하여 삭제
    for repo in repos:
        if isinstance(repo, dict) and repo.get('fork') and repo.get('owner', {}).get('login') == USERNAME:
            repo_name = repo['name']
            delete_url = f'https://api.github.com/repos/{USERNAME}/{repo_name}'
            delete_response = requests.delete(delete_url, headers=headers)

            if delete_response.status_code == 204:
                print(f'{repo_name} 삭제 완료')
            else:
                print(f'{repo_name} 삭제 실패: {delete_response.status_code}, {delete_response.text}')
            
    print("모든 포크된 저장소 삭제 작업이 완료되었습니다.")

위 코드 실행시 약 25개정도 삭제될때마다 API 요청이 거절된다. 이유는 GitHub API는 짧은 시간에 많은 요청이 들어오면 요청을 제한하거나 차단한다. 요청시 일정 시간 딜레이를 주거나 여러번 실행하여 해결할 수 있다.

 

 

반응형
블로그 이미지

SKY STORY

,
반응형

1. 보안 칩의 존재: 테슬라 카드에는 단순한 NFC 태그가 아니라 보안 칩이 내장되어 있다. 이 칩은 카드와 차량 간의 인증을 위해 복잡한 암호화 연산을 수행하며, 단순히 카드의 데이터를 복제하는 것만으로는 이 칩의 기능을 모방할 수 없다.

2. 암호화된 동적 인증: 카드와 차량 간의 인증 과정에서 동적 키회전 키 같은 보안 기술이 사용된다. 이 기술은 시드 값이나 난수를 기반으로 카드가 매번 다른 암호화된 응답을 생성하는 방식이다. Proxmark3로 카드의 raw 데이터를 읽어낸다고 해도, 카드가 차량의 인증 요구에 맞춰 생성하는 암호화된 응답을 복제할 수는 없다.

3. 암호화 알고리즘: 테슬라 카드의 보안 칩은 RSA나 ECC 같은 고급 암호화 알고리즘을 사용해 데이터를 보호한다. Proxmark3는 데이터를 캡처할 수는 있어도, 암호화된 응답을 해독하거나 같은 방식으로 암호화된 데이터를 생성하지 못한다.

4. 복제 불가능한 보안 프로토콜: 테슬라는 차량 보안을 위해 커스터마이즈된 보안 프로토콜을 사용하고 있을 가능성이 높다. Proxmark3가 카드의 UID나 기본 데이터를 복제할 수는 있지만, 차량과 카드 간의 인증에 필요한 프로토콜과 응답 생성은 구현할 수 없다.

 

이런 이유들로 인해 Proxmark3 같은 장비를 사용하더라도 테슬라 카드의 완벽한 복제는 불가능하다. 복제된 카드가 실제로 차량에서 작동하려면, 보안 칩이 제공하는 암호화 및 인증 기능을 모방할 수 있어야 하지만, 이는 불가능에 가깝다.

 

반응형

'IOT > Proxmark3' 카테고리의 다른 글

Proxmark3 V5 개발환경 구축 (4/4)  (1) 2021.02.08
Proxmark3 V5 개발환경 구축 (3/4)  (0) 2021.02.08
Proxmark3 V5 개발환경 구축 (2/4)  (0) 2021.02.08
Proxmark3 V5 개발환경 구축 (1/4)  (0) 2021.02.08
Proxmark3 RFID Tool  (0) 2021.02.08
블로그 이미지

SKY STORY

,
반응형

.gitignore에 my_ignore_folder/ 폴더를 추가했음에도 Git이 계속 해당 폴더의 변경사항을 추적하는 이유는, 이미 Git이 이전에 해당 폴더를 트래킹하고 있기 때문이다. .gitignore 파일을 설정한 후에는 Git에 해당 폴더를 무시하도록 아래와 같이 추가 조치를 취해보자.

  1. 추적된 my_ignore_folder/ 폴더의 캐시 삭제
    .gitignore에 추가된 폴더가 이미 Git에서 추적 중인 상태라면 캐시를 삭제해야 한다. 
     
    git rm -r --cached my_ignore_folder/
  2. 변경 사항 커밋
    캐시에서 삭제된 내용을 커밋하여 기록에 반영한다.
     
    git commit -m "Remove my_ignore_folder folder from tracking"
  3. 푸시
    원격 저장소에 반영하려면 다음과 같이 푸시한다.
  4. git push

이 작업을 마친 후, my_ignore_folder/ 폴더는 .gitignore 설정에 따라 무시되어, 이후 변경 사항이 발생해도 Git이 추적하지 않게 된다.

만약 git rm -r --cached my_ignore_folder/ 명령을 실행했음에도 불구하고 my_ignore_folder/ 폴더가 여전히 Git에서 추적되고 있다면, 다음 사항들을 점검하고 추가 조치를 취해보자.

  1. .gitignore 파일이 제대로 설정되었는지 확인
    • .gitignore 파일에서 my_ignore_folder/ 경로가 올바르게 작성되었는지 다시 한번 확인한다.
    • .gitignore 파일이 Git의 루트 디렉토리에 위치해 있는지 확인한다. 프로젝트의 루트 디렉토리가 아니라면 무시되지 않을 수 있다.
  2. .gitignore 파일에 추가적인 경로 지정
    • .gitignore에 my_ignore_folder/ 외에 my_ignore_folder/*과 같은 패턴을 추가해 보세요. 간혹 Git이 하위 파일을 인식하는 경우가 있기 때문에, 아래와 같이 설정할 수도 있습니다:
       
      my_ignore_folder/
      my_ignore_folder/*
  3. git status로 확인
    • 터미널에서 git status 명령을 실행하여 my_ignore_folder/가 추적되고 있는지 확인해보자.
  4. 폴더 강제 삭제 후 커밋
    • 위 방법이 모두 실패한 경우, 강제로 my_ignore_folder/ 폴더를 무시하도록 처리한다.
      git rm -rf --cached my_ignore_folder
      git commit -m "Force ignore my_ignore_folder folder"
      git push
    • 이 명령어는 캐시에서 삭제를 강제하여 .gitignore 파일이 무시되도록 한다.
  5. 로컬 및 원격에 남아 있는지 확인
    • 최종적으로 SourceTree나 다른 Git 클라이언트를 사용하여 로컬과 원격 브랜치 모두에 my_ignore_folder/폴더가 여전히 남아 있는지 확인한다.

 

반응형
블로그 이미지

SKY STORY

,
반응형

아래 오류 메시지는 git push 과정중 네트워크나 git 서버 쪽에서 발생한 500 오류로 인해 연결이 끊어진 상황을 나타낸다. 이 문제는 주로 네트워크 상태나 원격 서버의 일시적인 오류로 인해 발생할 수 있지만, 몇 가지 설정을 조정해보면 해결할 수 있는 경우도 있다.

git --no-optional-locks -c color.branch=false -c color.diff=false -c color.status=false -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/main:refs/heads/main 
Pushing to https://bitbucket.org/netcanis_workspace/gptapi.git
POST git-receive-pack (chunked)
error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
Completed with errors, see above

 

1. 캐시된 자격 증명 삭제 및 다시 로그인

git credential-osxkeychain erase

 

2. 푸시 버퍼 크기 증가

아래 설정은 500MB로 늘려주는 것으로, 서버와의 데이터 전송 오류를 해결할 수 있다. (대부분 이 문제이다.)

git config --global http.postBuffer 524288000

 

3. Bitbucket 서버 상태 확인

유지보수 작업등으로 인해 요류가 발생할 수 있다. (서버 상태를 확인해 본다.)

 

4. HTTP/2 사용 비활성화

일부 환경에서는 HTTP/2 프로토콜이 문제를 일으킬 수 있다. 아래 명령어를 통해 HTTP/2를 비활성화해 보자.

git config --global http.version HTTP/1.1

 

5. 다른 네트워크 사용

네트워크 연결 문제로 인해 푸시가 차단될 수 있다. 다른 네트워크(예: 핫스팟)로 전환 후 다시 푸시를 시도해 보자.

 

 

반응형

'개발 > Note' 카테고리의 다른 글

GitHub에서 포크한 저장소를 삭제  (0) 2024.11.06
특정 폴더 git 추적 삭제  (0) 2024.10.30
git 마지막 commit 취소, 메시지 수정  (0) 2024.10.16
BLE, Beacon, iBeacon  (0) 2024.01.11
BLE Advertising Payload format 샘플 분석  (1) 2024.01.11
블로그 이미지

SKY STORY

,
반응형

미래의 한국

by netcanis

 

한국의 인구 감소는 매우 빠른 속도로 진행되고 있다. 하지만 한국은 늘 그래왔듯 이번에도 해답을 찾을 것이다. 노동 인력의 감소를 보완하기 위해, 로봇과 인공지능(AI) 분야에서 세계적인 선두 주자로 자리 잡을 가능성이 크다.

현재 한국은 전 세계에서 사교육비 지출이 높은 국가 중 하나로, 학부모들이 막대한 비용을 투자하면서 고학력자가 빠르게 증가하고 있다. 향후 수십 년 안에는 대다수의 한국인이 고등 교육을 받은 인재가 될 가능성이 높지만, 이는 곧 사회 전반의 인력난과 특정 분야에 인재가 집중되는 현상을 심화시킬 수도 있다. 노동 시장의 불균형 속에서도 고학력화가 진행되는 한편, 필수 산업의 일손 부족 문제는 점차 더 심각해질 것이다.

인구 감소로 인한 인력 부족 문제는 초기에는 외국인 노동자를 유입시켜 해결하려 할 가능성이 크다. 그러나 로봇과 AI 기술이 발전함에 따라 이러한 인력은 점차 기술로 대체될 것이다. 이미 반복적인 단순 작업이나 위험하거나 고된 일자리에는 점차 로봇과 AI 기술이 도입되고 있으며, 앞으로 이러한 추세는 더욱 가속화될 전망이다.

이러한 도전에 대해 한국 사회가 이를 방관하지는 않을 것이다. 한국은 과거 수많은 도전과제에서 혁신적 해법을 찾아왔던 것처럼 이번에도 인구 감소 문제에 대한 해결책을 반드시 찾아낼 것이라 믿는다.

 

반응형

'생각의 조각들' 카테고리의 다른 글

MOON MUSiC - Coldplay & Jon Hopkins -  (1) 2024.12.19
진정한 용기  (4) 2024.11.16
인공지능의 학습 한계  (0) 2024.10.10
Breaking Free from Musical Conventions  (0) 2024.10.06
게으른 야망의 딜레마  (0) 2024.10.06
블로그 이미지

SKY STORY

,
반응형
 

알림 메시지, 데이터 메시지 차이점을 알아보자.


구분 알림 메시지 (Notification Message) 데이터 메시지 (Data Message)
목적 시스템이 자동으로 알림 표시 앱이 직접 알림을 처리해야 함
앱 상태 백그라운드/완전 종료에서도 알림 표시 가능 포그라운드 상태에서만 앱이 직접 처리 가능
구성 제목, 본문, 이미지 등 알림 내용 포함 데이터 키-값 쌍으로 구성
사용 예 간단한 알림 전송에 유용 앱에서 특정 작업 수행에 유용
배너 알림 표시 자동으로 베너 알림 표시 앱이 포그라운드일 때 코드로 구현 가능
예시 코드 { "notification": { "title": "알림 제목", "body": "알림 내용" } } { "data": { "key1": "value1", "key2": "value2" } }

 

요약 

알림 메시지 : 시스템이 자동으로 베너 형태의 알림을 관리해주며, 앱의 상태와 무관하게 표시된다.

데이터 메시지 : 앱이 실행 중일 때만 앱 내 코드로 처리할 수 있다. 베너 알림을 표시하려면 직접 구현해야 한다.

 

반응형
블로그 이미지

SKY STORY

,
반응형
 

<application>  <activity> 태그의 속성과 하위 요소, 적용 가능 API, 필수여부 등을 정리해 보았다.

 

<application> 태그 속성

앱의 전체적인 설정을 제어하며, 여러 속성  하위 요소를 통해 앱의 동작, 권한, 리소스 등을 정의할  있다.

속성 적용 가능 API 버전
(Android 버전)
필수 여부 설명
android:icon API 1 (Android 1.0) 필수 앱의 기본 아이콘을 설정합니다.
android:label API 1 (Android 1.0) 선택 앱의 기본 이름(라벨)을 설정합니다.
android:theme API 1 (Android 1.0) 선택 애플리케이션의 기본 테마를 설정합니다.
android:permission API 1 (Android 1.0) 선택 앱에서 선언된 모든 컴포넌트에 적용되는 권한을 정의합니다.
android:debuggable API 1 (Android 1.0) 선택 디버깅 모드를 활성화할지 여부를 지정합니다.
android:enabled API 1 (Android 1.0) 선택 애플리케이션이 활성화 상태인지 여부를 지정합니다.
android:hasCode API 1 (Android 1.0) 선택 애플리케이션이 자체적으로 컴파일된 코드(DEX 파일)를 포함하는지 여부를 지정합니다.
android:persistent API 1 (Android 1.0) 선택 시스템 메모리에서 앱이 항상 실행 중인지 여부를 정의합니다.
android:taskAffinity API 1 (Android 1.0) 선택 애플리케이션의 태스크 친화도를 정의합니다.
android:process API 1 (Android 1.0) 선택 앱이 실행될 프로세스를 지정합니다.
android:allowTaskReparenting API 1 (Android 1.0) 선택 태스크 변경 시 액티비티가 재배치될 수 있는지 여부를 지정합니다.
android:killAfterRestore API 1 (Android 1.0) 선택 백업 후 애플리케이션을 종료할지 여부를 설정합니다.
android:restoreAnyVersion API 1 (Android 1.0) 선택 앱이 다른 버전의 백업 데이터를 복원할 수 있는지 여부를 설정합니다.
android:resizeableActivity API 1 (Android 1.0) 선택 애플리케이션의 액티비티가 크기 조정 가능한지 여부를 지정합니다.
android:usesCleartextTraffic API 1 (Android 1.0) 선택 앱에서 암호화되지 않은 트래픽을 허용할지 여부를 정의합니다.
android:installLocation API 8 (Android 2.2) 선택 앱이 설치될 위치를 지정합니다. (auto, internalOnly, preferExternal)
android:backupAgent API 8 (Android 2.2) 선택 백업 및 복원을 담당하는 백업 에이전트를 정의합니다.
android:allowBackup API 8 (Android 2.2) 선택 앱 데이터의 백업을 허용할지 여부를 정의합니다.
android:hardwareAccelerated API 11 (Android 3.0) 선택 애플리케이션에서 하드웨어 가속을 사용할지 여부를 설정합니다.
android:largeHeap API 11 (Android 3.0) 선택 애플리케이션이 더 큰 힙 메모리를 사용할 수 있는지 여부를 지정합니다.
android:vmSafeMode API 11 (Android 3.0) 선택 앱이 VM에서 안전 모드로 실행될지 여부를 지정합니다.
android:isGame API 19 (Android 4.4) 선택 앱이 게임인지 여부를 정의합니다.
android:banner API 20 (Android 4.4W) 선택 Android TV에서 사용할 배너 이미지를 지정합니다.
android:restrictedAccountType API 22 (Android 5.1) 선택 제한된 계정의 유형을 설정합니다.
android:fullBackupContent API 23 (Android 6.0) 선택 백업 내용과 제외 항목을 정의하는 XML 파일을 지정합니다.
android:roundIcon API 25 (Android 7.1) 선택 원형 아이콘을 지정합니다.
android:category API 26 (Android 8.0) 선택 애플리케이션의 카테고리를 정의합니다. (game, productivity, social 등)
android:appComponentFactory API 28 (Android 9.0) 선택 애플리케이션의 컴포넌트 생성을 처리하는 클래스를 지정합니다.
android:profileable API 29 (Android 10.0) 선택 애플리케이션이 성능 프로파일링이 가능한지 여부를 정의합니다.
android:dataExtractionRules API 31 (Android 12.0) 선택 앱의 데이터 추출 규칙을 정의하는 XML 파일 경로를 지정합니다.

<application> 태그 하위 요소

하위요소 적용 가능 API 버전
(Android 버전)
필수 여부 설명
<activity> API 1 (Android 1.0) 필수 앱의 액티비티를 선언합니다.
<service> API 1 (Android 1.0) 선택 백그라운드 작업을 수행하는 서비스 컴포넌트를 선언합니다.
<receiver> API 1 (Android 1.0) 선택 브로드캐스트 수신기를 선언합니다.
<provider> API 1 (Android 1.0) 선택 앱에서 데이터를 공유할 수 있는 콘텐츠 제공자를 선언합니다.
<uses-library> API 1 (Android 1.0) 선택 앱에서 사용할 추가 라이브러리를 선언합니다.
<meta-data> API 1 (Android 1.0) 선택 추가적인 메타데이터 정보를 설정합니다.
<activity-alias> API 1 (Android 1.0) 선택 기존 액티비티의 별칭을 정의하여 다른 이름으로 사용할 수 있도록 합니다.
<permission> API 1 (Android 1.0) 선택 앱에서 정의하는 권한을 선언합니다.
<permission-group> API 1 (Android 1.0) 선택 권한을 그룹화하여 선언합니다.
<permission-tree> API 1 (Android 1.0) 선택 권한의 계층 구조를 선언합니다.
<uses-permission> API 1 (Android 1.0) 선택 앱이 필요로 하는 권한을 정의합니다. 특정 기능을 사용하려면 권한 요청이 필요할 때 추가합니다.
<profileable> API 29 (Android 10.0) 선택 앱의 성능을 프로파일링할 수 있는지 여부를 정의합니다.

 


 

<activity> 태그 속성

액티비티의 동작과 속성을 정의한다. 앱의 개별 화면을 구성하며, 앱의 주요 동작 방식을 정의할 있다.

속성 적용 가능 API 버전
(Android 버전)
필수 여부 설명
android:name API 1 (Android 1.0) 필수 액티비티의 클래스 이름을 정의합니다.
android:label API 1 (Android 1.0) 선택 액티비티의 이름을 정의합니다.
android:theme API 1 (Android 1.0) 선택 액티비티에서 사용할 테마를 설정합니다.
android:icon API 1 (Android 1.0) 선택 액티비티에 사용할 아이콘을 설정합니다.
android:permission API 1 (Android 1.0) 선택 액티비티에 접근하기 위해 필요한 권한을 설정합니다.
android:configChanges API 1 (Android 1.0) 선택 액티비티가 처리할 구성 변경 사항을 설정합니다.
android:launchMode API 1 (Android 1.0) 선택 액티비티의 실행 모드를 지정합니다.
android:taskAffinity API 1 (Android 1.0) 선택 태스크의 친화도를 지정합니다.
android:windowSoftInputMode API 3 (Android 1.5) 선택 소프트 입력 모드의 동작을 설정합니다. (adjustResize, adjustPan 등)
android:hardwareAccelerated API 11 (Android 3.0) 선택 하드웨어 가속을 사용할지 여부를 설정합니다.
android:clearTaskOnLaunch API 1 (Android 1.0) 선택 태스크가 시작될 때 다른 액티비티를 모두 종료할지 여부를 설정합니다.
android:alwaysRetainTaskState API 1 (Android 1.0) 선택 태스크의 상태를 항상 유지할지 여부를 설정합니다.
android:autoRemoveFromRecents API 21 (Android 5.0) 선택 액티비티가 종료되면 최근 작업 목록에서 자동으로 제거될지 여부를 설정합니다.
android:allowEmbedded API 30 (Android 11.0) 선택 액티비티가 다른 액티비티 내에 임베드될 수 있는지 여부를 설정합니다.
android:exported API 31 (Android 12.0) 필수 외부에서 액티비티를 호출할 수 있는지 여부를 정의합니다.

<activity> 태그 하위 요소

하위요소 적용 가능 API 버전
(Android 버전)
필수 여부 설명
<intent-filter> API 1 (Android 1.0) 선택 액티비티가 처리할 수 있는 인텐트를 정의합니다.
<meta-data> API 1 (Android 1.0) 선택 액티비티에 대한 추가 메타데이터를 제공하여 앱 실행 시 필요한 정보를 설정할 수 있습니다.
<layout> API 1 (Android 1.0) 선택 액티비티가 사용할 레이아웃을 정의합니다. 보통 XML 파일로 참조됩니다.

 

<intent-filter> 태그 하위 요소

하위요소 적용 가능 API 버전
(Android 버전)
필수 여부 설명
<action> API 1 (Android 1.0) 필수 인텐트 필터에서 처리할 수 있는 인텐트 액션을 정의합니다. 예: android.intent.action.MAIN
<category> API 1 (Android 1.0) 선택 인텐트 필터에서 처리할 수 있는 인텐트 카테고리를 정의합니다. 예: android.intent.category.LAUNCHER
<data> API 1 (Android 1.0) 선택 인텐트 필터가 처리할 수 있는 데이터(URI, MIME 타입 등)를 정의합니다.

 

 

반응형
블로그 이미지

SKY STORY

,
반응형

Toast가 여러 줄로 출력되지 않는 경우는 디바이스의 화면 크기텍스트의 길이 때문이다. 그래서 여러 줄을 출력하기위해 TextView를 사용하는 MultiLine Toast를 만들어 보았다.

 

1. res/layout/multiline_toast.xml 파일 생성:

<!-- res/layout/multiline_toast.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:padding="10dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/multiline_toast_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="16sp"/>
</LinearLayout>

 

2. showMultiLineToast 함수 작성:

private fun showMultiLineToast(message: String) {
    // 1. LayoutInflater를 사용해 multiline_toast 레이아웃을 불러옴
    val inflater = layoutInflater
    val layout = inflater.inflate(R.layout.multiline_toast, findViewById(R.id.multiline_toast_text))

    // 2. multiline_toast 레이아웃의 TextView에 메시지를 설정
    val textView: TextView = layout.findViewById(R.id.multiline_toast_text)
    textView.text = message

    // 3. Toast에 multi-line layout을 설정
    with(Toast(applicationContext)) {
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
}

 

3. 사용 예시:

val message = """
    BLE 스캔 성공:
    deviceName: ${result.deviceName}
    RSSI: ${result.rssi}
    data: ${result.data}
""".trimIndent()

showMultiLineToast(message)  // Multi-line Toast로 출력

 

 

반응형
블로그 이미지

SKY STORY

,