외부 저장소에 프로젝트를 저장할 경우 장점

  1. 프로젝트 복구 가능
  1. 협업과 동시에 버전 관리 가능

 

 

Remote repository란?

  • GitLab에서 생성한 프로젝트 url (https~) 복사
💡
git remote add origin 프로젝트url
  • git remote : 내 컴퓨터에서 외부 저장소에 관한 작업을 할 때 사용
  • add origin url : URL이 가리키는 외부 서버의 프로젝트를 원격 저장소로 지정하는데 이름은 origin이라고 할게

 

 

Git push/Git pull

💡
git push -u origin master
  • 내 컴퓨터의 프로젝트 디렉토리 내용을 origin이 가리키는 원격 저장소의 프로젝트로 업로드한다는 뜻
  • 실행하면 인증 절차를 거쳐야함
  • .git 디렉토리 내부에서 관리되던 Repository 영역을 업로드한 것

 

  • 이미 앞에서 add를 해주었기 때문에 origin이 가리키는 원격 저장소를 이미 알고 있다
  • 따라서 앞으로는 git push만 입력하면 된다.

 

  • 새로운 폴더를 만들어서 또 다른 사용자를 만든다면?
    💡
    git clone 프로젝트url
    • GitLab 서버에 있는 프로젝트를 맨 처음에 가져올 때 git clone을 실행해야함
    💡
    git push
    • 원격 저장소에 있던 프로젝트를 clone한 것이기 때문에 git push만 입력하면 된다.

 

💡
git pull
  • GitLab 프로젝트에서 새로운 commit이 생성되었을 때 해당 commit을 다시 내 컴퓨터로 가져오려면? → git pull

 

  • 왜 origin일까?
    • 가장 근원이 되는 파일 → GitLab 서버에 있는 프로젝트 파일
    • 관습적으로 외부 저장소에 존재하는 프로젝트를 origin이라는 이름으로 가리킨다.

 

❗ push 하기 전에 반드시 pull 먼저 하기 ❗

Git reset

  • HEAD : 현재 내가 위치해있는 commit을 가리키는 식별자
  • HEAD가 가리키는 commit을 변경함
💡
git reset —hard 커밋아이디
  • HEAD가 첫번째 커밋을 가리킴 → Working Directory의 내용도 첫번째 커밋 시점으로 바뀜 (hard 옵션을 사용했기 때문에)

 

Soft/Mixed/Hard 옵션의 차이

Hard

  • Working Directory가 바뀐다.
  • Staging Area가 바뀐다.

Mixed

  • Working Directory는 건드리지 않는다.
  • Staging Area가 바뀐다.

Soft

  • Working Directory는 건드리지 않는다.
  • Staging Area를 건드리지 않는다.

 

💡
git status
  • git 상태를 더 자세히 확인

 

  • hard는 위험한 옵션 → 바로 직전 commit으로 되돌아가서 Working Directory에서 작업하던 내용이 사라져도 괜찮을 때 사용
  • soft : 내가 작업하면서 만든 Staging Area가 그대로 남아있어 바로 commit 가능
  • mixed : Staging Area가 바뀌므로 최근 작업했던 상태를 commit으로 남기고 싶다면 반드시 git add를 하고 commit 해야한다.
  • 그래서 soft나 mixed 옵션은 언제 사용하는건지?

    commit 01~06까지 작업해둠. reset으로 commit 03으로 돌아간 다음 추가 작업을 하고 commit을 하면 commit 03 다음에 commit 07이 쌓이게 된다. → 제대로 된 커밋들만 깔끔하게 남길 수 있다.

 

Git 히스토리 관리하기

 

💡
git reflog
  • git reflog = git reference log : HEAD가 가리켰던 Commit 기록을 모두 보여주는 명령어

 

💡
git reset —hard HEAD@{number}
  • commit ID 대신 commit에 대한 HEAD@{number}을 입력해도 된다.

버전관리 시작하기

  • 바탕화면에 RacingGround 폴더 생성
  • VS Code에서 RacingGround 폴더 열기, 파일 작성
  • RacingGround처럼 프로젝트 내용을 담고 있는 폴더를 프로젝트 디렉토리라고 한다.
  • Git 명령어는 프로젝트 디렉토리 안에서 실행해야 한다.

git 초기화

💡
git init →Initialized empty Git repository in 경로
  • git으로 버전 관리를 할 수 있는 상태가 됨
  • RacingGround 폴더 안에 .git 폴더가 생성됨
  • .git폴더 → git으로 인해 버전 관리가 되고 있는 디렉토리
  • 기본적으로 숨김 파일 처리가 되어있음

git 사용자 정보 설정

💡
git config user.name "이름" git config user.email "이메일주소"
  • config = configuration, 설정
  • 프로젝트 디렉토리에 버전을 남길 때마다 설정한 이름, 이메일이 남는다.

특정 버전 저장

  • → commit 한다고 한다.
  • 특정 버전 = commit
  • commit 하는 것은 3가지 영역을 바탕으로 작동한다.
    1. Working Directory

      -실제로 다루고 있는 RacingGround 디렉토리같은 프로젝트 디렉토리 자체를 의미

    1. Staging Area

      -특정 버전으로 관리하고 싶은 파일들을 모아두는 장소

    1. Repository

      -특정 시점의 Staging Area의 모습을 commit으로 남기면 해당 commit들이 저장되는 장소

    • Working Directory에서 작업을 하다가 commit을 하고 싶다 → commit을 남기고 싶은 모든 파일들을 Staging Area에 올린다. → commit 명령어 실행 시 해당 시점에 Staging Area에 있던 모든 파일들이 그대로 하나의 commit으로 Repository에 저장된다.

Staging Area에 올리기

💡
git add BasicCar.js README.md #특정 파일 지정 git add . #새롭게 만들어지거나 수정된 모든 파일

Commit 하기

💡
git commit -m "커밋 메세지"
  • -m : 해당 commit에 대한 설명을 의미
  • 왜 Working Directory에서 바로 Repository로 저장하지 않고 중간에 Staging Area가 있는가?

    → 지금 당장 commit을 남기고 싶지 않은 파일이 존재할 수 있기 때문

Commit 기록 확인하기

💡
git log
  • commit log 또는 commit history라고 한다.
  • 각 commit을 고유하게 식별할 수 있는 commit ID가 있다.
  • Author : commit을 한 사용자에 대한 정보
  • 기록 확인을 끝냈으면 q 입력

Commit 비교하기

💡
git diff 커밋아이디1 커밋아이디2
  • git이 값을 구분할 수 있을 정도만 아이디를 적으면 된다. (앞 4글자 정도)

Git이 무엇일까요?

  • Git : 프로젝트 버전 관리를 하기 위해 사용하는 프로그램
  • 주요 기능
    1. 버전 관리-소프트웨어 개발 시 기능 추가, 버그 수정 등 코드 수정/추가/삭제 작업이 계속 이루어짐 → 버전 관리 필요
    1. 협업-여러 개발자들간의 협업

 

Git과 GitLab의 차이

  • Git으로 관리한 프로젝트를 저장할 서버 필요→ Git 기반의 저장소 서비스 (GitHub, GitLab)
  • Git ≠ GitLab ‼

 

Git 설치하기 (Windows & Mac)

  • Git Bash : Git 사용에 특화된 명령어 실행기→ Git 설치 시 반드시 Git Bash Here 체크!
  • Git Bash 검색해서 콘솔창 확인

https://cloud.google.com/dialogflow/es/docs/basics ← 공식 문서를 참고하여 정리함

  • DialogFlow를 통해 사용자가 사용하는 자연어를 해석, 처리할 수 있다.

 

에이전트

  • 사용자와의 대화를 처리하는 가상 에이전트
  • 자연어 이해 모듈
  • 사용자의 텍스트/오디오 → 구조화된 데이터로 변환

 

인텐트

  • 한 번의 대화 차례를 위한 사용자의 의도 분류
  • 각 에이전트에 대해 다수의 인텐트 정의
  • Dialogflow는 최종 사용자 표현을 에이전트에서 가장 유사한 인텐트와 일치시킴 (인텐트 분류)

ex. '예보는 어때?' → 예보 인텐트와 일치시키기

  • 인텐트에 포함되는 사항
    1. 학습 문구 : 사용자가 말할 가능성 있는 예시 문구
    2. 작업 : 각 인텐트의 작업 정의 (인텐트 일치 시 Dialogflow가 시스템에 작업 제공)
    3. 매개변수 : 인텐트 일치 시 최종 사용자 표현에서 추출된 값 제공
    4. 응답 : 사용자에게 반환할 텍스트, 음성, 시각적 응답 등
  • 인텐트 일치 및 최종 사용자 응답에 대한 기본 흐름 :

항목

  • 각 인텐트 매개변수에 있는 '개체 유형' → 최종 사용자 표현에서 데이터를 추출하는 방법을 정확하게 지정함
  • 사전 정의된 시스템 항목 제공 (ex. 시간, 색상, 이메일 주소 등)
  • 커스텀 데이터와 일치시킬 커스텀 항목을 직접 만들 수도 있다.

 

컨텍스트

  • 최종 사용자 표현을 인텐트에 정확하게 일치시키기 위해 제공되어야 함
  • 입력 및 출력 컨텍스트를 설정 → 인텐트의 컨텍스트 구성
  • 인텐트 일치 → 출력 컨텍스트 활성화

ex. 금융 에이전트에 컨텍스트를 사용하는 예시

  1. 사용자가 예금 계좌에 대한 정보 요청
  2. Dialogflow가 최종 사용자 표현을 CheckingInfo 인텐트와 일치시킴 → 해당 인텐트에 checking 출력 컨텍스트가 있으므로 활성화됨
  3. 에이전트가 사용자에게 예금 계좌에 대해 필요한 정보 유형 요청
  4. 사용자가 '잔액'이라고 응답
  5. Dialogfow가 최종 사용자 표현을 CheckingBalance 인텐트와 일치시킴 → 해당 인텐트에 checking 입력 컨텍스트가 있음. 이 컨텍스트가 활성화된 상태여야 이 인텐트와 일치시킬 수 있다.
  6. 시스템이 필요한 쿼리를 수행 → 에이전트가 예금 잔액 응답

 

통합을 위한 fulfillment

  • 기본적으로 정적 응답에 일치하는 인텐트에 응답함
  • 통합 옵션 사용 → 보다 동적인 응답 제공 가능
  • fulfillment가 사용 설정된 인텐트와 일치하는 경우 → Dialogflow가 일치된 인텐트에 대한 정보와 함께 웹훅 서비스에 요청을 보냄
  • fulfillment 처리 흐름을 나타낸 다이어그램 :

  1. 사용자가 표현을 입력하거나 말함
  2. Dialogflow가 최종 사용자 표현을 인텐트와 일치시키고 매개변수 추출
  3. Dialogflow가 웹훅 서비스에 웹훅 요청 메세지 전달 (일치하는 인텐트, 작업, 매개변수, 인텐트에 정의된 응답에 대한 정보 등 포함)
  4. 서비스가 필요에 따라 DB 쿼리 또는 외부 API 호출 등의 작업 수행
  5. 서비스에서 Dialogflow에 웹훅 요청 보냄 (사용자에게 전송되어야 하는 응답 포함)
  6. Dialogflow가 이 응답을 사용자에게 전달
  7. 사용자가 응답을 보거나 듣는다.

 

API와의 사용자 상호작용

  • 통합 옵션 중 하나를 사용하지 않는다면 사용자와 직접 상호작용하는 코드를 작성해야한다.
  • API와 상호작용하는 경우 처리 흐름을 나타낸 다이어그램 :

  1. 사용자가 표현을 입력하거나 말함
  2. 서비스가 최종 사용자 표현을 Dialogflow에 인텐트 탐지 요청 메세지로 전달
  3. Dialogflow가 서비스에 인텐트 감지 응답 메세지를 보냄 (일치하는 인텐트, 작업, 매개변수, 인텐트에 정의된 응답에 대한 정보 포함)
  4. 서비스가 필요에 따라 DB 쿼리 또는 외부 API 호출 등 작업 수행
  5. 서비스가 사용자에게 응답 보냄
  6. 사용자가 응답을 보거나 듣는다.

'Google > Dialogflow' 카테고리의 다른 글

Google Dialogflow 세팅하기  (0) 2021.07.14

모든 문제의 답은 Python3으로 작성함

 

11047번: 동전 0

inp=input().split()
n=int(inp[0])
k=int(inp[1])
digit=[]
for i in range(n):
    digit.append(int(input()))
digit.sort(reverse=True)

sum=0
left=k
for d in digit:
    if left>=d:
        sum += left//d
        left = left%d
        if left==0:
            break
print(sum)

 

1931번: 회의실 배정

n=int(input())
times=[tuple(map(int,input().split())) for _ in range(n)]
times.sort() #회의 시작 시간 기준 정렬
times.sort(key=lambda x:x[1]) #회의 끝 시간 기준 정렬

cur=0 #가장 최근에 한 회의 끝 시간
cnt=0
for t in times:
    if cur<=t[0]: #가장 최근 회의 이후에 시작할 때
        cnt += 1
        cur=t[1]
print(cnt)

예전에 알고리즘 과목에서 다뤘던 예제인데 오랜만에 보니,, 새롭네,,

일찍 시작하는 순서대로 정렬 후, 회의가 빨리 끝나는 순서대로 겹치지 않게 선택!

 

11399번: ATM

n=int(input())
times=list(map(int,input().split()))
times.sort()

cur=0
sum_time=0
for t in times:
    sum_time += cur+t
    cur+=t
print(sum_time)

 

1541번: 잃어버린 괄호

exp=input().split('-')
sum=0
for i in range(len(exp)):
    e=exp[i].split('+')
    if i==0:
        for j in range(len(e)):
            sum+=int(e[j])
    else:
        for k in range(len(e)):
            sum-=int(e[k])
print(sum)

가장 첫번째로 나오는 마이너스 기호 이후를 최솟값으로 만들면 된다.

 

13305번: 주유소

n=int(input())
dis=list(map(int,input().split()))
price=list(map(int,input().split()))

price_sum=price[0]*dis[0]
cur_price=price[0]
for i in range(1,n-1):
    if cur_price>=price[i]:
        cur_price=price[i]
    price_sum+=cur_price*dis[i]
print(price_sum)

가격이 이전 도시에 비해 낮을 때 cur_price 업데이트

모든 문제의 답은 Python3으로 작성함

 

10872번: 팩토리얼

def fac(n):
    if n==0 or n ==1:
        return 1
    else:
        return n*fac(n-1)

n = int(input())
print(fac(n))

 

10870번: 피보나치 수 5

 

def fib(n):
    if n==0:
        return 0
    if n==1 or n==2:
        return 1
    else:
        return fib(n-2)+fib(n-1)

n = int(input())
print(fib(n))

 

2447번: 별 찍기 - 10

def star(n):
    if n==3:
        return ["***","* *","***"]
    else:
        old = star(n//3)
        new = []
        for j in range(n):
            new.append('')
            
        for a in range(n//3):
            new[a]=old[a]*3
            new[n-a-1]=old[a]*3
            
        for b in range(n//3, n//3*2):
            new[b]=old[b-n//3] + ' '*(n//3) + old[b-n//3]
            
        return new
        

n = int(input())
star = star(n)
for i in range(n):
    print(star[i])

 

11729번: 하노이 탑 이동 순서

def hanoi(n, f, tmp, to):
    if n==1:
        print(f, to)
    else:
        hanoi(n-1, f, to, tmp)
        print(f, to)
        hanoi(n-1, tmp, f, to)

n = int(input())
print(pow(2,n)-1)
hanoi(n, 1, 2, 3)

 

3학년 2학기 지능웹설계 과목의 텀프로젝트 결과물을 소개하겠다.

지능웹설계에서는 jsp를 이용한 웹 페이지 구성, 서버 연결, 데이터베이스 연결을 다뤘다.

학기 중에 배운 내용들을 모두 활용해야하는 개인 프로젝트의 주제는 자유였으며,

나는 내가 가장 좋아하는 게임인 스타듀밸리의 팬 페이지를 주제로 프로젝트를 진행했다.

 

프로젝트는 Eclipse에서 Dynamic Web Project를 생성하여 개발을 진행하였고

JSP를 기반으로 만들었으며 css는 부트스트랩을 활용했고 데이터베이스는 MySQL과 연결했다.

실제 서버에 등록하진 않았고 Tomcat을 이용해서 로컬 호스트 상에서 실행시킬 수 있는 상태까지 개발했다.

메인 화면

웹 페이지의 기본 틀은 상단에 메뉴바가 있고 중앙에 웹 페이지의 내용이 있다.

메뉴바를 보면 메인 화면 / 캐릭터 소개 / 커뮤니티 / 마이페이지 / 사이트 평가 / 로그인 및 회원가입 기능이 있다.

 

다국어 처리

화면 왼쪽, 오른쪽에 있는 주니모 (사과 캐릭터) 들이 있는데

왼쪽 주니모는 한국어로, 오른쪽 주니모는 영어로 사이트 번역을 해준다.

 

회원가입

메뉴바 오른쪽에 있는 회원가입 버튼을 클릭하면 회원가입 폼으로 이동하게 된다.

아이디, 비밀번호에 대해서는 유효성 검사를 거치게 된다.

회원가입 직후에는 로그인 폼을 거치지 않고 바로 로그인을 할 수 있다. (쿠키 이용)

 

캐릭터 소개

스타듀밸리 팬 페이지인만큼, 게임에 대한 정보를 사이트에서 제공하면 좋겠다고 생각했고

간단하게 캐릭터 소개 페이지만 만들었다.

 

캐릭터 정보 수정

캐릭터 정보를 수정하기 위해서는 관리자 로그인이 필요하다.

이것은 팬 페이지 사용자 로그인과는 별개로 이루어진다.

캐릭터 정보 수정 완료 화면이다.

 

커뮤니티 공간

팬 페이지에서는 유저들간의 소통이 원활하게 이루어져야한다고 생각했다.

그래서 각 유저들이 자신의 플레이 내용을 공유할 수 있도록

게시물을 작성하고 확인하는 기능을 제공한다.

저 스크린샷은 내가 직접 찍은 플레이 장면인데 가을에 심은 호박 중 거대 호박이 2개나 자랐다.

게시물에는 제목, 내용, 작성자, 작성일, 사진이 나와있다.

그리고 해당 게시물에 다른 사람들도 댓글을 등록하여 소통할 수 있다.

 

댓글 등록 및 삭제

본인이 등록한 댓글 옆에는 빨간색 X버튼이 있는데

이 버튼을 클릭하면 댓글을 삭제할 수 있다.

댓글 작성은 로그인한 사용자만 가능하다.

 

게시물 작성

게시물 작성 역시 로그인한 사용자만 이용 가능하고

제목, 내용, 이미지 파일을 첨부하면 된다.

게시물이 등록된 모습이다.

 

마이페이지

사용자 로그인을 한 상태라면 마이페이지에서 자신이 작성한 게시물과 댓글을 확인할 수 있다.

게시물 제목과 댓글 내용을 클릭하면 관련 게시물로 바로 이동한다.

 

사이트 평가

사이트 평가는 게시물의 댓글 등록하는 것과 거의 유사하다.

실제로 운영되는 사이트는 아니지만, 팬 페이지를 만든다면

운영자와 이용자들간의 원활한 소통과 피드백이 이루어져야 한다고 생각해서 만든 메뉴이다.


프로젝트를 자체 평가하자면 큰 스케일로, 디테일을 많이 살리지 못해서 조금 아쉬운 느낌이 있다.

그래도 학기 내내 배운 JSP 내용들을 총 집합하여 웹 페이지를 구성했다는 점,

MySQL 데이터베이스를 이클립스에 연결하여 DB를 이용한 첫 개발이라 의미가 있는 웹 개발 프로젝트였다.

 

https://github.com/askges20/StardewValleyFanPage

 

askges20/StardewValleyFanPage

2020-2 지능웹설계 프로젝트. Contribute to askges20/StardewValleyFanPage development by creating an account on GitHub.

github.com

⬆ 해당 프로젝트는 GitHub에 소스 코드를 업로드하였다.

+ Recent posts