[20260407 - 절망의 대나무 숲1]

지금은 우울감의 끝을 달리는 중이고, 난 매일 이런 생각만 하는 사람은 아니다. 그저 오늘은 오늘의 우울감을 달래기 위해 글로 배설해본다.

 


한 10분 전만해도 '내 인생은 절망스럽다' 라는 문장이 나를 지배했다. '여기서 내 삶이 더 나아질 수 있을까?' 라는 생각 때문이었다. 특별한 재능 없음, 함께 나눌 친구도 별로 없음, 부족한 월급, 맘껏 효도도 못해드린 노쇠하신 부모님에 대한 죄송함까지. 더군다나 더 나아지지 않을지라도 압박속에서 끊임없이 치열하게 허덕허덕 무언가를 해야한다는 것에 짜증이 울컥 올라온다. 아이유보다 많이 들었을 것 같은 아이유의 Unlucky 노래 가사를 들으며 글썽거리던 나는 '마치 하루하루가 삐뚤은 동그라미 같아, 도망쳐도 여기로 돌아와' 라는 부분에 다시 한 번 공감한다. 그리고 나서 급기야 타인과 나를 비교하기 시작한다. 완벽한 생은 없지만 나보다 더 나은 생은 분명 존재한다. 삼십대 후반이 되니까 그 격차는 더 선명해지고 따라잡기도 힘들다. 


그래도 나의 마음을 뾰족한 펜으로 꾹꾹 눌러쓰며 적다보니 시원하게 긁어낸 느낌이다.

진심을 말하면 이런 글을 적는 이유는 더 절망하고 싶어서가 아니라 행복하고 싶어서다. 나의 감정에만 초점을 두는 삶이 아니라 타인의 감정에도 주목하는 삶을 살고 싶어서다.

스즈메의 문단속에서 미래의 스즈메가 과거의 스즈메에게 이렇게 이야기 한다. "너는 씩씩하게 살아가게 될 거고 진심으로 너를 사랑해주는 사람들을 만나게 될 거야." 힘들 때 마다 그랬듯 지금의 나에게 그런말을 해주고 싶은 거겠지. 사실 정말 이렇게 될 수 있을지 확신이 서지는 않는다. 그저 적어볼 뿐이다.

 

 

 

* 오늘 시도해 본 연결어 : 급기야, 더군다나





 

20분 이상 되는 mp4 영상 무료로 AI 자막 추출하기

1. 순서

2. 작성 코드

 

20분 이상이 되는 mp4영상을 AI 스크립트를 추출하려고 할 때, 다른 AI 기능이 탑재된 사이트를 이용하면 유료로 결제해야 하는 경우가 생깁니다.  그래서 구글 드라이브와 colab에서 작성한 코드를  활용하여 무료로 AI 자막을 txt로 추출하는 방법을 알려드리려고 합니다.

 

1. 순서

 (1) 구글 드라이브에 폴더를 만들고 mp4 파일들을 업로드 합니다.  

 

 

 

 

(2) 구글 colab에 들어가서 드라이브를 마운트하고 openAI Whisper 라이브러리로 AI자막을 추출해주는 코드를 작성합니다. 

 

 

이 때 video_path의 경로명과 파일명을 드라이브에 올라간 경로명과 파일명으로 일치시켜주고, 출력되는 output_path의 txt 파일명과 경로도 잘 설정해 준다.

 

 

2. 작성 코드

 

# 1. 구글 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')

# 2. Whisper 설치
!pip install -q openai-whisper

# 3. ffmpeg 설치 (필수)
!apt-get install -y ffmpeg

# 4. 모델 불러오기 및 변환
import whisper

# 모델 선택 (tiny, base, small, medium, large 중)
model = whisper.load_model("small")

# mp4 파일 경로 (파일명은 네 드라이브에 올린 이름으로 변경)
video_path = "/content/drive/MyDrive/중학 junior강의/주니어 1강.mp4"

# 자막 변환
result = model.transcribe(video_path)

# 5. 텍스트 파일로 저장
output_path = "/content/drive/MyDrive/중학 junior강의/주니어 1강.txt"
with open(output_path, "w", encoding="utf-8") as f:
    f.write(result["text"])

print("변환 완료! 저장된 파일 경로:", output_path)

 

 

 

 

 

 

 

나동빈님이 촬영하신 이코테 강의를 유튜브로 듣고 있다.

2강은 그리디 알고리즘에 이어 구현 알고리즘에 대해서 설명하고 있다.

'왕실의 나이트 문제'는 나 스스로도 풀어보고 나동빈님의 해답과 비교해 보았다. 

[구현 알고리즘] 왕실의 나이트 문제 풀이(이코테)

1. 구현 유형이란?

2. 왕실의 나이트 문제

3. 왕실의 나이트 문제 풀이 (본인코드)

4. 왕실의 나이트 문제 풀이(강의 내 코드)

 

 

구현 알고리즘 유형이란?

⬛ 구현

  • 구현이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
  • Problem - thinking - Solution
  • 흔히 알고리즘 대회에서 구현 유형의 문제란 무엇을 의미할까요?
    • 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭합니다.
  • 구현 유형의 예시는 다음과 같습니다.
    • 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제
    • 실수 연산을 다루고, 특정 소수점 자리까지 출력해야하는 문제
    • 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제
    • 적절한 라이브러리를 찾아서 사용해야하는 문제

 

왕실의 나이트 문제

 

 

왕실의 나이트 문제 풀이(본인 코드)

col=['a','b','c','d','e','f','g','h']
loc=input()

for i, name in enumerate (col):
  if name==loc[0]:
    colnum=i+1

rownum=int(loc[1])


dx=[2, 2, -2, -2, 1,-1,  1 ,-1]
dy=[1,-1,  1 ,-1, 2, 2, -2, -2]

result=0
for i in range(8):
  if (rownum+dx[i] < 1 or rownum+dx[i]> 8) or (colnum+dy[i] < 1 or colnum+dy[i]>8):
    pass
  else:
    result+=1
print(result)

 

왕실의 나이트 문제 풀이(강의 내 코드)

 

 

 

비교

1. 아스키 코드를 읽는 ord내장함수를 활용하여 입력 문자를 숫자로 변환했다. => 확장성이 좋다.

2. 이동 스텝을 열과 행으로 나눠서 리스트로 저장한 것이 아니라 steps라는 리스트에 튜플 형태로 넣었다.

3. 조건문에 모든 조건을 만족하는 경우만 result1로 정했다. => 짧은 코드

 

 

 

파이썬 국문 자습서 웹 크롤링하여 PDF 파일로 변환하기

1. 크롤링하려는 웹페이지와 웹페이지의 구조

2. 주석을 포함한 크롤링 코드

3. 추가 주의 사항

 

1. 크롤링하려는 웹페이지와 웹페이지의 구조

 

파이썬 국문 자습서 : https://docs.python.org/ko/3.13/tutorial/index.html 를 크롤링하려고 합니다.

 

 

이런식으로 1. 입맛 돋우기 2.파이썬 인터프리터 사용하기 3.파이썬의 간략한 소개 등으로 링크를 타고 들어가 문서를 열고 크롤링해서 pdf한권으로 이어줄 예정입니다.

 

1. 입맛 돋우기 : https://docs.python.org/ko/3.13/tutorial/appetite.html

2. 파이썬 인터프리터 사용하기 : https://docs.python.org/ko/3.13/tutorial/interpreter.html

....

 

이런 형태로 링크가 생성되어있습니다. 

 

첫 index 페이지에서 1.입맛 돋우기, 2.파이썬 인터프리터 사용하기 등의 class는 

div.toctree-wrapper.compound a.reference.internal

 

입니다. for문을 돌면서 링크들을 가져와야 겠죠.

2.1인터 프리터 실행하기 , 2.1.1 인자 전달 등도 이 클래스에 포함되어 있어서 필요한 링크만 뽑기 위해서는 정규식을 활용하여 

"1. ", "2. ", "10. "처럼 "숫자 + 마침표 + 공백"으로 시작하는 문자열만 매칭하여 뽑아줘야 합니다.

 

 

 

 

각각의 페이지에 본문 부분은 role="main"입니다.

 

 

 

 

 

 

 

2. 주석을 포함한 크롤링 코드

 

주석을 포함한 크롤링 코드를 공개 합니다.

 



import requests  # 웹 페이지 데이터를 가져오기 위한 라이브러리
from bs4 import BeautifulSoup  # HTML 문서에서 원하는 데이터를 추출하기 위한 라이브러리
from weasyprint import HTML  # HTML을 PDF로 변환하기 위한 라이브러리
from urllib.parse import urljoin  # 상대 경로를 절대 경로로 변환하기 위한 라이브러리
import re  # 정규표현식으로 문자열을 처리하기 위한 라이브러리


#기본 url설정
index_url = urljoin(base_url, "index.html")

# 1. index 페이지에서 '1.', '2.', ..., '16.'으로 시작하는 항목만 추출
res = requests.get(index_url)
soup = BeautifulSoup(res.text, "html.parser") # 가져온 HTML 문서를 파싱해 Python에서 다룰 수 있는 객체로 변환



main_links=[] #1. 입맛 돋우기 2.파이썬 인터프리터 사용하기... 등의 링크들을 담기 위한 리스트 생성
for a in soup.select("div.toctree-wrapper.compound a.reference.internal"):
    text = a.get_text(strip=True)
     #1. ", "2. ", "10. "처럼 "숫자 + 마침표 + 공백"으로 시작하는 문자열만 매칭하여 뽑기
    if re.match(r"^\d+\. ", text):
        main_links.append(urljoin(base_url, a['href'])) #main_links리스트에 <a>태그 안에 있는 href 속성 값을 가져와 넣기



#pdf 파일로 만들기 전에 우선 html로 만들기
full_html=""
for url in main_links:
    page = requests.get(url)
    page.encoding='utf-8'
    doc = BeautifulSoup(page.text, "html.parser")
    main = doc.find("div", {"role": "main"}) #본문 부분을 찾아서 main에 넣음
    if main :
        h1 = main.find("h1") #본문에서 제목을 찾아서
        if h1: #제목이 있다면
            title = h1.get_text() #제목을 추출하여 title에 넣어두고
            h1.extract()  #h1자체 내용은 지워라 (출력된 문서에 제목이 중복되어 나오지 않기 위함)
        else:
            ""
        full_html += f"<h1>{title}</h1>\n" #full_html에 제목을 더하고
        full_html += str(main) #제목이 제거된 본문 텍스트를 더해라
       



#스타일을 지정해 준 마지막으로 출력되는 html
final_html = f"""
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <style>
    body {{
      font-family: 'Nanum Gothic', sans-serif;
      line-height: 1.7;
      font-size: 16px;
    }}
    h1 {{
      page-break-before: always;
      color: darkblue;
    }}
    code {{
      background: #f4f4f4;
      padding: 2px 4px;
      border-radius: 4px;
    }}
    pre, .highlight {{
      background: #f0f0f0;
      padding: 10px;
      border-radius: 6px;
      font-family: 'Courier New', monospace;
      font-size: 90%;
      overflow: auto;
    }}
    a {{
      color: black;
      text-decoration: none;
    }}
  </style>
</head>
<body>
{full_html}
</body>
</html>
"""


#weasyprint를 활용하여 pdf로 변환
HTML(string=final_html, base_url=base_url).write_pdf("python_ko_book.pdf")
print("완성! python_ko_book.pdf 로 저장되었습니다.")

 

3. 추가 주의 사항

 

 

1. weasyprint를 활용하려면 GTK runtime을 다운받은 후 pip install weasyprint로 설치해야한다.

 

윈도우용 GTK runtime donwload 사이트

https://sourceforge.net/projects/gtk-win/

 

GTK+2 for Windows Runtime Environment

Download GTK+2 for Windows Runtime Environment for free. The files required to run GTK+ applications on Windows. This is the GTK+2 Runtime Environment Installer for Windows. It includes all of the files required to run GTK+2 applications on Windows.

sourceforge.net

 

 

2. 크롤링 하는 언어가 한국어 이므로 

 

코드에 

 page.encoding='utf-8'

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">

 

설정을 해주어야 합니다.

 

 

매주 일요일 8시 디스코드에 모여 2017년도에 멀티캠퍼스에서 같이 공부를 했던 언니, 동생과 스터디를 하기로 했다.

각자 업무하고 있는 분야가 달라서 어떤 것을 공부해야할지 고민하다가 모든 IT공부의 ‘기반’이 되는 인프라를 함께 스터디 하기로 정했다. 참고 도서는 ‘그림으로 공부하는 IT 인프라 구조’다.

이번주에는 1장을 공부하기로 했는데, 새롭게 배운 것(NEW), 어려웠거나 이해하지 못한 부분(Difficulty), 추가 내용(Amendment) 항목을 나누어 정리해 보도록 하겠다.

 

 

목차

1. 그림으로 공부하는 IT 인프라 구조 소개

2. 새롭게 배운 것(New)

    1) IT 인프라와 아키텍처는 무엇일까?
    2) 아키텍처의 종류
        집약형, 분할형, 수직분할형, 클라이언트-서버형, 3계층형, 수평분할형, 공유형, 지리분할형, 스탠바이형, 재해대책형

3. 어려웠거나 이해하지 못한 부분(Difficulty)

    1) 지리 분할형 아키텍처의 업무연속성과 시스템 가용성

    2) 가상화 액티브 스탠바이 서버의 이중화

4. 추가 내용(Amendment)

   1)인텔의 X86서버

   2)엣지 컴퓨팅

 

 

1. 그림으로 공부하는 IT 인프라 구조 소개

 

그림으로 공부하는 IT 인프라 구조

 

 

  인프라 관련 경력이 많은 야마자키 야스시, 미나와 케이코, 아제카츠 요헤이, 사토 타카히코 가 공동집필하였다. yes24평점은 9.7점으로  아키텍처와 서버의 개념부터 인프라 응용이론, 네트워크, 인프라 성능향상까지 많은 내용을 이해를 돕기 위한 그림과 함께 제시하고 있다. 리뷰를 보면 매끄러운 번역, 쉬운 설명 으로 초심자에게 추천하고 싶은 책이라고 한다.

 

2. 새롭게 배운 것(New)

1) IT인프라와 인프라 아키텍처는 무엇일까?

-인프라란 '기반'을 의미한다. IT 인프라는 정보기술의 기반이 되는 요소로, 방대한 데이터와 시스템 운영을 안정적으로 관리하고 지원하는 역할을 한다.

-아키텍처는 ‘구조’를 의미한다. 따라서 인프라 아키텍저는 IT 인프라의 구조를 의미한다

 

2) 아키텍처의 종류

아키텍처의 종류

-집약형과 분할형 아키텍처

집약형은 대형 컴퓨터를 이용해 모든 업무를 처리하는 구조이다. 이러한 대형 컴퓨터는 ‘범용장비’, ‘호스트’, ‘메인프레임’ 등으로 불린다. 기업의 주요 업무를 한 대에서 모두 처리하기 때문에, 장비에 문제가 생기면 큰 문제가 발생할 수 있다. 따라서 CPU와 같은 주요 부품을 이중화하는 등 다중화하여 안정성을 높인다.

분할형은 여러 대의 컴퓨터를 조합해서 하나의 시스템을 구축하는 구조로, 여러대의 컴퓨터는 데이터를 서로 교환한다. 분할형의 장점은 낮은 비용으로 시스템을 구축할 수 있다는 점과, 서버 대수를 늘릴 수 있어서 확장성이 높다는 점이 있고, 단점은 대수가 늘어나면 관리구조가 복잡해진다는 점이다.

-수직 분할형 아키텍처

수직 분할형 아키텍처 : 특정 서버 측면에서 봤을 때 역할에 따라 ‘위’ ,‘아래’ 계층이 있어서 수직 분할형이라고 불린다.


-클라이언트-서버형 아키텍처

업무 애플리케이션, 미들웨어, 데이터베이스 등의 소프트웨어를 물리 서버 상에서 운영하고 이들 소프트웨어에 클라이언트 또는 단말이라는 소형컴퓨터가 접속해서 이용하는 형태다. 클라이언트에는 프로그램을 설치하고, 서버에서 데이터를 받아오는 형태다.

클라이언트-서버형 아키텍처


-3계층형 아키텍처

프리젠테이션 계층, 애플리케이션 계층(AP서버), 데이터 계층의 3층 구조로 분할돼 3계층형이라고 불린다.

프리젠테이션 계층은 사용자 요청을 받아 화면에 표시하고, 애플리케이션 계층은 무엇을 할지 판단해서 필요한 경우 데이터 계층에 질의한다. 데이터 계층은 데이터 입출력을 담당한다.

3계층형 아키텍처

 

-수평 분할형 아키텍처

용도가 같은 서버를 늘려나가는 방식

-단순 수평 분할형 아키텍처

용도가 같은 서버를 늘려나가는 방식. 예를 들면 서울 본사와 부산 지사 시스템을 완전히 분할한다. 수평 분할은 샤딩이나 파티셔닝이라고 부르기도 한다. 장점으로는 수평으로 서버를 늘리기 때문에 확장성이 향상되고, 분할한 시스템이 독립적으로 운영되어 서로 영향을 주지 않는다는 점이 있고 단점으로는 애플리케이션 업데이트를 양쪽에 동시에 해주어야 한다는 점이 있다.

.

단순 수평 분할형 아키텍처

-공유형 아키텍처

공유형에서는 단순 분할형과 달리 일부계층에서 상호 접속이 이루어진다.이 구성에서는 서울 측 시스템도 필요에 따라 부산 시스템의 데이터에 접속할 수 있다.

공유형 아키텍처

-지리 분할형 아키텍처

서비스나 시스템을 지역(지리적 위치)에 따라 나눠서 운영하는 구조

-스탠바이형 아키텍처

물리 서버를 최소 두 대를 준비하여 한 대가 고장나면 가동 중인 소프트웨어를 다른 한 대로 옮겨서 운영하는 방식
이 때 소프트웨어 재시작을 자동으로 하는 구조를 ‘페일오버’(F/O)라고 한다.

-재해 대책형 아키텍처

특정 데이터 센터에 있는 상용 환경에 고장이 발생하면 다른 사이트에 있는 재해 대책 환경에서 업무 처리를 재개하는 것. 중요한 것은 서버간의 애플리케이션 최신화와 데이터 최신화다.

 

 

3. 어려웠거나 이해하지 못한 부분(Difficulty)

1) 지리 분할형 아키텍처의 업무연속성과 시스템 가용성

지리 분할형 아키텍처를 활용하면 왜 업무 연속성과 시스템 가용성이 높아진다고 되어있는데 왜 그런 걸까?

 

- 업무 연속성  : 특정 지역 서버가 정전, 화재, 지진 등으로 장애가 나더라도 다른 지역의 서버가 백업 역할을 해줄 수 있음

- 시스템 가용성 : 가용성이란 시스템이 정상적으로 작동하는 시간의 비율을 의미함. 쉬운 말로 시스템이 멈추지 않고 잘 작동하는 능력으로 지리 분할형 아키텍처를 적용하면 시스템이 멈추기 않고 잘 작동할 확률이 높아진다.

 

2) 가상화 액티브 스탠바이 서버의 이중화

액티브 스탠바이 방식에서 물리 서버가 아닌 가상화 서버를 이용하고 있는 경우는 서버상의 소프트웨어 뿐만 아니라 가상 서버별로 다른 물리 서버별로 다른 물리 서버에 페일오버하는 방식도 선택될 수 있다. 는 말의 의미

 

- 예전에는 물리 서버 하나에 프로그램만 이중화 했다면 지금은 가상 서버 단위로 이중화 가능하고, 장애나면 가상 서버를 다른 물리 서버로 옮겨서 계속 작동 시킬 수 있음

 

4. 추가 내용

 

1)인텔의 X86서버

 

“인텔의 X86서버는 인텔 아키텍처를 채용하고 있어서 IA서버라고 부른다. 이 IA서버는 여러분이 사용하고 있는 일반 PC와 기본적인 아키텍처가 같다.”라고 되어있는데, X86의 의미는 무엇이며 일반 PC의 기본 아키텍처는 어떻게 생겼을까?

 

-X86은 인텔의 8086 CPU에서 시작된 명칭으로 80286,80386, 80486 등으로 발전하면서 숫자 끝이 86인 CPU 계열을 X86이라고 부르게 됨.

 

-우리가 쓰는 일반 PC, 노트북, 서버의 CPU도 이 계열을 기반으로 하고 있음. X86 아키텍처 기반 시스템 PC의 기본 아키텍처는 [사용자 입력 장치(키보드/마우스)] → [cpu(중앙처리장치)] → [메모리(RAM)] → [저장장치 (HDD/SSD)] → [출력장치(모니터 등)]

순서로 구성되어 있다.

2)엣지 컴퓨팅

엣지 컴퓨팅 : 지리적으로 가까운위치에 있는 서버로 처리를 분산하고 처리 결과만 중앙으로 보내는 아키텍처

 

추가 공부로 엣지 컴퓨팅에 관한 논문을 하나 읽어 보았다. 클라우드 엣지 컴퓨팅 아키텍처와 응용 레벨 컨텍스트 이주 기법-김상욱(서울대학교 대학원,2017) 이라는 논문이었는데, 전체 내용을 다 이해하기는 힘들었지만 인프라 공부를 한 후라 초록 부분은 이해가 갔다. 내용을 짧게 정리하면 이동하는 IoT기기(스마트폰, 자율주행차)가 움직일 때도 끊김 없이 빠르게 데이터를 처리하기 위해서 클라우드 서버에 직접 접속하는게 아니라 엣지 노드(작은 서버)에 접속하게 하는 방식을 취하자는 것이었다. 또한 이동할 때마다 연결되는 엣지 서버가 바뀌는데 그 때 기기의 서비스 연속성을 유지하기 위해서 응용레벨에서 진짜 필수적인 데이터(컨텍스트)만 다음 엣지노드로 이동시키는 방식을 취하자는 내용이다.

 

 

1장은 여기까지 정리하도록 하겠다. 다음에는 2장 '서버를 열어보자' 부분을 공부해야지! 신난다! 재미난다! ^^

+ Recent posts