이번 블로그에서는 OPiC 시험을 본 지 1달만에 후기를 남겨보고자 한다...!!!

결론부터 말하면, 나는 3일을 준비해서 IH를 받았다. 

아래 후기에서는 시험 일정, 가격과 접수 팁, 등급, 공부한 방법, 그리고 아쉬운 점을 작성해보고자 한다. 

 

시험 일정

OPIc 시험은 취업을 목적으로 보는 경우가 대부분이다. 오픽 공식 사이트에서도 대놓고 기업에서 선택한다고 얘기하고 있다. 저 기업들이 모두 오픽이 필수인 것은 아니다...토익 시험 점수만 있어도 되는 경우도 있고, 직군마다 다르긴 하지만 어쨋든 스피킹 시험 성적을 필수로 입력해야 지원할 수 있는 기업들이 있기 때문에 나 또한 시험을 보게 되었다. 

 

취업을 위한 오픽 시험..ㅠㅠ

 

오픽 홈페이지에 로그인을 하고 시험 접수를 선택하면 아래와 같은 화면이 나온다. OPIc, 영어를 선택하고 원하는 시험 날짜와 센터를 선택한다. 시험 가능 일정은 거의 매일, 다양한 시간대에서 선택할 수 있다. 참고로 서울에는 센터가 20개쯤 있다. 강남, 역삼, 신촌, 혜화, 강서, 영등포, 태릉입구 정도로 나뉘는 것 같다. 하지만 생각보다 날짜별로 가능한 센터가 많지 않으므로..날짜를 먼저 선택하는 것을 추천한다.

결과는 시험 이후 4~5일 정도 후에 알 수 있으며, 시험 일자별로 성적 발표일을 확인할 수 있다. 토익과 다르게 따로 카톡 알림이 오지는 않는다. 

삼성의 경우 대표적으로 스피킹 점수를 입력해야 하는 회사라, 공채 시즌에 따라 아래와 같이 긴급 추가 되는 경우도 종종 있다.

가격과 접수 팁

개인 정보를 입력하고 나면, 결제 방법이 뜬다. 오픽 가격은 정가(?)로 84000원이다. 굉장히 비싸다...

기업에서 세부 진단서를 따로 요구하진 않기 때문에 개인적으로 궁금한 사람만 신청하면 된다. 하지만 3만원이 추가되기 때문에..나는 하지 않았다. 

할인 방법은 크게 다음 세 가지이다. 다음과 같다. 

  • 포인트 사용 - 사진에서처럼 CJONE이나 LPOINT를 사용할 수 있다!
  • 쿠폰 할인 - 오픽 책을 구매하거나, 설명회나 오픽 관련 유튜브에서 어쩌다 이벤트성으로 뿌리는 것 같긴 하지만..아쉽게도 난 발견하지 못했다.
  • 신분(?) 할인
    • 군인 할인(약 20%)
    • 초중고 학생 할인(초중고에서 왜 오픽을 보는지는 모르겠다)
    • ★ ★대학생 할인 ★ ★(약 15%) - 별도 사이트 (OPIc 대학연합 정기평가) 가장 현실적인 할인 방법인 것 같다. 오픽 사이트가 아닌 대학연합 정기 평가 사이트가 별도로 있으며, 매일 있는 정규 오픽 시험과 다르게 3~4일마다 있다. 소속 학교, 학번 정보가 필요하고, 시험 당일, 재학 증명서(학생증 X) 지참이 필수이다. 물론 대학생, 또는 대학원생이어야 가능한 방법이다.....!!

등급

등급은 그림과 같다. 현실적으로 영어를 써야 하는 직무에서는 AL(Advanced Low)를 요구하지만, 그렇지 않은 직무에서는 IM 또는 IL 이상을 요구한다. 체감상 문과 직무는 IM, 이과 직무는 IL 이상을 요구하는 것 같지만..직무 바이 직무이다.

출처 : https://www.opic.or.kr/opics/servlet/controller.opic.site.about.AboutServlet?p_process=move-introduce-opic

시험 진행

개인적으로 가장 안내가 부족한 부분이었다고 생각한다. 유튜브도 그렇고, 그냥 시험 문항만 다루어서 더 긴장한 상태로 시험을 보러 갔던 것 같다. 초등학교 때 컴퓨터실 갔던 기억이 있다면..그런 형태의 방에 들어가게 된다. 이후에 대기하다가 안내 사항(20분)을 영상으로 틀어주는데, 이 때 헤드셋으로 음성 입력과 소리가 잘 들리는지 확인하는 과정이 포함된다. 또한, 취미, 직업 등의 사전 조사를 하게 된다. 이 사전 조사를 바탕으로 15문제가 출제되고, 각 문제마다 약 1분~1분 30초 가량 대답해야 한다. 문제 난이도도 선택을 하게 되는데, 선택한 난이도에 따라 꼬리 질문의 개수나 형태가 바뀐다. 선택한 난이도는 시험 중간에 바꿀 기회가 1번 있다. 시험 시간은 안내사항 포함 약 1시간이고, 40분부터였나? 나갈 수 있다. 

공부 방법

일단 나는 말하기 시험에 책이 의미가 없다고 생각해서 구매하지 않았고, 유튜브를 이용했다. 

대표적인 유튜버인 "오픽노잼" 영상과 "제인서" 모의고사, 그리고 단기 취득한 사람들의 후기를 참고하였다. 

3일 동안 아래와 같은 순서로 진행하였다. 

  1. 오픽 노잼 AL 영상들 확인하기
  2. 질문들 대답해보고 예시 답안 확인하면서 답변 문장 구조 파악하기
  3. 모의고사 4개

하지만!!! 추천 준비 시간은 최소 1주일이다....만약 다음에 또 시험을 봐야 한다면 1주일 동안 다음 순서로 진행하면 좋을 것 같다.

1. 문제 유형 파악

가장 먼저 해야 할 일은 문제 유형 파악이다. 물론 항상 동일한 것은 아니지만, 문제 번호에 따라 나오는 문제 유형이 아직까진 꽤나 정해져 있다. 문제에 따라 이걸 파악하지 못하면 개별 문항을 백날 연습해봤자 헤매게 된다. 오픽 노잼의 영상들을 정리해본 결과 다음과 같이 정리할 수 있다.(하지만 일반화는 금지..! 대략 이런 느낌이다~ 정도만 파악)

1. 자기소개
2-10 : 세트 문제
(쉬운 케이스) 묘사, 설명 / 나의 루틴, 습관 / 나의 경험(과거)
(어려운 케이스) 묘사, 습관 / 과거 경험 / 현재-과거 비교, 특정 경험
   2-4 : 세트 1 
   5-7 : 세트 2 
   8-10 : 세트 3
11-15 롤 플레이
   11-13 : 세트 1 - 질문(전화, 음성 메세지, 전화 등 문제가 발생한 상황 가정) → 문제에 대한 대안→나의 경험) 
   14-15 : 세트 2 - 비교(대상 or 시간) → 뉴스나 이슈

2. 사전 조사 문항 미리 정하기

어떤 글에는 직업을 무조건 학생으로 선택해야 한다던가 하는 그런 팁이 있기도 한데, 딱히 상관 없을 것 같다. 말하기 편한, 할 말이 많은 거로 정하면 될 것 같다. 취미도 마찬가지이다. 

3. 감정 단어 외우기

내가 T라 그런지 감정 단어들이 생각보다.. 생각이 안 난다. 당연히 다 아는 단어들이더라도, 유의어로 어떤게 있는지 며칠간 읽으면서 익히면 교체해서 사용하기 좋다.

4. 오픽노잼 영상  + 제인서 모의고사

오픽 노잼 영상들은 말하는 방법에 대해 많이 다뤘던 것 같다. 가장 자주 강조하였던 부분은 육하원칙처럼 말하는 내용을 구조화하는 것이었다. 가령, 과거 경험을 묻는 질문에서는 main point를 20초 내로 말하고 body, conclusion으로 진행한다던가, main point 에는 What, Feeling, Why 가 포함되어야 한다던가 이런 식으로 질문 유형에 대해 답변을 구조화하기 좋았던 것 같다. 나의 습관을 묻는 질문에는 "Whenever~"으로 시작한다던가 하는 소소한 꿀팁도 있다. 

오픽노잼 영상이 굉장히 많아서 전부다 보기는 어려울 것 같다. 영상을 보다 보면 이전 영상들에서 언급했던 부분들을 지나가듯이 언급해서 더 헷갈릴 수도 있다. 그래서 목표로 하는 등급별로 모아놓은 링크에서 골라보되, 이해가 안 가는 부분은 그냥 구글링 해서 정리가 잘 된 블로그를 참고하면 좋을 것 같다.

아래 내가 두어번은 돌려봤던 강의 링크를 첨부한다.

 

 

제인서 모의고사는 실제 시험 환경과 가장 유사하게 볼 수 있다. 시험장에 가보면 우리가 아는 노이즈캔슬링 헤드셋이 아닌 굉장히 꾸진 헤드셋이기 때문에 다른 사람들 말하는 소리가 다 들린다. 이런 환경을 가장 잘 연습해볼 수 있는 모의고사였다. 

제인서 모의고사

 

+) 다른 사람들 공부법

"토익스피킹ㆍ오픽 해커스TV"의 영상을 참고해서 5번 따라하고 IH 받았다는 친구도 있었다. 아래 해당 영상을 첨부하였다. 오픽패스 어플에 가입하면 주는 7일 무료 쿠폰을 이용해서 연습하고 AL 받은 후기도 보았다. 오픽패스의 경우에는 내 목소리를 들을 수 있고 유형별로 기출 문제를 확인할 수 있다는 점이 굉장히 좋은 것 같다.

 

 

이상으로 길고 긴 오픽 후기를 마친다. 모두 한 번에 원하는 목표치가 나와서 오픽 스트레스에서 벗어나길 바란다.

 

출처 : 넷플릭스

최강록 셰프의 요리와 문상훈의 보조 및 응대를 다룬 예능이다. 보자마자 저건 무슨 조합일까 궁금해서 누를 수밖에 없었다. 

 

결론만 말하면 보자마자 후기부터 올리고 싶은 예능이다..!!!

 

컨셉게스트가 원하는 주관식의 요리와 그걸 본 최강록의 주관이 합쳐진 음식을 게스트가 먹고, 해당 음식의 이름까지 지어주는 형태이다. 그래서 "주관" + "식당" 또는 "주관식" + "당" 해서 주관식당이라는 이름이 생겼다고 한다.

 

넷플릭스를 밥친구 삼아 보는 나로써는 최고의 예능이었다. 묘한 지루함과 재미, 감동, 힐링까지 다 맛볼 수 있다.

전체적인 분위기는 영화 심야식당과 리틀포레스트 풍이고, 요리 과정을 다룬다는 점에서 리틀 포레스트에 조금 더 가까울 것 같다. 음식에 담긴 스토리와 구상 및 조리 과정, 그리고 게스트의 상세한 시식평까지..요리를 좋아하는 사람한테는 은은하게 재밌는 예능이지 않을까 싶다. 특히 최강록 셰프의 메모에 담긴 내용을 글씨체까지 있는 그대로 보여주는 것이 참 좋았다. 

 

일단 문상훈과 최강록의 대화가 정말 이게 무슨 대화일까 싶을 정도로 어색하고, 그 어색함에서 오는 재미가 있다. 정말 결이 다른 두 사람의 은근한 케미가 재미있었다. 오디오를 채울 사람이 두 명밖에 없으니 최강록 셰프가 말을 잘한다는 점이 가장 웃겼다..!!! 둘 다 노력하는 게 보여서 웃기면서도 짠하다. 둘 다 서로 잘 맞는다고 억지로 셀프 가스라이팅 하는 듯한 바이브도 재미있다. 

 

그리고 게스트만의 요리를 하는 그 과정을 보면서, 어떻게 요리를 구상하는지, 어떤 부분을 신경쓰고 어떤 스토리를 의도하는지, 요리에 담긴 스토리를 알아가는 재미도 있다. 그렇게 게스트 한 명만을 위한 세상에 하나밖에 없는 요리가 완성되는 것도 감동 포인트이고, 그걸 게스트가 잘 캐치했을 때 은근한 쾌감도 있다. 사실 2화까지밖에 안 나왔지만, 1화에서 게스트인 장기하씨가 작성한 요리 이름에 최강록 셰프도, 나도 뭉클해지는 감동도 있었다. 

 

힐링 포인트는, 배경 사운드가 거의 없다는 것이다. 오로지 두 엠씨의 대화소리, 칼질 소리, 음식 보글거리는 소리만이 담긴다. 대화를 많이 하지도 않고, 대화를 해도 뇌빼야만(?) 따라갈 수 있는 대화이다. 

 

앞으로 나올 요리들이 기대되는 예능은 정말 처음인 것 같다. 완전 강추!!!

 

 

 

Docker는 다양한 방식으로 활용할 수 있지만, 개인 개발 환경에서 사용되는 방법은 크게 두 가지로 나뉜다.

1️⃣ 하나의 서버에서 여러 사용자가 개별 개발 환경을 구축하는 방식
2️⃣ 일괄적으로 모델을 실행하고 평가하는 시스템을 구축하는 방식

 

나는 이전까지 첫 번째 방법을 사용하여 Docker 컨테이너를 실행한 후, 내부에서 개발하는 방식에 익숙했다. 하지만 이번에는 두 번째 방법으로 이미지를 직접 빌드하고 컨테이너 실행을 자동화하는 과정을 경험해보았다. 이 블로그에서는 다음과 같은 흐름으로 Docker 사용법을 정리한다.

1. 도커 사용 환경 비교
2. 이미지? 컨테이너?
3. 도커 명령어 - 정해진 이미지 내에서 컨테이너 생성
4. 도커 명령어 - 이미지 구축 및 컨테이너 생성  

도커 사용 환경 비교

서론의 연장선이기도 하니 스킵 가능

나는 지금까지 Docker 환경을 사용해왔지만, 직접 세팅을 하지 않고 docker run, docker exec 등의 명령어만 익혀 컨테이너를 생성한 후, 컨테이너 내부에서 개발하는 방식으로 작업해왔다. 이번에는 이미지를 직접 빌드하고, 컨테이너 실행을 자동화하는 방식을 시도해보고, 그 후기를 남겨보려 한다.

 

Docker를 개인 단위에서 활용하는 방법은 크게 두 가지로 나뉜다.

  1. 개별 개발 환경 구축 – 하나의 서버에서 여러 사용자가 각자의 컨테이너를 실행하여 독립적인 개발 환경을 유지하는 방식
  2. 자동화된 시스템 구축 – 동일한 작업을 반복 수행하는 애플리케이션을 컨테이너로 구성하고, 실행 및 평가 과정을 자동화하는 방식

이번 실험에서는 두 번째 방식, 즉 일괄적으로 모델을 실행하고 평가하는 시스템을 구축하는 과정을 다룬다. 비유를 하자면, 첫 번째 방식의 경우 하나의 컴퓨터에서 각자의 파일을 만들어서 그 파일 안에서만 사용자들이 개발하는 것이랑 유사하고, 두 번째 방식의 경우에는 항상 동일한 작업을 하는 어플리케이션을 만든 것이라고 비유할 수 있을 것 같다. 물론, 두 방식을 그대로 나누기는 어렵고, 2번에서 작성한 환경에서 새로운 컨테이너를 생성해서 1번처럼 사용할 수 있기는 하다. 

 

이게 무슨 말이냐고? 다음 챕터에서 알아보자.


이미지? 컨테이너?

Docker 에서 가장 흔하게 접할 수 있는 단어가 컨테이너이미지이다.

정의를 먼저 살펴보면 "이미지"는 실행 환경을 포함한 템플릿, "컨테이너"는 이미지를 기반으로 실행되는 독립적인 프로세스를 의미한다. 컨테이너를 실행할 때 이미지를 기반으로 동작을 하게 되는데, 이미지는 설정 환경을 포함하여 변하지 않는 템플릿이다. 

Docker Hub에 공개되어 있는 이미지를 불러와서 사용할 수도 있다. 

즉, 이미지를 한 번 생성해두고 나면 그 안에서 1번(개별 개발 환경 구축)과 같이 컨테이너를 생성해서 활용할 수 있는 것이다. 단, 이때 컨테이너 내에서 코드를 수정하고 이 내용이 그대로 유지되길 원한다면 -v 볼륨 마운트 조건을 추가해야 수정 사항이 날라가지 않고 유지된다. 이에 대한 것은 네 번째 챕터에서 다루도록 한다.


도커 명령어 - 기존 이미지 내에서 컨테이너 실행

이전에 작업했던 환경으로, 당시 로컬 리눅스 환경에서 GPU 서버를 원격 접속하여 사용하였다. 따라서 관리자가 생성해둔 이미지에 접속하여 컨테이너를 생성하였다. 이후 컨테이너를 접속해서 개별 폴더 및 파일을 생성하고, 코드를 작성하는 형태였다. 

이 때 사용한 명령어를 간단하게 정리해보면 다음과 같다.

    1. docker run
      docker run -itd \
        -v <호스트 경로>:<컨테이너 경로> \ # 컨테이너와 로컬(또는 서버) 파일 동기화
        -u <사용자 이름> \ # 컨테이너 내 사용자
        --gpus all \
        --name <생성할 컨테이너 이름> \ # 내가 새로 정하는 것!
        <이미지 이름> \ # 지정된 것!
        /bin/bash
       
      •  -v : 이 부분이 일전에 설명한 볼륨 마운트이다. 볼륨 마운트를 지정함으로써 컨테이너 내에서 코드를 수정하면 호스트에 그대로 반영되기 때문에 컨테이너를 삭제해도 수정한 내용이 유지된다!
      • -u: 사용자 지정하는 명령어로, 사용자를 명명하지 않으면 기본적으로는 root 권한으로 실행돼서 이후 접근이 어려워질 수 있다..(본인이 관리자가 아니라면 꼭 명명해주자)
      • 이미지 이름 : 이전 연구실에서는 ufoym/deepo 이미지를 가져와서 사용했다. 해당 이미지는 여러가지 장점이 있는데, 1) TensorFlow, PyTorch, Caffe, MXNet 등이 포함되어 연구 환경에 알맞고, 2) --gpus all 옵션으로 gpu 가속이 가능하다. 본인이 빌드한 이미지이든, docker hub 에서 받아온 이미지이든 상관 없다.
    2. docker exec : 컨테이너에 접속
      docker exec -it <컨테이너 이름> bash
       
    3. docker stop & docker rm : 컨테이너 정지 및 삭제
      docker stop kyuheelim_torch_ecg  # 실행 중인 컨테이너 정지
      docker rm kyuheelim_torch_ecg    # 컨테이너 삭제
      요 명령어들은...사실 관리자 권한이 필요한 경우가 많고, 문제가 생기지 않는 한 잘 쓰지 않았던 명령어들이다. 

사실 1번 외에는 거의 쓰지 않았는데, 나의 경우에는 어차피 원격 서버에 접속해야하기 때문에 vs code 상에서 remote ssh 연결해서 docker extension 설치 후 바로 접속해서 사용할 수 있었다...! 이 방식을 사용하면 파일 수정 할 때도 쉽게 파일 수정이 가능하고, 무엇보다 CLI 없이 vscode의 UI 를 사용해서 컨테이너를 관리할 수 있다.


도커 명령어 - 이미지 구축 및 컨테이너 생성 

오늘의 핵심이라 목차에도 별표를 쳐보았다. 사실 이미지 구축은 처음이라..꽤나 시간이 많이 걸렸지만, 돌이켜보면 사실 정말 간단한 과정이었다. 

먼저 실행을 위해서는 Docker Desktop이 필요하고, Window에서 wsl 을 사용할 때는  아래 그림과 같이 wsl 동기화 과정이 필요하다. 

 

명령어를 소개하기 앞서, 이미지를 생성하기 위해 필요한 파일들을 먼저 소개하면, docker-compose.yml, dockerfile, run.sh 가 있다.

  1. (필수) Dockerfile: 도커 이미지 빌드
    # Python 3.12 기반 컨테이너 생성
    FROM python:3.12
    
    # 작업 디렉토리 설정
    WORKDIR /app
    
    # 필요 파일 복사 및 패키지 설치
    COPY pyproject.toml poetry.lock ./
    RUN pip install poetry && poetry install --no-root --no-interaction --no-ansi
    
    # 코드 복사 및 실행 스크립트 준비
    COPY . .
    RUN chmod +x run.sh
    
    # 컨테이너 실행 시 실행할 명령어
    CMD ["./run.sh"]
     나는 dependency 를 고려하기 위해 poetry 라는 도구를 사용했다. Poetry 에서는 pyproject라는 파일을 만들게 된다. 내가 지정한 dependency를 설치할 수 있도록 COPY RUN 명령어를 사용하여 poetry를 설치하였다. 
    또한, 내 목표는 run.sh를 실행하는 것이었기 때문에 실행할 수 있도록 권한을 부여하는 chmod와 바로 실행하도록 CMD 명령어를 작성하였다. 
  2. docker-compose.yml : 자동화 및 여러 컨테이너 관리
    version: '3'
    services:
      app:
        build: .
        container_name: my_python_app
        working_dir: /app
        volumes:
          - "./src:/app/src"  # 호스트와 컨테이너 코드 동기화
        env_file:
          - .env  # 환경 변수 파일 적용
        command: ["python", "app.py"]
    docker-compose.yml 의 경우 필수적이지는 않지만, 1) 여러 컨테이너 실행 및 관리를 위해서는 필수적이고, 2) docker-compose.yml 파일이 없이면 실행 코드가 길어진다.나는 2번의 이유로 yml 파일을 추가하기도 했지만, 코드를 수정해도 자동으로 동기화 할 수 있도록 volumes 를 사용할 수 있고, openai 의 api key를 포함한 .env 파일을 사용하고자 env_file을 지정하여 사용하기 위해서도 필요하였다.
  3. run.sh
    사실 이미지 구축과 무관하다면 무관한 파일이다. 나의 경우 세 개의 py 파일(src/preprocess_pdf.py, src/retriever.py, src/agent.py)을 연속적으로, 자동으로 실행하도록 하기 위해 생성한 파일이다. 본 포스트와 관련이 없을 수 있기 때문에 아래 예시만 작성해 두고 넘어가도록 하겠다. 
    #!/bin/bash
    set -e  # 에러 발생 시 스크립트 중단
    
    export PYTHONUNBUFFERED=1
    
    echo "[1] Preprocessing PDFs..."
    poetry run python src/preprocess_pdf.py || { echo "Error in preprocess_pdf.py"; exit 1; }
    
    echo "[2] Building Vector DB..."
    poetry run python src/retriever.py || { echo "Error in retriever.py"; exit 1; }
    
    echo "[3] Running Agent Evaluation..."
    poetry run python src/agent.py || { echo "Error in agent.py"; exit 1; }
    
    echo "Done!"

이제 이 파일들을 실행할 명령어를 살펴보자. 

  1. docker : 개별 컨테이너를 직접 실행하고 관리
    docker 명령어는 기본적으로 1개 컨테이너를 관리할 때 사용하며, dockerfile 만을 필요로 한다.
    • build : 이미지 빌드
      docker build -t my_python_app .
    • run : 컨테이너를 실행하는 명령어로, 이미지 빌드가 선행되어야 한다.
      나는 docker-compose.yml 파일을 사용하고자 했기 때문에 단일 컨테이너를 생성하고자 하였어도 docker-compose 를 사용하였다. 하지만, dockerfile 만으로도 아래와 같이 -v, --env-file 등의 명령어로 실행할 수 있고, 원하는 패키지도 직접 설치할 수 있다.
      docker run -it --name my_python_app_container \
        -v "$(pwd)/data:/app/data" \
        -v "$(pwd)/output:/app/output" \
        --env-file .env \
        my_python_app
  2. docker-compose : 여러 개의 컨테이너를 자동으로 실행하고 관리(단일 컨테이너에서도 사용 가능)
    • up
      이미지가 이미 빌드되어 있다면, 기존 이미지를 기반으로 모든 컨테이너를 실행한다. 
      docker-compose up
    • build
      docker-compose.yml을 사용하여 이미지 빌드만 수행하고 컨테이너는 실행하지 않는다. 여러개 컨테이너를 관리해야 할 때 컨테이너를 모두 실행하지 않고 이미지만 생성할 때 사용한다. docker-compose.yml에 정의된 모든 이미지를 한 번에 빌드할 수 있어서 docker build 와 비교하였을 때 자동화 및 유지보수 측면에서 유리하다. 
      docker-compose build
    • build + up
      나는 빌드와 실행을 동시에 하기 위해서 단일 컨테이너임에도 불구하고 이 조합으로 실행했다. 
      Dockerfile 기반으로 이미지가 자동으로 생성(docker build와 동일)되고, 해당 이미지를 기반으로 docker-compose.yml에 따라 컨테이너를 생성(docker run과 동일)한다.
      docker-compose up --build

꽤나 긴 docker 사용기였다...! 사실 docker 자체를 이해하고 사용하기보다는 그때그때 필요한 명령어만 익혀왔는데, 이렇게 정리하고 보니 꽤나 유용한 툴인 것 같다. 다음엔 깃헙과 연동해서 사용할 수 있는 방법을 찾아봐야겠다. 

'기술' 카테고리의 다른 글

[Tool] Poetry 사용기  (0) 2025.02.21

노션에서 사용하던 마크다운 형식과 달리 티스토리의 기본 수정모드에서는 리스트 하위에 블럭을 삽입하지 못하는 문제가 발생했다. 이를 해결하기 위해 검색을 열심히 했지만..코드블럭 내에 라인 번호 새기는 방법만 열심히 나오더라..ㅜㅜ

힘겹게 찾은(GPT가 알려준) 수정 방법을 공유한다.

기존에는 아래 이미지와 같이 ~코드~1. 내용 아래 넣지 못한다..

이를 수정하기 위해 HTML 선택 > 코드 위치 수정 > 기본 모드 순서를 따르면 된다.

  1.  HTML 모드로 들어간다.
  2. 코드에 놀라지 않아도 된다..!! 기본적으로 html 의 구조는 계층적인 태그로 구성되어 있다. <시작></끝> 형태의 태그들 내부에서 작성이 된다. 예를 들어, <li>내용<li/>1. 내용 과 같은 결과를 보여준다. 물론 리스트의 종류(e.g. 번호, 점 등)는 그 상위 태그인 <ol> 태그에서 정하는 거고, 그건 기본 모드에서도 설정할 수 있으니 신경 쓰지 않아도 된다.
    html 코드를 보면, <ol> 태그에서 "list-style-type" 을 정하고 있다. 그 안에 <li>가 두 개 보인다. 그게 바로 1.내용 2.내용2 리스트이다. 기본모드에서는 리스트를 빠져나오고 코드가 작성되기 때문에 </ol>로 리스트를 끝내버렸다. 그 밑에 pre로 시작하는 태그 안에 내가 작성한 코드가 있다!! 따라서 이 내용을 원하는 li 태크 안에다 옮겨주자.나는 1. 내용 밑에 코드를 넣었다.
  3. 이후 기본 모드로 바꿔서 확인해보면, 아래와 같이 수정된 것을 볼 수 있다.

 

+참고) 이미지의 경우에는 인라인 형태로 되는 경우도 있어서, 인라인이 아닌 블럭으로 넣고 싶다면, 다음 줄로 넘기는 <br> 태그를 추가하면 된다. 

요런 이미지를 1.내용 밑에 넣고 싶다면, 앞서 설명한 것과 같이 바꾸되, 이번엔 줄바꿈을 추가해보겠다.

결과가 잘 들어간 것을 볼 수 있다. 

 

'생활' 카테고리의 다른 글

[넷플 추천] 주관식당 (최강록 & 문상훈)  (4) 2025.02.27
블로그 운영 계획  (1) 2025.02.19

일전에 근무했던 환경에서는 폐쇄망이었고, 일주일에 한 번 인터넷을 열어줬기 때문에 해당일에 모든 패키지를 설치하거나, pypi에서 검색해서 whl 을 업로드해서 수동으로 설치하는 방식으로 패키지를 설치해왔다(해당 방식은 아래 블로그를 첨부한다.) 이런 경우에는 패키지 간 버전 충돌이 발생하기도 하는데, 역시 수동으로 노가다를 뛰었다.....

 

[python] 파이썬 패키지 오프라인 설치 (수동 설치)

offline 또는 폐쇄망 환경에서는 pip로 외부 패키지를 받아올 수 없다이럴 때, 수동으로 설치하는 두 가지 방법이 있다(두번째 방법을 추천★)   먼저, 첫 번째 방법● pypi 사이트에서 패키지 파일

spectrum20.tistory.com

 

이런 문제를 해결하고자 나온게 Poetry이다. Poetry는 pyproject.toml 파일을 이용해서 버전 관리를 한다. 굳이 비교하자면 requirement.txt 를 처음부터 작성해나간다...정도로 생각하면 될 듯하다. 일반적으로 패키지 간 dependency 는 버전 3.12 이상~ 과 같은 형태로 요구하기 때문에 이 점을 활용한 것 같다. 

 

나는 이 환경을 window에서도 openai 를 이용한 agent 시스템 구축을 위해 사용해보게 되었다. 처음에는 굳이..?싶었지만 쓰다보니 꽤 편리하다. 개발 환경을 공유하자면, window11에서 ubuntu 24.04.1 LTS 를 설치해서 wsl 환경에서 진행하였다. 이 과정도 역시 인터넷 블로그를 참고하였다(내가 본 블로그 링크를 못 찾겠으나...친철한 블로거들이 많아서 검색하면 금방 따라할 수 있다.)

 

 

서론이 길었다. 그럼 이제 설치 방법을 공유한다.

1. 먼저 powershell 을 관리자 권한으로 실행하고 wsl 검색어를 입력한다. 다음과 같이 경로가 바뀌면 wsl 이 잘 설치된 것이다.

2. poetry 설치 역시 해당 wsl 환경에서 진행했다. 나는 agent 시스템을 만들고자 했기 때문에, 폴더명을 _agent_system으로 했지만, 다른 이름으로 설정해도 무방하다. 

# 폴더 생성
mkdir _agent_system

# 해당 폴더로 이동
cd _agent_system

# Poetry 설치
curl -sSL https://install.python-poetry.org | python3 -

# path 설정
echo 'export PATH="/home/$USER/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

설치가 완료되면 poetry --version 을 검색해서 올바르게 설치되었는지 확인한다. 

3. poetry init : 이제 실제 dependency 를 위한 작업을 진행한다. 각 항목에 대해 답하면 되는데, 괄호 안에 디폴트 세팅으로 진행하고자 하면 그냥 엔터 누르면 된다. 

pyproject 설정

위 그림과 같이 설정하였고, 프로젝트 폴더를 들어가보면 해당 내용들이 포함되어 있는 pyproject.toml이 나타나 있을 것이다!

4. 이제 poetry add 명령어를 통해 필요한 패키지를 설치할 수 있다. 나는 일단 아래와 같은 패키지를 설치하고자 했고, 이후에 프로젝트를 진행하면서 추가 패키지 설치도 당연히 가능하다. 

# python = "^3.9"
# openai = "^1.12.0"
# langchain = "^0.1.9"
# langchain-openai = "^0.0.8"
# faiss-cpu = "^1.7.4"
# datasets = "^2.18.0"
# pandas = "^2.2.1"
# numpy = "^1.26.4"
# tqdm = "^4.66.2"

 

아래와 같이 poetry add 명령어로 패키지를 설치할 수 있다. toml 을 이후 직접 수정할 수도 있는데, 그렇게 되면 4-1을 따르면 된다. 

4-1. toml 파일을 직접 수정한 경우, poetry lock 이 선행되어야 한다. 즉, 본인이 수정한 정보가 dependency 상 문제가 없어야 한다는 것이다. dependency 상 문제가 없으면 lock 파일이 생기고, 이제 poetry install 을 통해 toml 내 모든 패키지가 설치가 된다. 

poetry lock
poetry install

 

써 놓고 보니 별거 없는 사용기였지만 새로운 도구를 사용하는 것은 항상 어렵기에......새로운 환경에서 또 사용할 일이 있으면 참고하고자 작성해두었다. 

즐거운 개발생활이 되길 바라며:)

해당 블로그에는 백수 기간 중 생활 정리와 취준 기록, 그리고 공부한 논문들이나 기술 스택을 정리해볼 예정이다.
기술 부분은 깃헙 블로그에도 동일하게 업로드 할 예정이다.(물론 깃헙 블로그 올리는 방법은 까먹었다)

 

본디 블로그 운영을 해 볼 계획은 있었으나..업무에 치여 엄두도 못 내고 있던 와중, 퇴사하고 친구 블로그 염탐하다가 뽐뿌와서 나름 즉흥적으로 시작해본다. 

 

그럼 시작해볼까

 

+ Recent posts