WinSCP 다운로드 링크 https://winscp.net/eng/download.php

 

WinSCP :: Official Site :: Download

WinSCP 6.5 Download WinSCP 6.5 is a major application update. New features and enhancements include: Thumbnail view in file panels. Three selectable sizes of toolbar icons, showing slightly larger size by default. Switching to Segoe UI font with slightly l

winscp.net

 

1. SCP란?

  • 정의
    • SCP(Secure Copy Protocol)는 SSH를 기반으로 로컬 컴퓨터와 원격 서버 사이에서 파일을 안전하게 복사하는 프로토콜입니다.
  • 특징
    • SSH 암호화를 그대로 사용하기 때문에 보안에 강함
    • 별도 프로그램 없이 터미널 명령어 하나로 파일 전송 가능
    • 업로드(Local → 서버)와 다운로드(서버 → Local) 모두 지원

 


2. 명령어 구조

  • Local → AWS 서버 (업로드)
    scp [옵션] [파일] [계정]@[원격IP]:[경로]
     
    local -> AWS 서버 업로드 터미널 실행 이미지
    번호 항목 설명
    -i "키파일.pem" 인증에 사용할 pem 키 파일 경로
    "전송할 파일" 로컬 파일 경로
    oooo@0.00.00.xxx 서버 계정@IP
    :/home/ooo/scp_test 서버에 저장할 경로
  • AWS → Local (다운로드)
    scp [옵션] [계정]@[원격IP]:[원격파일] [로컬경로]
     

AWS 서버 -> local 다운로드 터미널 실행 이미지

 

번호 항목 설명
-i "키파일.pem" 인증에 사용할 pem 키 파일 경로
oooo@0.00.00.xxx 서버 계정@IP
:/home/ooo/test/AWS_to_local.txt 서버에서 가져올 파일 경로
C:\scp\scp_test 내 컴퓨터에 저장할 경로 (다운로드 목적지)

- 만약 AWS 서버안의 폴더를 전체 복사하려면 -r 옵션 사용

scp -i  키파일.pem -r 사용자명@서버주소:서버폴더경로 로컬저장경로

 


3. WinScp란?

  • 정의
    WinSCP는 Windows 환경에서 사용하는 파일 전송 프로그램이다.
    명령어 대신 마우스로 파일을 드래그해서 서버에 업로드하거나 다운로드할 수 있는 GUI 툴
  • 즉, SCP가 명령어 기반 파일 전송 방식이라면, WinSCP는 이를 화면에서 쉽게 사용할 수 있게 해주는 프로그램
  • 사용방법
    1.  WinSCP 다운로드: https://winscp.net/eng/download.php

    2. PuTTY 에서 등록된 세션 가져오기 (도구 -> 가져오기 -> PyTTY 선택 -> 가져오고자 하는 세션 선택(test) -> 확인



      3. test 선택하고 -> 로그인 버튼 클릭

 

 

       4. test 선택하고 -> 로그인 버튼 클릭

 

 

       5. 사용자명 입력하고 -> 확인버튼

 

 

       6. 서버 접속 왼쪽 Server / 오른쪽 Local => Drag % Drop으로 쉽게 폴더 및 파일 업로드, 다운로드 가능 


4. 최종요약

SCP는 SSH 기반으로 파일을 안전하게 전송하는 명령어 방식이다.

로컬 PC와 원격 서버 사이에서 파일을 업로드하거나 다운로드할 때 사용한다.


WinSCP는 Windows에서 사용할 수 있는 GUI 기반 파일 전송 프로그램이다.

명령어 없이 서버 폴더를 확인하고 파일을 드래그해서 옮길 수 있어 초보자에게 편리하다.

 

 

 

 

 

다운로드 링크: https://sourceforge.net/projects/mremoteng.mirror/

 

mRemoteNG

Download mRemoteNG for free. mRemoteNG is the next generation of mRemote, open source. mRemoteNG ("Multi‑Remote Next Generation") is a free, open‑source, tabbed remote connection manager for Windows. It consolidates multiple remote protocols (e.g., RDP

sourceforge.net

 

1. mRemoteNG란?

mRemoteNG는 여러 원격 접속 정보를 한 곳에서 관리할 수 있는 원격 접속 관리 프로그램.

mRemoteNG = 여러 서버 접속 정보를 한 번에 관리하는 프로그램

 


2. mRemoteNG를 사용하는 이유

  • 서버를 한두 개만 관리한다면 PuTTY나 원격 데스크톱만 사용해도 충분.
    하지만 회사 업무에서는 보통 여러 서버에 자주 접속함.
  • 예를 들자면,
    구분 예시
    개발 서버 테스트 및 개발 작업
    운영 서버 실제 서비스 운영
    DB 서버 데이터베이스 접속
    배포 서버 프로그램 배포
    고객사 서버 외부 시스템 관리
    이런 서버들을 매번 IP, 포트, 계정 정보를 입력해서 접속하면 번거롭다.
  • 위와 같은 이유들로 mRemoteNG를 사용하면 접속 정보를 저장해두고, 필요할 때 더블클릭으로 바로 접속할 수 있다.
    => 즉, 다중 서버 접속 편리하게 해주는 툴 = mRemoteNG

3. mRemoteNG 설치 및 실행 방법

  • Download
    다운로드하기
  • 압축 해제 후 .exe 파일 실행하기

다운로드 받은 폴더 안의..exe파일 실행

 


4. PuTTy에 연결

  • mRemoteNG에서 SSH 접속을 할 때 PuTTY와 함께 사용하는 경우가 많다. (참고)PuTTY 사용법 정리
    ⇒ 이유는 역할도 다르고 편리함이라는 장점이 있기 때문이다.
    프로그램 역할
    PuTTY 실제 SSH 접속을 수행하는 터미널 프로그램
    mRemoteNG 여러 접속 정보를 관리하고 탭으로 보여주는 관리 도구
    • 즉, PuTTY는 접속 담당, mRemoteNG는 관리 담당이라고 볼 수 있다,
    • PuTTY의 SSH 설정은 그대로 쓰고, mRemoteNG의 서버 관리 기능을 함께 사용할 수 있다는 것이 가장 큰 장점이다.

  • 방법
    - 도구 -> 옵션

    - 고급 -> 사용자 정의 PuTTY 경로 사용 선택 -> 검색 -> putty.exe 경로 선택
    (경로는 터미널에서 "where pputty"로 찾을 수 있다.)

 

 


5. 새 연결 만들기

  • 오른쪽 마우스로 연결 클릭 -> 새 연결 클릭

 

  • 내용입력
    1. 이름: 원하는대로 
    2. 호스트 이름/IP : 접속하고자 하는 서버의 IP 입력
    3. 사용자 이름: 접속하고자 하는 서버에서 설정한 사용자 이름 입력
    4. 프로토콜: SSH 버전 2 선택
    5. 포트: oo
    6. PuTTY 세션: putty에 저장해둔 접속하고자 하는 서버의 세션 클릭

  • 더블클릭 or 오른쪽 마우스 눌러서 -> 연결 클릭 -> AWS 서버 접속 성공

접속 연결 확인

 

다중서버 접속 가능


7. 최종정리

mRemoteNG는 여러 서버 접속 정보를 한 곳에서 관리할 수 있는 원격 접속 관리 도구이다.

서버가 한두 개라면 PuTTY만 사용해도 충분하지만, 개발 서버, 운영 서버, DB 서버처럼 접속 대상이 많아지면 매번 IP, 포트, 계정 정보를 입력하는 과정이 번거로워진다.

이때 mRemoteNG를 사용하면 서버 정보를 미리 저장해두고, 필요할 때 더블클릭으로 바로 접속할 수 있다.


특히 PuTTY와 함께 사용하면 다음과 같은 장점이 있다.

PuTTY = SSH 접속 담당
mRemoteNG = 서버 목록 관리 담당

즉, PuTTY의 SSH 접속 기능은 그대로 활용하면서 mRemoteNG의 탭 관리, 서버 목록 정리, 다중 접속 관리 기능을 함께 사용할 수 있다.
(참고)SSH 원리 쉽게 정리

정리하면 mRemoteNG는 서버를 자주 다루는 개발자나 운영 담당자가 여러 접속 정보를 깔끔하게 관리하고 빠르게 접속하기 위해 사용하는 실무형 도구이다.

다운로드 링크: https://putty.softonic.kr/

1. PuTTY란?

PuTTY는 Windows 환경에서 SSH를 이용해 서버에 접속할 수 있게 해주는 원격 접속 프로그램이다.

쉽게 말하면, 내 컴퓨터에서 AWS EC2 같은 리눅스 서버에 접속해 명령어를 입력할 수 있게 해주는 프로그램이다.

(참고) SSH 원리 쉽게 정리 (Public Key / Private Key란?) feat.AWS

 

2. PuTTY를 사용하는 이유

Windows에서 리눅스 서버에 접속하려면 SSH 접속 프로그램이 필요한데, 이때 많이 사용하는 프로그램이 PuTTY이다.
PuTTY를 사용하면 아래 작업을 할 수 있다.

- AWS EC2 서버 접속
- 리눅스 명령어 실행
- 서버 설정 변경
- 파일 및 프로그램 관리
- 서비스 실행 및 배포

 

3. AWS EC2 접속 전 준비물

  • PuTTY로 서버에 접속하려면 아래 정보가 필요하다.
    준비물 설명
    EC2 Public IP 접속할 서버 주소
    사용자 이름 서버 OS별 기본 계정
    Private Key AWS에서 받은 .pem 파일
    PuTTY SSH 접속 프로그램
    PuTTYgen .pem을 .ppk로 변환하는 프로그램

 

4. .pem 파일을 .ppk 파일로 변환하기 (PuTTygen 활용)

AWS에서 다운로드한 Private Key는 보통 .pem 파일이다. 

하지만 PuTTY는 .pem 파일을 그대로 사용하지 않고 .ppk 파일을 사용한다

AWS Private Key = .pem
PuTTY Private Key = .ppk

 

  • 변환 방법
    •  PuTTYgen 실행 -> Conversions -> Import Key 



    • ppk로 변환할 pem 파일 선택 


    • Save private key 누르면 -> .ppk파일 생성

 

5. PuTTY로 AWS EC2 접속하기

  • PuTTY 실행
    - Host name: 접속할 EC2 서버 정보를 입력
    - Saved Sessions: 현재 설정하는 정보 이름 입력 -> Save 버튼 누르면 저장


  • Private Key 등록
    - Category 에서 SSH/AUTH/Credentials: 여기서 4번에서 생성한 .ppk 파일을 업로드해준다.
    - private key 등록 이유: EC2 서버에 접속할 권한이 있음을 증명하기 위한 인증 설정
    - 장점: 비밀번호 입력 필요 없음 = 편의성 + 보안성(안전함)
    (참고)SSH 원리 쉽게 정리 (Public Key / Private Key란?) feat.AWS


    • 설정이 끝나면 설정한 Session 선택해서 -> Load -> Open 클릭

 

    • login as에 로그인 사용자명 입력하면 -> 자동으로 AWS 서버 접속 성공!

 


6. 최종요약

PuTTY는 Windows 환경에서 AWS EC2 같은 리눅스 서버에 SSH 방식으로 접속할 수 있게 해주는 원격 접속 프로그램이다.

AWS에서 받은 Private Key는 기본적으로 .pem 파일이지만, PuTTY에서는 .ppk 파일을 사용하기 때문에 PuTTYgen을 통해 변환이 필요하다.

전체 접속 흐름은 아래와 같다.

1. PuTTY 설치
2. AWS EC2 Public IP 확인
3. .pem 파일 준비
4. PuTTYgen으로 .pem → .ppk 변환
5. PuTTY 실행
6. Host Name에 EC2 Public IP 입력
7. SSH/Auth/Credentials에서 .ppk 파일 등록
8. Session 저장 후 Open 클릭
9. login as에 사용자명 입력
10. AWS EC2 서버 접속 완료

.pem 파일을 .ppk로 변환하고,
PuTTY에 EC2 주소와 Private Key를 등록하면,
Windows에서도 AWS EC2 서버에 SSH로 접속할 수 있다.
 

 

 

 

1. SSH란?

SSH는 Secure Shell의 약자이다. 서버에 안전하게 접속하기 위한 원격 접속 통신 방식이다.

쉽게 말하면, 내 컴퓨터에서 다른 서버에 접속해 명령어를 실행할 수 있게 해주는 보안 통신 기술 이라고 생각하면 된다.

예를 들어 아래와 같은 작업을 할 때 SSH를 사용한다.

  • AWS EC2 서버 접속
  • 리눅스 서버 관리
  • 원격 명령어 실행
  • 서버 파일 수정
  • 프로그램 실행 및 배포

개발자나 서버 관리자는 거의 필수적으로 사용하는 기술이다.

 

 

2. SSH는 왜 사용하는가?

과거에는 Telnet이라는 원격 접속 방식이 많이 사용되었다. 하지만 Telnet은 보안이 매우 약했다. 아이디와 비밀번호가 암호화되지 않은 상태로 네트워크에 전달되었기 때문이다.

 

SSH는 이러한 문제를 해결하기 위해 등장했다. SSH는 데이터를 암호화하여 전송하기 때문에 훨씬 안전하다.


3. SSH는 왜 안전한가?

SSH는 기본적으로 암호화 통신을 사용한다.

즉,

내 PC <-> 서버

사이에서 오가는 데이터가 암호화된다. 따라서 중간에서 누군가 데이터를 가로채더라도 내용을 쉽게 확인할 수 없다.

특히 SSH는 단순 비밀번호 방식보다 더 안전한

Key 기반 인증 방식

을 많이 사용한다.

이때 등장하는 개념이 바로

  • Public Key
  • Private Key


4. Public Key / Private Key란?

SSH 접속에서 가장 중요한 개념이다. SSH는 보통 비밀번호 대신 "Key 인증 방식"을 사용한다.

이때 두 개의 키가 사용된다.

종류 설명
Public Key 공개키
Private Key 개인키

두 키는 서로 연결된 한 쌍이다.

  • Public key 란?
    정의: Public Key는 서버에 저장되는 공개키이다. 외부에 공개되어도 비교적 안전하다.(역할은 쉽게 말해 "자물쇠"이다.)
    => 서버는 이 Public Key를 기준으로 접속 가능한 사용자인지 확인한다.
  • Private Key란?
    정의: Private Key는 사용자가 직접 보관하는 개인키이다. 절대 외부에 유출되면 안 된다. (역할은 "열쇠"라고 생각)
    => 유출시 다른 사람이 서버에 접속할 수 있다.


5. SSH 인증 구조 이해하기

쉽게 비유하면 아래와 같다.

Public Key  = 자물쇠
Private Key = 열쇠

서버에는 Public Key라는 자물쇠가 걸려 있다. 사용자는 Private Key라는 열쇠를 활용해 접속을 시도한다.
*단, server에 직접 private key를 보내는게 아니다!

Private Key는 철벽 보안: 열쇠(Private Key)는 절대 네트워크를 타고 서버로 가지 않습니다. 
오직 내 PC에만 저장됩니다.

인증 원리 (Challenge-Response):
1. 서버: "이 암호화된 문제 풀 수 있어?" (Challenge)
2. 내 PC: (내 열쇠로 문제를 풀어서) "정답은 이거야!" (Response)

결론: 열쇠를 직접 보여주지 않고도, 문제를 푸는 능력만 보여줌으로써 주인임을 증명하는 아주 영리한 방식입니다.

Private Key는 전송되지 않는다




6. AWS EC2에서는 어떻게 사용될까?

AWS EC2 서버를 생성할 때는 Key Pair를 함께 생성한다. Key Pair는 말 그대로 두 개의 키가 한 쌍으로 구성된 인증 정보이다.

Key Pair = Public Key + Private Key

AWS EC2에서는 key pair(public, private key) 이용해 SSH 접속 인증을 처리한다.

구분 저장 위치  역할
Public Key EC2 서버 내부 접속 요청 검증
Private Key 사용자 PC 접속 인증용 열쇠
.pem 파일 = AWS EC2 접속에 사용하는 Private Key

* AWS에서 다운로드받는 Private Key 파일의 확장자는 보통 .pem이다.
  • .pem 파일이란?
    AWS에서 제공하는 Private Key 파일이다.
    구분 주요 특징 및 주의사항
    최초 다운로드 인스턴스 생성 시 딱 한 번만 가능! 분실 시 재다운로드가 불가능하니 백업 필수.
    보안 유지 .pem 파일이 유출되면 누구나 내 서버에 접속할 수 있다. (서버 프리패스권)
    금기 사항 GitHub Public 저장소에 절대 업로드 금지! (업로드 즉시 해킹 타겟이 됩니다.)

 

 

7. 최종 요약

항목 설명
SSH 서버 원격 접속 보안 통신
Public Key 서버에 저장되는 자물쇠
Private Key 사용자가 가진 열쇠
Key Pair Public + Private 한 쌍
.pem AWS에서 제공하는 Private Key

0. 들어가기 전에

※ 본 글에서는 이해를 쉽게 하기 위해 아래와 같은 예시 경로를 사용하였습니다.

원본 이미지 데이터 폴더:
D:\image data

AI 학습 프로젝트 폴더:
C:\AI_Project\data

실제 사용 환경에서는 본인이 사용하는 드라이브 및 폴더 경로에 맞게 변경해서 사용하면 됩니다.

 

1. 심볼릭 링크(Symbolic Link)란?

심볼릭 링크(Symbolic Link)는 실제 파일이나 폴더를 복사하지 않고 다른 위치에 있는 원본 폴더를 연결해서 사용하는 기능이다.

쉽게 말하면 실제 원본 폴더가 아래 위치에 있는데,
D:\image data\가지

프로젝트 진행할때는 아래 위치에 있는거 처럼 보이도록 하는 것
C:\AI_Project\data\가지

 

 

즉 정리하자면, 

로컬의 C 드라이브를 열어도
C:\AI_Project\data\가지

실제로는 D 드라이브 안으로 들어가지는 구조
D:\image data\가지

 

 

2. 심볼릭 링크를 왜 사용할까?

  • 데이터 복사 방지
    • AI 학습 데이터는 용량이 매우 크다.
    • 예를 들어
      이미지 10만 장
      클래스 수십 개
      프로젝트 여러 개
      
      =>이런 상황에서 프로젝트마다 데이터를 복사하면 SSD 용량이 금방 부족해진다
      하지만 심볼릭 링크를 사용하면
      • 실제 데이터는 한 곳에만 저장
      • 프로젝트에서는 복사 없이 연결하여 사용 가능


  • 학습 코드가 일반 폴더처럼 인식
    • YOLO, PyTorch, OpenCV 같은 학습 코드들은 대부분 심볼릭 링크를 일반 폴더처럼 인식한다.
    • 예를 들어 코드에서
      C:\AI_Project\data\가지 => 데이터를 읽더라도,
      실제로는
      
      D:\image data\가지 => 에서 가져옴
      
      - 코드 수정 필요 거의 없음
      - 데이터 관리 편리
      - 프로젝트 구조 깔끔

 

3. 심볼릭 링크 만드는 방법

  • 방법 1. CMD에서 하나씩 만들기
    • CMD 관리자 권한 실행
      윈도우 검색창에 "cmd" 입력 후 -> "관리자 권한으로 실행"
    • 프로젝트 폴더 생성
      mkdir "C:\AI_Project\data"
    • 심볼릭 링크 생성
      mklink /D "C:\AI_Project\data\test" "D:\image data\test"
      
      // 명령어 구조
      mklink /D "링크 위치" "실제 원본 위치"
       

 

4. Windows에서는 Junction(/J)도 많이 사용

실무에서는 폴더 연결 시 /J 옵션도 많이 사용한다. 

mklink /J "C:\AI_Project\data\가지" "D:\image data\가지"

 

  • /D 와 /J 차이
    명령어  의미  특징
    /D 심볼릭 링크 일반 symbolic link
    /J Junction 링크 Windows 폴더 연결에 안정적

 

5. 여러 폴더 한 번에 연결하기

폴더가 수십 개라면 하나씩 만드는 건 비효율적이다. PowerShell을 사용하면 자동으로 한 번에 생성 가능하다.

  • PowerShell 관리자 권한 실행 후 입력
    $source = "D:\image data”
    $target = “C:\AI_Project\data”
    
    New-Item –ItemType Directory –Force –Path $target
    
    Get-ChildItem $source –Directory | ForEach-Object {
        $linkPath = Join-Path $target $_.Name
        cmd /c mklink /D "$linkPath" "$($_.FullName)"
    }
     
  • 실행 결과

 

6. 새 폴더만 추가 생성하는 방법

이미 링크가 있는 폴더는 건너뛰고, 새롭게 추가된 폴더만 생성하려면 아래 명령어 실행

$source = "D:\image data"
$target = "C:\AI_Project\data"

New-Item -ItemType Directory -Force -Path $target

Get-ChildItem $source -Directory | ForEach-Object {
    $linkPath = Join-Path $target $_.Name

    if (!(Test-Path $linkPath)) {
        cmd /c mklink /D "$linkPath" "$($_.FullName)"
    }
}

 

7. 심볼릭 링크 확인 방법

CMD에서

cd "C:\AI_Project\data"

-> 이동 후

dir

입력

 

  • 정상 생성 시

 

8. 삭제 시 주의사항

  • 심볼릭 링크된 폴더 삭제
    C:\AI_Project\data\가지
    
    삭제시
    -> 링크만 삭제됨
    -> 원본 데이터 유지
  • (주의) 심볼릭 링크된 폴더 안에 들어가서 파일 삭제시 => 원본 폴더 안의 파일도 삭제됨
    즉, C:\AI_Project\data\가지 폴더안의 사진 파일 하나 삭제시
    D:\image data\가지 폴더 안에 있는 사진 파일 동일하게 삭제 됨
     

 

9. 최종 정리

심볼릭 링크(Symbolic Link)는 실제 데이터를 복사하지 않고 다른 위치의 폴더를 연결해서 사용하는 기능이다.

 

특히 AI 이미지 학습에서는 저장공간 절약, 데이터 관리 효율화, 프로젝트 구조 정리에 유용하다.

1. CVAT이란?

CVAT(Computer Vision Annotation Tool)은 이미지나 영상에 객체 라벨링(주석 작업)을 할 수 있는 오픈소스 도구다.
다운로드 없이 바로 웹에서도 사용 가능
링크: https://www.cvat.ai/

 

Leading Data Annotation Platform for Images, Videos and 3D | CVAT

Annotate smarter with CVAT, the industry-leading visual data annotation platform for machine learning. Used and trusted by teams at any scale, for data of any scale.

www.cvat.ai

 

2. 로그인

  • 구글, github로 로그인 가능

 

3. 새로운 Task 만들기

  • Tasks -> + -> Create a new task

 

4. 라벨 이름 및 색상 정하기

    • Labels에서 라벨 이름과 색상 지정 가능 -> Continue 버튼 누르면, 라벨 저장 되고 Raw에서 확인 가능

 

5. 라벨링 할 이미지 업로드

  • 이미지 업로드 후 Submit & Open 버튼클릭

 

6. 라벨링 하기

    • Jobs에 들어가서 생성된 Task 클릭

 

  • 네모 박스를 누른 후 라벨링 -> 매우 직관적으로 가능(마우스 사용)

 

7. 라벨링 데이터 Export 하기

  • Json 파일로 Export

 

    • .txt 파일로 Export
      • YOLO 형식의 경우 .txt 파일로 데이터 라벨링

 

1. 펌웨어란?

펌웨어(Firmware)는 하드웨어 장치를 동작시키기 위해 장치 내부에 저장되어 있는 기본 제어 프로그램이다.쉽게 말하면, 컴퓨터나 전자기기가 전원을 켰을 때 어떻게 동작해야 하는지 알려주는 내장 소프트웨어라고 볼 수 있다.

즉, ‘하드웨어용 소프트웨어’라고도 하고 하드웨어 안의 내장된 프로그램 코드를 의미한다.

예를 들어 공유기, 프린터, 스마트폰, 자동차 전자장치, IoT 기기, 세탁기, 로봇청소기 등은 모두 내부에 펌웨어를 가지고 있다.


2. 왜 펌웨어가 필요한가

하드웨어는 스스로 아무것도 하지 못한다.

  • 버튼을 눌렀을 때
  • 센서를 읽을 때
  • 모터를 돌릴 때

=> 이 모든 동작을 정의해주는 것이 펌웨어

즉, 쉽게 예를 들자면

하드웨어 = 몸

펌웨어 = 뇌 (기본 동작 담당)


3. 펌웨어의 특징

  • 기기 내부에 존재
    • ROM / Flash 메모리에 저장됨
    • 외부 프로그램 없이도 동작 가능
  • 하드웨어와 매우 밀접
    • CPU, 센서, 통신칩 직접 제어
    • OS보다 더 낮은 레벨
  • 업데이트 가능
    • 예전에는 고정 -> 지금은 OTA로 업데이트
    • 케이블 없이 무선으로 소프트웨어/펌웨어를 업데이트하는 방식OTA란?
      우리가 흔히 휴대폰에서 보는 “업데이트하시겠습니까?” ⇒이게 바로 OTA다.


4. 펌웨어와 일반 소프트웨어 차이

구분 펌웨어 일반 소프트웨어

구분 펌웨어  일반 소프트웨어
목적 하드웨어 제어 사용자 기능 제공
위치 기기 내부 메모리 저장장치, 서버, 앱 영역
사용자 접근 직접 수정 어려움 설치·삭제·수정 쉬움
예시 BIOS, 공유기 펌웨어, 프린터 펌웨어 카카오톡, 엑셀, 게임, 웹브라우저

쉽게 정리하면,

소프트웨어가 사용자가 직접 사용하는 프로그램이라면, 펌웨어는 기계가 제대로 움직이기 위해 내부에서 동작하는 프로그램이다.


5. 실제 예시로 이해하기

  • 키보드
    • 키 입력 감지
    • 신호 변환
    • PC로 전달
      ⇒ 이 과정 전부 펌웨어가 수행
  • 스마트폰
    • 카메라 모듈 제어
    • 배터리 충전 관리
    • 통신칩 제어
      ⇒우리가 보는 앱이 아니라 기본 동작은 펌웨어가 담당


6. 최종 요약

펌웨어는 하드웨어를 움직이기 위해 기기 내부에 저장된 기본 제어 프로그램이다.

일반 소프트웨어가 사용자가 직접 사용하는 프로그램이라면,

펌웨어는 사용자가 직접 보거나 조작하지 않아도 기기 내부에서 하드웨어가 정상적으로 작동하도록 제어하는 프로그램이다.


즉, 전자기기가 전원을 켜고, 버튼 입력을 받고, 센서값을 읽고, 모터나 통신칩 같은 부품을 제어할 수 있는 이유는 내부에 펌웨어가 있기 때문이다.


정리하면,

펌웨어는 하드웨어와 소프트웨어 사이에서 기기의 기본 동작을 담당하는 핵심 프로그램이다.

 

1. 토큰(Token)이란?

토큰(Token)은 사용자를 인증하기 위한 디지털 출입증이라고 볼 수 있다.
기존 방식에서는 사용자가 요청할 때마다 아이디와 비밀번호를 확인해야 했다면, 토큰 방식에서는 로그인 후 발급받은 토큰을 이용해 사용자를 인증한다.

즉, 사용자는 한 번 로그인한 뒤 서버로부터 토큰을 발급받고, 이후 API를 요청할 때마다 이 토큰을 함께 보내 인증을 받는다.


2. 토큰(Token) 종류

    • JWT (Json Web Token)
      정의: 사용자 식별 정보(Claim)를 담은 토큰
      구조: Header.Payload.Signature
      * Header: 토큰 생성 방식 설명
      * Payload: 사용자 정보 (id, 권한, 만료시간 등)
      * Signature: 위변조 방지용 서명

      다만 JWT는 암호화된 토큰이 아니다.
      Base64 방식으로 인코딩되어 있기 때문에 누구나 내용을 확인할 수 있다.
      * Base64 방식: 데이터를 사람이 읽기 쉬운 문자 형태로 변환하는 인코딩 방식이다 (암호화 아님)
      따라서 JWT 안에는 비밀번호, 주민번호, 개인정보 같은 민감정보를 절대 넣으면 안 된다.

      *민감정보 넣으면 안 되는 이유 보충설명*
      //Playload 부분 
      {
        "sub":"user123",
        "role":"admin",
        "exp":1710003600
      }
      ​
      => 이건 암호가 아니라 그냥 "보이는 정보" 즉, 누구나 열어볼 수 있음을 의미한다.
      => 비밀번호, 주민번호 넣으면 안 된다.


    • Access Token
      정의: Access Token은 API 요청 시 실제로 사용하는 인증 토큰

      사용자가 로그인에 성공하면 서버는 Access Token을 발급한다.
      이후 사용자는 API를 요청할 때 다음과 같이 Header에 Access Token을 담아 보낸다.
      Authorization: Bearer {Access Token}
      • 특징
        - 유효기간 짧음 (보통 5~30분) => 토큰 탈취 위험 최소화

    • Refresh Token
      정의: Access Token을 다시 발급받기 위해 사용하는 토큰

      Access Token은 보안을 위해 짧게 유지하는 것이 좋지만, 너무 자주 로그인해야 하면 사용자가 불편하다.
      이 문제를 해결하기 위해 Refresh Token을 함께 사용

      흐름
      로그인
      -> Access + Refresh Token 발급
      
      API 요청
      -> Access Token 사용
      
      Access Token 만료 
      -> Refresh Token으로 Access Token 재발급
      
      Refresh Token 만료
      -> 로그인하여 Access + Refresh Token 신규 발급
      • 특징
        - 유효기간 김
        - 보통 HttpOnly 쿠키에 저장
        *HttpOnly 쿠키: 브라우저에는 저장되지만 JS로는 못 꺼내는 안전한 쿠키
        - 서버(DB/Redis)에 저장하는 경우 많음
        *Redis: Redis는 데이터를 메모리에 저장해 매우 빠르게 읽고 쓸 수 있는 인메모리 데이터 저장소

    • OAuth2
      정의: 외부 서비스에 로그인과 권한을 맡기는 방식
      예시: 구글 로그인, 카카오 로그인, 네이버 로그인

      사용자가 우리 서비스에 직접 아이디와 비밀번호를 입력하는 대신, 구글이나 카카오 같은 외부 서비스에서 인증을 진행
      • 특징
        - 장점은 사용자의 비밀번호를 우리 서비스가 직접 관리하지 않아 -> 보안측면 유리

3. 결론 요약

JWT로 사용자 정보를 담고, Access Token으로 API를 요청하고, Refresh Token으로 인증을 이어가며, OAuth2로 외부 로그인을 처리한다.

 

1. 왜 이 개념이 필요한가?

FastAPI, Streamlit을 실행하면 보통 이렇게 접속한다.

http://localhost:8501
 

그런데 이런 상황이 생긴다.

  • 내 PC에서는 접속됨 
  • 같은 와이파이 폰에서는 접속 안됨 이유는 접속 주소 개념을 모르기 때문 

이를 이해하기위해 서버의 기본적인 개념 아래 설명


2. 서버란?

서버는 특별한 장비가 아니다.

=> 요청을 받으면 응답하는 역할 자체가 서버다 (내 pc가 server가 됨)
즉, 요청을 받으면: 서버 / 요청을 보내면: client

 

3. 접속 주소 3가지

서버에 접속하는 방법은 크게 3가지다.

1) local URL(localhost)

http://localhost:8501
  • 의미: 내 컴퓨터 자기 자신
  • 특징: 내 PC에서만 접속 가능

2) Network URL (같은 네트워크 )

http://192.xxx.xxx.xxx:8501
  • 의미: 같은 와이파이 내에서의 내 PC 주소
  • 특징: 다른 기기에서도 접속 가능
    폰 / 다른 노트북에서 접속 가능

3) External URL (외부 인터넷)

  • 의미: 외부 인터넷에서도 접속


4. Port 번호 개념

IP가 “컴퓨터 주소”라면 / Port는 “프로그램 주소”다.

192.xxx.xxx.xxx:8501
  • 192.xxx.xxx.xxx → 내 PC 주소
  • 8501 → 실행 중인 프로그램 (예: Streamlit)


5. 서버실행 

 

  • FastAPI 실행 예시
    uvicorn app.main:app --host 0.0.0.0 --port 8501 --reload
     
    부분 의미
    uvicorn FastAPI를 실행해주는 서버 프로그램
    app.main:app app 폴더 안의 main.py 파일에서 app 객체를 실행
    --host 0.0.0.0 내 PC뿐 아니라 같은 로컬 네트워크 기기 접속 허용
    --port 8501 8501번(Streamlit 기본 포트) 포트 서버 실행
    --reload 코드 수정 시 서버 자동 재시작
    *0.0.0.0은 "내 PC로 들어올 수 있는 모든 입구를 열어두겠다" 라는 서버 실행 옵션
    *그래서 같은 와이파이의 다른 기기에서도 접속 가능해진다.


6. 결론 요약

내 PC도 서버가 될 수 있고,
같은 네트워크에서는 서버 작동중인 PC의 실제 Local IP 주소 + Port로 접속한다.
(같은 네트워크에서는 Local IP + Port로 내 PC 서버에 접속할 수 있다.)

Local IP는 같은 와이파이 또는 같은 LAN에 연결된 기기들이 내 PC를 찾기 위해 사용하는 내부 네트워크 주소다.

따라서 내 PC에서 실행한 서버를 다른 기기에서 접속하려면 localhost가 아니라 192.xxx.xxx 형태의 Local IP를 사용해야 한다.

http://192.xxx.xxx.xxx:8501

 

1. YOLO 란? 

YOLO = You Only Look Once의 약자
이미지나 영상에서 물체가 무엇인지 + 어디에 있는지 한 번에 찾아내는 객체 탐지(Object Detection) AI 모델

쉽게 말하자면, 이미지 한 장을 넣으면 물체가 있는 위치를 박스로 표시하여 신뢰도 계산.
=> 즉, 식자재 하나에 여러 물체가 함께 있을 경우 사용


2. 이미지 라벨링의 목적

  • AI가 배울 수 있도록 이미지에 정답을 붙이는 작업


3. labellmg 다운로드 및 사용 방법

 

  • zip 폴더 압축 풀고 -> labellmg.exe 실행 -> 검은색 터미널 창, 하얀색 labelImg 창 뜸
    *검은색 창 닫으면 프로그램 종료 됨

 

  • class 추가 및 삭제하는 방법
    - data 폴더 안의 predefined_class.txt 파일 안에 내용 편집하고 저장하면 -> 라벨 항목에 추가되어 반영 
    (이미 labelImg 프로그램이 켜진 상태로 class 편집했다면 프로그램 끄고 다시 실행하면 편집 class 정상적으로 반영)

txt 안의 class 순서대로(0부터 시작) 번호가 지정됨 ex) cabbage는 15번

 

  • 파일 저장 방식 변경 (클릭하면 자동으로 변경)
    - PascalVOC: 객체 탐지 라벨링 형식 중 하나 => 라벨링 파일을 XML 파일로 저장
    - YOLO: 라벨링 파일을 txt 파일로 저장
    - 변경이유: YOLO학습 코드는 XML 바로 읽지 못해서 txt 변환이 필요 

 

  • img 불러오기, label 데이터 저장위치 변경
    - Open Dir: 해당 버튼을 통해서 라벨링 할 이미지 저장되어 있는 폴더 열기 -> 폴더 안 이미지 보임
    - Change Save Dir: 라벨링한 데이터를 저장하기 위한 경로 지정

 

  • 라벨링 하기 (box 표시)
    - 주요 단축키
    우선순위 기능 단축키 언제 사용 하는가?
    1 박스 생성 W 식자재 영역 박스 그릴 때
    2 저장 Ctrl + S 라벨링 끝나고 저장
    3 다음 이미지 D 다음 사진으로 넘어갈 때
    4 이전 이미지 A 이전 사진 다시 확인할 때
    5 박스 삭제 Delete 잘못 그린 박스 지울 때
    6 박스 복사 Ctrl + D 같은 객체가 여러 개 있을 때
    7 확대 / 축소 Ctrl + 마우스 휠 작은 식자재 박스 정확히 그릴 때
    8 폴더 열기 Ctrl + U 이미지 폴더 불러올 때
    - 라벨링 하기
    (w 눌러서 드레그 하여 박스 표시 후 -> 맞는 class 선택하고 -> ok 버튼 클릭 -> Ctrl+S(저장) -> 라벨링 데이터 저장)

이미지 출처: Chatgpt 생성

 

  • 라벨링 데이터 저장 확인
    - 전 단계에서 저장을 잘했다면, " Change Save Dir" 버튼을 통해 지정한 경로를 통해 class, 라벨링 데이터 저장 확인 가능

orange는 0번부터 시작된 class에서 17번째에 위치하므로 orange.txt 파일 시작이 17로 시작

 

+ Recent posts