<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Techbrad</title>
    <link>https://techbrad.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 24 Jun 2026 01:33:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>brad.min</managingEditor>
    <item>
      <title>Hugging Face Trainer를 활용한 LLM 학습 시 평가 단계에서 GPU 메모리 부족 해결 방법</title>
      <link>https://techbrad.tistory.com/125</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hugging Face의 &lt;code&gt;Trainer&lt;/code&gt; 클래스로 LLM(Large Language Model)을 학습할 때 자주 발생하는 문제 중 하나는 GPU 메모리 부족 현상입니다. 특히 학습 단계보다 평가(Evaluation) 단계에서 갑자기 GPU 메모리 사용량이 급격히 증가하며, 평가가 끝난 이후에도 메모리가 줄어들지 않고 계속 유지되어 결국 메모리 부족(OOM, Out of Memory)이 발생할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위한 두 가지 주요 방법을 소개하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;code&gt;preprocess_logits_for_metrics&lt;/code&gt; 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;preprocess_logits_for_metrics&lt;/code&gt;는 평가 단계에서 모델의 예측 결과인 logits를 사전 처리할 수 있도록 제공되는 파라미터입니다. 이를 통해 GPU 메모리를 효과적으로 관리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 logits를 CPU로 이동시키도록 설정하면 GPU 메모리에 불필요한 텐서가 남지 않게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;def preprocess_logits_for_metrics(logits, labels):
    return logits.detach().cpu()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 설정하면 평가 과정에서 logits가 GPU에서 즉시 CPU로 이동되어 GPU 메모리 사용을 줄일 수 있으며, 특히 &lt;code&gt;compute_metrics&lt;/code&gt; 함수에서 logits를 사용하는 경우 GPU가 아닌 CPU에서 연산을 수행하게 되어 GPU 메모리 부담을 크게 줄일 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;code&gt;eval_accumulation_steps&lt;/code&gt; 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 시 모든 예측 결과를 GPU에 쌓아두지 않고 일정 간격으로 CPU로 이동시키는 방법입니다. 이 방법은 특히 평가 데이터셋이 크거나, 모델이 크고 GPU 메모리가 제한적일 때 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 배치를 4로 설정하면 GPU는 평가 데이터를 4개의 미니배치 단위로 처리하게 됩니다. 각 미니배치에서 생성된 logits는 GPU 메모리에 임시로 저장되며, 4개의 미니배치 처리가 끝나면 logits는 GPU에서 CPU로 이동됩니다. 이렇게 하면 GPU 메모리에 과도한 데이터가 계속 쌓이는 것을 방지하고, 메모리 사용량을 효율적으로 관리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLWsZ6/btsNQF2CJqy/IsKodNxmpKXPEOS0nVkvuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLWsZ6/btsNQF2CJqy/IsKodNxmpKXPEOS0nVkvuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLWsZ6/btsNQF2CJqy/IsKodNxmpKXPEOS0nVkvuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLWsZ6%2FbtsNQF2CJqy%2FIsKodNxmpKXPEOS0nVkvuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로는 다음과 같이 설정할 수 있습니다:&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;
from transformers import Trainer, TrainingArguments

args = TrainingArguments(
    output_dir='./results',
    eval_accumulation_steps=4,  # GPU에서 4개의 미니배치마다 CPU로 이동
)

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    compute_metrics=compute_metrics,
    preprocess_logits_for_metrics=preprocess_logits_for_metrics,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;compute_metrics&lt;/code&gt; 함수는 평가 결과를 계산할 때 logits와 labels를 사용합니다. 이때 logits가 CPU로 옮겨진 상태에서 계산을 수행하면 GPU 메모리를 절약할 수 있습니다. 또한, &lt;code&gt;eval_accumulation_steps&lt;/code&gt;를 통해 메모리 사용을 효과적으로 관리하면 GPU 메모리가 부족해 평가가 중단되는 현상을 예방할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 가지 방법을 조합하여 사용하면 Hugging Face의 &lt;code&gt;Trainer&lt;/code&gt;로 LLM을 학습하거나 평가할 때 GPU 메모리를 효율적으로 관리할 수 있습니다. 특히 GPU 메모리 제한이 있는 환경에서는 이러한 설정이 필수적일 수 있습니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>AI &amp;amp; BigData/LLM</category>
      <category>compute_metrics</category>
      <category>eval_accumulation_steps</category>
      <category>huggingface</category>
      <category>llm</category>
      <category>OutOfMemory</category>
      <category>preprocess_logits_for_metrics</category>
      <category>trainer</category>
      <category>딥러닝메모리관리</category>
      <category>모델평가</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/125</guid>
      <comments>https://techbrad.tistory.com/125#entry125comment</comments>
      <pubDate>Sat, 10 May 2025 14:38:07 +0900</pubDate>
    </item>
    <item>
      <title>Unsloth FastLanguageModel을 활용한 고속 언어 모델 추론</title>
      <link>https://techbrad.tistory.com/124</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 대형 언어 모델(LLM)의 활용이 증가함에 따라, 이를 보다 효율적으로 로드하고 실행할 수 있는 다양한 기술이 주목받고 있습니다. 본 포스트에서는 &lt;code&gt;Unsloth&lt;/code&gt;의 &lt;code&gt;FastLanguageModel&lt;/code&gt;을 활용하여 &lt;code&gt;Meta-Llama-3.1-8B-Instruct&lt;/code&gt; 모델을 로드하고 추론하는 과정을 분석합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;환경 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 &lt;code&gt;Unsloth&lt;/code&gt; 라이브러리를 설치해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;!pip install unsloth&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, 필요한 모듈을 임포트하고 하이퍼파라미터를 설정합니다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from unsloth import FastLanguageModel
import torch

max_seq_length = 2048
dtype = None
load_in_4bit = True&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델 로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;FastLanguageModel.from_pretrained&lt;/code&gt;를 이용하여 사전 학습된 모델과 토크나이저를 로드합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=&quot;unsloth/Meta-Llama-3.1-8B-Instruct&quot;,
    max_seq_length=max_seq_length,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서 중요한 요소는 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;model_name&lt;/code&gt;: 사용할 사전 학습된 모델의 경로를 지정합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_seq_length&lt;/code&gt;: 모델이 처리할 최대 토큰 길이를 지정합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dtype&lt;/code&gt;: 데이터 타입을 설정하며, 기본값은 &lt;code&gt;None&lt;/code&gt;으로 설정되어 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;load_in_4bit&lt;/code&gt;: 모델을 4비트 양자화(quantization)하여 메모리 사용량을 줄입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;채팅 템플릿 적용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Llama-3.1 형식의 대화 템플릿을 적용하여 입력 형식을 맞춥니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from unsloth.chat_templates import get_chat_template

tokenizer = get_chat_template(
    tokenizer,
    chat_template=&quot;llama-3.1&quot;,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 모델이 일반적인 자연어 처리(NLP) 작업뿐만 아니라 대화형 AI에서도 적절하게 동작할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델을 추론 모드로 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 학습 모드가 아닌 추론 모드로 설정해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;FastLanguageModel.for_inference(model)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 설정하면 추가적인 메모리 최적화 및 성능 개선이 가능합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 처리 및 추론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모델이 추론할 수 있도록 입력을 준비합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,  # 생성 작업을 위한 프롬프트 추가
    return_tensors=&quot;pt&quot;,
).to(&quot;cuda&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;messages&lt;/code&gt;: 입력 메시지 리스트로, 사용자 질문과 시스템 응답을 포함할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tokenize=True&lt;/code&gt;: 입력을 토큰화합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add_generation_prompt=True&lt;/code&gt;: 생성형 모델을 위한 추가 프롬프트를 삽입합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;return_tensors=&quot;pt&quot;&lt;/code&gt;: PyTorch 텐서 형식으로 변환하여 CUDA에서 실행할 수 있도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델 생성 수행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모델을 통해 실제 텍스트 생성을 수행합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;outputs = model.generate(
    input_ids=inputs,
    max_new_tokens=300,
    use_cache=True,
    temperature=0.1
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 중요한 파라미터는 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;max_new_tokens=300&lt;/code&gt;: 최대 300개의 새로운 토큰을 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use_cache=True&lt;/code&gt;: 이전 결과를 캐시하여 속도를 향상시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;temperature=0.1&lt;/code&gt;: 낮은 값일수록 보수적인 응답을 생성하며, 높은 값일수록 창의적인 응답을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과 디코딩 및 출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 모델의 출력을 사람이 읽을 수 있는 텍스트로 변환합니다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;result = tokenizer.batch_decode(outputs)
print(result[0])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 통해 모델이 생성한 문장을 최종적으로 확인할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 포스트에서는 &lt;code&gt;Unsloth&lt;/code&gt;의 &lt;code&gt;FastLanguageModel&lt;/code&gt;을 활용하여 &lt;code&gt;Meta-Llama-3.1-8B-Instruct&lt;/code&gt; 모델을 로드하고 추론하는 과정을 살펴보았습니다. 4비트 양자화와 최적화된 채팅 템플릿을 활용하여 모델을 보다 효율적으로 실행할 수 있으며, 이를 통해 메모리 절약 및 성능 향상이 가능합니다.&lt;/p&gt;</description>
      <category>AI &amp;amp; BigData/LLM</category>
      <category>CUDA</category>
      <category>fastlanguagemodel</category>
      <category>llm</category>
      <category>metallama3.1</category>
      <category>pytorch</category>
      <category>unsloth</category>
      <category>양자화</category>
      <category>자연어처리</category>
      <category>최적화</category>
      <category>토큰화</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/124</guid>
      <comments>https://techbrad.tistory.com/124#entry124comment</comments>
      <pubDate>Sun, 16 Feb 2025 13:33:16 +0900</pubDate>
    </item>
    <item>
      <title>20250129 영어 회화 공부</title>
      <link>https://techbrad.tistory.com/123</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;주제 : How to make better decisions&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beGpMb/btsL2fjlcuQ/bJUsaNnSvIyZkcahrWhRx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beGpMb/btsL2fjlcuQ/bJUsaNnSvIyZkcahrWhRx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beGpMb/btsL2fjlcuQ/bJUsaNnSvIyZkcahrWhRx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeGpMb%2FbtsL2fjlcuQ%2FbJUsaNnSvIyZkcahrWhRx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1444&quot; height=&quot;879&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;영어 회화 표현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 왼쪽은 Abstract 해서 싫고 오른쪽 사진을 간단하게 설명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It &lt;b&gt;reminds&lt;/b&gt; me &lt;b&gt;of&lt;/b&gt; our past memories.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 가운데 사진을 선택했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;When I see these pictures, I finally &lt;b&gt;make my decisions&lt;/b&gt; &lt;b&gt;by instinct&lt;/b&gt;. I choose the one in the middle.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나의 결정한 것들을 짧게 소개하는 것에서 결혼에 대해 얘기했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I have been thinking of getting married for a while.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;She &lt;b&gt;was hesistant to&lt;/b&gt; get married.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;But I &lt;b&gt;convinced&lt;/b&gt; her &lt;b&gt;to&lt;/b&gt; get married.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;표현 및 단어장&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;by instinct : 본능적으로 직관적으로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;make decision, made up my mind : 결정하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;be hesistant to&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;convinced to : 설득하다 (확신을 주면서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무언가를 한지 너무 오래 되었다를 표현할 때 주로 나는 it's been a long time since ~ 를 사용하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I realized I haven't ~ for a long time. &lt;/b&gt;이 좀더 자연스러운 표현 같다.&lt;/p&gt;</description>
      <category>영어공부</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/123</guid>
      <comments>https://techbrad.tistory.com/123#entry123comment</comments>
      <pubDate>Sat, 1 Feb 2025 23:35:24 +0900</pubDate>
    </item>
    <item>
      <title>20250120 - 영어 표현 공부 (1)</title>
      <link>https://techbrad.tistory.com/121</link>
      <description>&lt;h1&gt;오늘의 표현&lt;/h1&gt;
&lt;h3&gt;&lt;strong&gt;1. come up with&lt;/strong&gt; – (해결책, 아이디어 등을) 생각해내다, 마련하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;Hey, we gotta come up with something fast for tomorrow&amp;#39;s presentation.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(우리 내일 프레젠테이션을 위해 빨리 뭔가를 마련해야 해.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. put together&lt;/strong&gt; – (이것저것 모아) 만들다, 준비하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;Yeah, I can put together some slides.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(응, 내가 슬라이드를 준비할 수 있어.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. work&lt;/strong&gt; – 되다, 작동하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;Does that work for you?&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(그거 괜찮아?)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;4. keep 사람 posted&lt;/strong&gt; – (진행 상황을) 계속 알려주다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;I&amp;#39;ll keep you posted on the progress.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(진행 상황을 계속 알려줄게.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;5. be stuck&lt;/strong&gt; – (안 좋은 상황에) 갇혀 꼼짝 못하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;I might be stuck in meetings this afternoon.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(오늘 오후에는 회의에 갇혀 꼼짝 못할 수도 있어.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;6. move&lt;/strong&gt; – (일정을) 조정하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;I&amp;#39;ll try to move things around.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(일정을 좀 조정해 볼게.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;7. let 사람 know&lt;/strong&gt; – (상황을) 알려주다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;Just let me know at your earliest convenience.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(편하실 때 알려줘.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;8. grab&lt;/strong&gt; – (급히) 사다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;Do you want me to grab some coffee on my way back?&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(돌아오는 길에 커피 사다 줄까?)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;9. figure out&lt;/strong&gt; – (곰곰이 생각해서) 알아내다, 해결하다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;I’ll figure out the final numbers in the meantime.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(그동안 내가 최종 수치를 정리할게.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;10. pick up&lt;/strong&gt; – (중단된 것을) 다시 계속하다, 사다&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;We can pick this up later.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(이따가 다시 이어서 하자.)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;11. I mean it&lt;/strong&gt; – 진심이야&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;&amp;quot;And thanks—I mean it.&amp;quot;&lt;/strong&gt;&lt;br&gt;  &lt;strong&gt;(고마워—진심이야.)&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;상황극&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Brad&lt;/strong&gt;: Hey, we gotta come up with something fast for tomorrow&amp;#39;s presentation. Any ideas?  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: Yeah, I can put together some slides, but we still need a strong opening. What do you think?  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brad&lt;/strong&gt;: Good point. Maybe we can start with a question to engage the audience. Does that work for you?  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: That works. Also, I&amp;#39;ll keep you posted on the progress. Could you check the data again?  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brad&lt;/strong&gt;: Sure, but I might be stuck in meetings this afternoon. I&amp;#39;ll try to move things around.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: No worries. Just let me know at your earliest convenience.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brad&lt;/strong&gt;: Got it. By the way, do you want me to grab some coffee on my way back?  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: That’d be great! I’ll figure out the final numbers in the meantime.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brad&lt;/strong&gt;: Alright, I’ll go pick up some coffee and we can pick this up later.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: Sounds good! And thanks—I mean it.  &lt;/p&gt;
&lt;h1&gt;상황극 해석&lt;/h1&gt;
&lt;p&gt;Brad: 헤이, 우리 내일 프레젠테이션을 위해 빨리 뭔가를 생각해내야 해. 좋은 아이디어 있어?  &lt;/p&gt;
&lt;p&gt;Me: 응, 내가 슬라이드를 준비할 수는 있어. 하지만 강한 오프닝이 아직 필요해. 어떻게 생각해?  &lt;/p&gt;
&lt;p&gt;Brad: 좋은 지적이야. 청중을 끌어들이기 위해 질문으로 시작하는 건 어떨까? 괜찮아?  &lt;/p&gt;
&lt;p&gt;Me: 좋아. 그리고 진행 상황은 계속 알려줄게. 데이터 다시 확인해 줄 수 있어?  &lt;/p&gt;
&lt;p&gt;Brad: 물론이지. 그런데 오늘 오후에는 회의가 많아서 꼼짝 못할 수도 있어. 일정을 좀 조정해 볼게.  &lt;/p&gt;
&lt;p&gt;Me: 괜찮아. 편하실 때 알려줘.  &lt;/p&gt;
&lt;p&gt;Brad: 알겠어. 그런데 돌아오는 길에 커피 사다 줄까?  &lt;/p&gt;
&lt;p&gt;Me: 그러면 너무 좋지! 그동안 내가 최종 수치를 정리할게.  &lt;/p&gt;
&lt;p&gt;Brad: 좋아, 커피 사오고 나서 다시 이어서 하자.  &lt;/p&gt;
&lt;p&gt;Me: 좋아! 그리고 고마워—진심이야.&lt;/p&gt;</description>
      <category>MyStory</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/121</guid>
      <comments>https://techbrad.tistory.com/121#entry121comment</comments>
      <pubDate>Mon, 20 Jan 2025 23:06:27 +0900</pubDate>
    </item>
    <item>
      <title>[이직준비] 포티투닷 LLM Engineer (AI Agent) 1차 면접 후기</title>
      <link>https://techbrad.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포티투닷에서 LLM 엔지니어 포지션이 열려서 지원을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 간단한 전화 스크리닝이 진행되었고 코딩테스트 2문제를 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나서 아래와 같이 면접 AI Agent 포지션에 면접을 볼 수 있는 기회를 얻었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZvdSi/btsLDdfLdde/64AVzKmmM4apfTwlwhOvGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZvdSi/btsLDdfLdde/64AVzKmmM4apfTwlwhOvGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZvdSi/btsLDdfLdde/64AVzKmmM4apfTwlwhOvGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZvdSi%2FbtsLDdfLdde%2F64AVzKmmM4apfTwlwhOvGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1362&quot; height=&quot;760&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;면접 시간은 총 1시간 정도 보았으며 개인 기본 이력, 프로젝트 관련 경험, 회사 생활 순서로 면접을 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 생활을 묻는 질문에서 많이 절었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;본인에게 잘 맞는 리더스타일?&quot; 과 같은 질문은 사실 깊이 생각해보지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 계기로 나에 대해 다시 한번 생각해보고 성과를 내기 위해 나와 맞는 사람이 어떤 사람인지 내가 어떤 역할을 잘 수행해 낼 수 있는지에 대해 생각해봐야겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 탈락이지만 좋은 경험이였고 회사에 나를 맞추는 것이 아닌 나에게 맞는 회사를 찾기 위해 내 자신이 누구인지 알려고 하는 노력이 우선시 되어야 한다는 것을 느낄 수 있었다.&lt;/p&gt;</description>
      <category>MyStory</category>
      <category>1차면접</category>
      <category>agent</category>
      <category>Ai</category>
      <category>llm</category>
      <category>포티투닷</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/120</guid>
      <comments>https://techbrad.tistory.com/120#entry120comment</comments>
      <pubDate>Sun, 19 Jan 2025 15:24:42 +0900</pubDate>
    </item>
    <item>
      <title>20241230 영어 공부 feat. On-device LLM</title>
      <link>https://techbrad.tistory.com/117</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step1. 준비 없이 스피킹 해보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thesedays, they're a lots of comprehensive frameworks well designed to develop and apply model to ai application.&amp;nbsp; Reducing parameter in the model results in lesser expensive training and inference resources and there are more benefits like a dramatic reduction in the latency and real-time interactions with application regardless of network conditions.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step2. 인풋을 통해 실력 업그레이드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인풋글: &lt;a href=&quot;https://www.qualcomm.com/news/onq/2024/04/multimodal-generative-ai-tech-driving-enhanced-on-device-generative-ai-experiences&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.qualcomm.com/news/onq/2024/04/multimodal-generative-ai-tech-driving-enhanced-on-device-generative-ai-experiences&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;Although&lt;/b&gt; generative artificial intelligence (AI) is already showing emergent and transformational capabilities, &lt;b&gt;there is still much room for improvement.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;We showed Large Language and Vision Assistant (LLaVA), a more than 7 billion-parameter LLM that &lt;b&gt;can accept multiple types of data inputs, including text and images, and generate multi-turn conversations about an image&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Making AI models that &lt;b&gt;better understand contextual information&lt;/b&gt; is necessary for better answers and improved experiences, and multimodal generative AI is just &lt;b&gt;one of the latest transformative technologies coming soon to your next device.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;We are excited to see visual, voice and audio modalities already &lt;b&gt;being enabled through on-device LLMs&lt;/b&gt; &lt;b&gt;and look forward to even more modalities being added.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;b&gt;Consumers want devices to automatically use contextual information and custom preferences&lt;/b&gt; from their smartphones&amp;rsquo; data and sensors to make experiences more intuitive and seamless, like suggesting restaurants for a meal based on current location, time of day and preferred food choices&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step3. 학습&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://techbrad.tistory.com/116&quot;&gt;https://techbrad.tistory.com/116&lt;/a&gt; [Techbrad:티스토리]&lt;/p&gt;</description>
      <category>영어공부</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/117</guid>
      <comments>https://techbrad.tistory.com/117#entry117comment</comments>
      <pubDate>Mon, 30 Dec 2024 22:54:36 +0900</pubDate>
    </item>
    <item>
      <title>20241208 영어 공부 feat. On-device LLM</title>
      <link>https://techbrad.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2024년 12월 28일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step1. 준비 없이 스피킹 해보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;so my on-device LNM has a huge memory, so it needed to be loaded on big memory size. So it's not used for just for the mobile and endpoint device. Although the size of the LNM is huge, the performance is very good. So there are a lot of tasks to make it smaller. Yes, if it becomes smaller, the performance is getting low. So people try to make small size LNM and keep the performance in the same level as it was&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step2. 인풋을 통해 실력 업그레이드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인풋글: &lt;a href=&quot;https://medium.com/state-of-the-art-technology/the-edge-of-intelligence-navigating-the-shift-to-on-device-llms-cbb5368dbdd0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/state-of-the-art-technology/the-edge-of-intelligence-navigating-the-shift-to-on-device-llms-cbb5368dbdd0&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;Reducing the parameters in the model &lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;results in&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;lesser expensive training and inferen&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;ce&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;less powerful devices&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;Companies are playing with Smaller models&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;in terms of their parameters, memory, and MMLU benchmark performance&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;a comprehensive framework designed to&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;starting next year&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;real-time interactions&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;with AI applications&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;the dramatic reduction in latency&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;making technology more accessible and consistent in performance regardless of network conditions&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step3. 학습&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>영어공부</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/116</guid>
      <comments>https://techbrad.tistory.com/116#entry116comment</comments>
      <pubDate>Sun, 29 Dec 2024 11:30:59 +0900</pubDate>
    </item>
    <item>
      <title>영어 회화 공부 Start</title>
      <link>https://techbrad.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20대에 편입 공부를 하면서 영어 문법이나 단어 공부를 많이 했다. 하지만 회화... 미국 어학연수를 1년 반정도 갔다왔고 나름 열심히 사람을 만나면서 회화를 했지만 어느 순간 성장의 정체가 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국에서 실제 영어를 많이 사용할 일이 없어 더욱 실력이 하락하고 있는데 이대로는 안될 것 같다. 그리고 AI 분야에서 기술력 만으로는 너무 잘하는 사람들이 널렸기 때문에 나만의 경쟁력이 없다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 개인 시간에 영어 회화 공부를 틈틈히 하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 유투브의 영어 회화 공부법이 나에게 맞을 것 같아서 정리해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=rwD8sZUCpuk&amp;amp;list=PLYnw_nw3Kn_1N3IRBQf0ketkxfB3sdGWh&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/tmytc/hyXSyka10S/kSx53oHmEvGZ73mkFzSpQ0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=134_202_318_404,https://scrap.kakaocdn.net/dn/eT7qW/hyXSAPNZSe/keFX9bBhJx5Xt3lTpd4WU1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=134_202_318_404&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;미국 특수 외교관들이 외국어를 빠르게 배우는 특별한 방법 알려드릴게요 [300 project]&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/rwD8sZUCpuk&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FSI 훈련법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1주일 동안 한가지 주제로 학습하기!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step1. 준이 없이 스피킹 해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 선택한 주제에 대해서 내가 할 수 있는 만큼 최대한 오래 나만의 실력으로 스피킹 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step2. 인풋을 통해 실력 업그레이드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 선정한 주제와 관련된 웹 사이트늬 아티클을 찾는다. 나는 AI 기술 관련 아티클을 찾아보려고 한다. 아티클을 읽으며 관심있는 표현 부분을 정리한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step3. 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리한 것을 암기하며 학습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Step1 부터 Step3 까지 반복한다.&lt;/p&gt;</description>
      <category>영어공부</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/115</guid>
      <comments>https://techbrad.tistory.com/115#entry115comment</comments>
      <pubDate>Sat, 28 Dec 2024 15:56:44 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 등굣길 문제 풀이: BFS와 DP의 비교 - 파이썬</title>
      <link>https://techbrad.tistory.com/114</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;등굣길 문제 풀이: BFS와 DP의 비교&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 학교에서는 학생들이 집에서 학교로 갈 때, ( m \times n ) 크기의 격자 모양 마을을 지나야 합니다. 학생들은 &lt;b&gt;오른쪽&lt;/b&gt; 또는 &lt;b&gt;아래쪽&lt;/b&gt;으로만 이동할 수 있으며, 일부 칸에는 &lt;b&gt;물웅덩이&lt;/b&gt;가 있어 지나갈 수 없습니다. 좌측 상단 ( (1,1) )에서 우측 하단 ( (m,n) )까지 갈 수 있는 &lt;b&gt;최단 경로의 수&lt;/b&gt;를 구하세요. 결과는 ( 1,000,000,007 )로 나눈 나머지를 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;격자의 크기 ( m )과 ( n )은 ( 1 ) 이상 ( 100 ) 이하인 자연수입니다.&lt;/li&gt;
&lt;li&gt;물웅덩이는 ( 0 )개 이상이며, 위치는 ([x, y]) 형태로 주어집니다.&lt;/li&gt;
&lt;li&gt;시작점과 도착점은 물웅덩이가 아닙니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;m&lt;/th&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;th&gt;puddles&lt;/th&gt;
&lt;th&gt;result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;[[2, 2]]&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;BFS 풀이&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from collections import deque

# BFS 풀이
def solution(m, n, puddles):
    answer = 0
    queue = deque()
    visited = [[0 for _ in range(0, m+1)] for _ in range(0, n+1)]
    path = [[0 for _ in range(0, m+1)] for _ in range(0, n+1)]
    def bfs(start):
        queue.append(start)
        x, y = start[0], start[1]
        visited[y][x] = 1
        path[1][1] = 1
        while queue:
            x, y = queue.popleft()
            for i, j in [(1, 0), (0, 1)]:
                ni, nj = x+i, y+j
                if 0 &amp;lt;= ni &amp;lt; m+1 and 0 &amp;lt;= nj &amp;lt; n+1:
                    if [ni, nj] not in puddles:
                        if visited[nj][ni] == 0:
                            queue.append((ni, nj))
                            visited[nj][ni] = visited[y][x] + 1
                            path[nj][ni] = path[y][x]
                        elif visited[nj][ni] == visited[y][x] + 1:
                            path[nj][ni] = (path[nj][ni] + path[y][x]) % 1000000007
    bfs((1,1))
    answer = path[n][m]
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;탐색 방법&lt;/b&gt;: BFS를 사용하여 최단 거리를 우선으로 탐색합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 구조&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;queue&lt;/code&gt;: 다음에 탐색할 좌표를 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visited&lt;/code&gt;: 해당 위치까지의 최단 거리를 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;path&lt;/code&gt;: 해당 위치까지의 최단 경로 수를 저장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동작 과정&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시작점 ( (1,1) )에서 BFS를 시작합니다.&lt;/li&gt;
&lt;li&gt;현재 위치에서 오른쪽과 아래쪽으로 이동할 수 있는지 확인합니다.&lt;/li&gt;
&lt;li&gt;이동 가능한 위치라면, 그 위치까지의 최단 경로 수를 업데이트합니다.&lt;/li&gt;
&lt;li&gt;이미 방문한 위치라도 최단 거리가 같다면 경로 수를 누적합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간 및 공간 복잡도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;: ( O(mn) )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 노드를 최대 한 번씩 방문하므로 격자의 크기에 비례합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공간 복잡도&lt;/b&gt;: ( O(mn) )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;visited&lt;/code&gt;와 &lt;code&gt;path&lt;/code&gt; 배열을 사용하여 공간을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DP 풀이&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# DP 풀이
def solution2(m, n, puddles):
    dp = [[0] * (m+1) for _ in range(n+1)]
    dp[1][1] = 1
    for y in range(1, n+1):
        for x in range(1, m+1):
            if [x, y] in puddles:
                dp[y][x] = 0
                continue
            if x &amp;gt; 1:
                dp[y][x] += dp[y][x - 1] % 1000000007
            if y &amp;gt; 1:
                dp[y][x] += dp[y - 1][x] % 1000000007
    return dp[n][m] % 1000000007&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;탐색 방법&lt;/b&gt;: 동적 프로그래밍(DP)을 사용하여 이전 상태를 기반으로 현재 상태를 계산합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 구조&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;dp[y][x]&lt;/code&gt;: 위치 ( (x, y) )까지의 최단 경로 수를 저장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동작 과정&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시작점 ( (1,1) )에서 경로 수를 1로 초기화합니다.&lt;/li&gt;
&lt;li&gt;각 칸을 탐색하며, 물웅덩이인 경우 0으로 설정합니다.&lt;/li&gt;
&lt;li&gt;그렇지 않은 경우, 왼쪽 칸과 위쪽 칸의 경로 수를 더합니다.&lt;/li&gt;
&lt;li&gt;계산된 경로 수를 현재 위치에 저장합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간 및 공간 복잡도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;: ( O(mn) )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이중 반복문을 사용하여 격자의 모든 칸을 방문합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공간 복잡도&lt;/b&gt;: ( O(mn) )
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;dp&lt;/code&gt; 배열을 사용하여 공간을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;두 가지 풀이의 비교&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;비교 항목&lt;/th&gt;
&lt;th&gt;BFS 풀이&lt;/th&gt;
&lt;th&gt;DP 풀이&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;( O(mn) )&lt;/td&gt;
&lt;td&gt;( O(mn) )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;공간 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;( O(mn) )&lt;/td&gt;
&lt;td&gt;( O(mn) )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;실제 성능&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;상대적으로 느림&lt;/td&gt;
&lt;td&gt;상대적으로 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;코드 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;비교적 복잡&lt;/td&gt;
&lt;td&gt;비교적 간단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;그래프 탐색 활용&lt;/td&gt;
&lt;td&gt;이전 결과 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시간 및 공간 복잡도&lt;/b&gt;: 두 풀이 모두 동일하지만, BFS는 큐의 사용으로 인해 오버헤드가 발생할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제 성능&lt;/b&gt;: DP 풀이가 배열 접근만으로 이루어져 있어 더 빠릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드 복잡도&lt;/b&gt;: BFS는 여러 조건문과 자료 구조를 사용하여 복잡하지만, DP는 단순한 배열 계산으로 구현됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등굣길 문제에서는 DP 풀이가 BFS 풀이에 비해 시간적, 공간적 효율성이 더 좋으며, 코드도 간결합니다. 최단 경로의 수를 구하는 문제에서는 이전 결과를 활용하는 DP 접근법이 효과적입니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Programming/코딩테스트</category>
      <category>등굣길</category>
      <category>프로그래머스</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/114</guid>
      <comments>https://techbrad.tistory.com/114#entry114comment</comments>
      <pubDate>Sun, 1 Dec 2024 12:19:51 +0900</pubDate>
    </item>
    <item>
      <title>2024년 회고를 하며.. 2025년 목표</title>
      <link>https://techbrad.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 2024년 12월이네..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2023년에 세운 목표를 하나씩 살펴보자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 생성형 AI를 활용한 개발을 하는 큰기업의 직무로 이직.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;큰 기업은 이직은 실패했다. 대신 생성형 AI 프로젝트에 투입하여 내년 1월까지 진행예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 결혼 준비.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;착실하게 잘 진행되고 있다. 프로포즈는 여러 사정때문에 미뤄졌다. 이번 해에는 마무리 할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이제 식이 얼마 남지 않아 근력 운동에 조금 더 신경을 쓰자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 여행.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;나트랑, 방콕, 제주도를 갔다왔다. 친구가 제주도에서 아이폰을 바다에 빠뜨렸는데 나의 포기하지 않은 불굴의 정신으로 20분 만에 찾았다 ㅋㅋ 20분 동안 바닷물에서도 아무 고장 없이 버텼던 아이폰의 기술력에 박수를 보낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 주변 지인들 챙기기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;나름 최선을 다해 챙기긴 했다. 하지만 이직 준비와 공부를 꾸준히 하면서 할애할 수 있는 시간이 그리 많지 않았지만 그런 기회가 있을때 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024년은 나에게 어떤 해였을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024년에 했던 것들&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 대학원 졸업&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 예식장, 예촬, 신혼여행 예약 거의 다 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 계약직 LLM 프로젝트 참여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 몇 번의 면접&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 후방 십자 인대 부분 파열 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 함치성 낭종 발견하여 긴급 사랑니 수술&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대학원을 졸업하고 순탄할 것 같던 이직은 그리 쉽지 않았다. 10% 정도의 서류합격만 되고 나머지는 전부 탈락이였다. 면접도 3번 정도 봤지만 1차에서 전부 탈락이였다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 도전적으로 했던 것이 있는데 정규직을 포기하고 계약직으로 LLM 프로젝트에 참여했다. 내가 하고 싶은 프로젝트를 위해 계약직을 처음 도전해보았다. 대기업 데이터 분석팀과 함께 하는 프로젝트인데 역시 대기업이라 GPU 자원이 빵빵한 점이 가장 좋았다. 도전을 하지 않았더라면 이런 기회를 얻지 못했을 거라고 생각해서 잘한 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결혼 준비 착착 진행을 너무 잘하고 있다. 한번의 위기? 가 있었지만 나의 진심 어린 사죄의 눈물로 모면할 수 있었다. 인연이 얼마나 소중한 것인지 알게된 경험이였다. 위기를 넘어 지금은 아주 순탄하게 진행 중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 년도 초에 후방 십자 인대 부분 파열이 됐다. 축구하다가 나가는 패스를 잡으려고 뛰다가 혼자 미끄러져서 무릎을 땅에 박았다. 진짜 왜 혼자 전력질주 해가지고.. 수술은 하지 않았고 현재는 조심히 실내 자전거를 타고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후방 십자 인대 부분 파열에 이어 사랑니까지 말썽이였다. 사랑니 앞에 염증이 생기는 함치성 낭종이 크게 생겨서 턱뼈를 녹이고 앞에 치아 뿌리까지 녹였다. 처음에는 너무 당황했고 턱 피부에 감각이 20% 정도 밖에 느껴지지 않았다. 무서워서 수술 가능한 병원을 찾았지만 최소 한달 이상은 기다려야했다. 하지만 포기하지 않고 인터넷을 검색하여 신촌 라이*치과 병원에서 바로 수술을 진행했다. 의사 선생님이 그때는 누구보다 멋져보였다. 지금은 수술을 잘 끝내고 회복중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2025년 목표 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 결혼 마무리 잘하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 자산 소득 세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 테니스 or 골프 배우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 복지가 좋거나 재택 되는 곳으로 이직 준비&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 영어 회화 공부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 일주일에 2번 코딩테스트 문제 풀기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년에는 나에게 가장 큰 이벤트인 결혼이 있다. 우선 순위를 결혼에 두고 2025년을 보내겠다. 이제 나에게 30대도 얼마 남지 않았구나~&lt;/p&gt;</description>
      <category>MyStory</category>
      <category>2025년 목표</category>
      <author>brad.min</author>
      <guid isPermaLink="true">https://techbrad.tistory.com/113</guid>
      <comments>https://techbrad.tistory.com/113#entry113comment</comments>
      <pubDate>Sun, 1 Dec 2024 12:12:48 +0900</pubDate>
    </item>
  </channel>
</rss>