728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL
서버에 postgresql 설치했으면, 외부 클라이언트에서 서버에 접속할 수 있도록 설정을 해주어야 한다.
서버가 Ubuntu일 경우와 Windows일 경우 설정하는 방법,

설정 후 DBeaver에서 접속하는 방법을 알아보도록 하자.

 

■ 서버가 Ubuntu일 경우

1. postgres에 접속한다.

pmk@pmk-virtual-machine:~$ sudo -i -u postgres

 

2. pg_hba.conf 파일 위치를 확인한다.

postgres@pmk-virtual-machine:~$ psql

postgres=# show data_directory;    # 위치 출력 : /var/lib/postgresql/14/main

 

3. pg_hba.conf 파일 내용을 수정한다. (0.0.0.0/0으로 수정)

postgres@pmk-virtual-machine:~$ vi /etc/postgresql/14/main/pg_hba.conf

IPv4 변경

 

5. postgresql.conf 파일 내용을 수정한다.

  - listen_addresses = '*'로 수정하고, 앞에 # 표시도 제거(주석 해제)

postgres@pmk-virtual-machine:~$ vi /etc/postgresql/14/main/postgresql.conf

listen_addresses 변경

 

6. 수정 후 postgres 계정에서 나온다.

postgres@pmk-virtual-machine:~$ exit    # 실행하면 logout, There are stopped jobs. 표시

postgres@pmk-virtual-machine:~$ exit    # 실행하면 logout, 마지막에 Vim: Finished. 표시

 

7. postgresql 서비스를 재실행한다.

pmk@pmk-virtual-machine:~$ sudo service postgresql restart

 

8. DBeaver를 실행하여 Host 부분을 서버 IP주소로 변경하고 Test Connection.. 클릭하면 Connected 메시지와 함께 팝업이 뜨면 접속 성공!

DBeaver 접속

참고) postgres 비번을 모를 경우 설정방법

pmk@pmk-virtual-machine:~$ sudo -i -u postgres

postgres@pmk-virtual-machine:~$ psql

postgres=# alter user postgres with password 'postgres';    # alter user 사용자 with password '비밀번호'

 

■ 서버가 Windows일 경우

1. C:\Program Files\PostgreSQL\15\data 폴더 안에 pg_hba 파일을 수정한다. (경로는 다를 수 있음)

pg_hba 파일

2. C:\Program Files\PostgreSQL\15\data 폴더 안에 postgresql 파일을 수정한다. (경로는 다를 수 있음)

postgresql 파일

3. postgresql 서비스를 재실행한다.

postgresql 서비스를 재실행

 

4. DBeaver를 실행하여 앞서했던 방식과 동일하게 접속한다.

728x90
반응형
LIST
728x90
반응형
SMALL

■ postgresql 다운로드

1. postgresql 다운로드 : https://www.postgresql.org/download/

2. 아래 Windows 클릭 후, Download the installer 클릭한다.

3. 원하는 버전을 클릭하여 다운로드한다. (필자는 15.3을 선택)

 

■ postgresql 설치

1. postgresql 다운로드 파일을 클릭하여 설치를 진행한다.

2. 아래 이미지 순서대로 설치한다.

3. postgreSQL Server : PostgreSQL 서버 설치

    pgAdmin 4 : postgresql 서버에 접속하기 위한 클라이언트 프로그램

    Stack Builder : postgresql의 추가적인 유틸리티 프로그램

    Command Line Tools : 말 그대로 Command Line Tools로 Command Line으로 postgresql로 접속할 수 있다.

4. password는 초기에 postgresql 접속할 때 사용한다.

5. postgresql port는 기본적으로 5432를 사용하지만, 변경해도 무방하다.

6. Locale은 Korean, Korea로 변경한다. (데이터에 한글이 들어올 수 있으므로..)

    Locale 설정은 아래와 같은 영향을 준다.

  - 대소문자 구분

  - 문자열 정렬

  - like문에서 인덱스 사용여부 결정

7. 설치가 완료되면 작업 관리자를 실행하여 postgresql 서버가 실행되고 있는지 확인한다.

postgresql 서버 실행 확인

■ postgresql 실행

1. 클라이언트 프로그램을 사용하여 postgresql에 접속한다.

    postgresql을 처음 설치할 때, pgAdmin4 설치 옵션 체크를 하고 설치를 하였기 때문에 별도로 다운로드하지 않아도 된다.

    pgAdmin4를 실행하여 postgresql에 접속한다. (접속 비밀번호는 설치할 때 설정했던 비밀번호)

pgAdmin4 실행화면

2. postgresql 클라이언트 프로그램은 pgAdmin4 말고도 DBeaver와 같은 많은 프로그램이 있기 때문에, 다른 클라이언트 프로그램으로 접속하려

    면 추가적인 설치를 통하여 사용하면 된다. (DBeaver 추천)

 

참고) postgresql 외부 접속 방법 : https://200-rush.tistory.com/entry/PostgresqlOutConnect

728x90
반응형
LIST
728x90
반응형
SMALL

■ postgresql 삭제방법

1. postgresql 서비스 상태

pmk@pmk-virtual-machine:~$ systemctl list-unit-files postgresql*

2. postgresql 서비스 중지

pmk@pmk-virtual-machine:~$ sudo systemctl stop postgresql.service

 

3. postgresql 서비스 비활성화

pmk@pmk-virtual-machine:~$ sudo systemctl disable postgresql.service    # 활성화는 disable 대신 enable

4. postgresql 삭제

pmk@pmk-virtual-machine:~$ sudo rm -rf /var/lib/postgresql    # postgresql 디렉터리 삭제

pmk@pmk-virtual-machine:~$ sudo apt remove "postgresql*"    # postgresql 패키지 삭제

pmk@pmk-virtual-machine:~$ sudo apt --purge remove "postgresql*"    # postgresql 패키지 및 패키지의 환경설정 삭제

pmk@pmk-virtual-machine:~$ sudo apt autoremove    # 의존성이 없는 패키지 삭제

 

5. postgresql 설치된 패키지 확인

pmk@pmk-virtual-machine:~$ dpkg -l | grep postgres*    # 아무것도 조회 안되면 삭제가 완료된 것

728x90
반응형
LIST
728x90
반응형
SMALL

■ postgresql 설치방법

1. postgresql 설치가능한 버전 확인

pmk@pmk-virtual-machine:~$ apt show postgresql

설치 가능한 postgresql 버전

2. 패키지 최신화

pmk@pmk-virtual-machine:~$ sudo apt update    # 설치 가능한 패키지 최신화

pmk@pmk-virtual-machine:~$ sudo apt upgrade    # 패키지 업그레이드

 

3. 버전을 확인했으면 postgresql 설치 (2개 모두 postgresql 설치 명령어로 하나만 선택하여 실행한다.)

pmk@pmk-virtual-machine:~$ sudo apt install postgresql postgresql-contrib

pmk@pmk-virtual-machine:~$ sudo apt install postgresql

(참고)

- postgresql-contrib 설치여부 (추가 유틸리니 및 기능추가 설치여부)

- 어떤 것을 설치해도 무방

- sudo apt install -y postgresql    # -y를 써주면 설치하면서 나오는 yes/no를 무조건 yes로 설치한다.

- 다음과 같은 메시지와 같이 설치 안될 때 재부팅

  E: Could not get lock /var/cache/apt/archives/lock. It is held by process 3072 (unattended-upgr)

  N: Be aware that removing the lock file is not a solution and may break your system.

  E: Unable to lock directory /var/cache/apt/archives/

 

4. postgresql 상태확인 (2개 모두 상태확인 명령어)

pmk@pmk-virtual-machine:~$ service postgresql status

pmk@pmk-virtual-machine:~$ systemctl status postgresql

 

5. postgresql 프로세스 확인

pmk@pmk-virtual-machine:~$ ps -ef | grep post    # 약 8개 정도 프로세스 확인

 

6. postgresql 리스너 확인

pmk@pmk-virtual-machine:~$ ss -lntp    # 5432 postgresql 포트 확인

 

7. postgresql 시작

pmk@pmk-virtual-machine:~$ sudo service postgresql start    # 설치되면 자동으로 active 상태임

 

8. postgresql 접속

pmk@pmk-virtual-machine:~$ sudo -i -u postgres    # -i(로그인 옵션) -u(유저 옵션)

postgres@pmk-virtual-machine:~$ psql

 

9. 사용자 확인 등 명령어

postgres=# \du    # 사용자 확인

postgres=# \l    # DB 확인

postgres=# create database pmk_test;    # pmk_test database 생성, 만들어졌으면 CREATE DATABASE라는 문구 표시

postgres=# \c pmk_test;    # pmk_test database로 이동 (You are now connected to database "pmk_test" as user "postgres")

pmk_test=# create table computer(brand varchar(100), year varchar(8));    # computer table, 칼럼 brand, year 생성, 만들어졌으면 CREATE TABLE라는 문구 표시

pmk_test=# insert into computer(brand, year) values('samsung', '20230625');    # 데이터 insert

pmk_test=# select * from computer;    # 데이터 조회

 

10. postgres 나오기

postgres=# \q

postgres@pmk-virtual-machine:~$ exit

 

참고)

postgresql 삭제방법 : https://200-rush.tistory.com/entry/UbuntuPostgresqlDelete

postgresql 외부 접속 방법 : https://200-rush.tistory.com/entry/PostgresqlOutConnect

728x90
반응형
LIST
728x90
반응형
SMALL

■ Ubuntu(우분투) Server 22.04.2.LTS 설치 시 나오는 Featured Server Snaps 항목 설명

  1. mictok8s : Kubernetes(쿠버네티스)를 테스트 목적으로 사용해 보기 위해서 우분투가 제공하는 가벼운 배포판

  2. nextcloud : 구글 드라이브와 같이 문서를 저장, 편집할 수 있는 서비스를 제공하는 오픈 소스 소프트웨어

  3. wekan : 오픈 소스 칸반(kanban)

  4. kata-containers : 초경량 VM으로 컨테이너처럼 작동하는 기술

  5. docker : 개발자가 모든 환경에서 해당 코드를 실행하는데 필요한 애플리케이션 소스 코드와 운영 체제(OS) 라이브러리 및 종속성을 결합하는

      표준화된 실행 가능 구성 요소인 컨테이너를 빌드, 배포, 실행, 업데이트 및 관리할 수 있는 오픈 소스 플랫폼

  6. canonical-livepatch : 재부팅 없이 주요 커널 패치 적용 가능

  7. rocketchat-server : 웹, 데스크톱 또는 모바일에서 실시간으로 안전하게 통신하고 다양한 플러그인, 테마 및 기타 주요 소프트웨어와의

      통합으로 인터페이스를 사용자 지정할 수 있는 오픈 소스 팀 채팅 협업 플랫폼

  8. mosquitto : MQTT 브로커

  9. etcd : key:value 형태의 데이터를 저장하는 스토리지

  10. powershell : powershell은 명령줄 셸 스크립팅 언어 및 구성 관리 프레임워크로 구성된 플랫폼 간 작업 자동화 솔루션

  11. stress-ng : 과부하 테스트 프로그램

  12. sabnzbd : 무료로 제공되는 간편한 바이너리 뉴스리더

  13. wormhole : 파일, 디렉터리, 텍스트 및 URL 공유 및 송수신 가능

  14. aws-cli : AWS 명령줄 인터페이스(CLI)는 AWS 서비스를 관리하는 통합 도구

  15. google-cloud-sdk : Google Cloud 제품 및 서비스와 상호작용하기 위한 도구 및 라이브러리

  16. slcli : SLCLI는 SoftLayer API와 쉽게 상호작용하는 데 사용되는 도구

  17. doctl : DigitalOcean을 사용하면 DigitalOcean CLI(doctl)를 통해 리소스를 관리

  18. conjure-up : 쿠버네티스와 다른 대형 소프트웨어 스택을 설정할 수 있는 전용 도구

  19. postgresql10 : postgresql 서버

  20. heroku : PaaS (Platform as a Service) 클라우드 플랫폼으로써, 서버, 프레임워크, OS 등 클라우드 상에서 제공해 주는 방식의 서비스로

         heroku에 애플리케이션을 업로드하면 프로젝트의 언어, 프레임워크 정보 등을 인식하여, 빌드, 서비스 배포까지 자동으로 해주는 플랫폼

  21. keepalived : 서비스의 가동 상태를 감시하는 소프트웨어로 서비스에 장애가 발생하여 정지했을 경우, 그 서버로 오는 요청을 다른 가용 서버로

        할당하도록 하여 서비스가 정지하지 않고 무정지 운영이 가능하도록 하는 기능

  22. prometheus : SoundCloud 사에서 만든 오픈 소스 기반 모니터링 솔루션

  23. juju : Ubuntu를 배포하는 Canonical의 오케스트레이션 툴

728x90
반응형
LIST
728x90
반응형
SMALL

리눅스 파일 관련 명령어 정리
명령어 옵션은 실제로 정리된 것 보다 더 많으나, 공부한 것 위주로 정리해 본다.
명령어 --help를 치면 리눅스에서 제공하는 옵션 설명을 볼 수 있으니 알아두자.

 

● cat - 파일 내용 출력 및 병합 등

1. cat file :  file 내용 출력

2. cat file file1 : file, file1 내용 출력

3. cat file > new_file : file를 복사하여 new_file생성

4. cat file file1 > new_file : file, file1을 복사하여 new_file생성

5. cat file >> new_file : file의 내용을 new_file에 추가

6. cat > file : file의 내용을 직접 쓰고 저장, 기존 내용은 없어짐, 내용을 작성했으면 ctrl+c를 누르면 저장완료

7. cat >> file : 6번과 동일하나, 쓴 내용은 기존 file 내용에 추가

8. cat -n file : file 내용 왼쪽에 줄번호 표시

 

● cd - 디렉터리 이동

1. cd [디렉터리 명] : 디렉터리로 이동, 디렉터리 이름은 대소문자 구분

2. cd .. : 한 단계 위 디렉터리로 이동

3. cd / : 최상위 디렉터리로 이동

4. cd : 홈 디렉터리로 이동

5. cd - : 이전 경로로 이동

 

● cmp - 파일비교 (비슷한 명령어 : diff, diff3, comm)

1. cmp file file1 : file과 file1 비교, 첫 번째로 다른 점이 있는 곳 위치가 출력

2. cmp -b file file1 : 1과 동일, 추가적으로 서로 다른 문자까지 표시

 

● comm - 파일비교

1. comm file new_file : file과 new_file 비교

- file 내용

    file_new_file1

    file1

    file2

- new_file 내용

    file_new_1

    new_file1

    new_file2

    new_file3

- 두 파일을 비교하면 비교 내용이 표로 출력되진 않지만 공백으로 아래 표와 같이 비슷하게 출력이 됨

file 내용 new_file 내용 file과 new_file 같은내용
    file_new_file1
  new_file1  
file1    
file2    
  new_file2  
  new_file3  

 

● cp - copy의 줄임말로 복사 기능

1. cp -r folder folder1 : folder를 복사하여 folder1 생성 (하위 디렉터리와 파일 모두 복사)

2. cp -v folder folder1 : 1과 동일, 추가적으로 복사 진행 상태를 출력

  - 디렉터리 복사가 cp : -r not specified; omitting directory와 같이 메시지가 나오면서 안 되는 경우 -r 옵션이 빠져서 나오는 경우임

  - 이럴 경우 다음과 같이 입력 : cp -vr folder folder1 (옵션을 조합할 때는 -[옵션][옵션] 또는 -[옵션] -[옵션] 이런 식으로 사용)

3. cp -i file file1 : file를 복사하여 file1 생성, 파일이 존재하면 덮어쓰기 여부 체크 (y/n으로 덮어쓰기 여부 실행)

4. cp -f file file1 : 3번과 동일, 대신 강제로 덮어쓴다.

5. cp -p file file1 : 4번과 동일, 대신 file(원본파일)의 소유주, 그룹, 권한, 시간정보를 보존하여 복사

6. cp -a file file1 : 4번과 동일, 대신 file(원본파일)의 속성, 링크 정보를 보존하여 복사

 

● find - 파일 검색

1. find -name aaa : 대소문자를 구분하여 aaa 파일을 검색

2. find -iname aaa : 대소문자를 구분하지 않고 aaa 파일을 검색

3. find ./test -iname aaa : 대소문자를 구분하지 않고 test폴더 안에서만 aaa 파일을 검색

 

● grep- 문자열 검색

1. grep "문자열" file : file안에 입력된 문자열을 검색

2. grep "문자열" * : 현재 디렉터리 안의 모든 파일에서 문자열 검색

3. grep "문자열" *.txt : txt확장자를 가진 모든 파일에서 문자열 검색

4. grep -i "문자열" *.txt : 3번과 동일하나 대소문자 구분 없이 검색

5. grep -w "문자열" *.txt : 3번과 동일하나 단어단위로 검색

6. grep -n "문자열" *.txt : 3번과 동일, 추가적으로 라인번호 출력

7. grep -r "문자열" *.txt : 3번과 동일, 하위 디렉터리까지 검색

 

● ls - 디렉터리 나열

1. ls -l : 권한 보기

2. ls -a : 숨겨진 파일이나 디렉터리까지 표시

3. ls -r : 알파벳 역순으로 출력

4. ls -R : 하위 디렉터리까지 출력

 

● mkdir - 디렉터리 생성

1. mkdir -p 폴더1/폴더2 : 존재하지 않은 폴더1안에 폴더2을 만들 때에는 앞에 -p 옵션 사용 

 

● mv - move의 약자로 파일이나 디렉터리의 위치를 이동 및 다른 이름으로 변경

1. mv folder1/file1 folder2 : folder1안에 file1을 folder2로 이동

2. mv folder1/file1 folder2/file1_mod : folder1안에 file1을 folder2로 이동하되, 이름을 file1_mod로 변경

3. mv -b folder1/file1 folder2/file2 : 이동할 파일이 이미 존재할 경우 백업파일을 만듦

4. mv -i folder1/file1 folder2/file2 : 이동할 파일이 이미 존재할 경우 덮어쓰기 여부 체크

5. mv -f folder1/file1 folder2/file2 : 이동할 파일이 이미 존재할 경우 강제로 덮어쓴다.

6. mv -r folder1 folder2 : folder1안의 하위 디렉터리까지 folder2로 이동

7. mv -v folder1 folder2 : folder1을 folder2로 복사할 때, 복사 진행 상태를 출력

 

● rm- 파일/디렉터리 삭제

1. rm file, file1, file2 : 파일 여러 개를 한 번에 삭제

2. rm -d 디렉터리 : -d를 붙이면 디렉터리 삭제, 디렉터리 안에 파일이 있으면 삭제 안됨

3. rm -r 디렉터리 : -r을 붙이면 디렉터리 안에 있는 파일까지 같이 삭제

 

● sort - 파일의 내용을 정렬

1. sort file : file안의 내용을 정렬

2. sort -r file : file안의 내용을 역순으로 정렬

3. sort -n file : 문자와 숫자가 있을 시, 문자 우선으로 정렬

 

● touch - 빈 파일 생성

1. touch file1 : 파일이 없는 경우에 file1 생성

2. stat file1 : 파일의 atime(access time), mtime(modification time)을 확인

3. touch -a file1 : atime 변경

4. touch -m file1 : mtime 변경

5. touch -mt 202306180000.00 file1 : file1 mtime을 2023-06-18 00:00:00으로 변경

728x90
반응형
LIST
728x90
반응형
SMALL
VMware Workstation Pro 17 설치 방법

 

■ VMware 다운로드

1. VMware 다운로드 사이트 : https://www.vmware.com/kr/products/workstation-pro/workstation-pro-evaluation.html

2. 지금 다운로드를 클릭한다.

vmware 다운로드 사이트

 

■ VMware 설치

1. 다운로드 한 VMware-workstation-full-17.0.0-20800274 파일을 클릭한다.

2. Install 시작 전, Vmware 제품 설치 메시지 박스가 뜨면, Microsoft VC 프로그램을 설치해야 한다.

Vmware 제품설치 안내 메세지

3. Microsoft VC 설치 사이트 : https://learn.microsoft.com/ko-KR/cpp/windows/latest-supported-vc-redist?view=msvc-170

4. 사이트 접속 후 스크롤 바를 내려서 아래 이미지의 빨간 네모칸을 선택하여 다운로드 후 설치한다.

    (PC가 32 비트면 X86을 선택)

Microsoft VC 다운로드 사이트

5. 이후 재부팅이 필요하면 재부팅한 후, 다시 VMware를 설치한다.

6. Next 후,  I accept~ 란을 체크 후, Next를 클릭한다.

VMware Setup

7. 아래 이미지의 Enhanced Keyboard Driver를 추가적으로 체크한다. (기본설정은 체크가 안되어 있음)

    Enhanced Keyboard Driver~ : 키보드 드라이버 추가 설치 (특정 OS 대소문자 마음대로 입력되는 문제 차단)

    Add VMware~ : 콘솔 도구에 VMware 시스템 경로 추가

VMware Setup

8. 이후에는 기본적으로 세팅되어 있는 값으로 Next후 설치 완료한다.

    Check for project updates on startup : 시작 시 업데이트 확인

    Join the VMware~ : 사용자 체험 개선 프로그램에 참여

    Desktop : 바로가기 만들기

    Start Menu~ : 시작 메뉴에 프로그램 폴더 생성

    Enter License Key : 제품키 입력

VMware Setup

728x90
반응형
LIST
728x90
반응형
SMALL

 

Ubuntu Server 22.04.2.LTS 설치하는 방법을 포스팅하였으니,
이번에는
Desktop 22.04.2.LTS 설치하는 방법을 알아보도록 하자.

 

■ VMware 설치

1. VMware 설치 방법 (VMware Workstation Pro17 기준) : VMware Workstation Pro 17 설치 방법

 

■ Ubuntu Desktop 다운로드

1. VMware에 Ubuntu Desktop을 설치하기 위해서는 iso파일이 필요하다. Ubuntu iso를 다운로드할 수 있는 사이트로 이동한다.

  - Ubuntu Desktop 다운로드 사이트 : https://ubuntu.com/download/desktop

2. 우측 하단에 Download 22.04.2를 클릭한다.

Ubuntu Deskup Download 화면

 

■ VMware에 Ubuntu Desktop 설치

1. VMware 실행 후, ubuntu-22.04.2-desktop-amd64.iso를 인스톨한다.

VMware에 Ubuntu Desktop 설치

2. 아래 순서대로 VMware를 설정한다.

- Linux에 사용할 로그인 정보, 비번 등을 설정한다. (Ubuntu 설치할 때 다시 설정하는 부분이 있어서, 이 설정은 의미 없음)

- Virual machine name(가상머신이름), Location(파일이 풀어질 위치)을 설정한다.

- 하드디스크 기본용량을 설정한다.

- 설정을 완료했으면 Finish

VMware Ubuntu Desktop 설치 순서 및 방법

3. VMware세팅이 끝나면 Ubuntu Desktop을 아래 순서대로 설정한다.

- Keyboard layout을 설정한다. 원하는 언어를 클릭하여 설치한다. (Korean도 있지만 나는 English(US)을 선택하여 설치)

- 2번째 이미지에서 Install third-party.... 가 기본적으로 체크가 해제되어 있는데 이 부분을 체크한다.

- 지역설정을 서울로 바꾸면 시간이 서울시간으로 변경된다.

Ubuntu Desktop 설치화면

4. Ubuntu에서 사용할 로그인 정보를 입력한다.

5. 4번까지 설치를 하고 재부팅을 하면 Ubuntu 설치완료

- 4번에서 설정한 로그인정보를 입력하고 들어가면 Ubuntu를 사용할 수 있다.

Ubuntu Desktop 설치완료 화면

 

(참고) Server와 차이점

- 초기 인스톨하면 GUI가 제공된다.

- Server에 비해서 기본적으로 제공되는 것들이 많아, Install 시간이 서버보다 오래 걸린다.

- Ubuntu(우분투) Server 22.04.2.LTS 설치 방법 : Ubuntu(우분투) Server 22.04.2.LTS 설치 방법

728x90
반응형
LIST

'Linux_Ubuntu' 카테고리의 다른 글

Ubuntu Desktop vs Server  (0) 2024.07.28
Featured Server Snaps 항목 설명  (0) 2023.06.21
리눅스 파일 관련 명령어  (0) 2023.06.19
Ubuntu(우분투) Server 22.04.2.LTS 설치 (VMware)  (0) 2023.05.29
728x90
반응형
SMALL
Vmware 설치 및 Vmware에 Ubuntu 설치하는 방법을 알아보도록 하자.

 

■ VMware 설치

1. VMware 설치방법 (VMware Workstation Pro17 기준) : VMware Workstation Pro 17 설치 방법

 

■ Ubuntu Server 다운로드

1. VMware에 Ubuntu Server를 설치하기 위해서는 iso파일이 필요하다. Ubuntu iso를 다운로드할 수 있는 사이트로 이동한다.

  - Ubuntu 다운로드 사이트 : https://ubuntu.com/download/server

2. 중간에 Download Ubuntu Server 22.04.2 LTS를 클릭한다.

Ubuntu Server 다운로드 화면

■ VMware에 Ubuntu Server 설치

1. VMware 실행 후, ubuntu-22.04.2-live-server-amd64.iso를 인스톨한다.

- Create a New Virtual Machine 선택한다.

- Browser를 클릭하고, iso 파일이 있는 곳으로 가서 Image 삽입한다.

- Virual machine name(가상머신이름), Location(파일이 풀어질 위치)을 설정한다.

- 하드디스크 기본용량을 설정한다.

- 설정을 완료했으면 Finish (이미지 미첨부)

VMware 기본 설정

2. Try or install Ubuntu Server 선택, 원하는 언어를 선택한다.(나는 English를 선택)

Ubuntu Server 설치 및 언어 선택

3. 새로운 Installer로 업데이트하고 싶으면 Update to the new installer, 그렇지 않으면 Continue without updating 선택한다.

    키보드 또한 원하는 것을 선택한다. (나는 Installer는 Continue without updating, 키보드는 English 선택)

Installer Update여부 및 키보드 언어 선택

4. 인스톨 타입은 Ubuntu Server 선택한다. 네트워크 관련해서는 고정 IP로 설정하고 싶으면 빨간 박스에서 엔터를 눌러 설정을 변경한다.

    (나는 그냥 초기 설정 값으로 Done)

Install 타입 및 네트워크 설정

5. proxy 서버가 있으면 proxy 서버 주소를 입력한다. mirror 주소도 국내로 변경하고 싶으면 변경할 주소를 입력한다.

    (나는 따로 변경하지 않고 Done)

- proxy 서버 : 클라이언트가 서버로 접속할 때 바로 접속하지 않고 중간에 대신 전달해 주는 서버 (보안 등에 용이)

- mirror 서버 : Ubuntu에서 패키지를 다운로드할 때 사용되는 서버, 아래는 국내 사이트로 속도가 빠른 장점이 있다.

  - 카카오 : http://mirror.kakao.com/

  - 카이스트 : http://ftp.kaist.ac.kr/

Proxy 및 Mirror 서버 설정

6. Storage를 설정한다. (나는 기본값으로 진행)

Storage 설정

7. Ubuntu 로그인할 때 사용하는 정보로 서버 이름 및 비밀번호 설정한다. Upgrage관련해서는 Skip for now를 선택한다.

로그인 정보 및 Upgrade 설정

8. Install OpenSSH server 선택, Snap관련해서는 Done 선택한다.

- SSH : Secure Shell의 줄임말로 원격 호스트에 접속하기 위해 사용되는 프로토콜, Telnet과 비슷하나 Telnet은 암호화가 이루어지지 않음

- FeaturedServerSnaps 설명 : FeaturedServerSnaps

SSH 및 Snaps 설치 여부 설정

 

■ Ubuntu Server 실행

Ubuntu Server에 로그인된 화면

- 위에서 설정했던 login // password를 입력하면 위와 같이 로그인이 되는 것을 볼 수 있다.

 

(참고) Desktop과 차이점

- 초기 인스톨하면 GUI가 제공되지 않는다.

- 필요한 것만 Install 되기 때문에 용량도 적고, Install 시간도 빠르다.

- Desktop 설치방법 : https://200-rush.tistory.com/entry/UbuntuDesktop22042LTS

728x90
반응형
LIST

'Linux_Ubuntu' 카테고리의 다른 글

Ubuntu Desktop vs Server  (0) 2024.07.28
Featured Server Snaps 항목 설명  (0) 2023.06.21
리눅스 파일 관련 명령어  (0) 2023.06.19
Ubuntu(우분투) Desktop 22.04.2.LTS 설치 (VMware)  (0) 2023.05.30
728x90
반응형
SMALL
Python 정규식의 표현 및 사용방법을 알아보자.
알아두면 매우 유용하게 사용할 수 있다.

 

■ 정규식 : [] 안에 . ^ $ * + ? { } [ ] \ | ( ) 을 사용하는 식

표현식 동일 표현식 설명
\d [0-9] 숫자와 매치
\D [^0-9] 숫자가 아닌 것과 매치
\s [\t\n\r\f\v] 공백 매치
\S [^\t\n\r\f\v] 공백 아닌 것과 매치
\w [a-zA-z0-9_] 문자, 숫자 매치
\W [^a-zA-z0-9_] 문자, 숫자 아닌 것과 매치
.   a.d 사이에 들어가는 모든 문자와 매치 (Yes : abcd, abd    No : ade, a0e)
ab*c   * 바로 앞에 있는 문자 b가 0부터 매치 (ac, abc, abbc 모두 매치)
ab+c   * 과 동일, 다른점은 문자 b가 1부터 매치 (ac는 매치 안됨)
ab{2}c   b가 2번 반복 되어야 매치 (Yes : abbc    No : abc)
ab{2,5}c   b가 2~5번 반복되면 매치
ab?c ab{0,1}c b가 0~1번 반복되면 매치
^abc   문자열의 처음은 항상 abc로 시작하면 매치 (re.MULTILINE 일 경우 라인별 첫 문자)
\Aabc   문자열의 처음은 항상 abc로 시작하면 매치 (re.MULTILINE 과 상관없음)
abc$   문자열의 마지막은 항상 abc로 끝나면 매치 (re.MULTILINE 일 경우 라인별 첫 문자)
abc\Z   문자열의 마지막은 항상 abc로 끝나면 매치 (re.MULTILINE 과 상관없음)
abc|def   abc 또는 def가 있으면 매치
\babc\b   앞뒤로 스페이스가 있을 경우에만 매치
\Babc\B   앞뒤로 스페이스가 없을 경우에만 매치

 

■ 정규식 응용

import re

p = re.compile('[a-z]+')

 

m = p.match("abc")    # 문자열 처음부터 정규식과 매치되는지 확인

print(m)    # 결과값 : <re.Match object span=(0, 3), match='abc'>

 

m = p.match("00abc")

print(m)    # 결과값 : None

 

m = p.search("abc")    # 문자열 전체를 검색하여 정규식과 매치되는지 확인

print(m)    #과값 : <re.Match object; span=(0, 3), match='abc'>

 

m = p.search("00abc")

print(m)    # 결과값 : <re.Match object; span=(2, 5), match='abc'>

 

m = p.findall("a b c")    # 리스트로 반환

print(m)    # 결과값 : ['a', 'b', 'c']

 

m = p.finditer("abc def ghi")    # 반복 가능한 개체로 돌려줌

print(m)    # 결과값 : <callable_iterator object at 0x000001886C72FFD0>

for i in m:

    print(i)

# 결과값

# <re.Match object; span=(0, 3), match='abc'>

# <re.Match object; span=(4, 7), match='def'>

# <re.Match object; span=(8, 11), match='ghi'>


참고) 위 2줄은 아래 1줄로 사용할 수 있음.

p = re.compile('[a-z]+')

m = p.match("abc")

 

m = re.match('[a-z]+', "abc")


# #1, #2의 차이점

import re

 

p = re.compile("^abc\s\w+")    #1

p = re.compile("^abc\s\w+", re.MULTILINE)    #2

 

data = """abc one

abc two

abc three"""

 

print(p.findall(data))    # 결과값 : ['abc one'] - 첫 번째 줄만 매치    #1

print(p.findall(data))    # 결과값 : ['abc one', 'abc two', 'abc three'] - 라인별로 매치    #2


# '\abc'를 찾을 때는 \를 하나 더 쓴다. '\\abc'를 찾을 때는 '\\\\abc' 이렇게 사용한다.

p = re.compile("\\abc")

 

# 간단하게 사용하는 방법은 앞에 r을 붙이면 된다. 

p = re.compile(r"\abc")


# 전화번호 형태의 정규식

p = re.compile(r"(?P<name>\w+)\s+(?P<phone>\d+[-]\d+[-]\d+)")

m = p.search("mobile 010-1234-5678")

 

print(m.group(0))    # 결과값 : mobile 010-1234-5678 (전체 문자열 반환)

print(m.group(1))    # 결과값 : mobile (괄호로 묶인 1번째 문자열 반환)

print(m.group("name"))    # 결과값 : mobile (괄호로 묶인 1번째 문자열을 name이라는 이름을 통하여 문자열 반환)

print(m.group(2))    # 결과값 : 010-1234-5678 (괄호로 묶인 2번째 문자열 반환)


# 문자열 바꾸기

p = re.compile("(park|kim|lee)")

m = p.sub("first", "park name and kim name")

print(m)    # first name and first name

 

p = re.compile(r"(?P<name>\w+)\s+(?P<phone>\d+[-]\d+[-]\d+)")

m = p.sub("\g<phone> \g<name>", "mobile 010-1234-5678")

print(m)    # 결과값 : 010-1234-5678 mobile

728x90
반응형
LIST
728x90
반응형
SMALL
Python 내장 함수 및 라이브러리를 어떻게 사용하는지, 파일 읽기, 쓰기 등 어떻게 하는지 살펴보자.

 

■ 파일 읽기, 쓰기 등 

# 파일 생성

f = open("d:/new.txt", 'w')    # 'r' : 읽기 모드    'w' : 쓰기 모드    'a' : 추가모드

for i in range(0, 10):    # 0~9까지 

    a = str(i) + "row\n"    # "\n"은 new line

    f.write(a)

f.close()    # close를 하지 않으면 파일이 열려 있는 상태이므로 꼭 close를 해줘야 한다. (파일 삭제가 되지 않음)

 

# 파일 읽기 (case1 ~ case3)

f = open("d:/new.txt" , 'r')

 

# case1 - line별로 담아서 출력

lines = f.readlines()

for line in lines:

    print(line)

 

# case2 - line 1개 출력

line = f.readline()

print(line)

 

# case3 - line 1개를 담아 1 글자씩 출력

lines = f.readline()

for line in lines:

    print(line)

 

f.close()

 

# read를 통하여 한번에 가져오기

f = open("d:/new.txt" , 'r')

a = f.read()

print(a)

f.close()

 

# 파일 내용 추가

f = open("d:/new.txt", 'a')

for i in range(10, 20):    # 10~19까지

    a = str(i) + "row"

    f.wirte(a)

f.close()

 

# f.close()를 사용하지 않고 파일 닫기

with open("d:/new.txt", 'r') as f:

    f.read()

 

■ Python 내장 함수

1. 절대값 : abs(-1.3) → 1

2. 모두 참이면 : all([1,2,3,4,5]) → True,    all([0,1,2,3,4]) → False

3. 하나라도 참이면 : any([0,1,2,3]) → True

4. 몫과 나머지 : divmod(9, 4) → (2, 1)

5. 정수 변환 : int(1.4) → 1

6. 문자열 변환 : str(7) → '7'

7. 리스트 변환 : list("12345") → ['1', '2', '3', '4', '5']

8. 튜플 변환 : tuple("12345") → ('1', '2', '3', '4', '5')

9. 길이 : len("12345") → 5

10. 최대값 : max([1, 2, 3]) → 3

11. 최소값 : min([1, 2, 3]) → 1

12. 아스키 값 : ord("a") → 97

13. 제곱 : pow(2, 3) → 8

14. 범위

   - list(range(5)) → [0, 1, 2, 3, 4]

   - list(range(5, 10)) → [5, 6, 7, 8, 9]

   - list(range(1, 10, 2)) → [1, 3, 5, 7, 9]

15. 반올림

   - round(0.7) → 1

   - round(0.5) → 0    # ※ 0이 되는 것 주의

   - round(0.555, 2) → 0.56

16. 정렬 : sorted([3, 2, 1]) → [1, 2, 3]

17. 합 : sum([2, 3, 5]) → 10

18. 자료형 가져오기 : type("a") → <class 'str'>

19. 자료형 묶음 : list(zip([1, 2], [3, 4])) → [(1, 3), (2, 4)]

 

■ 라이브러리(library) 사용

import os

import shutil

import glob

import tempfile

import time

import calendar

import webbrowser

 

os.environ    # 환경변수 출력

os.chdir("d:/")    # 디렉터리 변경

os.getcwd()    # 디렉터리 위치

 

shutil.copy("d:/new.txt", "d:/new1.txt")    # new.txt을 new1.txt로 복사, 파일이 있으면 덮어씀

 

glob.glob("d:/new*")    # d드라이 안에 new로 시작하는 파일 찾기

 

file = tempfile.mkstemp()    # 중복되지 않은 임시 파일을 만듦, 결과값은 파일 경로

# 임시로 파일을 만들고, close()로 파일을 삭제한다.

f = tempfile.TemporaryFile()

f.close()

 

time.time()    # 1970.01.01 00:00:00 기준으로 지난 시간을 초단위로 반환 (UTC 기준)

time.localtime(time.time())    # 년, 월, 일, 시, 분, 초로 반환

time.asctime(time.localtime(time.time()))    # 날짜 정렬

time.ctime()    # 오늘날짜 반환

time.strftime('%a', time.localtime())    # 요일 반환 (형태 : 'Sun') - 날짜 포맷 코드는 아래 표 참고

 

calendar.calendar(2023)    # 2023년 달력 (한 줄 표시)

calendar.prcal(2023)    # 2023년 달력 (달력처럼 표시)

calendar.prmonth(2023, 5)    # 2023년 5월 달력

calendar.weekday(2023, 5, 21)    # 6 반환 (월요일 : 0 ~ 일요일 : 6)

calendar.monthrange(2023, 5)    # (0, 31) 반환 : 0은 5월 시작일의 요일, 31은 5월의 마지막 날

 

webbrowser.open("http://200-rush.tistory.com")    # 해당 url open

 

■ 날짜 포맷 코드

코드 표현 (설명) 코드 표현 (설명) 코드 표현 (설명)
%a 'Sun' (약자) %I '02' (12시 기준 시간) %w '0' (요일)
%A 'Sunday' %j '141' (1년 중 누적날짜) %W '20' (1년 중 누적 주 - 월요일 시작)
%b 'May' (약자) %m '05' (월) %x '05/21/23/
%B 'May' %M '08' (분) %X '14:13:39'
%c Sun May 21 14:04:38 2023 %p 'AM' or 'PM' %Y '2023'
%d '21' (날짜) %S '23' (초) %Z '대한민국 표준시'
%H '14' (24시 기준 시간) %U '21' (1년 중 누적 주 - 일요일 시작) %y '23' (yy만 표시)

- 날짜 포맷 코드 응용 : time.strftime('%Y%m%d', time.localtime()) → '20230521'

728x90
반응형
LIST
728x90
반응형
SMALL
Python 자료형 정리 list, tuple, dictionary, bool, 집합 사용법

 

■ 리스트(list) 자료형

a = [1, 2, 3, 4, 5]

b = [6, 7, 8, 9]

 

# 사용 및 결과값

a[0] → 1, a[1] → 2 ...

a[0:2] → [1, 2]

a[:2] → [1, 2]

a[2:] → [3, 4, 5]

a[2] = 10 → [1, 2, 10, 4, 5]

 

# 순서대로 리스트 아래 명령어를 실행하면 a값이 변경된다.

del a[2] → [1, 2, 4, 5]    # 10 제거

a.append(9) → [1, 2, 4, 5, 9]    # 맨 뒤 값 추가

a.reverse() → [9, 5, 4, 2, 1]    # 정렬

a.sort() → [1, 2, 4, 5, 9]    # 정렬

a.insert(0, 0) → [0, 1, 2, 4, 5, 9]

a.remove(0) → [1, 2, 4, 5, 9]

a.pop() → 9    # 맨 끝 자리 값 출력 후 삭제

a → [1, 2, 4, 5]    # 삭제 후 값

a.pop(1) → 2

a → [1, 4, 5]

a.count(4) → 1    # 1의 갯수

a.extend([6, 7]) → [1, 4, 5, 6, 7]

 

■ 튜플(tuple) 자료형

1. 리스트와 비슷하나, [] 대신 ()으로 감싸고, 값을 수정할 수 없다.

- 사용법 : a = 1,2,3 또는 a = (1,2,3), 안에 값이 1개일 경우에는 a = (1,)과 같이 ,를 붙여준다.

 

■ 딕셔너리(dictionary) 자료형

dic = {"key": "키", "value": "벨류"}

 

dic["key"] 또는 dic.get("key") → '키'    # 차이점 : 키 값이 없는 "aa"로 찾는 경우 전자는 에러, 후자는 None값을 가져온다.

dic["value"] 또는 dic.get("value") → '벨류'

dic.get("aa", "기본값") → '기본값'    # 키 값이 없는 경우 None값이 아닌 뒤에 지정한 '기본값'으로 가져온다.

dic["add"] = "추가"

dic → {'key': '키', 'value': '벨류', 'add': '추가'}

del dic["add"]

dic → {'key': '키', 'value': '벨류'}

dic.keys() → dict_keys(['key', 'value'])

dic.values() → dict_values(['키', '벨류'])

dic.items() → dict_items([('key', '키'), ('value', '벨류')])

"key" in dic → True    # 딕셔너리에 키 값이 있는지 체크

 

■ 교집합, 차집합, 합집합

aa = [1, 2, 3, 4]

bb = [3, 4, 5, 6]

 

set(aa) & set(bb) → {3, 4} 또는 set(aa).intersection(set(bb))    # 교집합

set(aa)-set(bb) → {1, 2} 또는 set(aa).difference(set(bb))    # 차집합

set(aa).union(set(bb)) → {1, 2, 3, 4, 5, 6}    # 합집합

 

■ 불(bool) 자료형

1. 문자인 경우 빈값이면 False

2. 리스트인 경우 리스트가 없으면 False

3. 숫자인 경우 0이 아니면 True, 그 외 False

 

참고: Python 자료형 정리 (숫자형, 문자형)

728x90
반응형
LIST
728x90
반응형
SMALL
Python 자료형 정리, 숫자형, 문자형 사용법

 

1. 숫자형 더하기 : 1 + 2 → 3

2. 문자형 더하기 : "aa" + "bb" → 'aabb'

3. 숫자형 곱하기 : 1 * 2 → 2

4. 문자형 곱하기 : "aa" * 3 → 'aaaaaa'

5. 제곱근 : 2 ** 4 → 16

6. 나누기 : 1 / 2 → 0.5

7. 나머지 : 3 % 2 → 1

8. 몫 : 8 // 3 → 2

9. 문자열 만들기 : "" 또는 ''로 감싸도 동일, 문자열 안에 ', "표현은 아래와 같이 처리

- "abc'd" → abc'd 또는 'abc"d' → abc"d

- 같은 문자로 감싸는 경우는 " 또는 ' 앞에 \ 를 붙인다. ("abc\"d" → abc"d)

10. 줄 바꿈

- 문자열 안에 \n 삽입 또는 """ """를 이용

"aaaaa\nbbbb"

"""

aaa

bbb

"""

11. 문자열 길이 : len("aa") → 2

12. 문자열 가져오기 : 문자열 첫 번째는 0부터 시작, -1은 뒤에서부터 시작

a = "abcd"

# 문자열 첫 번째는 0부터 시작

a[0] → "a", a[1] → "b", a[2] → "c", a[3] → "d"

 

a[-1] → "d"    # -1은 뒤에서부터 시작

a[0:3] → "abc"    # 0번째부터 3번째까지 (주의 : 마지막 인덱스는 제외)

a[1:3] → "bc"    # 1번째부터 3번째 까지(주의 : 마지막 인덱스는 제외)

a[2:] → "cd"    # 2번째부터 끝까지

a[:2] → "ab"    # 2번째까지(주의 : 마지막 인덱스는 제외)

a[0::2] → "ac"    # 0번째부터 끝까지, 2자리씩

a[-1::-2] → "db"    # 끝에서부터 0번까지, 2자리씩 역순

a[-1:0:-1] → "dcb"    # 끝에서부터 0번까지, 역순(주의 : 마지막 인덱스는 제외)

a[-1::-1] → "dcb"    # 끝에서부터 0번까지, 역순

 

# 주의할 점 : 인덱스 범위 지정 시, 마지막 인덱스를 지정해 주면 마지막 인덱스는 제외하고 출력된다.

13. 대입(치환) : %s는 숫자, 문자 다 됨

- 숫자형 (결과값 : '손가락 5개')

   - "손가락 %d개" % 5

   - "손가락 {0}개".format(5)

   - "손가락 {a}개".format(a=5)

- 문자형 (결과값 : '손가락 다섯개')

   - "손가락 %s개" % "다섯"

   - "손가락 {0}개".format("다섯")

   - "손가락 {a}개".format(a="다섯")

- 조합 (결과값 : '손가락 5개, 다섯개')

   - "손가락 %d개, %s개" % (5, "다섯")

   - "손가락 {0}개, {1}개".format(5, "다섯")

   - "손가락 {a}개, {b}개".format(a=5, b="다섯")

- "%"가 포함되어 있는 경우 : "%d%%" % 100 = '100%'

14. 정렬, 공백

- 우측 정렬 (결과값 : '    p')

   - "%5s" % "p"

   - "{0:>5}".format("p")

   - f"{'p':>5}"

- 좌측 정렬 (결과값 : 'p    ')

   -  : "%-5s" % "p"

   - "{0:<5}".format("p")

   - f"{'p':<5}"

- 가운데 정렬 (결과값 : '  p  ')

   - "{0:^5}".format("p")

   - f"{'p':^5}"

 - 공백 채우기 : (결과값 : '++p++')

   - "{0:+^5}".format("p")

   - f"{'p':+^5}"

- 소숫점 : (결과값 : '    1.1234')

   - "%10.4f" % 1.1234

   - "{0:10.4f}".format(1.1234)

   - f"{1.1234:10.4f}"

15. 문자 개수 세기

결과 : 3

a = abbcccdddd

a.count('c')

16. 문자 찾기

결과 : 3

a = abbcccdddd    # c가 있는 첫 번째 위치

a.find('c')    # c라는 문자열이 없으면 -1

a.index('c')    # c라는 문자열이 없으면 에러

17. 문자 삽입

결과 : 'a,b,c,d'

",".join('abcd')

",".join(['a', 'b', 'c', 'd'])

18. 소문자를 대문자로, 대문자를 소문자로

a = "ab"

b = "CD"

a.upper()    # 결과값 : 'AB'

b.lower()    # 결과값 : 'cd'

19. 공백 지우기

a = "  ab  "

a.lstrip()    # 왼쪽 공백 지우기 결과값 : 'ab  '

a.rstrip()    # 오른쪽 공백 지우기 결과값 : '  ab'

a.strip()    # 양쪽 공백 지우기 결과값 :  'ab'

20. 문자 바꾸기

a = "aabbcc"

a.replace("bb", "kk")    # 결과값 : 'aakkcc'

21. 문자 나누기

a = "aa bb cc dd"

b = "aa,bb,cc,dd"

 

a.split()    # 결과값 : '''aa, ''bb, 'cc', 'dd']

b.split(",")    # 결과값 : ['aa', 'bb', 'cc', 'dd']

 

참고 : Python 자료형 정리 (list, tuple, dictionary, bool, 집합)

728x90
반응형
LIST
728x90
반응형
SMALL
GitLab에서 관리되는 소스를 GUI인터페이스를 통하여 쉽게 다룰 수 있는 프로그램들이 있는데, 대표적으로 Source tree, Fork 등이 있다. 이번 포스팅은 GitLab과 Fork 연동하는 방법을 알아보도록 하자.

 

■ Fork 다운로드 및 설치

1. Fork 다운로드 사이트 : https://git-fork.com/

2. 설치 후 User information를 입력하고 Finish버튼을 누른다.

  - User Name : Push, Commit 등 Git의 이벤트가 발생할 때 등록한 이름으로 Git에 올라간다.

  - Email : User Name과 마찬가지로 이벤트가 발생할 때, 이벤트를 Email로 받아볼 수 있다.

  - Default source folder : Git과 연결할 폴더를 지정한다.

초기 Fork 화면

■ GitLab과 Fork연동

1. GitLab에서 생성한 프로젝트로 이동한다.

2. Clone 버튼을 눌러서 Clone with HTTPS에 있는 URL복사 버튼을 클릭한다.

  (참고) SSH : SSH Key로 프로젝트에 연결  /  HTTPS : User information 정보로 프로젝트에 연결

GitLab Clone

3. Fork로 돌아와 상단의 File - Clone을 클릭하면 아래 이미지와 같이 팝업창이 뜬다.

    Repository Url은 Git에서 복사한 내용이, Parent Folder는 Fork 실행 전 User informaion에서 입력한 내용이 자동으로 입력되어 있다.

    자동으로 입력되어 있지 않으면 수동으로 복사하여 해당칸에 정보를 입력한다.

    입력이 완료되면 Test Connection을 눌러 연결 테스트를 하거나, 바로 Clone을 버튼을 눌러서 Git과 연결할 수 있다.

    연결되면 해당 폴더에는 .git이라는 폴더와 함께 Git에 올라가 있는 프로젝트 파일이 Local에 생성된다.

    (참고 : .git폴더가 보이지 않으면 탐색기 - 보기 - 숨김 항목을 체크한다.)

Fork GitLab 연결

4. GitLab연결 전에 작업했던 소스를 GitLab으로 연동하는 방법은 File - Init New Repository를 클릭하고 GitLab으로 올릴 프로젝트를 선택한다.

    선택하면 Fork에는 Local Change에 작업했던 소스파일이 뜨는 것을 볼 수 있다.

    Remotes(우클릭) - Add New Remote를 눌러 GitLab과 연결한다.

Add New Remote

5. 연결하면 Remotes아래에 origin이 생기는데 우클릭 후 Fetch 'origin'을 클릭하면 GitLab에서 만들었던 Branch를 볼 수 있다.

GitLab Branch Fetch

6. develop Branch에 소스를 관리할 것이므로 develop을 더블클릭하면 Branches에 develop이 생성되는 것을 볼 수 있다.

    이후 Unstaged에 있는 파일을 전체 선택 후 Stage를 누르고, Commit 메세지 저장 후 Commit을 클릭한다.

Commit

7. Local Branches의 develop에 1↑ 이라는 Push 할 내역이 생기는 걸 볼 수 있는데 Push버튼을 누르면 GitLab에 적용된다.

Push 건수 확인

8. 여기까지 완료했으면, GitLab에 Local에서 작업했던 파일이 develop Branch로 올라간 것을 볼 수 있다.

GitLab Push

9. 이렇게 생성된 프로젝트 파일은 계속해서 GitLab에 관리되어 History뿐만 아니라 과거 소스로 복원시킬 수도 있는 등, 많은 유용한 기능을 제공하고 있으며, Fork에서는 GitLab에 접속하지 않고 이런 정보들을 확인할 수 있게 제공하고 있다.

728x90
반응형
LIST
728x90
반응형
SMALL

 

앞에서 Django Swagger DRF(django Rest Framework)을 알아봤다면,
이번에는 Ninja에 대해서 알아보자.
DRF(Django Rest Framework) Swagger와 비교해 보고 싶으면 이전 포스팅 참고: Django-Swagger-DRF

 

■ Ninja 설치 및 사용법

1. Ninja 설치 : pip install django-ninja

2. 프로젝트 구조

3. Ninja 사용법

# django app의 views.py

from ninja import NinjaAPI

api = NinjaAPI()    # NinjaAPI() 괄호 안의 속성에 따라 사용자가 원하는 데로 변경 가능

 

@api.get("/get", tags=["get의 이름"], summary="get summary")    # tags, summary 등의 속성으로 api 정보를 줄 수 있음

def get(request, param1: int, param2: int = None):    # None 값을 주면 required(필수값)이 아님, 항상 필수값 뒤로 코딩하여야 함

    return {"result": param1 + param1}    # json 형식으로 return값 세팅

 

@api.get("/format/{a}and{b}")    # {} 안의 값에 따라 return값이 달라짐

def get_format(request, param1: int, param2: int):

    return {"add": param1 + param2, "multiply": param1 * param2}

 

@api.get("/response/", response={200: Item, 403: Error})    # Item, Error는 django app의 schemas.py에 선언

def get_response(request):

    if not request.user.is_authenticated:

        # response 형식에 따라 return값 세팅, message 외 다른 값을 추가해도 Error Class로 세팅이 이미 되어 있기 때문에 나오지 않음

        return 403, {"message": "Please sign in first"}

    return request.user

 

@api.api_operation(["POST", "PATCH"], "/path")    # post, patch 동시 선언

def mixed(request):

    return {"result": True}

 

@api.post("/post")

def post(request, param1: str, item: Item):    # Item은 django app의 schemas.py에 선언

    return {"result": True, "message": "메세지"}


# django app의 schemas.py

from typing import List

from ninja import Schema

 

class Item(Schema):

    name: str

    description: str

    price: float

    quantity: int

 

class Error(Schema):

    message: str


# django project의 urls.py에 선언

from django.contrib

import admin from django.urls import path

from django_app_2.views import api    # app import

 

urlpatterns = [

    path('admin/', admin.site.urls),

    path('api/', api.urls)

]

4. 실행화면

- 기본 url은 로컬 주소에 path에 설정된 값에 /docs를 붙이면 Swagger가 실행된다.

- http://127.0.0.1:8000/api/docs

Ninja Swagger 실행화면

5. views.py에 주석으로 달아놓은 부분을 바꿔가면서 api가 어떻게 바뀌는지 꼭 테스트해 보고, 추가적으로 기능이 필요하다면 Ninja 공식사이트를 참고하자.

    지식도 없고, 영어도 잘 못하는 내가 봐도 그렇게 어렵지 않게 설명이 잘 되어 있다. 

    - Ninja 공식사이트 : https://django-ninja.rest-framework.com/

 

728x90
반응형
LIST
728x90
반응형
SMALL
Django Swagger API를 만들다 보면, API별로 설명을 작성해야 Front개발자가 참고하여 API를 사용할 수 있다.
MarkDown을 사용하여 API 설명 작성하는 방법을 알아보자.

■ MarkDown을 사용한 API

1. 이전 포스팅에서 MarkDown을 사용하여 간단하게 API에 대한 설명을 적어보았다.

    (아래 이미지까지 소스는 링크 참고 : Swagger API 만들기)

MarkDown문법으로 작성한 operation_description

■ MarkDown 사용법

- API에 대한 설명은 함수안에서 """ """ 안에서 사용할 수 있다. ("""를 입력하면 감쌀수 있게 """가 자동으로 생성된다.)
1. 글씨크기 조절 # 1개부터 6개까지 사용 가능
2. 기울림꼴 * 또는 _
3. 굵게 ** 또는 __
4. 기울림꼴 + 굵게 *** 또는 ___
5. 취소선 ~~
6. 취소선 + 굵게 등 3, 4, 5와 동일하게 사용하되 ~~ 사용
7. 목록 * 목록
    * 목록 1
        * 목록 2
8. 링크 [나의 블로그 링크](https://200-rush.tistory.com/ "나의 블로그")
9. 테이블
- 규칙을 따라야 함
- 하단 3줄은 셀 중간중간에 값 넣을때 사용

|col1|col2|col3|
|---|---|---|
|col1row1|col1row1|col2row1|
|col1row2|col1row2|col2row2|
|col1row3|col1row3|col2row3|
|col1row4|||
||col2row5||
|||col3row6|
10. Line --- 또는 *** 또는 ___

 

■ MarkDown 적용한 실제 소스

1. 특수기호 안에서 특수기호를 표시하고 싶을 때에는 특수기호 앞에 \를 붙인다.

2. 중간중간에 ---, ***, ___은 라인을 표시하는 것으로 결과는 똑같이 표시된다.

3. 링크 관련해서는 실제 Swagger에서 글씨에 마우스를 올리면 "나의 블로그"이라는 설명이 표시된다.

# App의 views.py

@api_view(['PUT'])    # PUT API

def put_test(request):

    """

    # \# 1개

    ## \# 2개

    ### \# 3개

    #### \# 4개

    ##### \# 5개

    ###### \# 6개

    ---

    *\*을 사용한 기울임 꼴*

    **\*\*을 사용한 Bold**

    ***\*\*\*을 사용한 Bold 기울임 꼴***

    ---

    _\_을 사용한 기울임 꼴_

    __\_\_을 사용한 Bold__

    ___\_\_\_을 사용한 Bold 기울임 꼴___

    ***

    ~~\~\~을 사용한 취소선~~

    ~~**\~\~와\*\*을 사용한 Bold 취소선**~~

    ~~___\~\~\~와\_\_\_을 사용한 Bold 기울임 꼴 취소선___~~

    ___

    * 목록

        * 목록 1

            * 목록 2

    ---

    [나의 블로그 링크](https://200-rush.tistory.com/ "나의 블로그")

    ---

    |col1|col2|col3|

    |---|---|---|

    |col1row1|col1row1|col2row1|

    |col1row2|col1row2|col2row2|

    |col1row3|col1row3|col2row3|

    |col1row4|||

    ||col2row5||

    |||col3row6|

    """

    return Response(request)

 

■ 소스를 실행한 Swagger 화면

MarkDown 적용한 실행화면

728x90
반응형
LIST
728x90
반응형
SMALL
Django DRF(Django Rest Framework) View의 종류
1. APIView(CBV) - 클래스형 뷰
2. @api_view(FBV) - 함수형 뷰
이 2개 중 FBV 활용하는 법 알아보기
DRF(Django Rest Framework)가 세팅이 안되어 있으면 이전 포스팅 참고:  Django-Swagger-DRF-Setting

 

@api_view(FBV) - 함수형 뷰 사용 및 활용법

1. 뷰를 작성할 때 함수 위에 @api_view와 같이 Decorator(데코레이터)를 사용한다.

2. Decorator(데코레이터)를 사용하여 GET, POST API를 만드는 방법이다.

# App의 views.py

 

@api_view(['GET'])

def get_test(request):

    return Response(request)

 

# tags: API 명칭 설명

# manual_parameters: API에 Parameter 생성 (하단 api_params.py)

@swagger_auto_schema(method="POST", tags=["새로운 이름"], manual_parameters=get_test_params,

                                           operation_summary="api 이름", operation_description="api 사용법",

                                           responses={201: '201 Description', 400: '400 Description', 500: '500 Description'})

@api_view(['POST'])    # POST API

def post_test(request):

    return Response(request)

 

@swagger_auto_schema(method="PUT", tags=["새로운 이름"])

@api_view(['PUT'])    # PUT API

def put_test(request):

    # 5번 참고

    """

    # 제목 크기 1

    ## 제목 크기 2

    ### 제목 크기 3

    #### 제목 크기 4

    ##### 제목 크기 5

    ###### 제목 크기 6

    [나의 블로그](https://200-rush.tistory.com/ "나의 블로그 설명")

    """

    return Response(request)

 

@api_view(['GET', 'POST'])    # GET, POST 2개의 API 동시 생성

def get_post_test(request):

    return Response(request)


# App에 추가한 api_params.py

# (참고) App에 파일을 추가해도 되고, views.py에 작성해도 되나, parameter를 모아두기 위해서 api_params.py를 생성하여 관리하였다.

 

from drf_yasg import openapi

 

get_test_params = [

    openapi.Parameter(

        name="param_1",

        in_=openapi.IN_QUERY,

        description="param_1을 입력",

        required=True,

        type=openapi.TYPE_STRING,

        default="abc"

    )

]


# Project의 urls.py

 

urlpatterns = [

    path('/get', views.get_test),

    path('/post', views.post_test),

    path('/put', views.put_test),

    path('/get_post_test', views.get_post_test)

]

3. Swagger 실행화면

  - http://127.0.0.1:8000/swagger/

  - @api_view(['GET', 'POST'])로 지정한 get_post_test 함수는 아래와 같이 그룹으로 표시된다.

  - @swagger_auto_schema의 tags를 사용하면 함수이름이 아닌 새롭게 지정한 이름이 표시된다. tags이름이 같으면 그룹으로 표시된다.

API 리스트

4. manual_parameters를 사용하면 Parameter를 넣을 수 있는 칸이 활성화되고, operation_summary는 path옆에 나타나는 문구,

    operation_description는 api를 펼쳤을 때 나타나는 문구를 표시할 수 있다.

    responses는 결과코드를 세팅할 수 있다.

@swagger_auto_schema을 활용한 API

5. App의 views.py의 소스를 보면 operation_description은 함수 안에 """ """을 사용하여 표시가 가능하다.

    MarkDown 문법으로 operation_description을 작성하면 된다.

MarkDown문법으로 작성한 operation_description

6. MarkDown 사용법 : DjangoSwagger에서 MarkDown사용법

728x90
반응형
LIST
728x90
반응형
SMALL

 

PyCharm으로 Project를 생성 후, 터미널을 통하여 Django App를 생성할 때에는,
manage.py를 이용하여 생성하기 때문에 가상환경 경로를 변경해야 한다.
(pythonProject2 → pythonProject2/django_project_2)
경로 변경이 번거로울 때, PyCharm에서 자동으로 생성하는 Project를 제거해 보자.

 

  파일 이동 방법

1. PyCharm으로 새 Project를 만들고, Django Project와 App을 만들어놓은 상태이다.(아래 이미지 참고)

2. 실제 파일이 있는 경로로 이동. idea폴더, main파일을 제외하고 원하는 경로로 폴더 및 파일을 이동한다.

3. PyCharm을 통하여 이동한 경로에 가서 Project를 실행한다.

Project Open 화면

4. Project를 열어보면 pythonProject2 폴더가 사라진 것을 볼 수 있다. 추가적으로 가상환경은 [pythonProject2 → base], configuration은

    [main → Current File]로 변경되었다. 이 상태에서 Project를 실행하게 되면 에러가 발생한다.

    그럼 이제 변경된 환경에 대하여, Server가 다시 구동되도록 설정해 보도록 하자.

 

  폴더 이동후, Django Server 재설정 방법

1. PyCharm 우측 위 설정 버튼을 클릭하면 아래와 같은 설정 창이 뜬다.

PyCharm 설정 화면

2. 왼쪽 Project: django_project_2(생성된 Project명) - Python Interpreter를 클릭한다.

3. 우측 위 Add Interpreter를 클릭한다.

Add Interpreter 설정화면

4. Anaconda를 사용하여 가상환경을 관리하기로 했으므로, Conda Environment - Create new environment를 선택, 나머지는 사용자에 맞게 설정하고 OK버튼을 누른다.

5. PyCharm 상단 Current File을 클릭하여, Python Configuratoin을 추가한다. 추가하는 방법을 모를 때, 아래 링크 참고.

    (링크의 가장 하단의 (참고) 부분 확인 : 명령어 python manage.py runserver를 치지 않고, 버튼클릭 한 번으로 실행하는 방법)

    추가가 완료되면 manage.py로 설정되어 있어야 한다.

    manage.py로 이미 설정되어 있는 경우에는 Script path, Python interpreter가 제대로 설정되어 있는지 확인한다.

6. 5번까지 완료되었으면, 터미널 가상환경 상태가 django_project_2로 변경된 것을 볼 수 있다. 변경되지 않았다면, PyCharm을 재실행한다.

7. Django는 삭제했던 폴더를 기준으로 한 가상환경에 설치되었기 때문에, 현재 가상환경에는 Django가 설치되어 있지 않다.

    정확한 확인을 위하여 현재 가상환경에 설치된 Package를 확인해 본다. (확인 명령어 : pip freeze)

    명령어를 실행했을 때, 아무것도 설치된 내역이 없으면, Django를 다시 설치한다. (설치 명령어 : pip install django)

    Django 외에 Package를 설치한 내역이 있었다면, 모두 설치한다.

8. 여기까지 완료되었으면, 정상적으로 실행되는 것을 볼 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
Django에서 지원하는 DRF(Django Rest Framework) 간단하게 Setting 하기

 

기본적으로 Swagger연동을 위해서는 Django가 설치되어 있어야 한다.
또한 App, Project 생성되어있어야 한다.
준비가 안되어 있으면 이전 포스팅 참고: Python, Django, Anaconda Setting, PyCharm Project

 

Swagger(DRF) 세팅 방법 및 결과 확인

1. DRF(Django Rest Framework) 설치 : pip install djangorestframework

2. Drf-Yasg 설치 : pip install drg-yasg

3. settings.py에 설치된 install 한 app추가

INSTALLED_APPS = [

    ........,

    'drf_yasg',

    'rest_framework'

]

4. 복사, 붙여 넣기 수준으로 urls.py에 아래 소스 추가

from rest_framework.permissions import AllowAny

from drf_yasg.views import get_schema_view

from drf_yasg import openapi

from django.urls import re_path

 

# [5. 실행화면]과 비교하면 쉽게 이해 가능(모두 수정가능)

schema_view = get_schema_view(

    openapi.Info(

        title="Snippets API",

        default_version='v1',

        description="Test description",

        terms_of_service="https://www.google.com/policies/terms/",

        contact=openapi.Contact(email="contact@snippets.local"),

        license=openapi.License(name="BSD License"),

    ),

    public=True,

    permission_classes=[AllowAny]

    # [참고]

    # AllowAny(기본값) : 인증에 관계없이 모두 허용

    # IsAuthenticated : 인증된 요청만 허용

    # IsAdminUser : Staff인증 요청만 허용

    # IsAuthenticatedOrReadOnly : 인증이 안되어 있으면 읽기 권한만 허용

    # DjangoModelPermissons : 인증된 요청만 허용 + 장고 모델단위 권한 체크

    # DjangoModelPermissionsOrAnonReadOnly : DjangoModelPermissons 유사, 인증이 안되어 있으면 읽기 권한만 허용

    # DjangoObjectPermissons : 인증이 안되어 있으면 거부, 인증이 되어있으면 Object에 대한 권한 체크를 수행

)

 

# 기존에 있는 urlpatterns

 

if settings.DEBUG:

    urlpatterns += [

        re_path(r'^swagger(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name="schema-json"),

        re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),

        re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc')

    ]

5. 실행화면

    - http://127.0.0.1:8000/swagger/

Swagger 실행화면

 

공식문서 : https://drf-yasg.readthedocs.io/en/stable/readme.html

728x90
반응형
LIST
728x90
반응형
SMALL
PyCharm을 통하여 Django App 및 Project를 생성하고,
App에 있는 views.py에 있는 함수를 실행했을 때, Error가 나는 경우 해결책

 

■ App을 만들어 사용하는 간단한 방법을 알아보자.

1. 아래 이미지는 Django Project와 App을 만들어놓은 상태이다.

Django Project, App이 추가된 화면

2. django_app_1/views.py에 새로운 url을 호출할 때 나올 함수를 선언하였다.

    django_project_1/django_project_1/urls.py에 django_app_1의 views를 import 한 이후에 path와 url을 추가하고, views.py에서 만든 함수를 연결하고 실행한다.

Path 추가하는 화면

3. 실행결과 Error : ModuleNotFoundError: No module named 'django_project_1.django_app_1'

    원인은 django_project_1안에 django_project_1라는 같은 이름의 Project가 있기 때문이다.

    이렇게 되면 경로를 찾을 수 없게 되는데, 에러 수정을 위해서는 같은 이름 중 하나는 수정해야 하므로, Project이름을 django_pro_1(원하는 이름)로 수정한다.

4. 수정방법은 이름을 바꾸고자 하는 Project에서 우클릭, Refactor, Rename을 클릭하면 Rename창이 뜬다.

    원하는 이름으로 수정하고 Refactor를 누른다. 그러면 하단에 수정될 파일 개수가 나오고, 확인 후 Do Refactor를 누르면 참조하고 있던 것들이 모두 수정된다.

Refactor하는 화면

5. 다시 실행하면 아래와 같이 실행된다.

App이 실행된 화면

6. 실행이 안될 경우, django_project_1(수정 후 명칭 : django_pro_1)/setting.py과 manage.py의 내용을 수정한다.

  - setting.py : ROOT_URLCONF = 'django_pro_1.urls' , WSGI_APPLICATION = 'django_pro_1.wsgi.application'

  - manage.py : django_pro_1.settings'

  위의 2개만 수정해도 당장은 실행되지만, asgi.py, wsgi.py도 수정을 해야 한다.

 

(참고) HttpResponse

- 간단하게 설명하자면 urls.py에서 정리된 Url을 요청(Request)하면 응답(Response)이 오는 구조인데, Request는 함수에 첫 번째 인자로 전달하고, Response는 HttpResponse 또는 JsonResponse로 전달받는다. 그렇기 때문에 별도로 Html파일을 만들지 않고도 페이지를 확인할 수 있다.

728x90
반응형
LIST
728x90
반응형
SMALL
Python, Django, Anaconda, PyCharm을 사용하여 프로젝트 구성하는 방법

 

■ Python, Django(프레임워크), Anaconda(가상환경 버전관리)를 사용하여 프로젝트를 만들기에 앞서, 이 3가지 프로그램이 설치가 되어 있지 않으면 먼저 설치하도록 한다. 설치 방법은 다음과 같다.

1. Python 다운로드 사이트 : https://www.python.org/downloads/

2. Download Python 3.11.3을 클릭, 설치 시 주의사항은 [Add Python.exe to PATH]에 체크를 꼭 해줘야 한다.

    체크를 해주지 않으면 환경변수가 추가되지 않아, Python을 실행할 때 항상 Python이 설치된 경로에 가서 실행해야만 하는 번거로움이 생긴다.

    실수로 체크를 하지 않았다면, 수동으로 추가하는 방법도 있으니, 다른 블로그를 참고하길 바란다.

Python 설치화면

3. Anaconda 다운로드 사이트 : https://www.anaconda.com/download/

4. Download 버튼을 클릭, 설치 시 주의사항은 [Add Anaconda3 to my PATH environment variable] 체크란인데,

    Python PATH를 설정하고 설치한 경우에는 경로 충돌이 일어날 수 있으므로, 아래 이미지와 같이 체크를 해제한 상태에서 설치를 진행해야 한다. 

Anaconda 설치화면

5. PyCharm 다운로드 사이트 : https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

6. Community에 있는 다운로드를 클릭한다. 

PyCharm 다운로드 화면

7. PyCharm 설치 시 주의사항은 아래 이미지 옵션 체크 부분인데 기본적으로 모두 체크가 안되어 있지만, 전부 체크를 하고 설치를 진행하면 된다.

    PATH는 앞서 말했듯 환경변수에 대한 내용으로 꼭 체크를 하도록 한다.

PyCharm 설치화면

 설치가 완료되었으면, Python, Django(프레임워크), Anaconda(가상환경 버전관리)를 사용하여 프로젝트를 생성한다.

1. PyCharm 실행 후, New Project를 클릭하면, 아래 우측 이미지로 넘어가는데, Anaconda를 이용하여 가상환경 버전관리를 하기로 했으므로,

    New environment using을 Conda로 변경하고, 개발환경에 맞는 Python version을 선택한다.

    [Make available to all projects]는 다른 프로젝트에서도 이 가상환경을 사용하고 싶을 때 체크한다.

PyCharm 프로젝트 생성

2. 프로젝트를 생성했으면, 이제 장고를 설치한다. 아래 이미지 왼쪽 사각형안의 터미널을 클릭하고, 명령어를 입력한다.

    - Django 설치 명령어 : pip install django

초기 프로젝트 생성 화면

3. 장고 설치가 완료되었으면, 차례로 DjangoProject 및 DjangoApp을 생성한다.

    - DjangoProject 생성 명령어 : django-admin startproject django_project_1  (django_project_1 : 프로젝트 이름)

    - DjangoApp 생성 : manage.py를 사용하기 때문에 manage.py가 있는 경로로 맞춰줘야 한다.

    - 명령어 cd django_project_1을 입력, 경로가 변경된 걸 확인 후, 명령어 python manage.py startapp django_app_1 입력하여

      DjangoApp을 생성한다. (django_app_1 : 앱 이름)

4. 아래 이미지는 Django프로젝트 및 App이 생성된 화면이다.

Django Project, App이 생성된 화면

5. DjangoProject 실행 명령어 : python manage.py runserver

    - 실행하면 위에 이미지와 같이 http://127.0.0.1:8000/ 가 나오는 것을 볼 수 있다.

    - IP를 클릭해서 아래와 같은 이미지가 나오면 DjangoProject가 성공적으로 만들어진 것이다.

Django Project 실행화면

 

(참고) 명령어 python manage.py runserver를 치지 않고, 버튼클릭 한 번으로 실행하는 방법

- 아래 이미지 가장 상단에 main우측 ↓화살표 버튼 ☞ Edit Configurations...(아래 이미지에는 없음) ☞ 왼쪽 + 버튼 ☞ Script path 우측 폴더버튼

   을 클릭하여 manage.py를 찾아서 선택 ☞ Parameters : runserver 입력 ☞ 확인 ☞ main우측 ▷ 버튼을 눌러 실행

runserver 설정화면

 

728x90
반응형
LIST
728x90
반응형
SMALL

■ Django(장고)에 대한 설명

1. Python(파이썬)을 기반으로 한 웹 프레임워크이다.

2. Model(모델), Template(템플릿), View(뷰)로 구성된 MTV 패턴을 사용하고 있다. (MVC 패턴과 유사)

3. SQL을 사용하지 않고 Database에서 사용하는 테이블(RDBMS)을 자동으로 대응해 주는 ORM(Object-Relational Mapping)을 통하여 코드를 작성할 수 있다.

4. 많은 보안 기능을 내장하고 있어, 보안성이 우수하다.

5. 다양한 타사 패키지 및 플러그인을 지원한다.

6. 2023년 Laravel, Ruby on Rails에 이어 3위를 차지할 정도로 인기가 많은 프레임워크이다.

7. 대표적인 사이트의 예로 Instagram, JetBrains 등이 있다.


■ 장점

1. 설치가 간편하다.

2. 포럼, 블로그, 소셜 미디어 등 수많은 개발자 커뮤니티를 가지고 있어 검색 가능할만한 자료가 많다.

3. 다른 프레임워크보다 강력하고 많은 라이브러리를 사용할 수 있다. 그렇기 때문에, 많은 코딩 없이 프로그램을 완성시킬 수 있다. 초보자들도 다가가기 편한 프레임워크다.

4. IDE(통합 개발 환경)가 훌륭하다. (PyCharm, Visual Studio Code 등)

5. 프로젝트를 만들면 별도의 개발 없이 자동으로 관리자 화면을 제공한다.

6. App 단위로 구성이 되어 있어, 독립적으로 작업할 때 매우 쉽다.

7. ORM을 제공하기 때문에 쿼리 없이 데이터를 관리할 수 있다.

8. 많은 보안기능을 제공하고 있으며, 설정에도 매우 간편하다.

9. 웹 서버를 포함하고 있어서 개발과정에 별도로 웹서버가 없어도 된다.

10. 개발과정에서는 소스가 수정되면, 서버를 다시 시작하지 않아도 바로 적용이 된다.

11. Python을 기본으로 개발한다면, Python에서 제공하는 모든 기능을 활용할 수 있다. (Docker 구성 및 API 연계 등)


■ 단점

1. 자료는 많지만, 아직 한글 문서가 많은 편은 아니다.

2. 소형 프로젝트에는 사용하기 무겁고 기능이 많아 부적합하다.

3. 장점에도 소개되었지만, 내부에 구현된 기능이 많다는 것은 곧, 자유롭게 코딩할 수 있는데 한계가 있으므로, 코딩하는데 어려움을 겪을 수 도 있다. 또한 Django에서 문제가 생겼을 때, Python코딩으로 문제를 해결하는 경우가 발생할 수 있다.

4. ORM을 사용한다고 했을 때, 복잡한 데이터 구조(Join이 많은 경우)나 Procedure(프로시져)를 많이 사용한 곳에는 적합하지 않을 수 있다.

5. Python의 단점을 그대로 가져온다. (Python은 타입을 선언하지 않아도 실행되기에, 타입을 검사하려면 시간이 걸릴 수밖에 없다. 또한, 인터프리터 언어(한 줄씩 읽어 내려가며 실행하는 언어)이기 때문에 상대적으로 컴파일하는 프로그램보다 편하지만 빠르지는 않다.)


■ Django(장고)를 선택한 이유

1. Python에서 제공하는 모든 기능을 활용할 수 있다.

2. Django는 Python을 기반으로 만들어진 프레임워크이기 때문에, AI(인공지능) 개발에 유용하다.


728x90
반응형
LIST

+ Recent posts