반응형

 

파이썬 개발의 필수! **가상 환경 (Virtual Environment)** 설정 및 사용법 완벽 가이드 (venv)

파이썬으로 여러 프로젝트를 진행할 때, 프로젝트마다 필요한 **패키지(라이브러리)의 버전**이 달라 충돌이 발생하는 경험을 해보셨을 겁니다. 이 문제를 해결해주는 마법 같은 도구가 바로 **가상 환경 (Virtual Environment)**입니다.

가상 환경은 프로젝트별로 독립된 개발 공간을 만들어 의존성 충돌을 원천적으로 막아줍니다. 오늘은 파이썬 표준 라이브러리인 venv를 사용하여 가상 환경을 만들고 사용하는 방법을 초보자도 따라 할 수 있도록 단계별로 자세히 알아보겠습니다.


1. 가상 환경(Virtual Environment)이 왜 필요한가요?

가상 환경이 없다면, 여러분이 설치하는 모든 패키지들은 시스템 전체의 파이썬 환경에 설치됩니다. 다음과 같은 문제가 발생할 수 있습니다.

  • 의존성 충돌: 프로젝트 A는 Django 3.x를 필요로 하고, 프로젝트 B는 Django 4.x를 필요로 한다면, 시스템 환경에서는 둘 중 하나만 설치할 수 있어 충돌이 발생합니다.
  • 불필요한 패키지 누적: 필요 없는 패키지들이 전역 환경에 계속 쌓여 시스템 환경이 지저분해집니다.
  • 배포의 어려움: 내 컴퓨터에서는 잘 작동하지만, 다른 환경에서는 작동하지 않는 '버전 문제'가 생길 수 있습니다.

가상 환경을 사용하면 각 프로젝트는 자신만의 독립된 패키지 저장소를 갖게 되어, 서로 영향을 주지 않고 안정적으로 개발할 수 있습니다.


2. 파이썬 `venv`를 이용한 가상 환경 설정 3단계

파이썬 3.3 버전 이상부터는 별도의 설치 없이 venv 모듈을 통해 가상 환경을 만들 수 있습니다. 이제부터 터미널(또는 명령 프롬프트)을 열고 따라 해보세요.

1단계: 가상 환경 생성하기

프로젝트 폴더로 이동한 후, 다음 명령어를 실행합니다. env_name 부분은 원하는 이름으로 자유롭게 지정할 수 있습니다. (일반적으로 venv, .venv, env 등을 많이 사용합니다.)

python -m venv env_name

이 명령을 실행하면 현재 폴더 안에 env_name이라는 새로운 폴더가 생기고, 그 안에 독립된 파이썬 실행 파일과 패키지 폴더가 생성됩니다.

2단계: 가상 환경 활성화(Activation)하기

가상 환경을 생성했더라도, 이를 '활성화'해야만 지금부터 설치하는 패키지들이 이 환경 안에 설치됩니다. 운영체제별로 활성화 방법이 다릅니다.

**💻 Windows (명령 프롬프트/PowerShell)**

env_name\Scripts\activate

**🍎 macOS 또는 Linux (Bash/Zsh)**

source env_name/bin/activate

활성화에 성공하면 터미널 프롬프트 앞에 **(env_name)**과 같이 가상 환경 이름이 표시되는 것을 확인할 수 있습니다. 이제 여기서 패키지를 설치하면 이 프로젝트에만 적용됩니다. 예를 들어:

(env_name) pip install requests

3단계: 가상 환경 비활성화(Deactivation)하기

해당 프로젝트 작업이 끝났다면, 다음 명령어로 가상 환경을 빠져나와 시스템 환경으로 돌아갈 수 있습니다. 아주 간단합니다.

deactivate

프롬프트 앞에 표시되던 (env_name) 표시가 사라진 것을 확인하세요. 이제 다시 전역 파이썬 환경으로 돌아왔습니다.


3. 핵심 정리: 가상 환경 사용의 장점

이제 여러분은 **파이썬 가상 환경**을 완벽하게 다룰 수 있게 되었습니다. 가상 환경을 사용함으로써 얻는 이점은 다음과 같습니다:

  1. **안정적인 개발:** 프로젝트 간 간섭이 없어졌으므로 의존성 충돌 걱정 없이 개발에 집중할 수 있습니다.
  2. **깔끔한 관리:** 필요한 패키지만 설치되므로 pip freeze > requirements.txt 명령을 통해 프로젝트의 의존성 목록을 깔끔하게 공유하고 관리할 수 있습니다.
  3. **쉬운 배포:** requirements.txt 파일만 있으면 어디서든 동일한 환경을 쉽게 구축할 수 있습니다.

오늘 배운 `venv` 사용법을 활용하여 더욱 체계적이고 효율적인 파이썬 개발을 시작해 보세요! 🚀

반응형
반응형

반응형

프로그래머스 코딩테스트 124 나라의 숫자 : https://school.programmers.co.kr/learn/courses/30/lessons/12899

문제보기


124나라의 숫자 어떻게 풀어야할까?

자연수 n을 124 나라에서 사용하는 숫자로 바꾸는 문제를 해결하기 위해서는 아래와 같이 생각할 수 있어요.

124 나라에서는 1, 2, 4만 사용하므로 10진법 수를 3진법처럼 생각하여 변환해봅시다.

단, 3으로 나누어 떨어지는 경우 0 대신 4를 사용합니다.

따라서 while 문을 사용하여 n을 3으로 나눈 나머지에 따라 124 나라에서 사용하는 숫자로 변환합니다.

이때 3으로 나누어 떨어지는 경우 n을 1만큼 감소시키고 124 나라에서 사용하는 수에 따라 0 대신 4를 사용합니다.

자 여기까지 어느정도의 힌트를 드렸으니 혼자 풀어보실 의향이 있으시다면 풀어보시면 됩니다.

 

만약 정답을 보고싶으시다면 아래를 참고해주세요.

 


function solution(n) {
    let answer = ''; // 변환한 124 나라에서 사용하는 숫자를 저장할 변수
    while(n > 0){ // n이 0보다 크면 계속 반복
        switch(n % 3){ // n을 3으로 나눈 나머지에 따라 분기 처리
            case 1:
                answer = '1' + answer; // 나머지가 1이면 1을 추가
                n = Math.floor(n / 3); // n을 3으로 나눈 몫으로 업데이트
                break;
            case 2:
                answer = '2' + answer; // 나머지가 2이면 2를 추가
                n = Math.floor(n / 3); // n을 3으로 나눈 몫으로 업데이트
                break;
            case 0:
                answer = '4' + answer; // 나머지가 0이면 4를 추가
                n = Math.floor(n / 3) - 1; // n을 3으로 나눈 몫에서 1을 빼서 업데이트
                break;
        }
    }
    return answer; // 변환한 124 나라에서 사용하는 숫자를 반환
}
반응형
반응형

JavaScript에서 Scope(스코프)는 변수가 유효한 범위를 나타내는 개념입니다.
Scope는 변수가 선언되었을 때 해당 변수가 어디에서 접근 가능한지를 결정합니다.
JavaScript는 두 가지 Scope 타입을 가지고 있습니다

  • Global Scope
  • Local Scope

Global Scope


Global Scope(전역 스코프)는 프로그램 전체에서 접근 가능한 스코프입니다.
전역 스코프에서 선언된 변수는 어느 곳에서든지 접근할 수 있습니다.
전역 스코프에서 변수를 선언하려면, 함수나 블록 안에서 선언하는 것이 아니라 스크립트의 가장 바깥쪽에 선언해야 합니다.

// Global Scope에서 변수를 선언합니다. 
var globalVariable = 'Hello World!'; 
function sayHello() { 
  console.log(globalVariable); 
} 
sayHello(); // 'Hello World!'

위의 예시에서 globalVariable 변수는 함수 안에서 선언되지 않았으므로 전역 스코프에서 선언된 것입니다. 함수 sayHello()에서도 이 변수를 접근할 수 있습니다.

Local Scope


Local Scope(지역 스코프)는 함수나 블록 안에서 선언된 변수가 해당 함수나 블록 안에서만 접근 가능한 스코프입니다. 함수나 블록 안에서 선언된 변수는 해당 함수나 블록 밖에서는 접근할 수 없습니다.

function sayHello() {
// Local Scope에서 변수를 선언합니다. 
    var localVariable = 'Hello World!';
    console.log(localVariable); 
} 
sayHello(); // 'Hello World!' 
console.log(localVariable); // ReferenceError: localVariable is not defined 

위의 예시에서 localVariable 변수는 함수 sayHello() 안에서 선언되었으므로 해당 함수 안에서만 접근할 수 있습니다. 함수 밖에서 이 변수를 접근하려고 하면 ReferenceError가 발생합니다.

변수 Shadowing


JavaScript에서는 Local Scope 안에서 동일한 이름을 가진 변수를 다시 선언할 수 있습니다. 이를 변수 Shadowing이라고 합니다. Local Scope 안에서 새로운 변수가 선언되면, 이 변수는 해당 Local Scope에서만 유효하며, 해당 Scope에서는 이 변수의 이름으로 원래의 변수에 접근할 수 없습니다.

var globalVariable = 'Hello World!'; 
function sayHello() { 
    // Local Scope에서 globalVariable 변수를 shadowing합니다. 
    var globalVariable = 'Hi there!'; 
    console.log(globalVariable); 
} 
sayHello(); // 'Hi there!' 
console.log(globalVariable); // 'Hello World!' 

위의 예시에서 sayHello() 함수 안에서 globalVariable 변수를 shadowing하여 새로운 값을 할당했습니다. 함수 밖에서 globalVariable 변수는 여전히 'Hello World!' 값을 유지하고 있습니다.
하지만 함수 안에서 선언한 globalVariable 변수는 함수 밖에서는 접근할 수 없습니다. 함수 밖에서 globalVariable 변수를 사용하려면, 함수 안에서 globalVariable 변수를 shadowing하지 않도록 조심해야 합니다.

var globalVariable = 'Hello World!';

function sayHello() {  
var globalVariable = 'Hi there!'; // 변수 shadowing  
console.log(globalVariable); // 'Hi there!'  
}

sayHello(); // 'Hi there!'  
console.log(globalVariable); // 'Hello World!'

위의 예시에서 sayHello() 함수 안에서는 globalVariable 변수를 새로 선언하여 'Hi there!' 값을 할당했습니다.
함수 밖에서는 여전히 'Hello World!' 값을 유지하고 있습니다.

자바스크립트에서 스코프는 변수와 함수의 유효 범위를 결정하는 중요한 개념입니다.
이를 잘 이해하고 활용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
스코프의 개념은 자바스크립트뿐만 아니라 다른 프로그래밍 언어에서도 공통적으로 사용되는 개념이기 때문에 꼭 기억하고 학습하시길 바랍니다.

반응형
반응형

OSI 7 Layer이란?

네트워크 프로토콜과 통신을 7계층으로 표현한 것입니다.

이는 프로토콜을 기능별로 나누고 계층별로 구분하는데 이는 벤더간 호환성을 위한 표준을 필요하기때문에 나누게되었고 이는 쉬운 접근성으로 기술의 발전을 이루어냈습니다.

 


Application (Layer 7) 응용서비스 HTTP , SMTP
Presentation (Layer 6) 인코딩 / 암호화 / 압축 등 데이터의 변형이 이루어짐
Session (Layer 5) TCP / IP 통신 연결을 수립 / 유지 / 중단
Transport (Layer 4)  TCP / UDP 
Network (Layer 3)  IP통신, 라우팅
Data Link (Layer 2)  이더넷, 랜ㄷ카드, Mac 통신, 에러검출
Physical (Layer 1)  네트워크 하드웨어 전송 기술에 대한 프로토콜

Physical

장치와 통신매체 사이의 비정형 데이터의 전송을 담당합니다.

전송되는 방법이나 제어신호, 기계적 속성등을 정의합니다.

케이블, 인터페이스, 허브, 리피터등이 이에 속합니다.

 


Data Link

동일 네트워크 내에서 데이터를 전송하고 링크를 통해서 연결을 설정하고 관리합니다.

물리계층에서 발생할 수 있는 오류를 감지하고 수정합니다.


Network

다른 네트워크로 데이터를 전송할 수 있습니다. IP(Internet Protocol)주소로 통신을 합니다.

출발지 IP에서 목적지 IP로 데이터 통신할 때 중간에서 라우팅을 처리합니다.

데이터가 큰 경우 분할하거나 전송 후 목적지에서 재 조립하여 메세지를 구현합니다.


Transport

호스트 간의 데이터를 전송합니다.

IP통신 이후에 서비스를 정의해줍니다.

오류 복구 및 흐름제어를 해주고 완벽한 데이터 전송을 보장합니다.

 


Session

로컬 및 원격 애플리케이션간의 IP/ Port연결을 관리해주는 단계입니다.


Presentation

사용자 프로그램과 네트워크 형식간에 데이터를 변환하여 표현과 독립성을 제공합니다.

인코딩, 디코딩, 암호화, 압충 등등


Application

사용자와 가장 밀접한 소프트웨어입니다.

이메일 서비스 SMTP나 파일전송 FTP 등등

반응형

'컴퓨터 구조' 카테고리의 다른 글

컴퓨터 구조  (0) 2021.03.16
반응형

컴퓨터의 구성은 하드웨어와 소프트웨어로 이루어져있다.

 

하드웨어 소프트웨어
입력장치 - 키보드, 마우스, 터치스크린 등등
처리장치 - 주 기억장치, 중앙처리장치 (제어장치, 연산장치)
출력장치 - 프린터, 모니터, 스피커
보조기억장치 - 자기 디스크, CD-ROM, Memory
시스템 소프트웨어 -  쉽게 이야기하면 운영체제(OS)
(하드웨어와 응용소프트웨어의 호환성을 담당)
응용 소프트웨어 - 우리가 사용하는 엑셀, PPT, 워드 등등

 

정보와 데이터의 차이 

 

데이터 정보
정보를 작성하기 위해 필요한 자료나 정보를 처리하거나 전송할때 좀 더 편리한 형태로 바뀌어진 자료.
즉, 정보의 원재료
정보는 가공된 데이터

 

데이터 표현 및 단위

수치 데이터 : 연산용 데이터

비 수치 데이터 : 입출력용 데이터

특수 문자 : 입출력/연산용 데이터

 

 

Bit 0 과 1 ( 2진수 체계 )
Byte 1byte = 8bit
Word 기계에 따라 상이하지만 1word = 32bit 나 64bit
KB, KiloByte 1KB = 1024 Byte
MB, MegaByte 1MB = 1024 KB
GB, GigaByte 1GB = 1024 MB
TB, TeraBtye 1TB = 1024 GB

 

 


 

중앙 처리 장치 ( Central Processing Unit )

MPU - CPU를 LSI(고밀도 집적회로)화 한 일종의 통합 장치

CISC ( Complex Instruction Set Computer ) : 기본적인 동작들이 반복이 되는데 이러한 반복적이고 동일한 행동들을

일일이 소프트웨어하지않고 하드웨어화 하겠다 라는 개념,

RISC ( Reduced Instruction Set Computer ) : CISC의 반대되는 개념

 

 

 

 

 

주변 장치 ( Peripheral Device )

 

기억장치 (Memory Unit)

  • RAM (Random Access Memory)
    • DRAM ( Dynamic RAM )
    • SRAM ( Static RAM )
  • ROM ( Read Only Memory )

 

보조기억장치 ( Auxiliary memory device )

 

SSD ( Solud State Drive )

USB 기억장치

SD card

메모리스틱 등등

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'컴퓨터 구조' 카테고리의 다른 글

[네트워크] OSI 7 Layer 모델  (0) 2021.04.02
반응형
ㅇㅇ

파이썬의 정규식 중 간단하고 가장 많이 사용되는 정규식을 말씀드리려고 합니다.

또 한 예제를 통해 re ( regular expression) 사용법도 살펴보시면 좋습니다.

 

 

1. ' . ' → 하나의 문자를 의미합니다.

  • 예를들어 L.VE 라고 한다면 이는 LIVE , LOVE등이 가능할 것 같습니다.
1
2
3
4
5
6
7
8
9
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("L.VE")
= p.match("LOVE")
if m :
    print("해당 {0}은 정규식표현의 글자에 포함할 수 있습니다.".format(m.string))
else :
    print("해당 글자는 매칭되지 않습니다.")
 

2. ' ^ ' → 문자열의 시작을 의미합니다.

  • 예를들어 ^AR 이라고 한다면 이는 ARCHER, ARK, ARRIVE 등이 가능합니다.
1
2
3
4
5
6
7
8
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("^AR")
= p.match("ARK")
if m :
    print("해당 {0}은 AR의 시작부분을 포함하고 있습니다.".format(m.group()))
else :
    print("해당 글자는 매칭되지 않습니다.")

3. ' $ ' → 하나의 문자를 의미합니다.

  • 마찬가지로 예를들어 ER$ 라고한다면 이는 LOSER, WINNER 등이 가능합니다.
1
2
3
4
5
6
7
8
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("ER$")
= p.search("LOSER")
if m :
    print("해당 {0}은 ER의 마지막부분을 포함하고 있습니다.".format(m.group()))
else :
    print("해당 글자는 매칭되지 않습니다.")

 

이와같이 사용이 가능합니다.

import re를 이용한 정규식 사용방법

1. p = re.compile( "원하는 정규식 작성" )

2. m = p.match( "비교할 문자열")

MATCH()는 주어진 문자열이 처음부터 일치하는지 확인을 합니다.

또는

2. m = p.search( "비교할 문자열" )

SEARCH()는 주어진 문자열 중에 일치하는것이 있는지 확인합니다.

 

반응형

'Language > Python' 카테고리의 다른 글

가상 환경 (Virtual Environment)설정 및 사용법  (0) 2025.10.27
반응형

MS-SQL, ORACLE, MYSQL등 우리는 전부 RDBMS를 사용합니다.

RDBMS에서 R은 Relational을 의미하는데요, 모든 테이블이 그런것은 아니지만

몇몇의 테이블들은 서로 관계를 가지고 있습니다.

 

우리는 이렇게 관계를 가지고 있는 테이블들 사이에서 합집합, 교집합, 차집합을 구할 수 있는데요.

UNION 

두개의 SELECT결과를 합칠 수 있습니다.

합치는 과정에서 중복은 제거가 됩니다.

 

SQL문 

1
2
3
4
5
SELECT playerID
FROM players
UNION
SELECT playerID
FROM salary

이렇게 사용이 가능하며 2가지 주의사항이 있습니다.

 

1. 2개의 SELECT구문의 컬럼의 개수가 같아야 합니다.

2. 각 컬럼의 데이터 타입이 같아야 합니다.

 

 

 

각각의 구문의 교집합이 필요하거나 차집합이 필요하다면 UNION 자리에 대신

INTERSECT (교집합)

EXCEPT (차집합)

을 작성하여 SQL문을 실행시킬 수 있습니다.

반응형
반응형

데이터베이스 정규화?

데이터베이스에는 정규화 이론이라는 DB설계 이론이 있습니다.

정규화 이론은 RDB (Relational Database)를 효율적으로 잘 다루는데에 있어서 꼭 필요하며

관계형 모델을전제로 구축된 DB설계 이론입니다.

2020/08/27 - [DB] - [DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

 

[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

DBMS와 RDBMS의 개념 우리는 DBMS가 무엇인지 알고있습니다. 그렇다면 RDBMS는 무엇일까요? Relational Database Managenent System으로 쉽게 생각해 테이블 기반의 DBMS라고 생각하면 됩니다. DBMS와 RDBMS의 차..

runcoding.tistory.com

 

예를들어 RPG게임을 바탕으로 설명을 드리도록 할게요.

PlayerID name class level inventory
321331 런코딩 암살자 132 부패의 물약*5 , 처형인의 대검 , 무한의 대검, 천갑옷, 신속의 장화
321332 런코딩 부캐 사제 77 불타는 향로, 미카엘의 도가니, 부패의 물약*3, 구원

RPG게임에 일부분이라고 가정해봅시다. 이렇게 인벤토리라는 컬럼을 만들고 그 안에 모든 아이템을 때려박는다면

어떨까요?

 

위 테이블처럼 인벤토리에 모든 보유 아이템을 1개의 컬럼에 때려박는다면, 그리고 그러한 플레이어들이 100만 명 가까이 있다면, 우리는 playerID를 통해 해당 ROW를 찾고 그 ROW안에서 Inventory컬럼안에 있는 내용들을 전부다 

스트링으로 받아온 뒤, ,(쉼표) 를 통하여 아이템들을 나누고  등등 해야할 일들이 정말 많을것 입니다.

상당히 비효율적이게 되는것이죠.

 

우리는 정규화를 기준으로 이를 어떻게 바꿀 수 있을까요?

1차원 적으로 생각해본다면

PlayerID name class level Itemcode itemname itemcount
321331 런코딩 암살자 132 13 부패의 물약 5
321331 런코딩 암살자 132 17 처형인의 대검  1
321331 런코딩 암살자 132 21 무한의 대검 1
321331 런코딩 암살자 132 24 천갑옷 1
321331 런코딩 암살자 132 26 신속의 장화 1
321332 런코딩 부캐 사제 77 31 불타는 향로 1
321332 런코딩 부캐 사제 77 11 미카엘의 도가니 1
321332 런코딩 부캐 사제 77 13 부패의 물약 3
321332 런코딩 부캐 사제 77 66 구원 1

이런식으로 바꿀 수 있습니다.

근데 이렇게 모든 아이템들을 따로 나누고 나니.. 중복된 데이터들이 상당히 많습니다.

PlayerID부터 level까지 여러개의 레코드들이 중복됩니다.

이를 해소하기 위해서는 테이블을 여러개로 나누고 각각 primary key와 foreign key를 활용해서 관계형 데이터베이스를 작성할 수 있습니다.

PlayerID name class level
321331 런코딩  암살자 132
321332 런코딩 부캐 사제 77
PlayerID Itemcode itemcount
321331 13 5
321331 17 1
321331 21 1
321331 24 1
321331 26 1
321332 31 1
321332 11 1
321332 13 3
321332 66 1
itemcode itemname
13 부패의 물약
17 처형인의 대검 
21 무한의 대검
24 천갑옷
26 신속의장화
31 불타는향로
11 미카엘의 도가니
66 구원

이렇게 3개의 테이블로나누게되면 비로소 RDB를 효율적으로 잘 다룰 수 있게 되는것 입니다.

 

반응형

+ Recent posts