방송대 Python
학습목차
1️⃣ 파이썬의 개요
2️⃣ 파이썬 프로그램의 실행
3️⃣ 파이썬 프로그래밍 환경 

 

01. 파이썬의 개요

 

파이썬의 탄생 1

👉 히도 판로쉼(Guido van Rossum) 1991년 개발

-> 네덜란드 암스테르담 대학에서 컴퓨터 전공

-> 좋아하는 코미디 'Monty Python's Flying Cricus'를 따라 명명

-> 크리스마스 주 연구실에 잠겨 할일이 없어 만든 프로그래밍 언어

 

👉 분산 운영 체제(아메바)의 시스템 관리를 위한 쉘 스크립팅 언어로 개발

명령어를 순차적으로 나열 운영체제가 어떤 순서로 동작해야 하는지

명령어를 집합으로 만들어 놓은 형태를 스크립트라 하고 

이러한 목적을 가지고 만들어진 언어가 파이썬(Python)이다.

 

 

파이썬의 탄생 2

👉 다중 프로그래밍 패러다임 채용

-> 정의 : 프로그램을 생성하는 접근 방식

-> 명령형 프로그래밍, 절차적 프로그래밍,

객체지향 프로그래밍, 함수형 프로그래밍 지향

현실 세계를 어떠한 방식으로 모델링하는 것에 대한 여러 관점들을 규칙화하여 만든 것이 페러다임 

 

👉 다목적 활용

-> 응용 프로그램과 웹, 백엔드 개발, 사물 인터넷 분야 뿐만 아니라 교육적인 목적으로도 활용

 

파이썬의 발전 과정

👉 1991년 ABC의 후속 프로그래밍 언어로 시작

👉 1999년 DARPA에 'Computer

Programming for Everybody' 제안

👉 2000년 파이썬 2.0 출시

-> 커뮤니티를 통한 개발 체계 시작

👉 2008년 파이썬 3.0 출시 

-> 비 하위 호환성을 갖는 메이저 업데이트

 

파이썬의 인기

 

파이썬 답다 'Pythonic'

 

 

오픈소스

👉 파이썬 관련 개선을 위한 제안(PEP)

-> 많은 개발자의 의견을 수용하고 토론하며 발전한 언어

-> 새로운 파이썬의 기능, 파이썬 프로세스, 환경에 대해 커뮤니티에 설계 문서나 정보를 제공

-> 파이썬 기능의 간결한 기술적 사양과 기능을 위한 근거들을 제공

-> 커뮤니티의 의견을 수집, 합의 도출, 반대의견 청취 

👉 PEP 8 ( 스타일 가이드 ) 대표적 : 이렇게 만들어 놓으면 효율적으로 프로그래밍 할 수 있다는 가이드라인

 

인간적 & 직관적

실행할 수 있는 의사 코드(Executable pseudocode) 수준의 문법

 

 

 

생산성 & 신속성

 

 

대형 개발자 커뮤니티

전세계적으로 1500만명에 개발자 커뮤니티를 가지고 있다. 

장점 : 프로그램이 정상적으로 돌아가지 않는다면 대형에 커뮤니티에서 문제를 신속히 찾아 개선을 할 수 있다.

검색을 통해서 신속히 해결책을 찾을 수 있다는 큰장점이 있다.

 

 

라이브러리와 프레임워크

왼쪽은 Python -  오른쪽은 Java / C

 

주어진 라이브러리들을 빠르게 임포트하여 쉽고 편하게 사용 가능하다.

 

 

파이썬의 단점

👉 C나 자바 등으로 작성된 프로그램보다 느린 속도

👉 완전한 애플리케이션 단독 개발이 불가능

-> 쉘 스크립트 언어 용으로 개발

-> 모바일 앱 등 응용 애플리케이션 개발 불가능 

    ㄴ Rust 또는 Go 프로그래밍 언어로 만들 수 있다

 

 

2.  파이썬 프로그래밍의 실행

 

파이썬 실행 환경

👉 플랫폼에 독립적이며 인터프리터식 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어

-> 윈도우, 리눅스 , 유닉스 , 맥OS 등 다양한 운영체제(플랫폼)에서 별도의 컴파일 없이 실행 가능

-> CPython , PyPy , Cython , Jython 등 다양한 인터프리터 환경 사용 가능

-> 프로그램을 객체로 모델링

-> 변수의 자료형을 지정하지 않음

-> 작성한 코드에 대한 수행 결과를 바로 확인하고 디버깅하면서 코드 작성 가능

 

CPython 

👉  C 언어로 개발된 파이썬 인터프리터

-> C 구현 라이브러리와의 연동을 통한 확장에 최적화

컴파일러의 유형
① 셀프 호스팅 컴파일러 : 부트스트래핑 단계를 통해 자신의 언어로 작성한 컴파일러
② 소스 대 소스 컴파일러 : 타 언어로 작성한 컴파일러

👉 오픈소스로 커뮤니티의 기여로 지속적 발전

-> https://github.com/python/cpython 

 

GitHub - python/cpython: The Python programming language

The Python programming language. Contribute to python/cpython development by creating an account on GitHub.

github.com

 

파이썬 프로그램 실행과정

👉 파이썬 애플리케이션은 소스 코드 형태로 배포

-> CPython이 컴파일 후 바이트코드 .pyc 파일 생성

-> 파이썬 가상머신은 바이트코드를 한 라인 씩 실행

-> 변경없이 재실행 시 바이트코드로 빠르게 실행

 

 

IDLE

👉 기본으로 포함된 파이썬의 통합 개발 환경

-> 파이썬과 Tkinter GUI 툴킷으로 개발

-> 구문 강조, 자동 완성, 스마트 들여쓰기 등이

포함된 단순한 IDE 지향

-> stepping, breakpoint, call stack을 확인할 수 있는 통합 디버거 환경 제공

 

 

 

주피터 노트북

👉 오픈소스 기반의 웹 플랫폼

-> 파이썬을 비롯한 40여개의 프로그래밍 언어 지원

-> 전통적인 소스코드-컴파일-실행 방식에서 벗어나 웹 기반 대화형 개발 및 실행 환경

-> 문서화하여 다른 사람과 공유하기 편리

-> 마크다운(Markdown)을 이요하여 코드 관련 타이틀, 설명 등 작성 가능

 

구글 Colab (협 업 - 주피터 노트북을 개선한 형태로 제공하는 서비스)

👉 2017년 과학 연구와 교육을 목적으로 개발

👉 클라우드 기반 주피터 노트북 개발 환경

-> 주피터 노트북 + 구글 드라이브를 결합한 서비스

-> 데이터 분석 및 딥러닝 연산 등 고성능 컴퓨팅 리소스 활용 가능 

 

 

 

 

3. 파이썬 실습

프로그래밍 개발 환경

https://colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

 

 

 

고려대학교 교수님 초빙 강의 

 

정보과에서 추구하는 가치는 사고력  :  " 프로그래밍이 지향하는 것은 그 사고력의 관점 "

문제발견 -> 문제 해결 방법 모색 -> 문제 해결 = 프로그래밍  

 

절차적으로 생각하고 문제를 해결할 수 있도록 하는 사고력 전반을 품은 것, 프로그래밍 

우리가 일을 할 때에도 절차가 있는데... 

프로그래밍을 하게 되면 논리적으로 생각하고

절차적으로 사고하고

이에 기반한 문제 해결을 가능하게 하는 프로그래밍이다 프로그래밍의 가치는

새로운 시야로 문제를 보고 그것들을 해결하기 위해 생각하고 생각한 것들을 구현하고 표현하는 과정이 프로그래밍의 가치다 

 

Q. 어떤 걸로 프로그래밍 능력을 키워야 할까 ? 추천하는 프로그래밍 언어?

A .자기가 좋아하는 언어로 시작하면 된다.

세상을 살아갈 이치 중 하나가 프로그래밍

 

내용 : 교육용 프로그래밍은 3천개가 있다.  고등학교뿐 아니라 중학교에서도 파이썬 언어로 수업한다. 진입장벽이 낮음

기초는 파이썬으로 하고 깊이 공부하고 싶다면 자바나 다른것도 공부해봐도 좋다. 

 

내가 생각하고 있는 것들을 잘 표현할 수 있게 한 언어는 파이썬 

 

Q. 일반인들에게도 필요한 컴퓨팅 사고력, 인공지능 소양 ? 

A : 컴퓨팅 사고력이 무엇일지 생각해보면 보자 , 우리가

논리적 사고력 , 절차적 사고력 , 비판적 사고력 여러 사고력이 있는데 그 중 컴퓨팅 사고력은 무엇이 다를까 ? 

컴퓨터를 활용해서  문제 해결을 전제로 문제를 이해하고 분석하고 거기에서 해결방법을 찾아서 문제를 해결해 가는 것이 컴퓨팅 사고력이다. 프로그래밍의 가치와 일맥상통하는 컴퓨팅 사고력 .

문제를 이해하고 

 

 

Q. 파이썬 언어를 효과적으로 공부할 수 있는 방법 ? 

A : 언어를 배울 때 제일 어려운 것은 어떨ㄷ 때 어떤 단어를 써야 할 지 모르는 것 

파이썬에 처음 접할때 명령어다. 

 

Tip 

1️⃣ 각종 명령어들을 정리해 적어놓고 각 명령어를 어떻게 적용할지를 정리

2️⃣ 정리한 자료를 토대로 프로그래밍 해 본다.

언어들을 모두 자유자제로 사용해야하는데 그게 어렵다면 명령어 노트를 적어놓고 프로그래밍 언어 공부를 훨씬 쉽게 할 수 있을 것

 
방송대 Python

 

1. 하드웨어와 소프트웨어

1) 컴퓨터의 구성요소 

하드웨어 : 컴퓨터를 구성하고 있는 물리적 부품

소프트웨어 : 다양한 장치들을 동작시켜 특정 작업을 해결하는 프로그램

 

2) 사람의 문제해결 과정

(1) 어떤 계산을 먼저하고 나중에 해야 하는지 정해야함 

(2) 문제 푸는 과정을 먼저 찾고 이후에 문제를 풀기 시작한다.

 

3) 하드웨어

폰 노이만 구조

4) 소프트웨어

소프트웨어는 각각의 고유한 기능을 수행하는 하드웨어가 언제 어떻게 동작하여 문제를 해결할 수 있는지 지시하는 명렁어 집합을 말한다.

알고리즘 프로그래밍 언어로 구현한 결과물, 소프트웨어

-> 응용 소프트웨어 : 사용자의 업무나 목적에 맞게 문제 해결을 위한 처리 절차를 표현한 명령어 집합
-> 시스템 소프트웨어 : 하드웨어를 제어 - 관리하여 응용 소프트웨어를 실행할 수 있는 환경을 제공

 

2.하드웨어의 이해

1) 입력장치 

-> 명령과 데이터를 컴퓨터에 전달하는 장치

-> 컴퓨터가 처리할 수 있는 2진수 형태로 변환

 

3) 입력장치의 종류

 

 

3) 특수 입력장치 ( 동작인식 장치 )

 

 

4) 출력장치

 

(1) 출력장치의 종류

정보 처리 결과를 인간이 인식 가능한 형태의 데이터로 내보내는 장치

-> 2진수 형태의 데이터를 문자, 숫자, 도형, 음성, 영상 등의 형태로 변환

 

(2) 특수 출력 장치

HUD : AR (Augmented Reality)

HMD : VR (Virtual Reality)

 

5) 기억(저장) 장치

-> 명령과 데이터를 기억(저장) 하는 하드웨어

-> 역할에 따라 주기억장치 보조기억장치로 구분

 

 

 

(1) 기억(저장) 장치의 종류

(2) 특수 기억(저장) 장치

-> RAM을 이용한 저장장치

-> 빠른 속도, 외부 충격에 강함, 적은 전력소모가 강점

 

 

6. 제어와 연산 장치

❖ 현대의 컴퓨터는 제어장치와 연산장치가 별도로 구분되어 있지 않다

-> 명령어와 데이터를 읽고 데이터를 연산 또는 처리하는 장치

 

 

3.소프트웨어의 이해

소프트웨어는 고유한 기능을 수행하는 하드웨어가 언제 어떻게 동작하여 문제를 해결할 수 있는지

절차를 지시하는 명령어 집합

-> 응용 소프트웨어

-> 시스템 소프트웨어

 

1) 시스템 소프트웨어

다양한 장치들을 서로 유기적으로 동작시켜 특정 작업을 수행할 수 있는 환경을 조성하는 프로그램

 

 

2) 운영체제의 개념

응용 소프트웨어가 효과적으로 작동할 수 있는 환경을 조성한다.

(1) 운영체제의 역할

컴퓨터의 자원 (하드웨어) 을 효율적으로 관리하고 응용 프로그램에 자원을 할당한다.

-> 사용자 인터페이스

-> 프로세스 관리

-> 네트워크 관리

-> 기억장치 관리

-> 입출력장치 관리

 

3) 사용자 인터페이스 ( UI ) 

컴퓨터와 사용자를 매개하여 상호작용하는 방법을 제공

 

 

(1) GUI 기반의 운영체제와 CLI 기반의 운영체제는 어떤 것이 있을까

GUI : 기반의 운영체제는 그래픽 사용자 인터페이스를 기반으로 한 운영체제이다. 사용자는 마우스 및 키보드와 같은 입력 장치를 사용하여 그래픽으로 표시된 아이콘, 창, 버튼 등을 클릭하여 작업을 수행할 수 있다.

일반적으로 대화형 작업에 적합하며, 많은 일반 사용자가 일상적으로 사용하는 운영체제이며. 대표적인 예로는 Windows, macOS, Ubuntu 등이 있다.

 

CLI :  기반의 운영체제는 명령줄 인터페이스(Command Line Interface)를 기반으로 한 운영체제이다.

사용자는 명령어를 입력하여 작업을 수행할 수 있다.

명령어는 일반적으로 키보드로 입력되며, 결과는 텍스트로 출력된다.  CLI 기반의 운영체제는 대량 작업 및 자동화 작업에 특화되어 있으며, 일부 개발자, 시스템 관리자 등이 사용한다. 대표적인 예로는 Linux, Unix, MS-DOS 등이 있습니다.

 

4) 프로세스 관리

-> 프로세스는 실행되고 있는 상태의 프로그램

-> 여러 프로그램 실행이 요청되면 한정된 자원(기억장치 등)을 효과적으로 사용하도록 조율

 

5) 네트워크 인터페이스

-> 컴퓨터는 네트워크를 통해 상호 데이터 교환

-> 응용 프로그램이 통신할 수 있는 환경 제공 및 통신 장치(하드웨어) 관리

 

6) 기억 • 저장장치 관리

-> 보조기억장치에 저장된 컴퓨터의 프로그램은 실행되기 위해서 주기억장치에 적재된다.

-> 주기억장치의 크기는 보조기억장치의 크기보다 매우 작기 때문에 효율적 관리가 요구된다.

 

 

1. DAO ( Data Access Object ) 

데이터베이스 Data에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다.

사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 Interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다. DAO는 데이터베이스 와 연결할 Connection까지 설정되어 있는 경우가 많다.

그래서 현재 쓰이는 Mybatis 등을 사용할 경우 커넥션 풀 까지 제공되고 있기 때문에 DAO를 별도로 ㅏㄴ드느 경우는 드물다.

 

2. DTO ( Data Transfer Object) 

VO라고도 표현하며 계층 간 데이터 교환을 위한 자바 빈즈(Java Beans)이다.

데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다. DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter , setter만 가지고 있다.

정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

 

 

# DTO 클래스 예제

public class personDTO {
	private String name;
    private in age;
    
    public String getName() {
    	return name;
	}

	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
  	}
    
    public void setAge(int age) {
    	this.age = age;
    }
}

 

위에 클래스를 보면 getter / setter 가 존재한다. 여기서 중요한 건 Property(프로퍼티) 개념인데 자바는 Property가 문법적으로 제공되지 않는다.

 

자바에서 Property라는 개념을 사용하기 위해 지켜야 하라 약속이 있다.

setter / getter 에서 set과 get 이후에 나오는 단어가 Property라고 약속하는 것이다.

위 클래스에서 프로퍼티는 name과 age이다.

중요한 것은 프로퍼티가 멤버 변수 name, age로 결정되는 것이 아닌 getter/setter에서 name과 age 임을 명심해야 한다.

즉 멤버 변수는 아무렇게 지어도 영향이 없고 getter / setter 로 프로퍼티 ( 데이터 ) 를 표현한다는 것이다.

 

자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법을 사용하는데 , 데이터 자동화 처리에서

제일 중요한 것은 표준 규격이다. 예를 들어 위 클래스 DTO에서 프로퍼티가 name, age라면 name, age의 키값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있다. 중요한 것은 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter가 실행된다는 점이다.

 

그래서 layer 간 ( 특히 서버 => 뷰로 이동 등) 에 데이터를 넘길 때 DTO를 쓰면 편하다는 것이 이런 이유 대문이다.

뷰에 있는 form에서 name 필드 값을 프로퍼티에 맞춰 넘겼을 때 받아야 하는 곳에서 일일이 처리하는 것이 아니라

name 속성의이름과 매칭되는 프로퍼티에 자동적으로 DTO가 인스턴스화되어 PersonDTO를 자료형으로 값을 받을 수 있다

 

3. VO(value Object)

VO는 DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 있다.

VO는 값 오프젝트로 값을 위해 쓰인다. 자바는 값 타입을 표현하기 위해 불변 클래스를 만들어 사용하는데,

불변이라는 것은 read only 특징을 가진다.

DTO와 VO의 공통점은 넣어진 데이터를 getter를 통해 사용하므로 주 목적은 같으나 DAO는 가변적인 성격을 가진 클래스이며(setter 활용) 그에 비해 VO는 불변의 성경을 가졌기에 차이점이 있다.

 

 

참조 : https://m.blog.naver.com/cjhol2107/221757079506

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

자바(Java) 기초_제어문(Control statement)  (0) 2022.01.20

 

파싱이란 어떤 데이터를 원하는 모양으로 만들어 내는걸 말한다.

 

 

 

1. 파싱(parsing) : 

1) 특정문서(XML 따위)를 읽어 들여서 이를 다른 프로그램이나 서브루틴이 사용할 수 있는 내부의 표현 방식으로 변환시켜 주는 것이다. XML 문서를 보면 HTML 처럼 <> 태그가 보인다. 사용자가 이렇게 입력하지만 컴퓨터가 알아 볼 수 있도록 바꿔주는 과정을 의미한다.

 

2) 컴파일러의 일부로서 원시 프로그램의 명령문이나 온라인 명령문, HTML 문서등에서 마크업 태그등을 입력으로 받아들여서 구문을 해석 할 수 있는 단위로 여러부분으로 분할해 주는 역할을 한다.

 

2. 파서(Parser)

1) 파서는 파싱을 하는 프로세서를 파서라고 부른다. 즉 , 파서가 파싱 작업을 하는 것 .

 

2) 파서(parser)란 컴파일러의 일부로서 원시 프로그램 즉 , 컴파일러나 인터프리터에서 원시 프로그램을 읽어 들여, 그 문장의 구조를 알아내는 구문 분석(parsing)을 행하는 프로그램을 말한다.

방송대 Python

 

데이터와 정보

 

1. 데이터의 개념

  • 어떤 현상이나 사실에 대한 설명 또는 집합
  • 관찰이나 실험, 조사로 얻은 수치, 문자 형태의 표현할 수 있는 질적 또는 양적 값
    • 불을 보고 붉다 , 밝다 , 뜨겁다 로 얻은 값 =  질적데이터 

 

 

 

2. 정보의 개념

  • 문제 또는 질문을 해결하기 위해 사용할 수 있는 데이터와 데이터의 집합
  • 관찰이나 측정을 통하여(데이터)를 통하여 얻은 지식
  • 관찰과 측정을 통해 얻은 데이터를 처리(정렬, 합산, 군집화)하여 실제 문제 해결에 도움이 되는 데이터 또는 결과물

 

3. 정보처리과정

현상(이벤트) 발생) => 관찰 측정 => 데이터 => 처리, 가공 => 정보

 

4. 관찰과 측정

  • 관찰 : 사물 또는 현상을 파악하는 행위 => 주로 질적데이터 생산
  • 측정 : 절대적인 기준에 맞춰 현상을 수치로 나타내는 과정

 

5. 처리와 가공

  • 수집된 데이터의 집합을 정렬 , 군집화 , 계산 또는 표현방법 변경 등의 데이터를 변환하여 정보를 생산하는 과정

 

컴퓨터의 개념

 

1. 컴퓨터의 정의

  • 데이터를 처리해서 정보로 변환하는데 도움을 주는 기계

 

2. 데이터의 기본단위

  • 비트(bit, binary digit)
    • 0 , 1 로 이루어짐
    • 두가지의 상태값을 표현하는 기본 단위를 여러개 중첩시켜 데이터를 표현 , 처리
  • 바이트(byte)
    • 8개의 bit를 합쳐서 표현 => 0~255(256가지 표현가능)

 

3. 컴퓨터의 2진법

  • 컴퓨터는 트랜지스터를 통해 2진법 숫자로 데이터를 표현하여 저장 및 처리

 

4. 아날로그와 디지털

  • 아날로그 : 사물이나 개념을 연속적인 물리량의 값으로 표현, 질적 / 양적데이터로 표현
  • 디지털 : 사물이나 개념을 이산적인 값으로 근사하여 표현, 양적데이터로 표현

 

5. 숫자 데이터의 표현

  • 사람 : 10, 12진수 사용
  • 컴퓨터 : 2진수 사용
  • 진법변환 필요

6. 문자 데이터의 표현

  • 사람 : 한글, 알파벳 등
  • 컴퓨터 : 2진수 사용
  • 인코딩 체계 활용 => ASCII 코드
    • Q . 왜 ASCII CODE는 7비트일까 ? 

 

컴퓨터와 프로그램

1. 프로그램

  • 컴퓨터는 정보를 처리하기 위한 방법과 과정을 자의적으로 결정 불가능
  • 처리 방법과 과정이 정의된 프로그램을 사용
    • 프로그램이란 컴퓨터가 어떠한 작업을 자동으로 처리 할 수 있도록 처리 방법 및 순서를 컴퓨터가 이해할 수 있는 언어로 기술한 것
    • 유사한 유형의 여러 문제를 추상화 시킨 알고리즘을 구현한 결과물

2. 정렬 알고리즘

  • 모든 카드를 오름차순으로 정렬하는 문제
  • 모든 유사한 문제를 처리할 수 있는 절차가 있다면 ? => 알고리즘 필요
    • 정렬되지 않은 영역에서 가장 작은 수 하나를 찾는다 -> 맨앞의 카드와 바꾼다 -> 카드에 제대로 정렬되어 있는지 확인한다.    (선택정렬 알고리즘)

 

 

3. 알고리즘의 정의

  • 문제를 풀기위한 단계별 절차를 체계적 명령의 형태로 기술한 것
  • 주언진 명령어를 처리하는 컴퓨터에게 문제를 해결하도록 만드는 정형화된 절차

 

4. 프로그래밍 언어

  • 사람과 컴퓨터 사이의 의사소통 도구
  • 명령어 2진수로 내려줘야 함 but 사람은 2진수로 명령을 못내림
    • 프로그래머는 컴퓨터가 이해할 수 있는 언어를 사용하여 프로그램을 작성

5. 프로그래밍 언어의 분류

  • 1세대 언어 : 기계어 / 0과 1 => 사람에게 어려움
  • 2세대 언어 :  어셈블리어 / 명렁어 영어 대체 => 대중화에는 불편함
  • 3세대 언어 : Python, C , Java, Rust => 자연어와 유사
  • 4세대 언어 : Visual Basic => 자동화, 효율성 떨어짐

 

6. 프로그램의 실행

  • 고급 프로그래밍 언어를 컴퓨터가 못알아들음
    • -> 3, 4세대 언어를 사용하고 인터프리터와 컴파일러를 사용해 이진수 ( 0 , 1) 로 변환하여 컴퓨터에 전달
    • 파이썬은 인터프리터 언어이다

 

 

이클립스 maven repository 사용자 경로 설정하기 -

 

 

서로 다른 라이브러리를 의존하는 프로젝트를 진행할 때 버전 간 충돌이 일어날수 있어

개별로 maven repository를 설정해주어 사용하기 용이하다.

 

이클립스에서 프로젝트 작업 시 사용되는 라이브러리들의 기본 설치 경로

C:\Users\HAN'S(사용자 이름)\.m2\repository

에 위치한다.

 

해당 저장소 경로를 바꿔주는 방법에 대해 알아보도록 하자


이클립스 내에서

[Window] - [Preferences]

로 들어가 주도록하자



그다음

[Maven] - [User Settings] 로 들어가보면

User Settings의 경로가 잡혀있는것을 볼 수 있는데

해당 settings.xml 파일에 maven repository의 경로가 적혀있다.



그래서 저 파일에 있는 내용을 바꿔주면 되는데...

해당 경로로 들어가면 저 파일이 없어 매우 당황스럽다.

 

해당 파일은 maven 공식 홈페이지에서 소스를 다운받아 압출을 풀면 존재하는 파일인데

일반적으로 이클립스만을 받아서 사용하는 사람에겐 없는게 정상이다.

 

그래서 그냥 직접 settings.xml 파일을 만들어주면 된다.

아래에 있는 코드를 넣어주고 저장한 파일을 만들어주면 된다.

(localRepository 의 경로를 자신이 원하는 경로로 바꿔주어 사용하면 된다.)

 

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
	<localRepository>D://myMine/repository</localRepository>
	<interactiveMode>true</interactiveMode>
	<offline>false</offline>
</settings>


그럼 다시 이클립스로 넘어와서

User Settings 에서 Browse... 을 눌러주어 직접 만들어가

경로만 바꿔준 settings.xml을 선택해주면

 

아래 Local Repository의 경로가 자동으로 바뀌는 것을 볼 수 있다.

(안될경우 Update Settings를 눌러보자)



이런식으로 서로 다른 프로젝트에 각각 프로젝트에 맞게 라이브러리를 관리해주고 싶을때 

이런식으로 변경해 주는것도 괜찮은 방법일것같다.

 

 

 

링크 : https://mine-it-record.tistory.com/160

git 초기 설정

# 현재 위치에서 지역 저장소를 생성
$ git init

# 깃 환경에서 사용자 이름을 [사용자명]으로 지정
$ git config --global user.name "[사용자명]"

# 깃 환경에서 사용자 이메일을 [사용자이메일명]으로 지정
$ git config --global user.email "[사용자이메일명]"Copy

git 스테이징

# [파일명.확장자명]을 스테이지에 올림
$ git add [파일명.확장자명]

# 상태를 확인
$ git status

# 파일 add 취소
$ git restore --staged 파일명

# 전체 add 취소
$ git reset HEADCopy

 

git 커밋

# 커밋 메시지 [메시지명]을 붙여 커밋
$ git commit -m "[메시지명]"
$ git commit -am "[메시지명]" # 스테이징과 커밋을 동시에 진행


# 최근 순서대로 커밋을 취소
$ git reset HEAD^ # 현재 HEAD의 이전 커밋으로 되돌리기
$ git reset HEAD~n # 현재로 부터 n 번째 이전 커밋으로 되돌리기


# 롤백할 커밋을 지정
$ git reset [커밋 해시]

# - reset의 3가지 옵션
$ git reset --soft [커밋ID]  # head 만 바뀜
$ git reset --mixed [커밋ID] # staging 도 그 때로 바뀜
$ git reset --hard [커밋ID] # working디렉토리/staging 모두 그 때로 바꿈 


# 커밋을 삭제하지않고 이전 커밋을 새로 복사 추가하는 식으로 롤백
$ git revert [커밋 해시] # 해당 커밋 이전상태로 되돌린다라는 명령


# 커밋 수정하는 법
# ... 파일 수정 한 뒤
$ git add .
$ git commit --amend # 최신 커밋 수정Copy

 

git 이력 확인

# 커밋 내역 확인
$ git log           # 전체 이력을 보여준다.
$ git shortlog     
$ git log --oneline # 커밋과 커밋 메시지를 조회

$ git log -p        # 이력을 보여줄 때, 변경된 데이터도 보여준다.
$ git log [filename] # 특정 파일에 대한 이력을 보여준다.
$ git log -p [filename] # 특정 파일의 이력과 변경된 데이터를 보여준다.

$ git log --stat    # 커밋마다 파일의 추가/삭제된 통계데이터를 보여줌
$ git log --graph   # 브랜치 분기 및 병합내용을 아스키 그래프로 보여줌


# 특정 커밋 내역 확인
$ git show [커밋 id]


# 최근 버전과 작업 폴더의 수정 파일 사이의 차이를 출력
$ git diff               # modified 상태의 file과 마지막 commit 비교
$ git diff --staged      # staged 상태의 file과 마지막 commit 비교
$ git diff --color-words # 변경사항을 color 풀하게 비교
$ git diff [브랜치이름]    # 현재브랜치와 선택된 브랜치와 차이점 비교
$ git diff [이전커밋 id] [이후커밋 id] # 커밋 비교Copy

 

git log 명령어 예시 설명
git log HEAD와 관련된 commit들이 자세하게 나옴
git log --oneline 간단히 commit 해시와 제목만 보고 싶을 때
git log --oneline --graph --decorate HEAD와 관련된 commit들을 조금 더 자세히 보고 싶을 때 
git log --oneline --graph --all --decorate 모든 branch들을 보고 싶을 때 사용하는 명령어
git log --oneline -n7 내 branch의 최신 commit을 7개만 보고 싶을 때 사용

 

원격 저장소

# 원격 저장소에 연결
$ git remote add origin [github 레포지 주소]

# 옵션 종류 보기
$ git remote --help

# 추가한 원격저장소의 목록 확인 
$ git remote
$ git remote -v # 상세히

# 특정 원격 저장소의 정보를 확인할 수 있다.
$ git remote show 이름

# 원격저장소 이름 변경
$ git remote rename 기존이름 변경할이름

# 원격저장소를 제거
$ git remote rm 이름Copy
# 지역 저장소의 커밋을 맨 처음 원격 저장소에 올리는 경우
$ git push -u origin master

# -u로 등록한 후에 지역 저장소의 커밋을 원격 저장소에 올리는 경우(업로드)
$ git push
$ git push origin master


# 원격 저장소의 커밋을 지역 저장소로 가져옴
$ git pull origin master

# 원격 저장소 복제하기
$ git clone [원격 저장소 주소]

# 원격 저장소의 커밋을 가져오기만 하고 merge하지 않는다
$ git fetch
# 이후엔 diff 로 비교
$ git diff test origin/test # 브랜치 이름이 test일 경우 예시


# 원격저장소 삭제(끊기)
$ git remote remove originCopy

 

저장소 파일 삭제

# 로컬저장소 원격저장소 둘다 파일 삭제
$ git rm [filename]    

# 원격저장소 파일만 삭제. 로컬저장소 파일은 냅둠
$ git rm --cached [filename]Copy

 

git branch

# 브랜치 확인
$ git branch               

# 브랜치 추가 / 삭제
$ git branch [branch name]  
$ git branch -d [branch name] # -delete

# 브랜치로 이동
$ git switch [branch name]
$ git checkout [branch name]

# 브랜치 추가하고 바로 이동
$ git switch -c [branch name]
$ git checkout -b [branch name]


# 현재 브랜치에서 다른 브랜치를 merge
$ git merge [branch name]Copy

git cherry-pick

# 만일 내가 X 브랜치에 있고 
  # ㄴ 브랜치 Y의 커밋 중 76ae30ef와 13af32cc만 골라 현재 브랜치인 X에 적용하고 싶을때
$ git cherry-pick 76ae30ef 13af32ccCopy

git stash

# staged, modified 상태의 파일을 저장
$ git stash     

# stash로 저장한 리스트를 출력
$ git stash list         

# 가장 최근에 저장한 stash를 반영
$ git stash apply      
$ git stash apply stash@{1}  # 지정한 stash를 반영

# 지정한 stash를 삭제
$ git stash drop stash@{1}

# stash를 반영하고 자동 삭제
$ git stash popCopy

 

git Tag

  • light weight 태그 : 단순 커밋 태그용. 커밋을 바로 가리킴
  • annotated 태그 : 태그 메세지도 첨부할수 있어 자체 해시값을 가짐. ^{}이 커밋을 가리킴
# 태그 추가
$ git tag [태그이름]           
$ git tag [태그이름] [커밋번호]  # 특정 해쉬에 태그 추가
$ git tag -a [태그이름] [커밋번호] # 특정 해쉬에 annotated 태그 추가


# 태그 조회
$ git tag
$ git tag -l 'v1.*'  # 와일드카드 패턴으로 검색조회
$ git show [태그이름]  # 특정 태그 조회
$ git show-ref --tags  # 해쉬값과 태그 조회Copy

 

git blame

# git 프로젝트에서 어떤 코드를 누가 수정했는지, 어떤 commit으로 수정이 되었는지 궁금할 때

# 해당 파일에 대한 모든 수정 내역
$ git blame <파일명>

# author name과 timestamp는 출력하지 않음.
$ git blame -s <파일명>

# description과 수정사항을 보여줌
$ git show <커밋번호>

# 파일내용을 start부터 end 라인까지의 수정 내역만 보여줌
$ git blame -L <start,end> <파일명>

 

 


참고 :

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%ED%95%B5%EC%8B%AC-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%9A%94%EC%95%BD-%F0%9F%9A%A9-%EC%B4%9D%EC%A0%95%EB%A6%AC

'Configuration Management > GIT' 카테고리의 다른 글

[GIT] 맥북 M1 Github 설치 및 사용법  (0) 2022.09.07

정규식 메서드

위의 정규표현식을 가지고 이메일이나 전화번호 매칭 필터링을 하기위해선 자바스크립트 정규식 메서드를 이용하여 패턴을 검사하고, 매칭되는 문자열을 추출, 변환한다.

메서드 의미
("문자열").match(/정규표현식/플래그) "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
("문자열").replace(/정규표현식/, "대체문자열") "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
("문자열").split(정규표현식) "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
(정규표현식).test("문자열") "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
(정규표현식).exec("문자열") match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환)

 

JAVASCRIPT
// 정규표현식을 담은 변수
const regex = /apple/; // apple 이라는 단어가 있는지 필터링

// "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
regex.test("Hello banana and apple hahahaha"); // true

// "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
const txt = "Hello banana and apple hahahaha";
txt.match(regex); // ['apple']

// "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
txt.replace(regex, "watermelon"); // 'Hello banana and watermelon hahahaha'Copy

 


정규표현식 샘플 코드

 

정규식 실무 예제

 

아이디 사용 검사

  • 알파벳 대소문자 또는 숫자로 시작하고 끝나며 4 ~10자리인지 검사
const id = 'abc123';

// 알파벳 대소문자 또는 숫자로 시작하고 끝나며 4 ~10자리인지 검사
// {4,10}: 4 ~ 10자리
const regexr = /^[A-Za-z0-9]{4,10}$/;Copy

 

핸드폰 번호 형식

const cellphone = '010-1234-5678';

const regexr = /^\d{3}-\d{3,4}-\d{4}$/;Copy

웹사이트 주소 형식

  • http://  https://로 시작하고, 알파벳, 어더스코어(_), 하이픈(-), dot(.)으로 이루어져 있는 정규식
const text = 
`http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`; 

text.match(/https?:\/\/[\w\-\.]+/g); // ["http://dogumaster.com", "http://google.com"]
/*
1) http => 로 시작하고,
2) s? => 다음에 s는 없거나, 있고,
3) \/\/ => 다음에 특수기호 // 가 오고
4) [\w\-\.]+ => \w(영문자, 언더스코어), 하이픈, 쩜 으로 이루어진 문자열이 한개 이상(+) 있다.
5) g => 매칭되는걸 모두 다 찾는다.(플래그)
*/Copy

 

전화번호 형식

  • 유선번호라면 02-111-2222 형식이고, 핸드폰번호라면 010-1111-2222 형식을 모두 포함하는 정규식 (숫자의 갯수가 다름)
const text = 
`http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`; 

text.match(/\d{2,3}-\d{3,4}-\d{4}/g); // [ '010-1111-2222', '02-333-7777' ]
/*
1) \d{2,3} => 숫자 2~3개로 시작하고,
2) \- => 다음에 하이픈(-)이 오고
3) \d{3, 4} => 다음에 숫자가 3~4개 오고,
4) \- => 다음에 하이픈(-)이 오고,
5) \d{4} => 다음에 숫자가 4개 온다.
6) g => 매칭되는걸 모두 다 찾는다(플래그)
*/Copy

 

이메일주소 형식

  • xxx@xxxx.com 등의 형식
const text = `http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`; 

text.match(/[\w\-\.]+\@[\w\-\.]+/g); // [ 'curryyou@aaa.com' ]Copy
 
// 좀더 엄격한 검사가 필요하다면, 상황에 맞게 수정해서 사용면 된다.
const email = 'ungmo2@gmail.com';

const regexr = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;Copy

 

참고문헌

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC

'Language > Java Script' 카테고리의 다른 글

[JavaScript] parameter 와 argument 의 차이 (인수, 인자)  (1) 2022.09.22
[JavaScript] 배열(Array) 기초  (0) 2022.09.05
[JavaScript] Object  (0) 2022.06.10
[JavaScript] Callback  (0) 2022.06.07
[JavaScript] return  (0) 2022.06.06

+ Recent posts