<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>처음부터 시작하는 Java</title>
    <link>https://210one2.tistory.com/</link>
    <description>hello world!</description>
    <language>ko</language>
    <pubDate>Sat, 1 Aug 2026 23:11:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>원2</managingEditor>
    <image>
      <title>처음부터 시작하는 Java</title>
      <url>https://tistory1.daumcdn.net/tistory/4638241/attach/dc49ec896bb44616a68b52fc4a6e8c6a</url>
      <link>https://210one2.tistory.com</link>
    </image>
    <item>
      <title>DML</title>
      <link>https://210one2.tistory.com/716</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 문의 3가지 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DDL (Data Definition Language) - 구조 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표: 데이터베이스의 테이블이나 구조를 정의/생성/변경/삭제합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 명령어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CREATE: 테이블, 뷰, 인데스 생성&lt;/li&gt;
&lt;li&gt;ALTER: 구조 변경 (컬럼 추가/삭제/변경)&lt;/li&gt;
&lt;li&gt;DROP: 구조 자체를 삭제 (테이블 전체 삭제)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DCL (Data Control Language) - 접근 제어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표: 데이터베이스에 대한 접근 권한을 부여하거나 회수합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 명령어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GRANT: 권한 부여 (예: SELECT 권한 부여)&lt;/li&gt;
&lt;li&gt;REVOKE: 권한 회수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DML (Data Mainpolation Language) - 데이터 조작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표: 테이블 안에 있는 실제 데이터를 검색, 삽입, 수정, 삭제합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 명령어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SELECT: 데이터 검색&lt;/li&gt;
&lt;li&gt;INSERT: 데이터 삽입&lt;/li&gt;
&lt;li&gt;UPDATE: 데이터 수정&lt;/li&gt;
&lt;li&gt;DELETE: 데이터 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DML (SELECT 문) 심화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 구문&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WHERE: 조건 필터링 (AND,OR,BETWEEN,IN,LIKE)&lt;/li&gt;
&lt;li&gt;ORDER BY: 정렬 (ASC 오름차순, DESC 내림차순)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;집계 및 그룹화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집계 함수: COUNT, SUM, AVG, MAX, MIN&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUP BY: 특정 컬럼을 기준으로 그룹화&lt;/li&gt;
&lt;li&gt;HAVING: GROUP BY 로 묶인 결과에 다시 조건을 걸 때 사용 (WHERE 은 그룹화 전에 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테이블 간 관계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JOIN의 종류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;INNER JOIN: 두 테이블에서 일치하는 행만 변환&lt;/li&gt;
&lt;li&gt;LEFT JOIN / RIGHT JOIN: 한쪽 테이블의 모든 행을 포함하여 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서브쿼리 (Subquery)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT 문 안에 또 다른 SELECT 문을 넣어 사용하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE 절에 사용하는 서브쿼리 (조건 비교), FROM 절에 사용하는 서브쿼리 (가상 테이블 생성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 서브쿼리는 가장 안쪽 쿼리부터 순서대로 실행된다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. SELECT 문의 기본 구조와 동작 순서&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;A. SELECT 문 기본 구조 (작성순서)&lt;/p&gt;
&lt;pre id=&quot;code_1765435247595&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 컬럼명들, 집계함수(컬럼)
FROM 테이블명
WHERE 조건식
GROUP BY 그룹 컬럼명
HAVING 그룹 조건식
ORDER BY 정렬 컬렴명 [ASC/DESC];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B. SELECT 문 실제 실행 순서&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;FROM&lt;/b&gt;: 데이터를 가져올 &lt;b&gt;테이블&lt;/b&gt;을 결정(여기서 JOIN 처리)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WHERE&lt;/b&gt;: 가져온 데이터에서 &lt;b&gt;행(Row)&lt;/b&gt; 단위로 조건을 검사하여 필터링 (그룹화 전 처리)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GROUP BY&lt;/b&gt;: 남은 행들을 지정된 컬럼을 기준으로 &lt;b&gt;그룹&lt;/b&gt;으로 묶음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HAVING&lt;/b&gt;: 묶은 &lt;b&gt;그룹&lt;/b&gt;에 조건을 검사하여 필터링 (집계 함수 사용 가능)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SELECT&lt;/b&gt;: 그룹화 및 필터링이 완료된 데이터에서 &lt;b&gt;표시할 컬럼&lt;/b&gt;이나 &lt;b&gt;집계 값&lt;/b&gt;을 계산하여 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ORDER BY&lt;/b&gt;: 최종 결과를 지정된 컬럼을 기준으로 &lt;b&gt;정렬&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. DML 기초 명령어&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;SELECT (검색)&lt;/p&gt;
&lt;pre id=&quot;code_1765435720743&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 모든 컬럼(*)과 모든 행을 검색
SELECT * FROM 테이블명;

-- 특정 컬럼만 검색
SELECT 이름, 학과, FROM 학생;

-- 중복 제거
SELECT DISTINCT 학과 FROM 학생;

-- 별칭 사용
SELECT 이름 AS 학생이름, 학과 FROM 학생;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE 절 (조건 필터링)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;연산자&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;용도&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;AND, OR&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;여러 조건 결합&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;WHERE 학과='컴퓨터' AND 학년=4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;BETWEEN&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;범위 지정&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;WEHRE 점수 BETWEEN 80 AND 90 (80과 90 포함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;IN&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;목록 중 하나&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;WHERE 학과 IN ('컴퓨터', '경영')&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;LIKE&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;패턴 검색&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;WHERE 이름 LIKE '김%' (김으로 시작)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7054%;&quot;&gt;IS NULL&lt;/td&gt;
&lt;td style=&quot;width: 25.8915%;&quot;&gt;NULL 값 확인&lt;/td&gt;
&lt;td style=&quot;width: 52.403%;&quot;&gt;WHERE 연락처 IS NULL&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;집계 함수(AGGREGATE FUNCTIONS)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 &lt;b&gt;요약하고 통계&lt;/b&gt;를 내는 데 필수적 , 집계 함수는 여러 행의 값을 &lt;b&gt;하나의 결과 값&lt;/b&gt;으로 묶어 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT 절이나 HAVING 절에 주로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;용도&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;COUNT&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;행의 개수 (레코드 수) 계산&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;COUNT(*) : 전체 레코드 수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;SUM&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;숫자 컬럼의 합계 계산&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;SUM(점수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;AVG&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;숫자 컬럼의 평균 계산&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;AVG(점수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;MAX&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;컬럼 값 중 &lt;b&gt;최댓값&lt;/b&gt; 계산&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;MAX(점수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.5659%;&quot;&gt;MIN&lt;/td&gt;
&lt;td style=&quot;width: 34.496%;&quot;&gt;컬럼 값 중 &lt;b&gt;최솟값&lt;/b&gt; 계산&lt;/td&gt;
&lt;td style=&quot;width: 41.938%;&quot;&gt;MIN(점수)&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GROUP BY (그룹화)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GROUP BY는 테이블의 행들을 특정 컬럼의 &lt;b&gt;값&lt;/b&gt;을 기준으로 &lt;b&gt;그룹&lt;/b&gt;으로 묶음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그룹화된 데이터는 집계 함수를 통해 요약될 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1765436400193&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
	학과,              -- (A) 그룹 기준 컬럼
    COUNT(*) AS 학생수 -- (B) 그룹별 집계 함수 적용
FROM
	학생 테이블
GROUP BY
	학과;              --(C) '학과' 기준으로 묶음
    
------------
학과    학생수
컴퓨터  10
경영    15
디자인  5
-------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WHERE vs. HAVING&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE와 HAVING은 모두 조건을 걸어 필터링하지만, 적용되는 대상과 시점이 다름&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.9147%; height: 21px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 42.1705%; height: 21px;&quot;&gt;WHERE 절&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 21px;&quot;&gt;HAVING 절&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.9147%; height: 21px;&quot;&gt;&lt;span data-path-to-node=&quot;13,1,0,0&quot;&gt;&lt;b&gt;적용 대상&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.1705%; height: 21px;&quot;&gt;개별 행(Row)&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 21px;&quot;&gt;그룹 (Group)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.9147%; height: 21px;&quot;&gt;사용 시점&lt;/td&gt;
&lt;td style=&quot;width: 42.1705%; height: 21px;&quot;&gt;GROUP BY &lt;b&gt;이전&lt;/b&gt; (데이터를 그룹화하기 전에 거름)&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 21px;&quot;&gt;GROUP BY &lt;b&gt;이후&lt;/b&gt; (그룹화된 결과에서 거름)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 13.9147%; height: 21px;&quot;&gt;집계 함수 사용&lt;/td&gt;
&lt;td style=&quot;width: 42.1705%; height: 21px;&quot;&gt;&lt;b&gt;사용 불가&lt;/b&gt; (집계 함수는 그룹화 후에만 의미 있음)&lt;/td&gt;
&lt;td style=&quot;width: 43.9147%; height: 21px;&quot;&gt;&lt;b&gt;사용 가능&lt;/b&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;p data-ke-size=&quot;size16&quot;&gt;예시: WHERE와 HAVING의 비교&lt;/p&gt;
&lt;pre id=&quot;code_1765437054198&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 예시 테이블
학과	이름	점수
컴퓨터	김철수	90
컴퓨터	이영희	70
경영	박민수	85
경영	최지아	95


SELECT
	학과,
    AVG(점수) AS 평균점수
FROM
	학생 테이블
WHERE
	점수 &amp;gt;= 80       -- 1단계: 80점 미만(이영희) 제거 (WHERE)
GROUP BY
	학과
HAVING
	AVG(점수) &amp;gt;= 90; -- 2단계: 그룹 평균이 90점 이상인 그룹만 선택 (HAVING)
    
    
-- 결과
학과	평균점수
컴퓨터	90
경영	90&lt;/code&gt;&lt;/pre&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JOIN&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 25.4263%; height: 21px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 41.1628%; height: 21px;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 33.2558%; height: 21px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 25.4263%; height: 21px;&quot;&gt;INNER JOIN&lt;/td&gt;
&lt;td style=&quot;width: 74.4186%; height: 21px;&quot; colspan=&quot;2&quot;&gt;양쪽 테이블 모두 데이터가 존재하는 경우만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 25.4263%; height: 21px;&quot;&gt;LEFT OUTER JOIN&lt;/td&gt;
&lt;td style=&quot;width: 74.4186%; height: 21px;&quot; colspan=&quot;2&quot;&gt;왼쪽 테이블의 모든 데이터 출력, 오른쪽 테이블에 데이터가 없으면 NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 25.4263%; height: 21px;&quot;&gt;RIGHT OUTER JOIN&lt;/td&gt;
&lt;td style=&quot;width: 74.4186%; height: 21px;&quot; colspan=&quot;2&quot;&gt;오른쪽 테이블의 모든 데이터 출력, 왼쪽 테이블에 데이터가 없으면 NULL&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Subquery&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리 안의 쿼리, 전체 쿼리(Main Query)를 실행하기 위해 필요한 중간 결과 값을 구하는 용도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;괄호 안의 서브쿼리를 먼저 실행하고 그 결과를 이용해 바깥쪽 쿼리를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리가 쓰이는 위치 3가지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. WHERE 절에 오는 서브 쿼리 (중첩 서브쿼리)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평균 급여보다 많이 받는 사원의 이름을 조회해라&lt;/p&gt;
&lt;pre id=&quot;code_1766384187670&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 이름 
FROM 사원 
WHERE 급여 &amp;gt; (
            	SELECT AVG(급여)
                FROM 사원
                );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. FROM 절에 오는 서브쿼리 (인라인 뷰, Inline View)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서브쿼리의 결과 자체를 하나의 임시 테이블처럼 취급&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특징: 반드시 별칭(Alias)을 붙여줘야 하는 경우가 많음&lt;/p&gt;
&lt;pre id=&quot;code_1766384541772&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT a.이름, a.급여
FROM (
	SELECT * 
    	FROM 사원 
    	WHERE 부서='영업'
    	) AS a; -- 영업부만 모은 임시 테이블&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. SELECT 절에 오는 서브쿼리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나의 컬럼처럼 사용됨, 단 하나의 값(1행 1열)만 반환해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서브쿼리 사용 시 주의점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 단일행 vs 다중행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서브쿼리 결과가 1개라면 =, &amp;gt;, &amp;lt; 연산자 사용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서브쿼리 결과가 여러 개라면 IN, ANY, ALL, EXISTS 같은 다중행 연산자를 사용해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 괄호 필수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. ORDER BY 금지: 서브쿼리 내부에서는 정렬을 사용할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다중행 연산자-&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 결과 중 하나라도 일치하는 게 있으면 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE 부서코드 IN (10, 20) -&amp;gt; 부서코드가 10이거나 20인 사람 모두 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ANY/ SOME&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 결과물들과 하나하나 비교해서 하나라도 만족하면 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 비교연산자 (&amp;gt;, &amp;lt;)와 함께 씀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; ANY (최솟값보다 크면): 결과 중 가장 작은 것보다만 크면 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; ANY (최댓값보다 작으면): 결과 중 가장 큰 것보다만 작으면 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ALL&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 결과물 모두를 동시에 만족해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; ALL (최댓값보다 크면): 결과 중 가장 큰놈보다 커야 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; ALL (최솟값보다 작으면): 결과 중 가장 작은 놈보다도 작아야 참&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EXISTS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리의 결과가 한 줄이라도 존재하느냐만 따짐 (존재여부)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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>DB/sqld</category>
      <category>dml</category>
      <category>sql</category>
      <category>SQLD</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/716</guid>
      <comments>https://210one2.tistory.com/716#entry716comment</comments>
      <pubDate>Mon, 22 Dec 2025 17:44:41 +0900</pubDate>
    </item>
    <item>
      <title>포트포워딩</title>
      <link>https://210one2.tistory.com/715</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;PC 포트를 열어 외부 접속 허용하는 방법 (포트 포워딩)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상대방이 특정 포트의 페이지를 볼 수 있게 하려면, 기본적으로 두 가지 주요 단계를 거쳐야 합니다. 이는 &lt;b&gt;PC 내부 방화벽 설정&lt;/b&gt;과 &lt;b&gt;공유기 포트 포워딩 설정&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.  ️ Windows 방화벽 인바운드 규칙 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PC 자체의 방화벽이 외부로부터의 특정 포트 접속을 막고 있을 수 있습니다. 따라서 해당 포트를 허용하는 &lt;b&gt;인바운드 규칙&lt;/b&gt;을 추가해야 합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Windows Defender 방화벽 열기&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 검색창에 &lt;b&gt;&quot;방화벽&quot;&lt;/b&gt; 또는 &quot;Windows Defender 방화벽&quot;을 검색하여 실행합니다.&lt;/li&gt;
&lt;li&gt;왼쪽 메뉴에서 &quot;고급 설정&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새 인바운드 규칙 추가&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽 창에서 &quot;인바운드 규칙&quot;을 선택하고, 오른쪽 &lt;b&gt;&quot;작업&quot;&lt;/b&gt; 창에서 &quot;새 규칙&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;규칙 종류 선택&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;포트&quot;를 선택하고 &quot;다음&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로토콜 및 포트 지정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&quot;TCP&quot;&lt;/b&gt; 또는 &lt;b&gt;&quot;UDP&quot;&lt;/b&gt; 중 필요한 프로토콜을 선택합니다. (웹 페이지 접속이라면 보통 &lt;b&gt;TCP&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;&quot;특정 로컬 포트&quot;를 선택하고 상대방에게 열어주고 싶은 &lt;b&gt;포트 번호&lt;/b&gt;를 입력한 후 &quot;다음&quot;을 클릭합니다. (예: 80, 8080 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동작 지정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;연결 허용&quot;을 선택하고 &quot;다음&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로필 선택&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;규칙을 적용할 프로필을 선택합니다. (보통 &lt;b&gt;&quot;도메인&quot;, &quot;개인&quot;, &quot;공용&quot;&lt;/b&gt; 모두 선택하거나 필요한 프로필만 선택) 후 &quot;다음&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이름 지정 및 마침&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;규칙의 &lt;b&gt;이름&lt;/b&gt;을 지정하고 &quot;마침&quot;을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.   공유기 포트 포워딩(Port Forwarding) 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 가정이나 사무실에서는 공유기를 사용하므로, 외부에서 공유기의 &lt;b&gt;공인 IP&lt;/b&gt;로 접속했을 때, 해당 요청을 내부 네트워크의 **특정 PC(내부 IP)**의 &lt;b&gt;특정 포트&lt;/b&gt;로 연결해주는 &lt;b&gt;포트 포워딩&lt;/b&gt; 설정이 필요합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;PC의 내부 IP 주소 확인&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 검색창에 &quot;cmd&quot;를 입력하여 명령 프롬프트를 실행합니다.&lt;/li&gt;
&lt;li&gt;ipconfig를 입력하고 엔터를 누르면 나오는 &quot;IPv4 주소&quot;를 확인합니다. (예: 192.168.0.XX)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공유기 설정 페이지 접속&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ipconfig에서 확인한 &lt;b&gt;&quot;기본 게이트웨이&quot;&lt;/b&gt; 주소를 웹 브라우저 주소창에 입력하여 공유기 설정 페이지에 접속합니다. (대부분 192.168.0.1 또는 192.168.1.1 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트 포워딩 메뉴 찾기&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공유기 관리자 계정으로 로그인한 후, &lt;b&gt;&quot;NAT/라우터 관리&quot;&lt;/b&gt; 또는 &quot;포트 포워드 설정&quot;과 같은 메뉴를 찾아 들어갑니다. (공유기 제조사마다 명칭이 다를 수 있습니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새 규칙 추가&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&quot;새 규칙 추가&quot;&lt;/b&gt; 또는 &quot;등록&quot;을 클릭하여 다음 정보를 설정합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;규칙 이름&lt;/b&gt;: 원하는 대로 설정합니다. (예: MyWebPage)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내부 IP 주소&lt;/b&gt;: 1단계에서 확인한 &lt;b&gt;PC의 내부 IP 주소&lt;/b&gt;를 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로토콜&lt;/b&gt;: &lt;b&gt;TCP/UDP&lt;/b&gt; 중 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 포트 (외부 포트 범위)&lt;/b&gt;: 외부에서 접속할 때 사용할 포트 번호입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내부 포트 (내부 포트 범위)&lt;/b&gt;: 내 PC에서 실제로 서비스가 실행되는 포트 번호입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 포트와 내부 포트를 같게 설정하는 것이 일반적&lt;/b&gt;이며, 방화벽 설정 시 입력한 포트 번호와 &lt;b&gt;내부 포트&lt;/b&gt;가 일치해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설정 저장 및 적용&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;규칙을 추가하고 설정을 저장하면 포트 포워딩이 완료됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.   외부 접속 주소 안내&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상대방이 접속할 주소는 다음과 같습니다:&lt;/p&gt;
&lt;div data-math=&quot;\text{http://[당신의 공인 IP 주소]:[외부 포트 번호]}&quot;&gt;$$\text{http://[당신의 공인 IP 주소]:[외부 포트 번호]}$$&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;공인 IP 주소 확인&lt;/b&gt;: 포털 사이트에서 &quot;내 아이피 주소&quot;를 검색하면 알 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 포트 번호&lt;/b&gt;: 공유기 설정에서 지정한 &lt;b&gt;외부 포트&lt;/b&gt; 번호입니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/Windows</category>
      <category>port forwarding</category>
      <category>ポートフォワーディング</category>
      <category>포트포워딩</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/715</guid>
      <comments>https://210one2.tistory.com/715#entry715comment</comments>
      <pubDate>Mon, 10 Nov 2025 16:42:39 +0900</pubDate>
    </item>
    <item>
      <title>[sqld]엔티티 / 속성과 도메인</title>
      <link>https://210one2.tistory.com/714</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;엔티티&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스의 구성요소 중 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;독립적을 식별 가능한 객체(Object)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티의 하위 요소를 속성(Attribute)라고 함 ex) 회원 엔티티의 속성: 회원명, 회원코드, 주소..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;엔티티의 특징&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무에서 필요로 하고 관리하고자 하는 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별이 가능하도록 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;유일한 식별자&lt;/span&gt;를 가져야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영속적으로 존재하는 인스턴스가 두 개 이상인 집합을 이루어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하위요소로 반드시 속성을 가져야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티는 다른 엔티티와 한 개 이상의 관계를 가져야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*인스턴스: 엔티티로 정의된 구조에 맞춰 실제 디스크에 저장된 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;property: 객체의 특성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;attribute: 엔티티의 구성 요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성과 도메인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티의 하위요소로, 엔티티에 대한 자세하고 구체적인 정보를 나타낸 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;의미상으로 분리되지 않는 최소의 데이터 단위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성의 개수에는 제한이 없지만, 처리하고자 하는 업무 프로세스에 꼭 필요한 것 위주로 최소화 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속성이 가질 수 있는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;특정 값&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 엔티티 인스턴스에서 각각의 속성은 하나의 속성값만을 지님&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;엔티티, 인스턴스, 속성 값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 개의 엔티티는 두 개 이상의 인스턴스를 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 개의 엔티티는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;두 개 이상의 속성을 가짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 개의 속성은 한 개 이상의 속성값을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;속성 &amp;amp; 도메인&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성의 특성에 따른 분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 속성: 엔티티가 본래부터 가지고 있어야 하는 속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설계 속성: 엔티티가 본래부터 가지고 있던 속성은 아니지만 설계 시 필요하다고 판단되어 도출된 속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파생 속성: 다른 속성으로부터 계산되거나 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;특정 규칙에 따라 변형되어 만들어진 속성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;속성 구성방식에 따른 분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PK(Primary Key, 기본키) 속성: 해당 엔티티의 인스턴스를 유일하게 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;식별할 수 있는 속성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FK(Foreing Key, 왜래키) 속성: 관계를 통해 다른 엔티티의 속성을 가져와 포함시킨 속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 속성: 키가 아닌 나머지 일반 속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;속성이 가질 수 있는 값의 범위(값의 데이터 타입과 크기 등의 조건)를 정의&lt;/span&gt;한 것으로, 도메인이 지정된 속성은 해당 도메인의 데이터 타입, 크기, 제약사항 등을 따른다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/sqld</category>
      <category>Attribute</category>
      <category>DOMAIN</category>
      <category>eneiey</category>
      <category>sql</category>
      <category>SQLD</category>
      <category>도메인</category>
      <category>속성</category>
      <category>엔티티</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/714</guid>
      <comments>https://210one2.tistory.com/714#entry714comment</comments>
      <pubDate>Wed, 3 Sep 2025 17:37:32 +0900</pubDate>
    </item>
    <item>
      <title>[sqld] 데이터 모델링</title>
      <link>https://210one2.tistory.com/713</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터&amp;nbsp;모델링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구축하고자 하는 정보시스템에 맞게 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;현실세계의 데이터&lt;/span&gt;를 약속된 표기법으로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무의 흐름을 가시화, 명세화하며 정보시스템을 구축하기 위한 분석, 설계 과정의 일환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무 프로세스의 데이터를 분석하여 추상화(Abstraction)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상화: 1.단순화 2.축약 3.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징: 추상화/단순화(약속된 표기법으로..)/명확화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유의사항: 중복/비유연성/비일관성(정규화와 관련/ ex_a를 바꿨는데 b 가 바뀌지 않는다,,) 최소화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링의 3가지 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;개념적 데이터 모델링&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(가장 높은 추상화 레벨) 업무와 개념 중심으로 포괄적인 수준에서 모델링 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전사적 차원의 데이터 모델링, EA(Enterprise Architectue) 수립에 많이 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티(Entity)와 속성(Attribute) 도출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;논리적 데이터 모델링&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(중간 수준의 추상화 레벨) 데이터 모델에 대한 키(Key), 속성(Attribute), 관계(Relationship) 등 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;정규화(테이블을 쪼갬)&lt;/span&gt;를 통해 중복 데이터를 최소화, 높은 재사용성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별자도 도출 및 관계 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;물리적 데이터 모델링 (disk, memorise)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(가장 낮은 추상화 모델) 특정 DBMS에 맞추어 구현이 가능한 수준에서 모델링 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS의 성능이나 보안 가용성 등을 고려해 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스키마(구조) / 독립성 보장&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;외부 스키마&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(사용자 관점) 사용자 또는 애플리케이션이 발보는 데이터베이스 스키마를 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 사용자 뷰 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;개념 스키마&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(설계자 관점) 모든 사용자가 바라보는 데이터베이스 스키마를 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;통합&lt;/span&gt;하여 나타내며 전체 데이터베이스에 저장되는 데이터와 그 관계를 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&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;size18&quot;&gt;&lt;b&gt;내부 스키마&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(개발자 관점) 디스크나 메모리 상의 물리적, 실질적 저장구조를 나타내며 테이블, 칼럼, 인덱스 등을 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리적 뷰 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;논리적 데이터 독립성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 스키마와 개념 스키마 간의 독립성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 스키마가 변경되어도 &lt;span style=&quot;background-color: #f6e199;&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;size18&quot;&gt;&lt;b&gt;물리적 데이터 독립성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 스키마와 내부 스키마 간의 독립성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 스키마가 변경되어도 &lt;span style=&quot;background-color: #f6e199;&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;gt; 이에 중요한 것이 스키마의 3가지 구조&lt;/p&gt;</description>
      <category>DB/sqld</category>
      <category>SQLD</category>
      <category>ダタモデリング</category>
      <category>ダタモデル</category>
      <category>데이터모델링</category>
      <category>스키마</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/713</guid>
      <comments>https://210one2.tistory.com/713#entry713comment</comments>
      <pubDate>Wed, 3 Sep 2025 16:29:08 +0900</pubDate>
    </item>
    <item>
      <title>openssh 관련 명령어</title>
      <link>https://210one2.tistory.com/712</link>
      <description>&lt;h3&gt;✅openssh 설정 파일 열기&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo vim /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅openssh 실행 상태 확인&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo systemctl status ssh.service&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅openssh 실행&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo service ssh start&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅openssh 정지&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo service ssh stop&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅openssh 재실행&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo service ssh restart&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅sftp 접속&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sftp bluespcae@localhost&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅계정 추가&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo adduser bluespace&lt;/code&gt;&lt;/pre&gt;</description>
      <category>OS/Linux</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/712</guid>
      <comments>https://210one2.tistory.com/712#entry712comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:58:57 +0900</pubDate>
    </item>
    <item>
      <title>폴더관리</title>
      <link>https://210one2.tistory.com/711</link>
      <description>&lt;h3&gt;✅현재 설정(언어 등)을 그대로 유지하면서 root 계정으로 전환&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;su -&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅폴더 생성&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir 폴더명&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅폴더 삭제&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;rmdir 폴더명&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;✅폴더 및 파일 권한 설정&lt;/h3&gt;
&lt;h4&gt;숫자 권한의 구조&lt;/h4&gt;
&lt;p&gt;리눅스 파일·디렉터리 권한은 3자리(또는 4자리) 8진수로 지정합니다.&lt;br&gt;세 자리는 각각 소유자(owner), 그룹(group), 그 외(others)의 권한을 나타냅니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;읽기(Read) = 4&lt;/li&gt;
&lt;li&gt;쓰기(Write) = 2&lt;/li&gt;
&lt;li&gt;실행(Execute) = 1&lt;/li&gt;
&lt;li&gt;합산하여 0~7 사이 값 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;예) 7 = 4+2+1 (rwx), 5 = 4+1 (r-x), 0 = ---&lt;/p&gt;
&lt;h3&gt;⚠️권한 설정 예시&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 075 적용
chmod 075 폴더 or 디렉토리   # owner: ---, group: rwx, others: r-x

# 777 적용
chmod 777 폴더 or 디렉토리   # owner·group·others: rwx&lt;/code&gt;&lt;/pre&gt;</description>
      <category>OS/Linux</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/711</guid>
      <comments>https://210one2.tistory.com/711#entry711comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:57:58 +0900</pubDate>
    </item>
    <item>
      <title>Windows &amp;harr; WSL2 네트워크 연결 설정 상세</title>
      <link>https://210one2.tistory.com/710</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;WSL 터미널에서 인터페이스별 IP 보기&lt;/p&gt;
&lt;pre id=&quot;code_1752543148902&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip addr show eth0&lt;/code&gt;&lt;/pre&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;inet 항목 중 inet 172.xxx.xxx.xxx/... 처럼 / 앞의 IPv4 주소가 WSL2 내부 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 줄로 뽑기&lt;/p&gt;
&lt;pre id=&quot;code_1752543358631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip -4 addr show eth0 \
  | grep -oP '(?&amp;lt;=inet\s)\d+(\.\d+){3}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트포워딩 설정 예시&lt;/p&gt;
&lt;pre id=&quot;code_1752543389948&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# WSL 내부 IP가 172.22.64.1이라고 가정
netsh interface portproxy add v4tov4 `
  listenport=2222 listenaddress=0.0.0.0 `
  connectport=22 connectaddress=172.22.64.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1752543400274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;netsh interface portproxy show all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;***&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Unknown error&amp;rdquo; + 포트 22 메시지 원인&lt;/p&gt;
&lt;pre id=&quot;code_1752543480827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh: connect to host 0.0.8.xxx port 22: Unknown error  
Connection closed&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 올바른 Windows 호스트 IP 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WSL2가 아닌 &lt;b&gt;Windows 호스트&lt;/b&gt;의 IP를 써야 합니다.&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;CMD/PowerShell에서&lt;/p&gt;
&lt;pre id=&quot;code_1752543496995&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ipconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IPv4 주소 항목에 나오는 값이 실제 Windows 머신 IP&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트 옵션 제대로 전달하기 (IPv4 주소가 192.168.0.xx)라고 가정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인 IPv4 주소 입력&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752543538936&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sftp -P 2222 test1@192.168.0.xx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여전히 port 22로 시도한다면 옵션 파싱이 잘못됨&lt;/p&gt;
&lt;pre id=&quot;code_1752543559590&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sftp -o Port=2222 test1@192.168.0.xx&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1752543566814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sftp -o &amp;ldquo;ProxyCommand=&amp;rdquo; -P 2222 test1@192.168.0.xxx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-o를 사용하여 명시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트포워딩 상태 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PowerShell(관리자)에서&lt;/p&gt;
&lt;pre id=&quot;code_1752543688772&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;netsh interface portproxy show all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 출력에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752543700189&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Listen on IPv4:             Connect to IPv4:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         2222        172.xx.xx.xx    22&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OS/Windows</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/710</guid>
      <comments>https://210one2.tistory.com/710#entry710comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:45:54 +0900</pubDate>
    </item>
    <item>
      <title>WSL 내부 계정 확인&amp;middot;생성하기</title>
      <link>https://210one2.tistory.com/709</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;WSL의 SSH 서버는 &lt;b&gt;Windows 계정&lt;/b&gt;이 아니라 &lt;b&gt;WSL(리눅스) 사용자 계정&lt;/b&gt;을 사용합니다.&lt;br /&gt;따라서 sftp test1@localhost 접속 시 &amp;ldquo;Permission denied&amp;rdquo;가 뜨면 해당 리눅스 계정이 없거나 비밀번호가 설정되지 않았을 가능성이 큽니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 계정 존재 여부 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WSL 터미널에서 아래 명령을 입력해 보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test1은 아이디&lt;/p&gt;
&lt;pre id=&quot;code_1752542863582&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;getent passwd test1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 출력이 없으면 계정이 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 계정 생성 및 비밀번호 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wsl 터미널에서 계정 추가&lt;/p&gt;
&lt;pre id=&quot;code_1752542908690&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo adduser test1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 프롬프트에 따라 비밀번호와 정보를 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요시 sudo 그룹에 추가&lt;/p&gt;
&lt;pre id=&quot;code_1752542963737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo usermod -aG sudo test1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OS/Linux</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/709</guid>
      <comments>https://210one2.tistory.com/709#entry709comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:29:35 +0900</pubDate>
    </item>
    <item>
      <title>vim 에디터로 파일 수정하는 기본 흐름</title>
      <link>https://210one2.tistory.com/708</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 편집 모드 진입 (Insert Mode)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vim은 기본적으로 &lt;b&gt;커맨드 모드&lt;/b&gt;로 시작합니다.&lt;/li&gt;
&lt;li&gt;키보드에서 i 키를 눌러 &lt;b&gt;삽입(편집) 모드&lt;/b&gt;로 전환하세요.&lt;/li&gt;
&lt;li&gt;화면 하단에 -- INSERT --가 보이면 편집 모드가 활성화된 상태입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 내용 수정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방향키(또는 h j k l)로 커서 이동 후 텍스트를 추가&amp;middot;삭제&amp;middot;변경합니다.&lt;/li&gt;
&lt;li&gt;원하는 설정을 입력하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 저장 및 종료&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;커맨드 모드로 복귀&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장 후 종료&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장만 하고 나가기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장 없이 강제 종료&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;:q! + Enter&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nano 에디터로 더 쉽게 편집하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vim 사용이 익숙하지 않다면 nano를 설치해 간단히 편집할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1752542555997&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install nano -y
sudo nano /etc/파일명&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;저장&lt;/b&gt;: Ctrl + O &amp;rarr; Enter&lt;/li&gt;
&lt;li&gt;&lt;b&gt;종료&lt;/b&gt;: Ctrl + X&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/Linux</category>
      <category>linux</category>
      <category>nano</category>
      <category>vim</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/708</guid>
      <comments>https://210one2.tistory.com/708#entry708comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:23:25 +0900</pubDate>
    </item>
    <item>
      <title>Windows에서 WSL SFTP 서버 구축 가이드</title>
      <link>https://210one2.tistory.com/707</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SFTP는&amp;nbsp;&quot;Secure&amp;nbsp;File&amp;nbsp;Transfer&amp;nbsp;Protocol&quot;의&amp;nbsp;약자로,&amp;nbsp;원격으로&amp;nbsp;파일을&amp;nbsp;안전하게&amp;nbsp;전송하기&amp;nbsp;위한&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;현재 작업은 윈도우에 wsl에 openssh 서버를 설치하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 비슷할거임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows Subsystem for Linux(WSL)를 활용해 Ubuntu 등 리눅스 환경에 SFTP 서버를 설치하고, Windows 호스트에서 접근하도록 포트포워딩까지 설정하는 방법을 단계별로 정리합니다.&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;1. WSL 환경 접속&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 터미널(또는 PowerShell) 실행&lt;/li&gt;
&lt;li&gt;설치된 배포판&amp;middot;버전 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752541816581&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wsl -l -v&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ubuntu 배포판 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752541842964&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wsl -d Ubuntu&lt;/code&gt;&lt;/pre&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. OpenSSH 서버 설치 (WSL 내부)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패키지 목록 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752541865301&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OpenSSH 서버 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752541891208&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install openssh-server -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. sshd_config 설정&lt;/p&gt;
&lt;pre id=&quot;code_1752541911444&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필수 수정 항목:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Port 22&lt;/li&gt;
&lt;li&gt;PasswordAuthentication yes&lt;/li&gt;
&lt;li&gt;PubkeyAuthentication yes&lt;/li&gt;
&lt;li&gt;Subsystem sftp internal-sftp&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요 시 PermitRootLogin no, ChrootDirectory 등 추가 설정 후 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. SSH 서비스 시작 및 상태 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 서비스 시작&lt;/li&gt;
&lt;li&gt;서비스 상태 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752541924242&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo service ssh status&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. WSL 내 로컬 접속 테스트&lt;/p&gt;
&lt;pre id=&quot;code_1752541929358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sftp &amp;lt;사용자&amp;gt;@localhost&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비밀번호 또는 공개키 인증이 정상 작동하는지 검증합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. Windows &amp;harr; WSL2 네트워크 연결 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WSL2는 NAT 환경이므로, Windows 호스트에서 WSL 내부 SSH 포트(22)를 외부로 노출해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.WSL 내부 IP 확인&lt;/p&gt;
&lt;pre id=&quot;code_1752541984086&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wsl hostname -I&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.PowerShell(관리자)에서 포트포워딩 추가&lt;/p&gt;
&lt;pre id=&quot;code_1752541996858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;netsh interface portproxy add v4tov4 `
  listenport=2222 listenaddress=0.0.0.0 `
  connectport=22 connectaddress=&amp;lt;WSL_IP&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.Windows 방화벽 규칙 추가&lt;/p&gt;
&lt;pre id=&quot;code_1752542004623&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;New-NetFirewallRule -DisplayName &quot;WSL2 SSH&quot; `
  -Direction Inbound -LocalPort 2222 `
  -Protocol TCP -Action Allow&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 최종 접속 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 또는 외부 시스템에서 SFTP 접속:&lt;/p&gt;
&lt;pre id=&quot;code_1752542054960&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sftp -P 2222 &amp;lt;사용자&amp;gt;@&amp;lt;Windows_호스트_IP&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 WSL 내부의 SFTP 서버로 파일 업&amp;middot;다운로드가 가능합니다.&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;** 첫 연결시 yes 선택&lt;/p&gt;
&lt;pre id=&quot;code_1752542657070&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED9 key fingerprint is SHA256:
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no)?&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계에서 &lt;b&gt;yes&lt;/b&gt;를 입력하면, 해당 키가 ~/.ssh/known_hosts 파일에 저장되어&lt;br /&gt;다음 연결부터는 다시 묻지 않게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;**그 외&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;openssh 설치 시 나오는 sshd 구성 파일 업데이트 시 선택 가이드&lt;/p&gt;
&lt;pre id=&quot;code_1752542131350&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;A new version (/tmp/tmp.25o6uLX6gk) of configuration file /etc/ssh/sshd_config is available, but the version   
│ │ installed currently has been locally modified.                                                                 │ │                                                                                                                
│ │ What do you want to do about modified configuration file sshd_config?                                          │ │                                                                                                                
│ │                              install the package maintainer's version                                          
│ │                              keep the local version currently installed                                        
│ │                              show the differences between the versions                                         
│ │                              show a side-by-side difference between the versions                               
│ │                              show a 3-way difference between available versions                                
│ │                              do a 3-way merge between available versions                                       
│ │                              start a new shell to examine the situation&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSHD 구성 파일 업데이트 시 선택 가이드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 업그레이드 중 /etc/ssh/sshd_config 에 새 버전이 나오면 dpkg가 아래 옵션을 제시합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;install the package maintainer&amp;rsquo;s version&lt;/li&gt;
&lt;li&gt;keep the local version currently installed&lt;/li&gt;
&lt;li&gt;show the differences between the versions&lt;/li&gt;
&lt;li&gt;show a side-by-side difference between the versions&lt;/li&gt;
&lt;li&gt;show a 3-way difference between available versions&lt;/li&gt;
&lt;li&gt;do a 3-way merge between available versions&lt;/li&gt;
&lt;li&gt;start a new shell to examine the situation&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천 절차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;백업하기&lt;/b&gt;&lt;br /&gt;모든 선택 전에 현 sshd_config 파일을 별도 백업하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1752542275293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경 사항 확인하기&lt;/b&gt;&lt;br /&gt;직접 수정한 내용이 있다면, 새 패키지 버전과의 차이를 먼저 봅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1752542283453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;show the differences between the versions&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1752542290993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;show a side-by-side difference between the versions&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 어떤 설정이 추가&amp;middot;삭제&amp;middot;변경됐는지 파악할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선택하기(기존 설정 유지)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1752542306109&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;keep the local version currently installed&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전 초기화해서 패키지 기본값으로 돌아가기&lt;/p&gt;
&lt;pre id=&quot;code_1752542347864&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;install the package maintainer's version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수동 병합(옵션: 로컬 설정과 새 버전을 동시에 반영)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1752542391471&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;do a 3-way merge between available versions&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서비스 재시작&lt;/b&gt;&lt;br /&gt;선택이 완료되면 반드시 SSHD를 재시작하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1752542435087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo service ssh restart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정을 &lt;b&gt;유지&lt;/b&gt;하려면 &amp;ldquo;keep the local version&amp;rdquo;&lt;/li&gt;
&lt;li&gt;기본값으로 &lt;b&gt;재설치&lt;/b&gt;하려면 &amp;ldquo;install the package maintainer&amp;rsquo;s version&amp;rdquo;&lt;/li&gt;
&lt;li&gt;두 설정을 &lt;b&gt;비교&lt;/b&gt;하려면 &amp;ldquo;show the differences&amp;rdquo; 또는 &amp;ldquo;side-by-side difference&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;백업&lt;/b&gt; 후에 선택하고, 완료 뒤 sudo service ssh restart 해주세요.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/Windows</category>
      <category>openSSH</category>
      <category>sftp</category>
      <category>window</category>
      <category>WSL2</category>
      <author>원2</author>
      <guid isPermaLink="true">https://210one2.tistory.com/707</guid>
      <comments>https://210one2.tistory.com/707#entry707comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:21:39 +0900</pubDate>
    </item>
  </channel>
</rss>