<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>The Sunny</title>
    <link>https://citykid.tistory.com/</link>
    <description>http://www.thesunny.kr (서니패션)</description>
    <language>ko</language>
    <pubDate>Sat, 23 May 2026 02:51:11 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>서니짱</managingEditor>
    <image>
      <title>The Sunny</title>
      <url>https://t1.daumcdn.net/cfile/tistory/200B670E4B6A0C1770</url>
      <link>https://citykid.tistory.com</link>
    </image>
    <item>
      <title>추천 알리고리즘</title>
      <link>https://citykid.tistory.com/43</link>
      <description>&lt;h1 data-end=&quot;155&quot; data-start=&quot;115&quot;&gt;1) 회원가입 시 및 운영 중 추가로 수집할 데이터 (필수 + 권장)&lt;/h1&gt;
&lt;p data-end=&quot;196&quot; data-start=&quot;156&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목적:&lt;/b&gt; 개인 성향 파악, 콜드스타트 해소, 모델 입력(특성) 확보&lt;/p&gt;
&lt;h2 data-end=&quot;207&quot; data-start=&quot;198&quot; data-ke-size=&quot;size26&quot;&gt;필수(最低)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;775&quot; data-start=&quot;208&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;280&quot; data-start=&quot;208&quot;&gt;&lt;b&gt;회원 기본정보&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;280&quot; data-start=&quot;224&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;280&quot; data-start=&quot;224&quot;&gt;user_id (PK), 가입일, 지역(도시 단위), 언어, 연령대(또는 생년월일), 성별(선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;380&quot; data-start=&quot;281&quot;&gt;&lt;b&gt;초기 관심사(onboarding)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;380&quot; data-start=&quot;308&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;353&quot; data-start=&quot;308&quot;&gt;카테고리 체크박스(예: 기술 / 문화 / 취미 / 뉴스 / 게임 / 유머 등)&lt;/li&gt;
&lt;li data-end=&quot;380&quot; data-start=&quot;356&quot;&gt;선호 포맷(글/이미지/동영상/짧은글 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;581&quot; data-start=&quot;381&quot;&gt;&lt;b&gt;뷰 로그 (event stream)&lt;/b&gt; &amp;mdash; 중요
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;581&quot; data-start=&quot;416&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;581&quot; data-start=&quot;416&quot;&gt;event_id, user_id, content_id, event_type (view, click, upvote, comment, share, dwell/read_time, scroll_depth), timestamp, device, session_id, referrer (추천&amp;middot;검색&amp;middot;홈 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;775&quot; data-start=&quot;582&quot;&gt;&lt;b&gt;콘텐츠 메타&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;775&quot; data-start=&quot;597&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;775&quot; data-start=&quot;597&quot;&gt;content_id, author_id, title, body_text, tags, category, created_at, language, media_type, length(글자수/재생시간), popularity_score (like_count, comment_count), explicit_flag(노골적/광고)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;793&quot; data-start=&quot;777&quot; data-ke-size=&quot;size26&quot;&gt;권장(성능 개선에 유용)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1089&quot; data-start=&quot;794&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;845&quot; data-start=&quot;794&quot;&gt;&lt;b&gt;사용자 행태 추가&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;845&quot; data-start=&quot;812&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;845&quot; data-start=&quot;812&quot;&gt;시간대 선호 (주간/야간), 세션 길이, 반복 방문 패턴&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;891&quot; data-start=&quot;846&quot;&gt;&lt;b&gt;소셜/관계&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;891&quot; data-start=&quot;860&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;891&quot; data-start=&quot;860&quot;&gt;팔로우/친구 관계, 좋아요한 사용자 목록(익명 집계)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;953&quot; data-start=&quot;892&quot;&gt;&lt;b&gt;콘텐츠 임베딩&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;953&quot; data-start=&quot;908&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;953&quot; data-start=&quot;908&quot;&gt;텍스트 임베딩(BERT/TF-IDF), 이미지 임베딩, 오디오/비디오 특징벡터&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;996&quot; data-start=&quot;954&quot;&gt;&lt;b&gt;저작권/품질 지표&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;996&quot; data-start=&quot;972&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;996&quot; data-start=&quot;972&quot;&gt;신고/블락 여부, 리뷰 품질(스팸 점수)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1089&quot; data-start=&quot;997&quot;&gt;&lt;b&gt;노출&amp;middot;피드백 로그&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1089&quot; data-start=&quot;1015&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1089&quot; data-start=&quot;1015&quot;&gt;어떤 추천 슬롯에 어떤 content_id를 노출했는지(노출 로그: impression), 노출후 행동(click, view 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1094&quot; data-start=&quot;1091&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1125&quot; data-start=&quot;1096&quot;&gt;2) 추천 시스템 전체 아키텍처(핵심 파이프라인)&lt;/h1&gt;
&lt;p data-end=&quot;1250&quot; data-start=&quot;1126&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 스타일은 크게 &lt;b&gt;(A) 후보 생성(Candidate Generation)&lt;/b&gt; &amp;rarr; &lt;b&gt;(B) 랭킹(Ranking)&lt;/b&gt; &amp;rarr; &lt;b&gt;(C) 리랭킹 / 개인화 후처리(Re-ranking / Re-Rank)&lt;/b&gt; 로 구성됩니다.&lt;/p&gt;
&lt;h2 data-end=&quot;1276&quot; data-start=&quot;1252&quot; data-ke-size=&quot;size26&quot;&gt;A. 후보 생성 (대량 &amp;rarr; 소량 축소)&lt;/h2&gt;
&lt;p data-end=&quot;1322&quot; data-start=&quot;1277&quot; data-ke-size=&quot;size16&quot;&gt;목적: 전체 콘텐츠(수백만~수억)에서 &lt;b&gt;수백~수천&lt;/b&gt;개 후보만 뽑아오도록 효율화&lt;/p&gt;
&lt;p data-end=&quot;1336&quot; data-start=&quot;1324&quot; data-ke-size=&quot;size16&quot;&gt;방법(혼합 전략 권장)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1860&quot; data-start=&quot;1337&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1491&quot; data-start=&quot;1337&quot;&gt;&lt;b&gt;사용자 기반 후보&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1491&quot; data-start=&quot;1357&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1440&quot; data-start=&quot;1357&quot;&gt;최근 본/좋아요한 콘텐츠의 &lt;b&gt;유사 아이템&lt;/b&gt; (item-item nearest neighbors via embedding or co-watch)&lt;/li&gt;
&lt;li data-end=&quot;1491&quot; data-start=&quot;1444&quot;&gt;예: item2vec 또는 content embedding cosine top-K&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1605&quot; data-start=&quot;1492&quot;&gt;&lt;b&gt;협업필터링 기반&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1605&quot; data-start=&quot;1511&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1605&quot; data-start=&quot;1511&quot;&gt;Matrix Factorization (ALS), 또는 최근엔 &lt;b&gt;근거리 임베딩 기반(특히 two-tower)&lt;/b&gt; 에서 사용자 임베딩과 아이템 임베딩 유사도 상위 K&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1680&quot; data-start=&quot;1606&quot;&gt;&lt;b&gt;세션&amp;middot;순차 기반 후보&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1680&quot; data-start=&quot;1628&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1680&quot; data-start=&quot;1628&quot;&gt;마지막 N개 콘텐츠와 연관성이 높은 다음 아이템(서열 모델: GRU4Rec, SASRec)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1750&quot; data-start=&quot;1681&quot;&gt;&lt;b&gt;인기&amp;middot;신규&amp;middot;트렌드&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1750&quot; data-start=&quot;1701&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1750&quot; data-start=&quot;1701&quot;&gt;전체&amp;middot;지역별 인기 콘텐츠, 최근 상승중인 콘텐츠 (real-time trending)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1813&quot; data-start=&quot;1751&quot;&gt;&lt;b&gt;탐색용(serendipity)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1813&quot; data-start=&quot;1778&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1813&quot; data-start=&quot;1778&quot;&gt;랜덤 / diversity pool (탐사 비율 5~15%)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1860&quot; data-start=&quot;1814&quot;&gt;&lt;b&gt;스팟라이트 / 광고 / 스폰서&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1860&quot; data-start=&quot;1841&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1860&quot; data-start=&quot;1841&quot;&gt;비즈니스 정책에 따른 후보 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-end=&quot;1908&quot; data-start=&quot;1862&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1908&quot; data-start=&quot;1864&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&lt;/b&gt; user_id &amp;rarr; 후보 리스트 (보통 200~2000개) 를 생성&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;1913&quot; data-start=&quot;1910&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1948&quot; data-start=&quot;1915&quot; data-ke-size=&quot;size26&quot;&gt;B. 랭킹 (모델로 최종 점수 계산, Top-K 반환)&lt;/h2&gt;
&lt;p data-end=&quot;1987&quot; data-start=&quot;1949&quot; data-ke-size=&quot;size16&quot;&gt;목적: 후보 중 최종 Top-N(예: 10~20)을 골라 UI로 노출&lt;/p&gt;
&lt;h3 data-end=&quot;2003&quot; data-start=&quot;1989&quot; data-ke-size=&quot;size23&quot;&gt;모델 구성 (추천)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2429&quot; data-start=&quot;2004&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2068&quot; data-start=&quot;2004&quot;&gt;&lt;b&gt;1차(대중적) Baseline:&lt;/b&gt; LightGBM/ XGBoost로 CTR 예측 (feature-rich)&lt;/li&gt;
&lt;li data-end=&quot;2210&quot; data-start=&quot;2069&quot;&gt;&lt;b&gt;2차(고성능) Neural:&lt;/b&gt; Two-tower (user tower / item tower) + Ranking head (dot / MLP)&lt;br /&gt;또는 &lt;b&gt;Sequence-aware&lt;/b&gt; 모델 (SASRec/GRU4Rec)로 시퀀스 특성 반영&lt;/li&gt;
&lt;li data-end=&quot;2305&quot; data-start=&quot;2211&quot;&gt;&lt;b&gt;CTR/Engagement 멀티태스크&lt;/b&gt;: 클릭확률(CTR) + 체류시간(WatchTime) + 좋아요 확률을 동시에 예측 (multi-task learning)&lt;/li&gt;
&lt;li data-end=&quot;2429&quot; data-start=&quot;2306&quot;&gt;&lt;b&gt;Loss:&lt;/b&gt; binary cross-entropy (CTR), regression loss for watch_time (MSE) or poisson, 또는 pairwise loss (BPR) for ranking&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2443&quot; data-start=&quot;2431&quot; data-ke-size=&quot;size23&quot;&gt;입력 피처 예시&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2873&quot; data-start=&quot;2444&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2555&quot; data-start=&quot;2444&quot;&gt;&lt;b&gt;사용자 측(고정):&lt;/b&gt; user_id 임베딩, age_group, region, preferred_categories (one-hot), long-term interests(embedding)&lt;/li&gt;
&lt;li data-end=&quot;2628&quot; data-start=&quot;2556&quot;&gt;&lt;b&gt;사용자 측(세션):&lt;/b&gt; last_N_contents embeddings, session_length, time_of_day&lt;/li&gt;
&lt;li data-end=&quot;2727&quot; data-start=&quot;2629&quot;&gt;&lt;b&gt;콘텐츠 측:&lt;/b&gt; content_id embedding, category, tags, text_embedding(BERT), author_popularity, length&lt;/li&gt;
&lt;li data-end=&quot;2830&quot; data-start=&quot;2728&quot;&gt;&lt;b&gt;상호작용 측:&lt;/b&gt; time_since_last_view_of_same_tag, frequency_of_tag_in_past_7d, impression_count_last_24h&lt;/li&gt;
&lt;li data-end=&quot;2873&quot; data-start=&quot;2831&quot;&gt;&lt;b&gt;노출&amp;middot;문맥:&lt;/b&gt; slot_position, source (추천/검색)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2881&quot; data-start=&quot;2875&quot; data-ke-size=&quot;size23&quot;&gt;출력&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2984&quot; data-start=&quot;2882&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2969&quot; data-start=&quot;2882&quot;&gt;예측 점수(s): 결합 점수 = &amp;alpha;&amp;middot;CTR + &amp;beta;&amp;middot;WatchTimeNormalized + &amp;gamma;&amp;middot;DiversityPenalty + business_boost&lt;/li&gt;
&lt;li data-end=&quot;2984&quot; data-start=&quot;2970&quot;&gt;상위 N을 UI로 보냄&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2989&quot; data-start=&quot;2986&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;3026&quot; data-start=&quot;2991&quot; data-ke-size=&quot;size26&quot;&gt;C. 리랭킹 / 후처리 (비즈니스 룰 + 다양성 + 필터)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3240&quot; data-start=&quot;3027&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3063&quot; data-start=&quot;3027&quot;&gt;&lt;b&gt;컷오프 필터:&lt;/b&gt; 이미 본 콘텐츠 재노출 정책(기간 기준)&lt;/li&gt;
&lt;li data-end=&quot;3106&quot; data-start=&quot;3064&quot;&gt;&lt;b&gt;다양성 엔진:&lt;/b&gt; 동일 카테고리 연속 노출 방지, 저자 과도편중 방지&lt;/li&gt;
&lt;li data-end=&quot;3148&quot; data-start=&quot;3107&quot;&gt;&lt;b&gt;신선도/유해콘텐츠 룰:&lt;/b&gt; 신고 많거나 정책 위반 의심은 노출 감소&lt;/li&gt;
&lt;li data-end=&quot;3205&quot; data-start=&quot;3149&quot;&gt;&lt;b&gt;탐색 vs 개인화 비율 제어:&lt;/b&gt; e-greedy 또는 UCB/bandit으로 탐험 비율 조정&lt;/li&gt;
&lt;li data-end=&quot;3240&quot; data-start=&quot;3206&quot;&gt;&lt;b&gt;스왑/블렌드:&lt;/b&gt; 유료&amp;middot;스폰서 콘텐츠를 일정 비율 삽입&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;3245&quot; data-start=&quot;3242&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3289&quot; data-start=&quot;3247&quot;&gt;3) 구체적 구현 예시(데이터 스키마 + 샘플 쿼리 + 모델 입출력 예)&lt;/h1&gt;
&lt;h2 data-end=&quot;3304&quot; data-start=&quot;3291&quot; data-ke-size=&quot;size26&quot;&gt;DB 테이블(간단)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;-- users&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; users ( user_id &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;PRIMARY&lt;/span&gt;&lt;/span&gt;&lt;span&gt; KEY, created_at &lt;/span&gt;&lt;span&gt;&lt;span&gt;TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, age_group &lt;/span&gt;&lt;span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, region &lt;/span&gt;&lt;span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, onboarding_interest JSONB ); &lt;/span&gt;&lt;span&gt;&lt;span&gt;-- contents&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; contents ( content_id &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;PRIMARY&lt;/span&gt;&lt;/span&gt;&lt;span&gt; KEY, author_id &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, title TEXT, body TEXT, tags TEXT[], category &lt;/span&gt;&lt;span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, created_at &lt;/span&gt;&lt;span&gt;&lt;span&gt;TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, duration_seconds &lt;/span&gt;&lt;span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, popularity_score &lt;/span&gt;&lt;span&gt;&lt;span&gt;FLOAT&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ); &lt;/span&gt;&lt;span&gt;&lt;span&gt;-- events (stream)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;/span&gt;&lt;span&gt; events ( event_id BIGSERIAL &lt;/span&gt;&lt;span&gt;&lt;span&gt;PRIMARY&lt;/span&gt;&lt;/span&gt;&lt;span&gt; KEY, user_id &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, content_id &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, event_type &lt;/span&gt;&lt;span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&lt;span&gt;-- view, click, like, comment, share&lt;/span&gt;&lt;/span&gt;&lt;span&gt; dwell_ms &lt;/span&gt;&lt;span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, session_id TEXT, &lt;/span&gt;&lt;span&gt;&lt;span&gt;ref&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;3987&quot; data-start=&quot;3951&quot; data-ke-size=&quot;size26&quot;&gt;후보 생성 &amp;mdash; 예: item2vec 유사도 조회 (의사코드)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4071&quot; data-start=&quot;3988&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4027&quot; data-start=&quot;3988&quot;&gt;item2vec로 content_embedding 생성(128-d)&lt;/li&gt;
&lt;li data-end=&quot;4071&quot; data-start=&quot;4028&quot;&gt;후보: 최근 본 10개 콘텐츠 임베딩 평균 &amp;rarr; cosine 유사도 상위 K&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;-- 의사쿼리: embedding store에서 cosine 유사도 top K&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;span&gt; content_id, cosine_sim(embedding, user_recent_embedding) &lt;/span&gt;&lt;span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;span&gt; sim &lt;/span&gt;&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;span&gt; content_embeddings &lt;/span&gt;&lt;span&gt;&lt;span&gt;ORDER&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;BY&lt;/span&gt;&lt;/span&gt;&lt;span&gt; sim &lt;/span&gt;&lt;span&gt;&lt;span&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;span&gt; LIMIT &lt;/span&gt;&lt;span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;4290&quot; data-start=&quot;4253&quot; data-ke-size=&quot;size26&quot;&gt;Two-tower 입력 예 (Python pseudocode)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# user_vector = concat(user_emb, avg_recent_item_emb, time_of_day, ...)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# item_vector = concat(item_emb, content_meta_features)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; score = dot(user_vector, item_vector) &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 또는 MLP([user, item, user*item, ...])&lt;/span&gt;&lt;/span&gt;&lt;span&gt; prob = sigmoid(score) &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4537&quot; data-start=&quot;4534&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;4562&quot; data-start=&quot;4539&quot;&gt;4) 학습&amp;middot;평가 지표 / 오프라인 실험&lt;/h1&gt;
&lt;h2 data-end=&quot;4571&quot; data-start=&quot;4563&quot; data-ke-size=&quot;size26&quot;&gt;핵심 지표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4782&quot; data-start=&quot;4572&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4611&quot; data-start=&quot;4572&quot;&gt;&lt;b&gt;CTR (Click-through rate)&lt;/b&gt; &amp;mdash; 클릭 전환율&lt;/li&gt;
&lt;li data-end=&quot;4659&quot; data-start=&quot;4612&quot;&gt;&lt;b&gt;WatchTime / Dwell time&lt;/b&gt; &amp;mdash; 평균 체류시간(우선순위 중요)&lt;/li&gt;
&lt;li data-end=&quot;4698&quot; data-start=&quot;4660&quot;&gt;&lt;b&gt;NDCG@k, MRR, Precision@k&lt;/b&gt; &amp;mdash; 랭킹 품질&lt;/li&gt;
&lt;li data-end=&quot;4753&quot; data-start=&quot;4699&quot;&gt;&lt;b&gt;Recall@k (Candidate generation 평가)&lt;/b&gt; &amp;mdash; 후보 생성의 커버리지&lt;/li&gt;
&lt;li data-end=&quot;4782&quot; data-start=&quot;4754&quot;&gt;&lt;b&gt;DAU/Retention&lt;/b&gt; &amp;mdash; 장기적 지표&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;4794&quot; data-start=&quot;4784&quot; data-ke-size=&quot;size26&quot;&gt;오프라인 평가&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5140&quot; data-start=&quot;4795&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4872&quot; data-start=&quot;4795&quot;&gt;&lt;b&gt;Time-split&lt;/b&gt;: train on [T-30, T-7], validate on [T-7, T-1], test on day T&lt;/li&gt;
&lt;li data-end=&quot;5009&quot; data-start=&quot;4873&quot;&gt;&lt;b&gt;Negative sampling&lt;/b&gt;: for CTR train, sample negative items that user did NOT interact with in the session (注意: careful sampling bias)&lt;/li&gt;
&lt;li data-end=&quot;5073&quot; data-start=&quot;5010&quot;&gt;&lt;b&gt;Offline metric&lt;/b&gt;: Recall@200 (candidate) / NDCG@10 (ranker)&lt;/li&gt;
&lt;li data-end=&quot;5140&quot; data-start=&quot;5074&quot;&gt;&lt;b&gt;Calibration&lt;/b&gt;: 로그의 노출 편향(CTR 편향) 보정(IPS, propensity weighting)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;5145&quot; data-start=&quot;5142&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;5166&quot; data-start=&quot;5147&quot;&gt;5) 온라인 배포&amp;middot;A/B 테스트&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5462&quot; data-start=&quot;5167&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5245&quot; data-start=&quot;5167&quot;&gt;&lt;b&gt;실시간 서빙&lt;/b&gt;: 모델을 서빙(예: TensorFlow Serving, TorchServe, FastAPI + Redis cache)&lt;/li&gt;
&lt;li data-end=&quot;5322&quot; data-start=&quot;5246&quot;&gt;&lt;b&gt;Latencies&lt;/b&gt;: candidate retrieval (100-300ms), ranking (10-50ms per user)&lt;/li&gt;
&lt;li data-end=&quot;5394&quot; data-start=&quot;5323&quot;&gt;&lt;b&gt;A/B 실험&lt;/b&gt;: 핵심 KPI (CTR, WatchTime, Retention) 기반으로 실험 (유의수준, 트래픽 분할)&lt;/li&gt;
&lt;li data-end=&quot;5462&quot; data-start=&quot;5395&quot;&gt;&lt;b&gt;로그 추적&lt;/b&gt;: 모든 노출(impression)&amp;rarr;행동(click/view)을 이벤트로 남겨서 오프라인 학습 재사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;5467&quot; data-start=&quot;5464&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;5482&quot; data-start=&quot;5469&quot;&gt;6) 콜드스타트 전략&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5689&quot; data-start=&quot;5483&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5594&quot; data-start=&quot;5483&quot;&gt;&lt;b&gt;신규 사용자&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5594&quot; data-start=&quot;5498&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5534&quot; data-start=&quot;5498&quot;&gt;온보딩 질문(카테고리 선호) 강제 수집 + 추천 팩 기반 노출&lt;/li&gt;
&lt;li data-end=&quot;5594&quot; data-start=&quot;5537&quot;&gt;인기/지역별 인기 + 유사 사용자 군집(popular among similar age/region)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5689&quot; data-start=&quot;5595&quot;&gt;&lt;b&gt;신규 콘텐츠&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5689&quot; data-start=&quot;5610&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5651&quot; data-start=&quot;5610&quot;&gt;콘텐츠 임베딩(text/image) 기반 유사도로 빠르게 카테고리 연결&lt;/li&gt;
&lt;li data-end=&quot;5689&quot; data-start=&quot;5654&quot;&gt;초기 exposure boost(신규 부스트) 후 품질 관찰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;5694&quot; data-start=&quot;5691&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;5736&quot; data-start=&quot;5696&quot;&gt;7) 탐험(Exploration) vs 착취(Exploitation)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5914&quot; data-start=&quot;5737&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5794&quot; data-start=&quot;5737&quot;&gt;&lt;b&gt;Epsilon-greedy&lt;/b&gt;: 일정 확률(epsilon=0.05~0.15)로 탐색용 후보 섞기&lt;/li&gt;
&lt;li data-end=&quot;5870&quot; data-start=&quot;5795&quot;&gt;&lt;b&gt;Contextual Bandits&lt;/b&gt;: LinUCB, Thompson Sampling 등으로 온라인 보상 최적화 (CTR 기반)&lt;/li&gt;
&lt;li data-end=&quot;5914&quot; data-start=&quot;5871&quot;&gt;&lt;b&gt;Diversity penalties&lt;/b&gt;: 유사한 콘텐츠 연속 노출 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;5919&quot; data-start=&quot;5916&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;5938&quot; data-start=&quot;5921&quot;&gt;8) 공정성&amp;middot;안전&amp;middot;프라이버시&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;6074&quot; data-start=&quot;5939&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5972&quot; data-start=&quot;5939&quot;&gt;&lt;b&gt;필터링&lt;/b&gt;: 유해/스팸 확률 높은 콘텐츠는 노출 억제&lt;/li&gt;
&lt;li data-end=&quot;6030&quot; data-start=&quot;5973&quot;&gt;&lt;b&gt;개인정보&lt;/b&gt;: PII 비식별화, 로그 보관기간 정책(예: 90일), GDPR/개인정보보호법 준수&lt;/li&gt;
&lt;li data-end=&quot;6074&quot; data-start=&quot;6031&quot;&gt;&lt;b&gt;유저 제어&lt;/b&gt;: 관심분야 수정, 추천 피드백(싫어요/숨기기) UI 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;6079&quot; data-start=&quot;6076&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;6104&quot; data-start=&quot;6081&quot;&gt;9) 실무 체크리스트(우선순위 로드맵)&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;6490&quot; data-start=&quot;6105&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;6170&quot; data-start=&quot;6105&quot;&gt;&lt;b&gt;로그 파이프라인 구축&lt;/b&gt; (impression + event + content metadata) &amp;mdash; 우선&lt;/li&gt;
&lt;li data-end=&quot;6225&quot; data-start=&quot;6171&quot;&gt;&lt;b&gt;간단한 랭킹 baseline&lt;/b&gt; (popularity + recency)으로 제품 테스트&lt;/li&gt;
&lt;li data-end=&quot;6267&quot; data-start=&quot;6226&quot;&gt;&lt;b&gt;간단한 후보 생성&lt;/b&gt;: item2vec 또는 co-watch 통계&lt;/li&gt;
&lt;li data-end=&quot;6319&quot; data-start=&quot;6268&quot;&gt;&lt;b&gt;LightGBM CTR 랭커&lt;/b&gt; (feature engineering 빠르게 적용)&lt;/li&gt;
&lt;li data-end=&quot;6351&quot; data-start=&quot;6320&quot;&gt;&lt;b&gt;Two-tower 모델&lt;/b&gt;으로 전환(성능 개선)&lt;/li&gt;
&lt;li data-end=&quot;6388&quot; data-start=&quot;6352&quot;&gt;&lt;b&gt;세션/순차 모델 추가&lt;/b&gt; (SASRec) &amp;mdash; 개인화 향상&lt;/li&gt;
&lt;li data-end=&quot;6428&quot; data-start=&quot;6389&quot;&gt;&lt;b&gt;온라인 A/B 실험 루프&lt;/b&gt; 구축(모델 교체 및 KPI 검증)&lt;/li&gt;
&lt;li data-end=&quot;6459&quot; data-start=&quot;6429&quot;&gt;&lt;b&gt;탐색 전략 / 다양성 / 비즈니스 룰 통합&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;6490&quot; data-start=&quot;6460&quot;&gt;&lt;b&gt;모니터링&lt;/b&gt;: 품질 저하/데이터 드리프트 알람&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;6495&quot; data-start=&quot;6492&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;6523&quot; data-start=&quot;6497&quot;&gt;10) 구현 팁(구체적인 하이퍼&amp;middot;설정 제안)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;6776&quot; data-start=&quot;6524&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;6556&quot; data-start=&quot;6524&quot;&gt;&lt;b&gt;임베딩 차원:&lt;/b&gt; 64~256 (item/user)&lt;/li&gt;
&lt;li data-end=&quot;6594&quot; data-start=&quot;6557&quot;&gt;&lt;b&gt;학습률(Neural):&lt;/b&gt; 1e-3 ~ 3e-4 (Adam)&lt;/li&gt;
&lt;li data-end=&quot;6635&quot; data-start=&quot;6595&quot;&gt;&lt;b&gt;batch size:&lt;/b&gt; 512~8192 (데이터&amp;middot;GPU에 따라)&lt;/li&gt;
&lt;li data-end=&quot;6702&quot; data-start=&quot;6636&quot;&gt;&lt;b&gt;negative samples:&lt;/b&gt; 4~10 negatives per positive (pairwise/BPR)&lt;/li&gt;
&lt;li data-end=&quot;6751&quot; data-start=&quot;6703&quot;&gt;&lt;b&gt;candidate pool size:&lt;/b&gt; 200~2000 (서비스 규모에 따라)&lt;/li&gt;
&lt;li data-end=&quot;6776&quot; data-start=&quot;6752&quot;&gt;&lt;b&gt;Top-N to UI:&lt;/b&gt; 10~20&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;6781&quot; data-start=&quot;6778&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;6824&quot; data-start=&quot;6783&quot;&gt;11) 간단한 시작용 추천 알고리즘 (빠르게 만들어볼 수 있는 3단계)&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;7070&quot; data-start=&quot;6825&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;6888&quot; data-start=&quot;6825&quot;&gt;&lt;b&gt;로그 수집(1주)&lt;/b&gt;: impression + click + dwell + content metadata&lt;/li&gt;
&lt;li data-end=&quot;6959&quot; data-start=&quot;6889&quot;&gt;&lt;b&gt;베이스라인(1주)&lt;/b&gt;: (A) 인기+최근성 혼합 &amp;rarr; (B) 간단한 item-item 추천 (co-occurrence)&lt;/li&gt;
&lt;li data-end=&quot;7070&quot; data-start=&quot;6960&quot;&gt;&lt;b&gt;첫 모델(2~4주)&lt;/b&gt;: LightGBM 랭커(CTR 예측) + candidate: item2vec top-200&lt;br /&gt;&amp;rarr; 이후 Two-tower, sequence model 단계적으로 교체&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;7075&quot; data-start=&quot;7072&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;7102&quot; data-start=&quot;7077&quot;&gt;12) 예시: 추천 점수(단순 가중 결합)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;7259&quot; data-start=&quot;7103&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;7186&quot; data-start=&quot;7103&quot;&gt;score = 0.5 * CTR_pred + 0.4 * normalized_watch_time_pred + 0.1 * novelty_score&lt;/li&gt;
&lt;li data-end=&quot;7259&quot; data-start=&quot;7187&quot;&gt;novelty_score = (is_new? 1 : 0) or recency function exp(-age_days/7)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>laravel</category>
      <category>Ai</category>
      <category>추천</category>
      <category>추천알고리즘</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/43</guid>
      <comments>https://citykid.tistory.com/43#entry43comment</comments>
      <pubDate>Mon, 13 Oct 2025 11:03:54 +0900</pubDate>
    </item>
    <item>
      <title>Laravel Accessor 호출 방식</title>
      <link>https://citykid.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Accessor 호출 방식:&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;php&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;// Model 메서드명 &amp;rarr; Blade에서 호출
getSaleStatusTextAttribute() &amp;rarr; $product-&amp;gt;sale_status_text
getDdayAttribute() &amp;rarr; $product-&amp;gt;d_day
getTimeRemainingAttribute() &amp;rarr; $product-&amp;gt;time_remaining
getLowestPriceAttribute() &amp;rarr; $product-&amp;gt;lowest_price&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일반 메서드 호출:&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;php&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;stylus&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;// 일반 메서드는 ()를 붙여서 호출
isOnSale() &amp;rarr; $product-&amp;gt;isOnSale()
hasOption() &amp;rarr; $product-&amp;gt;hasOption('best')&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Blade 템플릿 사용 예시:&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;php&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;php&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;// index.blade.php
{{ $product-&amp;gt;sale_status_text }}  // Accessor
{{ $product-&amp;gt;d_day }}              // Accessor

// 조건문에서
@if($product-&amp;gt;isOnSale())          // 일반 메서드
    &amp;lt;span&amp;gt;판매중&amp;lt;/span&amp;gt;
@endif&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;get{Name}Attribute() = Accessor = 속성처럼 접근 (-&amp;gt;name)&lt;/li&gt;
&lt;li&gt;일반 메서드 = 함수처럼 호출 (-&amp;gt;method())&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>laravel</category>
      <category>Accessor</category>
      <category>BLADE</category>
      <category>laravel</category>
      <category>Model</category>
      <category>메서드호출</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/42</guid>
      <comments>https://citykid.tistory.com/42#entry42comment</comments>
      <pubDate>Fri, 10 Oct 2025 12:14:33 +0900</pubDate>
    </item>
    <item>
      <title>github 에서 서버로 CI/CD 자동배포 설정</title>
      <link>https://citykid.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Laravel/ PHP 사이트 기준 예시를 중심으로 하지만, 다른 스택에도 같은 흐름으로 적용하면 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;293&quot; data-start=&quot;190&quot; data-ke-size=&quot;size16&quot;&gt;아래는 전체 흐름(요약) &amp;rarr; 서버 준비 &amp;rarr; GitHub(Secrets) 준비 &amp;rarr; 실제 GitHub Actions 워크플로우(예제) &amp;rarr; 보안/운영 팁 &amp;rarr; 문제 해결 체크리스트 순서입니다.&lt;/p&gt;
&lt;h1 data-end=&quot;308&quot; data-start=&quot;295&quot;&gt;1) 전체 흐름 요약&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;551&quot; data-start=&quot;309&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;345&quot; data-start=&quot;309&quot;&gt;서버에 deploy 전용 사용자와 SSH 공개키 설정&lt;/li&gt;
&lt;li data-end=&quot;399&quot; data-start=&quot;346&quot;&gt;로컬(또는 CI용)에서 SSH 개인키를 GitHub Actions Secrets에 등록&lt;/li&gt;
&lt;li data-end=&quot;469&quot; data-start=&quot;400&quot;&gt;.github/workflows/deploy.yml 파일을 만들어 main 브랜치에 푸시되면 실행되도록 설정&lt;/li&gt;
&lt;li data-end=&quot;551&quot; data-start=&quot;470&quot;&gt;Actions가 SSH로 서버에 접속 &amp;rarr; 코드 동기화(rsync 또는 scp) &amp;rarr; 원격에서 의존성 설치/마이그레이션/캐시/서비스 재시작 수행&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 data-end=&quot;576&quot; data-start=&quot;553&quot;&gt;2) 서버(우분투 계정) 준비 (권장)&lt;/h1&gt;
&lt;p data-end=&quot;619&quot; data-start=&quot;577&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령은 &lt;b&gt;루트 권한&lt;/b&gt;으로 실행합니다(또는 sudo 앞에 붙이세요).&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# 1) deploy 전용 사용자 생성 (비밀번호 로그인 비활성 권장)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; sudo adduser --disabled-password --gecos &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; deploy &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 2) 필요한 패키지 설치&lt;/span&gt;&lt;/span&gt;&lt;span&gt; sudo apt update sudo apt install -y openssh-server rsync git unzip &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 3) 앱 디렉터리 만들기 및 소유권 설정 (예: /var/www/myapp)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; sudo &lt;/span&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -p /var/www/myapp sudo &lt;/span&gt;&lt;span&gt;&lt;span&gt;chown&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -R deploy:deploy /var/www/myapp &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;940&quot; data-start=&quot;927&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSH 접속 보안&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1155&quot; data-start=&quot;941&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1015&quot; data-start=&quot;941&quot;&gt;서버에 공개키를 추가할 때 deploy 사용자의 ~/.ssh/authorized_keys에 public key를 넣습니다.&lt;/li&gt;
&lt;li data-end=&quot;1102&quot; data-start=&quot;1016&quot;&gt;/etc/ssh/sshd_config 에서 PasswordAuthentication no 로 변경(단, 키로 로그인 가능한지 확인 후 재시작).&lt;/li&gt;
&lt;li data-end=&quot;1155&quot; data-start=&quot;1103&quot;&gt;포트(22) 변경, 방화벽 설정(UFW 또는 cloud security group) 권장.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1220&quot; data-start=&quot;1157&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(선택) deploy에게 서비스 재시작 권한만 부여&lt;/b&gt;&lt;br /&gt;sudoers로 제한된 명령만 허용하면 안전합니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# 예: /etc/sudoers.d/deploy&lt;/span&gt;&lt;/span&gt;&lt;span&gt; deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl reload nginx, /bin/systemctl restart php*-fpm &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h1 data-end=&quot;1412&quot; data-start=&quot;1379&quot;&gt;3) SSH 키 생성 및 GitHub Secrets 등록&lt;/h1&gt;
&lt;h3 data-end=&quot;1441&quot; data-start=&quot;1413&quot; data-ke-size=&quot;size23&quot;&gt;SSH 키 생성 (로컬 또는 CI 환경에서)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# 로컬에서 (파일명은 예시)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ssh-keygen -t ed25519 -C &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;github-actions@yourproject&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -f ./gh_deploy_key &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 생성하면 gh_deploy_key (private) / gh_deploy_key.pub (public) 생성&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2235&quot; data-start=&quot;1608&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1881&quot; data-start=&quot;1608&quot;&gt;gh_deploy_key.pub의 내용을 서버 deploy 계정의 ~/.ssh/authorized_keys 에 추가.&lt;/li&gt;
&lt;li data-end=&quot;1881&quot; data-start=&quot;1684&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;# 서버에서 (deploy 계정으로)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -p ~/.ssh &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;/span&gt;&lt;span&gt; 700 ~/.ssh &lt;/span&gt;&lt;span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&amp;lt;PUBLIC_KEY_CONTENT&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; ~/.ssh/authorized_keys &lt;/span&gt;&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;/span&gt;&lt;span&gt; 600 ~/.ssh/authorized_keys &lt;/span&gt;&lt;span&gt;&lt;span&gt;chown&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -R deploy:deploy ~/.ssh &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2235&quot; data-start=&quot;1883&quot;&gt;gh_deploy_key(비밀키) 파일 내용을 GitHub 리포지토리 &amp;rarr; Settings &amp;gt; Secrets and variables &amp;gt; Actions 에 새 Secret으로 등록
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2235&quot; data-start=&quot;1991&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2017&quot; data-start=&quot;1991&quot;&gt;이름 예시: SSH_PRIVATE_KEY&lt;/li&gt;
&lt;li data-end=&quot;2235&quot; data-start=&quot;2020&quot;&gt;추가로 아래도 Secrets로 등록:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2235&quot; data-start=&quot;2047&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2094&quot; data-start=&quot;2047&quot;&gt;SERVER_HOST (예: 1.2.3.4 또는 example.com)&lt;/li&gt;
&lt;li data-end=&quot;2128&quot; data-start=&quot;2099&quot;&gt;SERVER_USER (예: deploy)&lt;/li&gt;
&lt;li data-end=&quot;2160&quot; data-start=&quot;2133&quot;&gt;SERVER_PORT (옵션, 기본 22)&lt;/li&gt;
&lt;li data-end=&quot;2201&quot; data-start=&quot;2165&quot;&gt;TARGET_DIR (예: /var/www/myapp)&lt;/li&gt;
&lt;li data-end=&quot;2235&quot; data-start=&quot;2206&quot;&gt;(필요 시) BRANCH (예: main)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-end=&quot;2265&quot; data-start=&quot;2237&quot;&gt;4) GitHub Actions 워크플로우 예제&lt;/h1&gt;
&lt;p data-end=&quot;2350&quot; data-start=&quot;2266&quot; data-ke-size=&quot;size16&quot;&gt;아래 파일을 ./github/workflows/deploy.yml 로 저장하세요. (Laravel 예시 &amp;mdash; 필요 시 명령을 본인 스택에 맞게 수정)&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;CI/CD&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Deploy&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;to&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Server&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;push:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;branches:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# main 브랜치로 merge/push 될 때 배포&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;deploy:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;runs-on:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;steps:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;uses:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;actions/checkout@v4&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Install&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;rsync&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;(ensure&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;available)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;rsync&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# SSH 키를 에이전트에 올리기&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Start&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;ssh-agent&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;and&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;add&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;uses:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;webfactory/ssh-agent@v0.5.4&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;with:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;ssh-private-key:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${{&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;secrets.SSH_PRIVATE_KEY&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Add&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;server&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;to&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;known_hosts&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;span&gt;| mkdir -p ~/.ssh ssh-keyscan -p ${{ secrets.SERVER_PORT || 22 }} ${{ secrets.SERVER_HOST }} &amp;gt;&amp;gt; ~/.ssh/known_hosts &lt;/span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# (옵션) 빌드/테스트 단계 수행 (ex. npm build, phpunit 등)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Build&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;(optional)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;span&gt;| # 예: npm install &amp;amp;&amp;amp; npm run build echo &quot;빌드가 필요하면 여기에 추가하세요&quot; &lt;/span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 파일 동기화 (rsync)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Sync&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;files&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;to&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;server&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;span&gt;| rsync -avz --delete \ --exclude='.git' \ --exclude='node_modules' \ --exclude='vendor' \ --exclude='storage' \ ./ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:${{ secrets.TARGET_DIR }} &lt;/span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;# 원격에서 의존성 설치, 마이그레이션, 캐시 등 실행&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Run&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;remote&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;deployment&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;commands&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;span&gt;| ssh -p ${{ secrets.SERVER_PORT || 22 }} ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} &amp;lt;&amp;lt; 'EOF' set -e cd ${{ secrets.TARGET_DIR }} # 권한 설정 (옵션) chown -R deploy:www-data . # composer 설치(앱이 PHP/Laravel일 경우) if [ -f composer.json ]; then composer install --no-dev --optimize-autoloader --no-interaction fi # Laravel specific (필요하면) if [ -f artisan ]; then php artisan migrate --force php artisan config:cache php artisan route:cache php artisan view:cache fi # 서비스 재시작 (sudoers에서 허용된 명령만) sudo systemctl reload nginx || true sudo systemctl restart php8.1-fpm || true EOF &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;4766&quot; data-start=&quot;4502&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;4507&quot; data-start=&quot;4504&quot; data-ke-size=&quot;size16&quot;&gt;주의:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4766&quot; data-start=&quot;4510&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4610&quot; data-start=&quot;4510&quot;&gt;rsync 명령의 --exclude 를 환경에 맞게 조정하세요. vendor를 제외했으므로 서버에서 composer install을 돌리도록 했습니다(더 안전).&lt;/li&gt;
&lt;li data-end=&quot;4692&quot; data-start=&quot;4613&quot;&gt;sudo 명령 사용 시 deploy 사용자에게 관련 시스템 서비스 재시작 명령을 NOPASSWD로 허용해야 합니다(앞서 설명).&lt;/li&gt;
&lt;li data-end=&quot;4766&quot; data-start=&quot;4695&quot;&gt;webfactory/ssh-agent는 private key를 ssh-agent에 등록해 SSH 연결을 가능하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h1 data-end=&quot;4783&quot; data-start=&quot;4768&quot;&gt;5) 대체 방법 (짧게)&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5231&quot; data-start=&quot;4784&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4988&quot; data-start=&quot;4784&quot;&gt;&lt;b&gt;Bare repository + post-receive hook&lt;/b&gt; (서버에서 Git으로 직접 pull 트리거): GitHub에서 webhook을 서버로 보내면 서버 hook에서 git --work-tree=/var/www/myapp --git-dir=/home/git/repo.git checkout -f 등으로 배포. (작업은 서버 측에서 모든 처리)&lt;/li&gt;
&lt;li data-end=&quot;5103&quot; data-start=&quot;4989&quot;&gt;&lt;b&gt;Self-hosted runner&lt;/b&gt;: 서버에 GitHub Actions runner를 설치하면 액션을 서버에서 직접 실행(보안/네트워크 요구사항 고려). 장점: 네트워크 제한 내부망 배포에 유리.&lt;/li&gt;
&lt;li data-end=&quot;5231&quot; data-start=&quot;5104&quot;&gt;&lt;b&gt;Container / Docker 방식&lt;/b&gt;: Actions에서 이미지를 빌드하고 레지스트리에 push &amp;rarr; 서버에서 docker pull &amp;amp; restart로 배포(Blue/Green 또는 컨테이너 오케스트레이션 필요 시).&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-end=&quot;5245&quot; data-start=&quot;5233&quot;&gt;6) 보안 권장사항&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5465&quot; data-start=&quot;5246&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5294&quot; data-start=&quot;5246&quot;&gt;배포용 SSH 키는 &lt;b&gt;오직 배포용 계정에만 사용&lt;/b&gt; (개인 계정 키와 분리).&lt;/li&gt;
&lt;li data-end=&quot;5349&quot; data-start=&quot;5295&quot;&gt;GitHub Secrets는 repo 권한이 있는 사람만 접근 가능. 정기적으로 키 회전.&lt;/li&gt;
&lt;li data-end=&quot;5403&quot; data-start=&quot;5350&quot;&gt;deploy 사용자는 가능한 최소 권한만 부여(특정 systemctl 명령만 허용).&lt;/li&gt;
&lt;li data-end=&quot;5436&quot; data-start=&quot;5404&quot;&gt;서버에서 패스워드 인증 비활성화(키 기반만 허용).&lt;/li&gt;
&lt;li data-end=&quot;5465&quot; data-start=&quot;5437&quot;&gt;방화벽(포트 제한), Fail2ban 등 적용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-end=&quot;5483&quot; data-start=&quot;5467&quot;&gt;7) 트러블슈팅 체크리스트&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5815&quot; data-start=&quot;5484&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5581&quot; data-start=&quot;5484&quot;&gt;Permission denied (publickey) &amp;rarr; GitHub secret의 private key가 올바른지, 서버에 public key가 붙어있는지 확인.&lt;/li&gt;
&lt;li data-end=&quot;5661&quot; data-start=&quot;5582&quot;&gt;Host key verification failed &amp;rarr; ssh-keyscan으로 known_hosts 추가 or 수동으로 등록.&lt;/li&gt;
&lt;li data-end=&quot;5717&quot; data-start=&quot;5662&quot;&gt;파일 소유권 문제 &amp;rarr; chown -R www-data:www-data 등으로 권한 조정.&lt;/li&gt;
&lt;li data-end=&quot;5774&quot; data-start=&quot;5718&quot;&gt;composer 가 없거나 메모리 부족 &amp;rarr; 서버에 composer 설치 / swap 추가.&lt;/li&gt;
&lt;li data-end=&quot;5815&quot; data-start=&quot;5775&quot;&gt;rsync 동기화 실패 &amp;rarr; 경로 권한, 포트 확인, 방화벽 확인.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>laravel</category>
      <category>ci/cd</category>
      <category>github</category>
      <category>깃자동배포</category>
      <category>깃허브자동배포</category>
      <category>자동배포</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/41</guid>
      <comments>https://citykid.tistory.com/41#entry41comment</comments>
      <pubDate>Fri, 10 Oct 2025 11:27:07 +0900</pubDate>
    </item>
    <item>
      <title>Git 연결 세팅</title>
      <link>https://citykid.tistory.com/40</link>
      <description>&lt;h2 data-end=&quot;199&quot; data-start=&quot;173&quot; data-ke-size=&quot;size26&quot;&gt;  1️⃣ 현재 설정된 Git 계정 확인&lt;/h2&gt;
&lt;p data-end=&quot;207&quot; data-start=&quot;201&quot; data-ke-size=&quot;size16&quot;&gt;터미널에서:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;git config --global user.name git config --global user.email &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;323&quot; data-start=&quot;282&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;323&quot; data-start=&quot;282&quot;&gt;다른 사람 이름이나 이메일이 나온다면, 그 계정으로 커밋되고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;328&quot; data-start=&quot;325&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;363&quot; data-start=&quot;330&quot; data-ke-size=&quot;size26&quot;&gt;  2️⃣ 계정 정보 변경 (Git 전역 설정 수정)&lt;/h2&gt;
&lt;p data-end=&quot;389&quot; data-start=&quot;365&quot; data-ke-size=&quot;size16&quot;&gt;아래 명령어로 내 Git 사용자 계정 변경:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;git config --global user.name &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;내이름&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; git config --global user.email &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;내이메일@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;535&quot; data-start=&quot;489&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;535&quot; data-start=&quot;491&quot; data-ke-size=&quot;size16&quot;&gt;만약 특정 프로젝트(이 폴더만) 계정만 바꾸고 싶다면 --global 빼고:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;git config user.name &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;내이름&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; git config user.email &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;내이메일@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;620&quot; data-start=&quot;617&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;650&quot; data-start=&quot;622&quot; data-ke-size=&quot;size26&quot;&gt;  3️⃣ 인증 방식에 따라 자격증명 초기화&lt;/h2&gt;
&lt;h3 data-end=&quot;678&quot; data-start=&quot;652&quot; data-ke-size=&quot;size23&quot;&gt;✅ (A) HTTPS 방식 사용하는 경우&lt;/h3&gt;
&lt;p data-end=&quot;753&quot; data-start=&quot;679&quot; data-ke-size=&quot;size16&quot;&gt;GitHub에 로그인 시 &lt;b&gt;Access Token 또는 비밀번호&lt;/b&gt;가 저장돼 있어요.&lt;br /&gt;이를 지워야 새 계정으로 로그인 가능해요.&lt;/p&gt;
&lt;h4 data-end=&quot;766&quot; data-start=&quot;755&quot; data-ke-size=&quot;size20&quot;&gt;  방법:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;930&quot; data-start=&quot;767&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;860&quot; data-start=&quot;767&quot;&gt;&lt;b&gt;Windows&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;860&quot; data-start=&quot;783&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;821&quot; data-start=&quot;783&quot;&gt;제어판 &amp;rarr; &amp;ldquo;자격 증명 관리자&amp;rdquo; &amp;rarr; &amp;ldquo;Windows 자격 증명&amp;rdquo;&lt;/li&gt;
&lt;li data-end=&quot;860&quot; data-start=&quot;824&quot;&gt;git:&lt;a href=&quot;https://github.com&quot;&gt;https://github.com&lt;/a&gt; 관련 항목 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li data-end=&quot;930&quot; data-start=&quot;861&quot;&gt;&lt;b&gt;macOS&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;930&quot; data-start=&quot;875&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;889&quot; data-start=&quot;875&quot;&gt;&amp;ldquo;키체인 접근&amp;rdquo; 실행&lt;/li&gt;
&lt;li data-end=&quot;915&quot; data-start=&quot;892&quot;&gt;검색창에 github.com 입력&lt;/li&gt;
&lt;li data-end=&quot;930&quot; data-start=&quot;918&quot;&gt;관련된 항목 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1019&quot; data-start=&quot;932&quot; data-ke-size=&quot;size16&quot;&gt;그 후 push 하면 새로 인증을 요청합니다.&lt;br /&gt;  그때 새 GitHub 계정의 &lt;b&gt;토큰(Personal Access Token)&lt;/b&gt; 으로 로그인하세요.&lt;/p&gt;
&lt;hr data-end=&quot;1024&quot; data-start=&quot;1021&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1050&quot; data-start=&quot;1026&quot; data-ke-size=&quot;size23&quot;&gt;✅ (B) SSH 방식 사용하는 경우&lt;/h3&gt;
&lt;p data-end=&quot;1081&quot; data-start=&quot;1051&quot; data-ke-size=&quot;size16&quot;&gt;SSH 키가 다른 계정으로 연결되어 있을 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1811&quot; data-start=&quot;1083&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1180&quot; data-start=&quot;1083&quot;&gt;기존 키 확인:보통 id_rsa, id_rsa.pub 또는 id_ed25519 파일이 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;1125&quot; data-start=&quot;1098&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ~/.ssh &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1317&quot; data-start=&quot;1182&quot;&gt;새 SSH 키 생성 (다른 계정용):예를 들어 ~/.ssh/id_ed25519_new 이런 이름으로 저장.&lt;/li&gt;
&lt;li data-end=&quot;1272&quot; data-start=&quot;1209&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;ssh-keygen -t ed25519 -C &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;새계정이메일@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1442&quot; data-start=&quot;1319&quot;&gt;GitHub 새 계정 로그인 &amp;rarr;&lt;br /&gt;Settings &amp;rarr; SSH and GPG keys &amp;rarr; New SSH key 클릭&lt;br /&gt;&amp;rarr; ~/.ssh/id_ed25519_new.pub 파일 내용 복사해 붙여넣기.&lt;/li&gt;
&lt;li data-end=&quot;1538&quot; data-start=&quot;1444&quot;&gt;ssh-agent에 등록:&lt;/li&gt;
&lt;li data-end=&quot;1538&quot; data-start=&quot;1465&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;eval&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;span&gt;$(ssh-agent -s)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; ssh-add ~/.ssh/id_ed25519_new &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1691&quot; data-start=&quot;1540&quot;&gt;.ssh/config 파일에 계정별 설정 추가:&lt;/li&gt;
&lt;li data-end=&quot;1691&quot; data-start=&quot;1575&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Host github.com-new HostName github.com User git IdentityFile ~/.ssh/id_ed25519_new &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1811&quot; data-start=&quot;1693&quot;&gt;이제 원격 URL을 새 SSH 설정으로 변경:&lt;/li&gt;
&lt;li data-end=&quot;1811&quot; data-start=&quot;1725&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;git remote set-url origin git@github.com-new:username/repository.git &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;1816&quot; data-start=&quot;1813&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1852&quot; data-start=&quot;1818&quot; data-ke-size=&quot;size26&quot;&gt;  4️⃣ PhpStorm에서도 계정 로그아웃/재로그인&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2046&quot; data-start=&quot;1854&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1929&quot; data-start=&quot;1854&quot;&gt;상단 메뉴&lt;br /&gt;File &amp;gt; Settings (또는 Preferences) &amp;gt; Version Control &amp;gt; GitHub&lt;/li&gt;
&lt;li data-end=&quot;1965&quot; data-start=&quot;1930&quot;&gt;오른쪽 목록에 기존 계정이 보이면 선택 &amp;rarr; - (삭제)&lt;/li&gt;
&lt;li data-end=&quot;2003&quot; data-start=&quot;1966&quot;&gt;+ 버튼 &amp;rarr; &amp;ldquo;Log in via GitHub&amp;hellip;&amp;rdquo; 클릭&lt;/li&gt;
&lt;li data-end=&quot;2046&quot; data-start=&quot;2004&quot;&gt;새 계정으로 로그인 &amp;rarr; &amp;ldquo;Authorize JetBrains&amp;rdquo; 클릭&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;2051&quot; data-start=&quot;2048&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2066&quot; data-start=&quot;2053&quot; data-ke-size=&quot;size26&quot;&gt;  5️⃣ 테스트&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;git config user.name git config user.email git remote -v git push -u origin main &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2186&quot; data-start=&quot;2162&quot; data-ke-size=&quot;size16&quot;&gt;모두 정상이면 새 계정으로 푸시됩니다.  &lt;/p&gt;</description>
      <category>laravel</category>
      <category>Git</category>
      <category>github</category>
      <category>깃계정변경</category>
      <category>깃생성</category>
      <category>깃연동</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/40</guid>
      <comments>https://citykid.tistory.com/40#entry40comment</comments>
      <pubDate>Fri, 10 Oct 2025 11:09:52 +0900</pubDate>
    </item>
    <item>
      <title>laravel 프로젝트 생성시 Base table or view not found</title>
      <link>https://citykid.tistory.com/39</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;&lt;span style=&quot;background-color: #141413; color: #faf9f5; text-align: start;&quot;&gt;Illuminate\Database\QueryException SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database.cache' doesn't exist (Connection: mysql, SQL: delete from&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;cache&lt;span style=&quot;background-color: #141413; color: #faf9f5; text-align: start;&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;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;캐시 테이블 생성 오류 해결&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법 1: 캐시 테이블 마이그레이션 생성&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# 캐시 테이블 생성
php artisan cache:table

# 마이그레이션 실행
php artisan migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법 2: 전체 캐시 설정 확인 및 재설정&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# config 캐시 클리어
php artisan config:clear

# 캐시 클리어
php artisan cache:clear

# view 캐시 클리어
php artisan view:clear

# route 캐시 클리어
php artisan route:clear

# 캐시 테이블 생성
php artisan cache:table
php artisan queue:table
php artisan session:table

# 마이그레이션 실행
php artisan migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법 3: .env 파일에서 캐시 드라이버 변경&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;.env 파일 수정&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;env&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# 기존
CACHE_DRIVER=database

# 변경 (임시로 file 사용)
CACHE_DRIVER=file

# 또는
CACHE_DRIVER=array&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 후:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;php artisan config:cache&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결 방법 4: 수동으로 캐시 테이블 생성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;database/migrations/xxxx_create_cache_table.php&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;php&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;&amp;lt;?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('cache', function (Blueprint $table) {
            $table-&amp;gt;string('key')-&amp;gt;primary();
            $table-&amp;gt;mediumText('value');
            $table-&amp;gt;integer('expiration');
        });

        Schema::create('cache_locks', function (Blueprint $table) {
            $table-&amp;gt;string('key')-&amp;gt;primary();
            $table-&amp;gt;string('owner');
            $table-&amp;gt;integer('expiration');
        });
    }

    public function down()
    {
        Schema::dropIfExists('cache');
        Schema::dropIfExists('cache_locks');
    }
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;php artisan migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추천 순서&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;vala&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# 1단계
php artisan config:clear
php artisan cache:clear

# 2단계
php artisan cache:table

# 3단계
php artisan migrate

# 4단계 (확인)
php artisan tinker
&amp;gt;&amp;gt;&amp;gt; Cache::put('test', 'value', 60);
&amp;gt;&amp;gt;&amp;gt; Cache::get('test');&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;완료 후 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;.env (데이터베이스 캐시 사용 시)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;env&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;CACHE_DRIVER=database
QUEUE_CONNECTION=database
SESSION_DRIVER=database&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;.env (파일 캐시 사용 시 - 단순한 경우)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;env&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>laravel</category>
      <category>Cache</category>
      <category>라라벨</category>
      <category>캐시</category>
      <category>캐시테이블</category>
      <category>프로젝트생성</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/39</guid>
      <comments>https://citykid.tistory.com/39#entry39comment</comments>
      <pubDate>Wed, 8 Oct 2025 11:41:07 +0900</pubDate>
    </item>
    <item>
      <title>Storage 심볼릭 링크 설정</title>
      <link>https://citykid.tistory.com/38</link>
      <description>&lt;h1&gt;Storage 심볼릭 링크 설정&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방법 1: Artisan 명령어 (권장)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;php artisan storage:link&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 storage/app/public &amp;rarr; public/storage 링크 생성&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방법 2: 수동 링크 생성&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# public/storage 디렉토리가 있으면 삭제
rm -rf public/storage

# 심볼릭 링크 생성
ln -s ../storage/app/public public/storage&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;확인&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# 링크 확인
ls -la public/ | grep storage

# 결과: lrwxrwxrwx 1 user user 20 Oct 08 10:00 storage -&amp;gt; ../storage/app/public&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파일 저장 예시&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;php&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #abb2bf; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// Controller
use Illuminate\Support\Facades\Storage;

// storage/app/public/images/test.jpg 저장
Storage::disk('public')-&amp;gt;put('images/test.jpg', $file);

// URL: http://site.local/site/images/test.jpg&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;권한 설정&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;sudo chown -R www-data:www-data storage public/storage
sudo chmod -R 775 storage public/storage&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료!&lt;/p&gt;</description>
      <category>laravel</category>
      <category>artisan</category>
      <category>laravel</category>
      <category>public</category>
      <category>storage</category>
      <category>심볼릭</category>
      <category>심볼릭링크</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/38</guid>
      <comments>https://citykid.tistory.com/38#entry38comment</comments>
      <pubDate>Wed, 8 Oct 2025 09:59:46 +0900</pubDate>
    </item>
    <item>
      <title>Laravel 프로젝트 생성 가이드</title>
      <link>https://citykid.tistory.com/37</link>
      <description>&lt;h1&gt;Laravel 프로젝트 생성 가이드&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 기본 환경 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;필요한 패키지 설치&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;# PHP, Composer, Nginx 설치
sudo apt update
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip unzip nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Composer 설치&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;groovy&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Laravel 프로젝트 생성&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #abb2bf; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 프로젝트 생성
composer create-project laravel/laravel site

# 프로젝트 디렉토리로 이동
cd site

# 권한 설정
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Nginx 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/nginx/sites-available/site&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;nginx&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #abb2bf; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name site.local;
    root /var/www/site/public;

    add_header X-Frame-Options &quot;SAMEORIGIN&quot;;
    add_header X-Content-Type-Options &quot;nosniff&quot;;

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Nginx 활성화&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #abb2bf; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 환경 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;.env 파일 설정&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;env&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #abb2bf; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;APP_NAME=Site
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://site.local

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=site
DB_USERNAME=root
DB_PASSWORD=&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;키 생성&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;verilog&quot; style=&quot;color: #abb2bf; text-align: left;&quot;&gt;&lt;code&gt;php artisan key:generate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료! 추가로 필요한 설정 있으면 말씀해주세요.&lt;/p&gt;</description>
      <category>laravel</category>
      <category>laravel</category>
      <category>nginx설정</category>
      <category>php</category>
      <category>php신규생성</category>
      <category>라라벨</category>
      <category>라라벨설정</category>
      <category>라라벨프로젝트</category>
      <category>신규생성</category>
      <category>엔진엑스설정</category>
      <category>프로젝트생성</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/37</guid>
      <comments>https://citykid.tistory.com/37#entry37comment</comments>
      <pubDate>Wed, 8 Oct 2025 09:42:30 +0900</pubDate>
    </item>
    <item>
      <title>저렵한 서버 호스팅 찾기</title>
      <link>https://citykid.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;한국과 해외에서 저렴하게 이용할 수 있는 대표적인 웹호스팅 업체로는 닷홈(Dothome), 호스팅케이알(Hosting.kr), Hostinger, IONOS, 카페24, 그리고 가비아 등이 있습니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;국내 호스팅 최저가 서비스&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;닷홈(Dothome)&lt;/b&gt;: 무료 호스팅 제공, 유료 플랜은 월 1,100원부터 시작(설치비 별도), 소규모 사이트, 블로그, 학습용에 최적.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;호스팅케이알(Hosting.kr)&lt;/b&gt;: 월 1,000원부터, 300MB 저장공간+10GB 트래픽, 무료 SSL 지원, 가성비 위주의 개인 사이트에 적합.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;카페24(Cafe24)&lt;/b&gt;: 월 1,100원부터 다양한 플랜, 500MB 이상 저장공간+10GB 트래픽, 소규모 쇼핑몰이나 포트폴리오용으로 추천.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가비아(Gabia)&lt;/b&gt;: 월 9,500원부터, 무제한 트래픽과 높은 안정성 제공, 중대형 사이트/기업용에 적합.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;글로벌 저가형 호스팅 서비스&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Hostinger&lt;/b&gt;: 월 1달러~2,800원부터 50GB SSD, 100GB 트래픽, 무료 SSL, 높은 가성비와 글로벌 서비스, 한글 지원.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IONOS&lt;/b&gt;: 월 1달러부터, 무제한 트래픽 및 저장공간 제공, 1년 무료 도메인 및 SSL, 개발자에게 적합.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GoDaddy, Bluehost, DreamHost&lt;/b&gt;: 글로벌 서비스 제공, 월 2~8달러 플랜, 다양한 옵션과 안정성.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;특징 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실습이나 테스트에는 무료 플랜(닷홈, Hostinger 일부, GoogieHost 등)을, 실제 비즈니스 또는 트래픽이 많은 운영에는 Hostinger, IONOS, 가비아처럼 관리 기능과 성능이 우수한 곳을 추천합니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;국내에서 빠른 속도를 원하면 닷홈, 카페24, 호스팅케이알이 무난하며, 해외 주요 이용자나 글로벌 트래픽이 목적이면 Hostinger, IONOS도 충분히 저렴하고 효율적인 선택지입니다.&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: oklch(0.2167 0.002 197.04); color: oklch(0.9296 0.007 106.53); text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 서비스마다 제공하는 웹 공간, 트래픽, SSL, 자동 설치 기능 등 세부 정책이 다르니, 구축 목적과 예산에 맞춰 플랜 상세를 확인하는 것이 좋습니다.&lt;/p&gt;</description>
      <category>laravel</category>
      <category>서버관리</category>
      <category>쇼핑몰구축</category>
      <category>저렴한</category>
      <category>호스팅</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/36</guid>
      <comments>https://citykid.tistory.com/36#entry36comment</comments>
      <pubDate>Wed, 8 Oct 2025 09:11:07 +0900</pubDate>
    </item>
    <item>
      <title>AUTOCAD 단축키 모음</title>
      <link>https://citykid.tistory.com/35</link>
      <description>&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;h3 id=&quot;%EC%9E%91%EB%8F%84(DRAWING)%20%EB%AA%85%EB%A0%B9-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EC%9E%91%EB%8F%84(DRAWING)%20%EB%AA%85%EB%A0%B9-1&quot;&gt;작도(DRAWING) 명령&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;단축키&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;L&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LINE&lt;/td&gt;
&lt;td&gt;선 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ARC&lt;/td&gt;
&lt;td&gt;호(원호)그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CIRCLE&lt;/td&gt;
&lt;td&gt;원 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RECTANGLE&lt;/td&gt;
&lt;td&gt;사각형 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POLYGON&lt;/td&gt;
&lt;td&gt;정다각형 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ELLIPSE&lt;/td&gt;
&lt;td&gt;타원 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;XL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;XLINE&lt;/td&gt;
&lt;td&gt;무한선 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PLINE&lt;/td&gt;
&lt;td&gt;연결선 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SPLINE&lt;/td&gt;
&lt;td&gt;자유곡선 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ML&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MLINE&lt;/td&gt;
&lt;td&gt;다중선 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DONUT&lt;/td&gt;
&lt;td&gt;도넛 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POINT&lt;/td&gt;
&lt;td&gt;점 찍기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EA%B0%9D%EC%B2%B4%20%ED%8E%B8%EC%A7%91(EDIT)%20%EB%AA%85%EB%A0%B9-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EA%B0%9D%EC%B2%B4%20%ED%8E%B8%EC%A7%91(EDIT)%20%EB%AA%85%EB%A0%B9-1&quot;&gt;객체 편집(EDIT) 명령&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UNDO&lt;/td&gt;
&lt;td&gt;이전 명령 취소&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+Y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MREDO&lt;/td&gt;
&lt;td&gt;UNDO취소&lt;/td&gt;
&lt;td&gt;다중복구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ERASE&lt;/td&gt;
&lt;td&gt;지우기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;EXTEND&lt;/td&gt;
&lt;td&gt;선분 연장&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TRIM&lt;/td&gt;
&lt;td&gt;선부 자르기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;O&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OFFSET&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;code&gt;CO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;COPY&lt;/td&gt;
&lt;td&gt;객체복사&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;M&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MOVE&lt;/td&gt;
&lt;td&gt;객체이동&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ARRAY&lt;/td&gt;
&lt;td&gt;배열복사&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MIRROR&lt;/td&gt;
&lt;td&gt;대칭복사&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;FILLET&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;code&gt;CHA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CHAMFER&lt;/td&gt;
&lt;td&gt;모따기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ROTATE&lt;/td&gt;
&lt;td&gt;객체회전&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SCALE&lt;/td&gt;
&lt;td&gt;객체축척변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;STRETCH&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;code&gt;LEN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LENGTHEN&lt;/td&gt;
&lt;td&gt;선분 길이 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BREAK&lt;/td&gt;
&lt;td&gt;선분 대충 자르기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;EXPLODE&lt;/td&gt;
&lt;td&gt;객체 분해&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;J&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JOIN&lt;/td&gt;
&lt;td&gt;조각난 선분 연결&lt;/td&gt;
&lt;td&gt;각 직선 Pline변경,&amp;nbsp; 겹친 선 합치기&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PEDIT&lt;/td&gt;
&lt;td&gt;PLINE 편집&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SPLINEDIT&lt;/td&gt;
&lt;td&gt;자유 곡선 수정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DRAWORDER&lt;/td&gt;
&lt;td&gt;객체 높낮이 조절&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ALIGN&lt;/td&gt;
&lt;td&gt;객체 정렬&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;OVERKILL&lt;/td&gt;
&lt;td&gt;중복 선분 및 조각난 선분 연결-다중객체 선택되는 join(?)&lt;/td&gt;
&lt;td&gt;기본 단축키 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%AC%B8%EC%9E%90%20%EC%93%B0%EA%B8%B0%20%EB%B0%8F%20%ED%8E%B8%EC%A7%91%20%EB%AA%85%EB%A0%B9-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%9E%90%20%EC%93%B0%EA%B8%B0%20%EB%B0%8F%20%ED%8E%B8%EC%A7%91%20%EB%AA%85%EB%A0%B9-1&quot;&gt;문자 쓰기 및 편집 명령&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;T&lt;/code&gt;,&lt;code&gt;MT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MTEXT&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;code&gt;DT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DTEXT&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;code&gt;ST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;STYLE&lt;/td&gt;
&lt;td&gt;문자 스타일 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DDEDIT&lt;/td&gt;
&lt;td&gt;문자,치수 문자 수정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EC%B9%98%EC%88%98%20%EA%B8%B0%EC%9E%85%20%EB%B0%8F%20%ED%8E%B8%EC%A7%91%20%EB%AA%85%EB%A0%B9-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EC%B9%98%EC%88%98%20%EA%B8%B0%EC%9E%85%20%EB%B0%8F%20%ED%8E%B8%EC%A7%91%20%EB%AA%85%EB%A0%B9-1&quot;&gt;치수 기입 및 편집 명령&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DIM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIM&lt;/td&gt;
&lt;td&gt;객체선택에 따른 자동 치수&lt;/td&gt;
&lt;td&gt;3D캐드와 비슷하게 객체 선택에 따라 자동으로 치수 변경 (2015 이상)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;QDIM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;QDIM&lt;/td&gt;
&lt;td&gt;빠른 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DLI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMLINEAR&lt;/td&gt;
&lt;td&gt;선형 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DAL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMALIGNED&lt;/td&gt;
&lt;td&gt;사선 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DAR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMARC&lt;/td&gt;
&lt;td&gt;호 길이 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DOR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMORDINATE&lt;/td&gt;
&lt;td&gt;좌표 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DRA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMRADIUS&lt;/td&gt;
&lt;td&gt;반지름 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DJO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMJOGGED&lt;/td&gt;
&lt;td&gt;주름(?) 반지름 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DDI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMDIAMETER&lt;/td&gt;
&lt;td&gt;지름 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DAN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMANGULAR&lt;/td&gt;
&lt;td&gt;각도 치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DBA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMBASELINE&lt;/td&gt;
&lt;td&gt;첫점 연속치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DCO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMCONTINUE&lt;/td&gt;
&lt;td&gt;끝점 연속치수 기입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MLD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MLEADER&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;code&gt;MLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MLEADEREDIT&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;code&gt;LEAD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LEADER&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;code&gt;DCE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMCENTER&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;code&gt;DED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMEDIT&lt;/td&gt;
&lt;td&gt;치수형태 편집&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;D&lt;/code&gt;,&lt;code&gt;DDIM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIMSTYLE&lt;/td&gt;
&lt;td&gt;치수스타일 편집&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%8F%84%EB%A9%B4%20%ED%8C%A8%ED%84%B4-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%8F%84%EB%A9%B4%20%ED%8C%A8%ED%84%B4-1&quot;&gt;도면 패턴&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HATCH&lt;/td&gt;
&lt;td&gt;도면 해치 패턴 넣기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BHATCH&lt;/td&gt;
&lt;td&gt;도면 해치 패턴 넣기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HATCHEDIT&lt;/td&gt;
&lt;td&gt;해치 편집&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GRADIENT&lt;/td&gt;
&lt;td&gt;그라디언트 패턴 넣기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%8F%84%EB%A9%B4%20%ED%8A%B9%EC%84%B1%20%EB%B3%80%EA%B2%BD-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%8F%84%EB%A9%B4%20%ED%8A%B9%EC%84%B1%20%EB%B3%80%EA%B2%BD-1&quot;&gt;도면 특성 변경&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LAYER&lt;/td&gt;
&lt;td&gt;도면층 관리&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LINETYPE&lt;/td&gt;
&lt;td&gt;도면 선분 류 관리&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LTS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LTSCALE&lt;/td&gt;
&lt;td&gt;선분 특성 크기 변경&lt;/td&gt;
&lt;td&gt;linetype변경된 선&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;COLOR&lt;/td&gt;
&lt;td&gt;기본 색상 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MATCHPROP&lt;/td&gt;
&lt;td&gt;객체 속성&amp;nbsp;맞추기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MO&lt;/code&gt;,&lt;code&gt;CH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PROPERTIES&lt;/td&gt;
&lt;td&gt;객체 속성 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;Ctrl+1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%B8%94%EB%A1%9D%20%EB%B0%8F%20%EC%82%BD%EC%9E%85%20%EB%AA%85%EB%A0%B9-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%B8%94%EB%A1%9D%20%EB%B0%8F%20%EC%82%BD%EC%9E%85%20%EB%AA%85%EB%A0%B9-1&quot;&gt;블록 및 삽입 명령&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BLOCK&lt;/td&gt;
&lt;td&gt;객체 블록 지정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WBLOCK&lt;/td&gt;
&lt;td&gt;객체 블록화 도면 저장&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;INSERT&lt;/td&gt;
&lt;td&gt;도면 삽입&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BEDIT&lt;/td&gt;
&lt;td&gt;블록 객체 수정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;XR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;XREF&lt;/td&gt;
&lt;td&gt;참조 도면 관리&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%93%9C%EB%A1%9C%EC%9E%89%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95%20%EB%B0%8F%20%ED%99%94%EB%A9%B4%2C%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%93%9C%EB%A1%9C%EC%9E%89%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95%20%EB%B0%8F%20%ED%99%94%EB%A9%B4%2C%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot;&gt;드로잉 환경 설정 및 화면, 환경 설정&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OS&lt;/code&gt;,&lt;code&gt;SE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OSNAP&lt;/td&gt;
&lt;td&gt;객체 스냅 설정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ZOOM&lt;/td&gt;
&lt;td&gt;도면 부분 축소/확대&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PAN&lt;/td&gt;
&lt;td&gt;화면 이동&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;REGEN&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;code&gt;R&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;REDRAW&lt;/td&gt;
&lt;td&gt;화면 다시 그리기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OPTION&lt;/td&gt;
&lt;td&gt;AutoCAD 환경 설정&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UNITS&lt;/td&gt;
&lt;td&gt;도면 단위 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%EB%8F%84%EB%A9%B4%20%ED%8A%B9%EC%84%B1%20%EB%B0%8F%20%EA%B0%9D%EC%B2%B4%20%EC%A0%95%EB%B3%B4-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#%EB%8F%84%EB%A9%B4%20%ED%8A%B9%EC%84%B1%20%EB%B0%8F%20%EA%B0%9D%EC%B2%B4%20%EC%A0%95%EB%B3%B4-1&quot;&gt;도면 특성 및 객체 정보&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DIST&lt;/td&gt;
&lt;td&gt;길기 체크&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LIST&lt;/td&gt;
&lt;td&gt;객체 속성 정보&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AREA&lt;/td&gt;
&lt;td&gt;면적 산출&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;FUNCTION%ED%82%A4%20%EC%84%A4%EC%A0%95%20%EA%B0%92-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#FUNCTION%ED%82%A4%20%EC%84%A4%EC%A0%95%20%EA%B0%92-1&quot;&gt;FUNCTION키 설정 값&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HELP&lt;/td&gt;
&lt;td&gt;도움말 보기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TEXT WINDOW&lt;/td&gt;
&lt;td&gt;커멘드 창 띄우기&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OSNAP ON/OFF&lt;/td&gt;
&lt;td&gt;객체 스냅 사용 유무&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TABLET ON/OFF&lt;/td&gt;
&lt;td&gt;타블렛 사용 유무&lt;/td&gt;
&lt;td&gt;2022버전 3DOsnap On/Off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISOPLANE&lt;/td&gt;
&lt;td&gt;2.5차원 방향 변경&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DYNAMIC UCS ON/OFF&lt;/td&gt;
&lt;td&gt;동적 UCS 변경 사용 유무&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GRID ON/OFF&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;code&gt;F8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ORTHO ON/OFF&lt;/td&gt;
&lt;td&gt;직교모드 사용 유무&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SNAP ON/OFF&lt;/td&gt;
&lt;td&gt;도면 스냅 사용 유무&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POLAR ON/OFF&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;code&gt;F11&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OSNAP TRACKING ON/OFF&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;code&gt;F12&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DYNAMIC INPUT ON/OFF&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Ctrl%20%2B%20%EC%88%AB%EC%9E%90%20%EB%8B%A8%EC%B6%95%20%EA%B0%92-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;#Ctrl%20%2B%20%EC%88%AB%EC%9E%90%20%EB%8B%A8%EC%B6%95%20%EA%B0%92-1&quot;&gt;Ctrl + 숫자 단축 값&lt;/a&gt;&lt;/h3&gt;
&lt;table id=&quot;table1&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;단축키&lt;/th&gt;
&lt;th&gt;명령어&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PROPERTIES / PROPERTIESCLOSE&lt;/td&gt;
&lt;td&gt;속성창 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADCENTER / ADCLOSE&lt;/td&gt;
&lt;td&gt;디자인 센터 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TOOLPALETTES /&lt;br /&gt;TOOLPALETTESCLOSE&lt;/td&gt;
&lt;td&gt;툴 팔레트 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SHEETSET / SHEETSETHIDE&lt;/td&gt;
&lt;td&gt;시트세트 메니져 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;기능 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DBCONNECT / DBCCLOSE&lt;/td&gt;
&lt;td&gt;DB접속 메니져 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MARKUP / MARKUPCLOSE&lt;/td&gt;
&lt;td&gt;마크업 셋트 메니져 On/OFF&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;QUICKCALC / QCCLOSE&lt;/td&gt;
&lt;td&gt;계산기 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;COMMANDLINE&lt;/td&gt;
&lt;td&gt;커멘드 영역 On/Off&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl+0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CLENASCREENOFF&lt;/td&gt;
&lt;td&gt;화면 툴바 On/OFF&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;/h4&gt;</description>
      <category>AUTOCAD</category>
      <category>단축키</category>
      <category>오토캐드</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/35</guid>
      <comments>https://citykid.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 19 Nov 2024 13:54:29 +0900</pubDate>
    </item>
    <item>
      <title>홈마 뜻...</title>
      <link>https://citykid.tistory.com/34</link>
      <description>&lt;p style=&quot;margin-top: 3px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;홈마&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;'홈마스터' 의 줄임말 이라네요.&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;연예인의 고퀄리티의 사진과 동영상을 촬영하여 자신의 홈페이지에 올리는 사람.&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 2px; margin-right: 0px; margin-left: 0px; padding: 0px; line-height: 19px; font-family: &amp;quot;New Gulim&amp;quot;, 새굴림, 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px;&quot;&gt;홈마 홈마 홈마 홈마 홈마 홈마 홈마&lt;/p&gt;</description>
      <category>홈마</category>
      <category>홈마뜻</category>
      <author>서니짱</author>
      <guid isPermaLink="true">https://citykid.tistory.com/34</guid>
      <comments>https://citykid.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 20 Jul 2018 09:36:00 +0900</pubDate>
    </item>
  </channel>
</rss>