CHIHO 자재·내역 내역 및 공정표 작성 오브젝트 오브젝트콜렉션 [공간 설계 의뢰, 오브젝트 구매] 부동산 부동산매매가 산정 회의실 온라인 회의실/메신저
Login | Join
Architecture · Media · Construction Platform

Design.
Build.
Influence.

치호건축사사무소는 건축설계와 인허가를 중심으로, 시공관리·내역·자재·부동산 분석·건축 콘텐츠를 하나로 연결하는 전문 플랫폼입니다. 실무 경험을 바탕으로 건축 정보를 쉽게 정리하고, 설계부터 실행까지 필요한 자료와 인사이트를 제공합니다.

Scroll to platform
CHIHO : 치호건축사·설계·시공·디자인·자재·부동산·지역이슈
콘텐츠를 불러오는 중입니다.
#전체보기
    Login | Join

    블로그 글 661

    전체기사 259

    Google Ads

    Banner

    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    치호건축사사무소 – 치호뉴스 최신 이슈

    검색어: Seoul — 총 4개 결과 중 최신 4개 표시
    조선·철강업계 덮친 '하투' 전운···파업 넘어 법적 공방까지 - 서울파이낸스

    조선·철강업계 덮친 '하투' 전운···파업 넘어 법적 공방까지 - 서울파이낸스

    검색어 "Seoul"이(가) 본문에서 발견되었습니다.
    펼쳐보기

    업로드 이미지

    7월 16일, 서울 대법원 앞에서 전국금속노동조합 등의 주최로 포스코 사내하청 노동자 불법파견 대법원 승소 판결 기자회견이 진행됐다. (사진=연합뉴스)

    [서울파이낸스 김완일 기자] 국내 조선·철강업계에 예년과 다른 양상의 '하투(夏鬪)' 전운이 감돌고 있다. 철강업계에선 포스코 노조가 창사 이후 첫 파업 가능성을 열어두고 있고, 조선업계에선 한화오션 하청노조가 원청의 사용자성을 둘러싼 법정 공방을 예고하며 노사 갈등이 장기화하는 모습이다. 

    일각에선 지난 3월 시행된 '노란봉투법(개정 노조법 2·3조) 이후 원청의 사용자성 문제가 원·하청 교섭 구도를 복잡하게 만든다고 지적한다. 아울러 조선업 호황에 따른 성과급 배분 요구와 잇따른 중대재해까지 겹친 점이 문제로 꼽힌다. 업계는 하계 휴가가 끝나는 8월 중순을 기점으로 조업 정상화와 파업 투쟁이 갈릴 것으로 내다보고 있다. 

    6일 업계에 따르면 현대제철은 3개월간 이어온 임금 및 단체협약(임단협) 교섭을 최근 최종 마무리하며 파업 리스크를 해소했다. 지난 5월 상견례를 시작으로 15차례의 교섭 끝에 노사는 기본급 8만원 인상과 성과급 300% 및 현금 500만원 지급 등을 골자로 한 잠정합의안을 도출했다. 조합원 찬반투표는 찬성 56.6%로 가결됐다. 

    현대제철이 길었던 임단협 갈등을 봉합한 것과는 달리, 철강 및 조선업계에는 하투의 위기감이 고조되고 있다. 포스코, HD현대중공업, 한화오션이 아직 임단협 및 하청 교섭을 마무리하지 못한 채 갈등이 이어지고 있는 까닭이다. 업계 일각에선 최근 현대제철의 사례가 다른 기업들의 협상에도 일정 부분 영향을 줄 것으로 내다보고 있다. 다만 각 회사의 경영 환경과 노사 요구가 다른 만큼 조속히 결과가 나타나긴 어려울 것으로 예상된다.  

    업로드 이미지

    포스코 사옥 전경 (사진=포스코)

    현대제철과 함께 철강업계를 대표하는 포스코는 올해 임단협 교섭에서 기본급 인상과 성과급 지급 방식을 두고 노사가 이견을 좁히지 못하고 있다. 노조는 지난달 조합원 투표에서 92.2% 찬성으로 쟁의행위를 가결했고 이후 중앙노동위원회에 노동쟁의 조정을 신청했다. 

    중노위는 2차 조정회의에서 결론을 내리지 못해 조정을 연기했고, 오는 18일 3차 조정회의가 58년 무분규 전통의 지속 여부를 가를 최종 분수령이 될 전망이다. 노조는 기본급 7.1% 인상과 격려금 600%, 우리사주 50주 지급 등을 요구하는 반면 사측은 기본급 1.2% 인상과 격려금 200만원을 제시한 상태다. 포스코는 2분기 영업이익이 전년 대비 절반으로 감소하는 등 악화되는 경영 여건이 노사 간 간극을 좁히기 어렵게 하는 요인으로 꼽힌다.

    조선업계 상황은 철강보다 한층 복잡하게 얽혀있다. HD현대중공업은 지난 6월 상견례 이후 14차례 교섭을 진행했지만, 합의점을 찾지 못하고 있다. 쟁점은 노조가 요구하는 연간 영업이익 30% 성과급이다. 반도체 업계에서 시작된 '영업이익의 N% 성과급 요구'가 최근 호황기에 접어든 조선업계에도 영향을 미친 결과로 분석된다. 

    조선업계 노조는 오랜 불황기 동안 동결되거나 삭감됐던 임금의 인상과 처우 개선을 요구하고 있는 반면, 사측은 최근 실적이 회복세에 접어들었지만, 그동안 누적된 재무 부담을 해소하고 미래 투자 재원을 확보해야 한다는 입장이다. 이에 이번 임금 협상은 단순한 임금 인상을 넘어 조선업 근로자 처우 개선 분기점이 될 것으로 관측된다.

    업로드 이미지

    한화오션 거제사업장 전경 (사진=한화오션)

    한화오션은 노란봉투법 시행 이후 처음으로 원청이 소송에 나선 사례가 됐다. 중노위가 급식·통근버스 협력업체인 웰리브 노동자에 대해 회사의 사용자성을 인정하자, 한화오션은 이 판정에 불복해 지난달 행정소송과 집행정지를 신청했다. 웰리브지회는 조합원 투표에서 84.2% 찬성으로 쟁의행위를 가결하며 합법적인 파업권을 확보했고, 금속노조는 원청이 직접 교섭에 응하지 않으면 이달 중 공동파업에 나서겠다고 예고한 상태다. 

    업계에서는 철강과 조선 모두 대외 경영환경이 녹록지 않은 상황에서 노사 갈등이 장기화할 경우 산업 전반의 경쟁력에도 부담이 될 수 있다고 보고 있다. 미국의 관세 정책과 글로벌 공급망 재편, 중국 업체들과의 경쟁 심화 등 대외 변수에 대응해야 하는 시점에서 생산 차질과 노사 갈등이 장기화할 경우 수주와 투자 계획에도 영향을 줄 수 있다는 분석이다.

    업계 한 관계자는 "현대제철처럼 협상을 마무리한 사례도 있지만 상당수 기업은 여전히 노사 간 입장 차가 크다"며 "여름 휴가가 끝나는 8월 중순 이후부터 파업으로 이어질지, 아니면 협상 타결로 마무리될지가 올해 하투의 방향을 결정하는 중요한 분기점이 될 것"이라고 말했다. 

    출처 : 서울파이낸스(https://www.seoulfn.com)


    K-팝, 소비를 넘어 경험이 되다

    K-팝, 소비를 넘어 경험이 되다

    검색어 "Seoul"이(가) 본문에서 발견되었습니다.
    펼쳐보기

    K-팝은 음악을 넘어 하나의 문화 생태계를 만들어냈다. 이제 팬들은 단순히 음악을 듣고 굿즈를 구매하는 것을 넘어 다양한 방식으로 콘텐츠를 체험하며 아티스트의 세계관에 적극적으로 참여하고 있다. 

    4년 만에 세 번째 미니 앨범으로 돌아온 블랙핑크는 몰스킨과의 협업을 통해 노래와 메시지를 기록의 언어로 재해석한 리미티드 에디션을 선보였다. 해당 에디션은 노래 가사를 적용한 타이포그래피 디자인, 블랙과 핑크의 강렬한 대비, 커스터마이징 요소를 통해 완성됐으며 팬들이 아티스트의 세계관을 시각적으로 체험하고 자신만의 방식으로 해석하도록 했다.

    업로드 이미지

    [사진=몰스킨]

     

    국립중앙박물관과의 협업 역시 주목할 만하다. 블랙핑크는 오디오 도슨트와 리스닝 세션을 통해 국립중앙박물관의 유물을 소개했고 팬들이 아티스트의 목소리를 통해 문화유산을 경험하도록 했다. 음악 산업에 머물렀던 팬덤의 활동이 문화유산, 교육, 공공기관의 영역으로 확장된 것이다.

    업로드 이미지

    [사진=YG엔터테인먼트]

     

    방탄소년단과 파르나스호텔의 협업 또한 공간 경험으로 확장된 K-팝을 보여준다. ‘BTS THE CITY ARIRANG SEOUL’ 프로젝트의 일환으로 기획된 패키지는 호텔 객실부터 굿즈, 식음료 서비스까지 하나의 통합된 브랜드 경험으로 구성됐고 팬들로 하여금 실제 공간 속에서 아티스트의 세계관을 체험하도록 했다. 공간 자체가 콘텐츠가 되는 ‘체험형 소비’의 대표적인 사례라 할 수 있다.  

    업로드 이미지

    [사진=파르나스호텔]

     

    경험경제는 이러한 변화를 이해하기 위한 중요한 개념이 된다. 위와 같은 K-팝의 다양한 확장 사례는 경험 자체가 소비의 핵심 가치가 되는 경험경제를 잘 설명하고 있다. 

    K-팝의 확장은 SNS와 디지털 플랫폼을 통해 강화되기도 한다. 이 과정에서 아티스트는 단순한 창작자가 아니라 브랜드이자 세계관의 중심이 되고 팬덤은 음악을 넘어 공간, 문화, 산업 전반을 연결하는 거대한 네트워크를 형성한다. 개인의 취향이 곧 시장을 움직이는 힘이 되는 것이다. 

    팬덤의 구조를 사회·경제적으로 분석한 책 『팬덤의 시대』는 팬덤을 단순한 열성 소비 집단으로 바라보지 않는다. 팬덤에 대해 문화를 생산하고 시장을 형성하는 경제 주체라 해석하고 콘텐츠를 소비하는 것을 넘어 확산, 재해석하며 새로운 가치를 창조하는 역할을 한다고 설명한다.

     

    앞서 언급한 블랙핑크의 굿즈, 국립중앙박물관과의 협업, BTS의 호텔 협업 프로젝트는 모두 책에서 언급되는 팬덤 경제의 구체적인 사례로 볼 수 있다. 팬덤은 이제 음악 재생을 넘어 문화를 소비하고 경험하며 세계관을 살아가는 방식으로 진화하고 있다. 

    책 『트렌드 코리아』 시리즈에서는 소비가 상품 중심에서 경험과 의미 중심으로 변화하고 있음을 말하며 개인의 취향이 소비를 이끄는 중요한 요소로 작용하는 흐름에 대한 분석을 지속적으로 제시한다.

    결국 현대사회에서는 무엇을 사느냐가 아닌 어떤 경험을 하느냐가 소비의 기준이 되고 있다. K-팝은 현대 소비문화를 대표하는 하나의 거대한 플랫폼이며 K-팝 팬덤은 단순한 문화 소비 집단을 넘어 현대 소비 구조와 문화 산업 전반의 변화를 이끄는 핵심 동력으로 작용하고 있다. 

    출처 : 독서신문(https://www.readersnews.com)


    소규모 오피스 서버(Server) 구축 - Lenovo Thinkcentre M720q

    소규모 오피스 서버(Server) 구축 - Lenovo Thinkcentre M720q

    검색어 "Seoul"이(가) 본문에서 발견되었습니다.
    펼쳐보기

    업로드 이미지


    업로드 이미지


    소규모 오피스 서버(Server) 구축 - Lenovo Thinkcentre M720q

    리눅스(Linux): 운영체제의 “핵심(커널)” 이름. 윈도우/맥과 다른 계열.

    우분투(Ubuntu): 리눅스를 바탕으로 만든 “배포판(Distribution)” 브랜드. (리눅스의 한 종류)

    우분투 서버(Ubuntu Server): 우분투의 서버용 에디션(기본적으로 GUI 없이, 서버에 필요한 구성만).



    그래서 정확히 쓰면:

    “리눅스(계열) 중 하나인 우분투의 서버용 에디션(= Ubuntu Server 24.04 LTS)”

    을 설치하자는 뜻이라서 “리눅스 우분투 서버”라고 줄여 부르는 거예요.


    Desktop vs Server 차이는?

    • 커널/명령어는 동일하고, 기본 제공 패키지와 기본 설정이 다를 뿐.

    • Server: GUI 없음(가벼움), SSH/네트워크/서비스 운영에 최적. 24/7 서버에 딱.

    • Desktop: GUI 있음(편리하지만 무거움), 개발/일상용에 편함.

    당신 목적(Flask 24시간 운용, 저전력, 가성비)이면 Ubuntu Server 24.04 LTS가 정답.


    정확한 이름/파일

    • ISO 이름 예: ubuntu-24.04.1-live-server-amd64.iso

      (M720q 같은 x86-64 PC는 이걸 쓰면 됩니다)


    0) M720q에 Ubuntu Server 24.04 LTS 설치를 처음부터 끝까지

    준비물

    • USB 메모리 8GB 이상 1개

    • 모니터/키보드(설치 때만 필요)

    • 유선 LAN 케이블(설치 중 네트워크 자동 설정에 유리)


    1) 설치 USB 만들기 (Windows에서)

    1. Ubuntu Server 24.04 LTS ISO 받기

      파일 이름 예: ubuntu-24.04.1-live-server-amd64.iso

    2. Rufus 실행 → USB 선택 → ISO 선택 → 옵션은 기본값(UEFI) 그대로 → Start

      (BalenaEtcher를 써도 괜찮음: Etcher 실행 → ISO 선택 → USB 선택 → Flash)

    팁: M720q는 UEFI 잘 지원합니다. 파티션 스킴 GPT, Target UEFI로 두면 OK.


    2) M720q 부팅 설정

    1. USB 꽂고 M720q 전원 ON

    2. F12 연타 → Boot Menu에서 USB 선택 (부팅목록이 안보이면 BIOS에서 USB Boot 허용 필요)

      • BIOS 진입: F1 연타

      • 필요한 설정(있으면):

        • Startup → CSM/Legacy: 기본 UEFI 유지

        • Security → Secure Boot: 기본 그대로 사용해도 보통 설치 가능 (안되면 Off)

        • Virtualization: 나중에 Docker에 유리하니 Enabled 추천

        • Auto power on after power loss: 정전 후 자동 켜짐 원하면 Enabled

    저장 후 재부팅 → F12 → USB로 부팅.


    3) Ubuntu Server 설치 마법사

    화면 지시에 따라 순서대로:

    1. Language: Korean(또는 English)

    2. Keyboard: Korean(101/104 자동 인식)

    3. Network: 유선 LAN 꽂혀 있으면 DHCP로 자동 연결됨 (Wi-Fi는 나중에 해도 됨)

    4. Proxy / Mirror: 비워두고 넘어가도 OK

    5. Storage:

      • Use an entire disk 선택(단일 디스크 전체 사용)

      • 파일시스템: 기본 ext4 권장 (ZFS 필요 없으면 선택 X)

      • NVMe 250GB 하나면 그대로 진행

    6. Profile setup: 서버 사용자 만들기

      • 이름, 서버명(hostname), 사용자ID, 비밀번호 설정 (기억해두기)

    7. SSH: Install OpenSSH server 체크 (필수)

    8. Featured Server Snaps: 아무것도 선택하지 말고 넘어가기

    9. 설치 진행 → 완료 후 Reboot.

    재부팅 직전에 설치 USB를 뽑아 주세요(계속 USB로 부팅되지 않도록).

    SSH(Secure Shell)

    “다른 컴퓨터(서버)에 안전하게 접속해서, 그 컴퓨터에서 직접 명령을 내려 쓸 수 있게 해 주는 통로”예요.

    암호화돼서 도중에 엿보여도 내용이 안 풀립니다.


    뭘 할 때 쓰나?

    • 원격 서버에 로그인해서 폴더 만들고, 파일 복사하고, 프로그램 설치/실행

    • Flask 서버 재시작, 로그 보기, 업데이트 등 전부 터미널로 처리

    • 파일 전송(SCP/SFTP)도 SSH 위에서 안전하게 가능


    어떻게 동작해?

    • 서버 쪽: SSH 서버(sshd) 가 22번 포트에서 대기

    • 내 PC: SSH 클라이언트로 접속

    • 인증 방식: 비밀번호 또는 키(공개키/개인키) — 키 방식이 훨씬 안전


    지금 바로 쓰는 방법 (당신 상황 기준)

    1) 서버(우분투) 준비 확인

    Ubuntu Server 설치할 때 OpenSSH server를 체크했다면 이미 켜져 있어요.

    확인:

    sudo systemctl status ssh
    

    IP 주소 확인:

    ip a   # 또는 서버 화면에 표시된 IP 확인
    

    2) 접속(내 PC → 서버)

    • Windows 10/11: PowerShell 열고

    ssh <서버사용자>@<서버IP>
    # 예: ssh ubuntu@192.168.0.50
    
    • macOS/Linux: 터미널에서 위와 동일

    처음 접속 시 “fingerprint 신뢰하겠냐” 묻는 건 정상 → yes.


    비밀번호 대신 “키”로 접속(추천)

    내 PC에서 키 만들기

    ssh-keygen -t ed25519 -C "my-laptop"
    # Enter, Enter, Enter로 넘어가면 ~/.ssh/id_ed25519 (개인키) / .pub(공개키) 생성
    

    공개키를 서버에 등록

    ssh-copy-id <서버사용자>@<서버IP>
    # ssh-copy-id가 없으면:
    # cat ~/.ssh/id_ed25519.pub 출력해서
    # 서버의 ~/.ssh/authorized_keys 파일에 붙여넣기
    

    이제부터는 비밀번호 없이:

    ssh <서버사용자>@<서버IP>
    

    안전하게 쓰는 습관

    • 개인키(id_ed25519)는 절대 공유 금지 (백업만 안전하게)

    • 서버 방화벽에서 SSH 허용:

    sudo ufw allow OpenSSH
    sudo ufw enable
    
    • 나중에 외부에 열 때는 포트포워딩 최소화 또는 VPN/Cloudflare Tunnel 사용 권장

    • 가능해지면 /etc/ssh/sshd_config에서 비밀번호 로그인 끄고(키만 허용) 보안 강화


    초간단 치트시트

    # 접속
    ssh user@SERVER_IP
    
    # 파일 보내기(로컬 -> 서버)
    scp local.txt user@SERVER_IP:/home/user/
    
    # 파일 가져오기(서버 -> 로컬)
    scp user@SERVER_IP:/home/user/log.txt .
    
    # 키 생성
    ssh-keygen -t ed25519 -C "my-laptop"
    
    # 키 등록(가능하면)
    ssh-copy-id user@SERVER_IP





    Flask 배포 순서

    “기본 보안 + Flask 서비스”


    1) 기본 업데이트 & 유틸

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y git curl htop unzip ca-certificates
    sudo timedatectl set-timezone Asia/Seoul
    

    2) 방화벽(UFW) 설정

    sudo apt install -y ufw
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp      # Nginx(HTTP)
    # HTTPS 쓸 거면 다음도:
    # sudo ufw allow 443/tcp
    sudo ufw enable
    sudo ufw status
    

    3) SSH 보안(키 로그인 권장)

    • 로컬PC에서 키가 없다면 생성:

      ssh-keygen -t ed25519 -C "my-laptop"
      
    • 서버에 공개키 등록(가능하면):

      ssh-copy-id <서버사용자>@<서버IP>
      
    • (선택, 보안강화) 비밀번호 로그인 끄기:

      sudo nano /etc/ssh/sshd_config
      # 아래처럼 변경/추가
      PasswordAuthentication no
      PermitRootLogin no
      
      sudo systemctl reload ssh
      

    4) 고정 IP(선택) — 서버 안정운영에 좋음

    ip a          # 유선 인터페이스명 확인(ex: enp0s31f6)
    sudo nano /etc/netplan/*.yaml
    

    예시:

    network:
      version: 2
      ethernets:
        enp0s31f6:
          addresses: [192.168.0.50/24]
          routes:
            - to: default
              via: 192.168.0.1
          nameservers:
            addresses: [1.1.1.1,8.8.8.8]
    

    적용:

    sudo netplan apply
    

    Flask 배포 (도커 없이 깔끔 루트)


    5) Nginx + Python 가상환경

    sudo apt install -y nginx python3-venv python3-pip
    

    6) 코드 가져오기

    GitHub에 올린 저장소를 클론(예: firstcontainer1):

    cd ~
    git clone https://github.com/<아이디>/firstcontainer1.git
    cd firstcontainer1
    python3 -m venv .venv
    source .venv/bin/activate
    # requirements.txt가 있으면:
    pip install -r requirements.txt
    # 없으면 최소:
    pip install flask gunicorn
    

    7) 앱 로컬 구동 테스트

    gunicorn -w 2 -b 127.0.0.1:5000 app:app
    
    • 다른 터미널/PC에서 http://<서버IP>:5000 접속해 확인(임시 테스트).


    8) Nginx 리버스 프록시(80 → 5000)

    sudo tee /etc/nginx/sites-available/flask <<'EOF'
    server {
        listen 80;
        server_name _;
    
        location / {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
    EOF
    sudo ln -s /etc/nginx/sites-available/flask /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
    

    → 이제 http://<서버IP>로 접속.


    9) 부팅 자동 실행(systemd)

    sudo tee /etc/systemd/system/flask.service <<'EOF'
    [Unit]
    Description=Flask via Gunicorn
    After=network.target
    
    [Service]
    User=<서버사용자>
    WorkingDirectory=/home/<서버사용자>/firstcontainer1
    Environment="PATH=/home/<서버사용자>/firstcontainer1/.venv/bin"
    ExecStart=/home/<서버사용자>/firstcontainer1/.venv/bin/gunicorn -w 2 -b 127.0.0.1:5000 app:app
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now flask
    sudo systemctl status flask --no-pager
    

    <서버사용자>를 실제 사용자명으로 바꿔 넣어줘(예: ubuntu).


    (선택) HTTPS, 자동업데이트, 모니터링


    10) HTTPS (도메인 있을 때)

    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d your.domain.com
    

    11) 보안 업데이트 자동화

    sudo apt install -y unattended-upgrades
    sudo dpkg-reconfigure unattended-upgrades
    

    12) 모니터링/로그 보기

    sudo apt install -y glances
    glances   # 실시간 상태
    journalctl -u flask -f   # Flask 서비스 로그 실시간
    

    BIOS 전원 옵션(유용)

    정전 후 자동 켜짐:

    • 부팅 시 F1 → BIOS → Power 또는 After power lossOn


    A) Git으로 옮기기 (인증 해결됐을 때 제일 깔끔)

    구름IDE 터미널에서

    cd /workspace/firstcontainer1     # 네 프로젝트 폴더
    git add .
    git commit -m "deploy"
    git branch -M main
    git push -u origin main           # (비번 대신 PAT 또는 SSH)
    

    서버(우분투)에서

    cd ~
    git clone https://github.com/<너아이디>/firstcontainer1.git
    cd firstcontainer1
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt   # 없으면: pip install flask gunicorn
    

    퍼블릭 저장소면 바로 되고, 프라이빗이면 PAT/SSH 필요(앞서 안내한 대로).


    B) SSH로 직접 복사(가장 빨리 됨) — 추천


    방법 B-1. scp 한 방에 복사 (구름IDE → 서버)

    구름IDE 터미널에서

    # 폴더 통째로 복사
    scp -r /workspace/firstcontainer1  <서버사용자>@<서버IP>:/home/<서버사용자>/
    # 예: scp -r /workspace/firstcontainer1 ubuntu@192.168.0.50:/home/ubuntu/
    

    포트가 22가 아니면 -P 2222처럼 추가.


    방법 B-2. rsync로 빠르고 반복 배포

    rsync -avz --delete /workspace/firstcontainer1/  <서버사용자>@<서버IP>:/home/<서버사용자>/firstcontainer1/
    # 마지막 슬래시( / ) 중요: 내용물만 동기화
    

    방법 B-3. ZIP으로 묶어서 전송

    cd /workspace/firstcontainer1
    zip -r app.zip .
    scp app.zip <서버사용자>@<서버IP>:~/
    ssh <서버사용자>@<서버IP> 'mkdir -p ~/firstcontainer1 && unzip -o ~/app.zip -d ~/firstcontainer1 && rm ~/app.zip'
    

    C) SFTP(그래픽 툴)로 드래그&드롭

    윈도우면 WinSCP / 맥이면 Cyberduck:

    • 호스트: <서버IP>

    • 프로토콜: SFTP

    • 포트: 22

    • 사용자/비밀번호: 서버 계정

    • 접속 후 /home/<서버사용자>/firstcontainer1로컬 폴더 통째로 업로드


    옮긴 뒤 “바로 실행” 체크리스트 (서버에서)

    cd ~/firstcontainer1
    python3 -m venv .venv
    source .venv/bin/activate
    # requirements.txt 있으면:
    pip install -r requirements.txt
    # 없으면 최소:
    pip install flask gunicorn
    
    # 임시 실행 테스트
    gunicorn -w 2 -b 127.0.0.1:5000 app:app
    

    브라우저에서 http://서버IP:5000 열어보고 보이면 OK.

    Nginx 리버스 프록시(80 → 5000) — 아직 안 했다면

    sudo apt install -y nginx
    sudo tee /etc/nginx/sites-available/flask <<'EOF'
    server {
        listen 80;
        server_name _;
    
        location / {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
    EOF
    sudo ln -sf /etc/nginx/sites-available/flask /etc/nginx/sites-enabled/flask
    sudo nginx -t && sudo systemctl reload nginx
    

    → 이제 http://서버IP 접속.

    부팅 자동실행(systemd) — 아직 안 했다면

    sudo tee /etc/systemd/system/flask.service <<'EOF'
    [Unit]
    Description=Flask via Gunicorn
    After=network.target
    
    [Service]
    User=<서버사용자>
    WorkingDirectory=/home/<서버사용자>/firstcontainer1
    Environment="PATH=/home/<서버사용자>/firstcontainer1/.venv/bin"
    ExecStart=/home/<서버사용자>/firstcontainer1/.venv/bin/gunicorn -w 2 -b 127.0.0.1:5000 app:app
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo systemctl daemon-reload
    sudo systemctl enable --now flask
    sudo systemctl status flask --no-pager
    

    <서버사용자>를 실제 계정명으로 바꿔줘.


    .env/비밀키 주의

    • 퍼블릭 Git.env, 비밀키 올리지 마!

    • 이런 파일은 B 방식(scp/rsync/SFTP) 으로만 서버에 배포해서 ~/firstcontainer1/.env에 두고,

      Flask에서 python-dotenv로 읽거나 시스템d Environment=에 넣어.






    0) 가상환경 들어가기 (공통)

    cd ~/firstcontainer1
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt  # 없으면: pip install flask gunicorn
    

    1) 파일이 APPLICATION.py이고, 안에 app = Flask(__name__) 가 있다면

    (개발용, 바로 확인)

    FLASK_APP=APPLICATION.py flask run --host=0.0.0.0 --port=5000
    

    (운영용, Gunicorn)

    gunicorn -w 2 -b 127.0.0.1:5000 APPLICATION:app
    

    리눅스에서는 대소문자 구분합니다. 파일이 APPLICATION.py면 모듈 이름도 APPLICATION입니다.

    (소문자로 application:app 쓰면 import 에러 납니다)


    2) “앱 팩토리” 구조(예: def create_app(): return app)라면

    (개발용)

    FLASK_APP=APPLICATION.py FLASK_RUN_PORT=5000 flask run --host=0.0.0.0
    

    (운영용)

    gunicorn -w 2 -b 127.0.0.1:5000 "APPLICATION:create_app()"
    

    3) wsgi.py가 따로 있고 그 안에 app이 있다면

    gunicorn -w 2 -b 127.0.0.1:5000 wsgi:app
    

    Nginx를 이미 붙여놨다면

    위에서 하나를 띄운 뒤 브라우저에서:

    • 개발용(직접): http://서버IP:5000

    • 운영용(Nginx 프록시 통과): http://서버IP

      (프록시 설정을 내가 준 그대로 썼다면 80→5000으로 전달됩니다)


    부팅 자동 실행(systemd)도 ExecStart만 맞추면 끝

    (예: APPLICATION.py + app 전역일 때)

    sudo tee /etc/systemd/system/flask.service <<'EOF'
    [Unit]
    Description=Flask via Gunicorn
    After=network.target
    
    [Service]
    User=<서버사용자>
    WorkingDirectory=/home/<서버사용자>/firstcontainer1
    Environment="PATH=/home/<서버사용자>/firstcontainer1/.venv/bin"
    ExecStart=/home/<서버사용자>/firstcontainer1/.venv/bin/gunicorn -w 2 -b 127.0.0.1:5000 APPLICATION:app
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now flask
    sudo systemctl status flask --no-pager
    

    앱 팩토리면 ExecStart= ... gunicorn ... "APPLICATION:create_app()" 로 바꿔주세요.


    자주 나는 오류 체크

    • ModuleNotFoundError: 대소문자/경로 틀림 → APPLICATION:app 철자 확인

    • AttributeError: module ... has no attribute app: 팩토리 구조인지 확인 → create_app() 사용

    • Address already in use: 이미 떠 있는 프로세스가 5000 사용 중 → pkill -f gunicorn 후 재실행

    • 빈 페이지/502: journalctl -u flask -f 로 서비스 로그 확인









    처음엔 집 와이파이/공유기 설정이 제일 헷갈립니다.

    핵심은 “내 서버(우분투)까지 안정적 IP를 주고, 밖에서 안전하게 접속” 두 가지예요.

    아래 3가지 루트 중 하나만 고르면 됩니다. (난 #2 또는 #3을 강력 추천)


    0) 공통: 내부 IP를 고정(또는 예약)해두기

    • 공유기 관리자 페이지 → DHCP 예약(고정 할당)에서 서버 MAC 주소에 예: 192.168.0.50 부여

      (또는 우분투에서 고정 IP 설정)

    # 인터페이스명 확인 (enp0s31f6 등)
    ip a
    # netplan 편집
    sudo nano /etc/netplan/*.yaml
    # 예시
    network:
      version: 2
      ethernets:
        enp0s31f6:
          addresses: [192.168.0.50/24]
          routes: [{ to: default, via: 192.168.0.1 }]
          nameservers: { addresses: [1.1.1.1,8.8.8.8] }
    sudo netplan apply
    
    • 우분투 방화벽:

    sudo apt install -y ufw
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp
    # HTTPS 쓸거면: sudo ufw allow 443/tcp
    sudo ufw enable
    

    1) (가장 단순) 내부에서만 쓰기 — 포트포워딩 불필요

    • 집 안에서만 http://192.168.0.50 로 접속

    • 외부 접속 필요 없으면 여기서 끝!


    2) (안전·편리) Cloudflare Tunnel — 포트포워딩 없이 외부 접속

    공유기·통신사 설정 복잡함을 회피하는 최적의 방법. CGNAT/이중 NAT도 통과됨.

    1. 도메인이 Cloudflare에 있다면:

    # 설치
    curl -fsSL https://pkg.cloudflare.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloudflare.gpg
    echo "deb [signed-by=/usr/share/keyrings/cloudflare.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
    sudo apt update && sudo apt install -y cloudflared
    
    # 터널 생성/로그인
    cloudflared tunnel login
    cloudflared tunnel create myflask
    cloudflared tunnel route dns myflask flask.my-domain.com
    
    # 프록시(80→127.0.0.1:5000) 설정파일
    sudo mkdir -p /etc/cloudflared
    sudo tee /etc/cloudflared/config.yml <<'EOF'
    tunnel: myflask
    credentials-file: /home/ubuntu/.cloudflared/<생성된-credentials.json>
    ingress:
      - hostname: flask.my-domain.com
        service: http://127.0.0.1:5000
      - service: http_status:404
    EOF
    
    # 서비스로 등록
    sudo cloudflared service install
    sudo systemctl enable --now cloudflared
    
    • 이러면 포트포워딩 없이 https://flask.내도메인 으로 바로 접속됩니다.

    • 22(SSH), 80/443 공유기 포트 여는 작업이 전혀 필요 없음.


    3) (정석) 공유기 포트포워딩 — 80/443 외부로 열기

    도메인+Let’s Encrypt 직접 쓰고 싶을 때.

    1. 공유기에서 포트포워딩:

    • 외부 80 → 내부 192.168.0.50:80

    • 외부 443 → 내부 192.168.0.50:443

      (SSH 22는 외부 개방 금지 권장. 원격관리 필요하면 WireGuard VPN 사용)

    1. 우분투에서 Nginx + 인증서:

    sudo apt install -y nginx certbot python3-certbot-nginx
    # Nginx 리버스프록시(80→5000) 이미 했다면 그대로 두고
    sudo certbot --nginx -d flask.my-domain.com
    
    1. 테스트는 LTE/5G(모바일 데이터)로 접속해보기(집 와이파이=내부라 착시 생김).

    ⚠️ ISP가 80/443 차단/CGNAT이면 포워딩이 안 될 수 있어요. 그땐 #2 Cloudflare Tunnel 선택이 편합니다.


    보너스: WireGuard VPN(원격에서 내부망처럼)

    외부에서 관리/SSH만 필요하면 VPN이 제일 안전.

    sudo apt install -y wireguard
    # docker로 linuxserver/wireguard 써도 편함
    
    • 공유기에서 51820/UDP만 포워딩 → 외부에서 폰/노트북으로 VPN 접속 → 192.168.0.50 바로 접근.


    자주 막히는 지점 체크리스트

    • DHCP와 고정IP 충돌: 공유기에서 IP 예약으로 해결(가장 쉬움).

    • 더블 NAT/CGNAT: #2 Cloudflare Tunnel로 우회.

    • NAT Loopback 미지원: 집 와이파이에선 도메인이 안 열릴 수 있음 → LTE로 테스트.

    • 방화벽: UFW/보안 솔루션에서 80/443, 51820(UDP) 허용 확인.

    • 도메인 DNS 전파: A/AAAA 레코드 수정 후 수 분~수십 분 지연 가능.


    추천 선택 요약

    • 가장 쉬움/빠름: #2 Cloudflare Tunnel

    • 전통적 직접 서비스: #3 포트포워딩 + Certbot

    • 관리 전용(보안↑): WireGuard VPN + 내부만 공개

    배너 이미지
    Is Grand Hyatt Seoul Worth It? I Loved It, Except for THIS…

    Is Grand Hyatt Seoul Worth It? I Loved It, Except for THIS…

    검색어 "Seoul"이(가) 제목에서 발견되었습니다.
    펼쳐보기

    서울에서 럭셔리한 숙소를 찾고 계신가요? 이 영상에서는 그랜드 하얏트 서울에 대한 솔직한 리뷰를 공유합니다. 객실 투어부터 다양한 편의시설, 서비스 품질, 그리고 벚꽃 시즌에 감상할 수 있는 남산타워의 멋진 전망까지 모두 담았습니다. 휴가, 출장, 또는 로맨틱한 여행을 계획 중이라면 이 영상이 그랜드 하얏트 서울이 여러분께 맞는 선택인지 판단하는 데 도움이 될 거예요.

    시청해 주셔서 감사합니다! 좋아요와 구독, 알림 설정도 잊지 마세요. 더 많은 여행 팁과 리뷰가 기다리고 있습니다!

    🎵 배경음악: Set Sail by shandr

    출처: https://freetouse.com/music

    무료 저작권 없는 음악 다운로드

    이슈 56

    자살 추정서 바뀐 경찰 언급…故 장미란씨 사인 확인 어려워 [세상&] - 헤럴드경제

    개미 15조 샀는데 "상장가 대비 반토막" 비명…정부, 레버리지에 또 경고장

    전재수 몰아붙인 시의회…결정타는 없었다

    6년간 부산 청년 예산 4배 늘었지만 청년 태반은 지원책 존재조차 몰라

    한성숙 국무총리 후보자 지명 이유와 AI 대전환 속도전, 두 번째 여성 총리 가능성까지

    투표용지 부족 후폭풍…여야 모두 "선관위 책임" 한목소리 < 정치일반 < 정치 < 기사본문 - 일요서울i

    전남도, 소상공인 온라인시장 성공 안착 돕는다 < 광주·전남 < 메트로 < 기사본문 - 뉴스워커

    대부업계 “‘불법대부업’은 틀린 표현… 바로잡아야” < 금융 < 파이낸스 < 기사본문 - IT조선

    기술사·기술장 취득 경력 2~4년 단축…국가기술자격 응시자격 다양화 | 아주경제

    고단수 20기 영식, ♥17기 순자 뚝딱이는 모습에 “귀엽다” 미소…설렘 폭발 (나솔사계)

    재채기 하듯 가스 방출…어린 별 주변 거대 고리 포착

    포스텍, AI 시대 전력난 난제 풀 실마리 찾았다

    내가 가려고 알아본, 해외 감성 가득한 서울, 부산, 경주의 이국적 숙소 | 지큐 코리아 (GQ Korea)

    [위클리오늘] 동해시, 16년 만의 도민체전 엠블런·마스코트 싱징에 담은 의미 공개 < 강원 < 전국지사 < 기사본문 - 위클리오늘

    리틀록 9총사와 트럼프 불러낸 클린턴[손호철의 미국사 뒤집어보기](32)

    [대구 장미비디오 사건③] 탈영병 이민형은 어떻게 살인범이 됐나

    ‘굿바이 잠실’…2026 KBO 올스타전 개최 장소 확정 [공식발표]

    새 철도박물관 2030년 문 연다…당선작 '티 뮤지엄' 선정

    섭듀드, 오는 4일 성수에서 국내 첫 팝업 오픈

    부산문화재단, 공연예술 유통 전문인재 키운다…'BPAM 아카데미' < 사회 < 기사본문 - LG헬로비전

    [르포] 멀티숍 벗어난 푸마, 성수에 ‘스니커 실험실’ 만든 이유 - 아시아투데이

    [OTT 추천작 4월 1주] <아바...

    데어 윌 비 블러드 | 결말포함 해석

    대표작 2편 내리 개봉! 올 겨울, 양조위 팬들은 좋겠네 - 아시아투데이

    故 데이비드 린치 감독 1주기 감독전 열린다

    재활용 충전재가 거위털로 둔갑...? 노스페이스 공정위 신고

    옵션만기·엔캐리 청산…"코인 더 떨어진다"

    김해공항 국제선, 1000만 이용객엔 턱없이 부족한 인프라

    "나이키·스투시 못입겠네"...'영포티' 수난시대

    “여보, 지금 일본여행 갈까?”…20만원→2만원 ‘뚝’, 관광지 호텔비 급감한 이유가

    ‘저속노화’ 정희원, 강제추행 혐의로 맞고소…사생활 논란 확산

    [현장] 책 영화 빠진 자리, 도파민과 체험이 채웠다 | 비즈한국

    이러니 음주운전 하지… 15%만 실형 받았다

    김재우♥조유리, 남산뷰 77평 아파트 공개 “아내 위한 인테리어, 침대는 따로”(행가집)

    온라인 기반 가구 시장 성장세…29CM 거래액 전년대비 40% 증가

    자라홈, 롯데월드몰 플래그십 스토어 리뉴얼 오픈 < 유통소비자 < 생활경제 < 기사본문 - 이뉴스투데이

    패션비즈 | 패션코드, 브랜드 스케일업 프로젝트 'KODE : S' 성료... 우승자는 몽세누

    [강현철의 명화산책] ‘영혼의 눈동자’ 모딜리아니 ‘잔 에뷔테른’

    패션비즈 | '6500억 호실적' 아이파크몰, 메가숍 · 패션 MD 흥행몰이 통했다

    무너지는 K푸드 장벽, 초거대 美 식품 몰려온다 < 헤드라인톱 < 유통소비자 < 생활경제 < 기사본문 - 이뉴스투데이

    “AI가 사람 대체한다” 아마존, 사무직 10% 감축 단행 - 조세일보

    [김승중 더봄] 나만 그런 게 아니었어?···시키면 하기 싫어지는 마음, 우회 방법은 < 김승중의 슬기로운 인간관계 < 더봄 < 기사본문 - 여성경제신문

    캄보디아 한인 납치 신고 330건…나경원 "이재명 정권, 왜 방치하나"

    15년 전 귀향한 청년들, ‘다시마 섬’ 키웠다

    전통시장서 두살배기 납치 시도한 60대 남성 체포 | 연합뉴스

    中 과학자들, 노화 멈추는 줄기세포 개발…"뇌·혈관까지 회춘"

    “온몸이 종잇장처럼 벗겨져”…‘이 약' 복용 4일 만에 피부 괴사까지, 무슨 일?

    ‘역전부부’ 아내, 유명 남편 때문에 결혼·출산 소식 숨겼다 “악플 시달리기도”(결혼지옥)

    “약으로 버티려 했는데”…긴급수술 받았다는 조세호, 무슨일이

    "아시아 주류 산업의 현재와 미래" 비넥스포 아시아 2025, 5월 27일부터 29일까지 싱가포르 마리나 베이 샌즈에서 개최! < 일반 < 기사 < Wine < 기사본문 - 소믈리에타임즈

    알바 채팅방, 나 빼고 전부 한패… 신종 온라인 사기 극성

    나솔 광수, 110kg→80kg 반전 과거 공개… “살 빼려 ‘이것’ 끊었다”

    이청아, 최애 男 입주자는?…"편파적인가" 고민 (하트페어링)

    미쳐야 했던 시대, 이름조차 불리지 않았던 그들 ‘초현실주의와 한국근...

    “가난하면 왜 사랑도 망가질까? 자존감까지 파괴되는 이유”

    200만원으로 시작해 2조 자산가가 된 비결은 무엇일까요?