웹에서 페이지네이션이란 한번에 노출할 내용(게시글 제목 또는 상품 이름등)을 개발자가 정한 수 만큼을 노출 하여 한 화면에 나오게 하는 기법이다

 

그럼 이게 왜 필요한가?

그건 무한 스크롤 방식에서 벗어나기가 첫번째이고 좀더 가독성 있게 보기 위해서가 두번째이다.

 

즉 사용자의 편의 및 브라우저의 부담을 줄이기 위해 사용하는 것이다. 이중 사용자의 편의가 더 큰편이다.

예시로 사용자가 무한정 스크롤을 내리는 것보다는 조금 내리도 다음 페이지버튼을 눌러 다음 내용들을 보는게 좀더 쉽게 이용이 가능하다

 

그렇다면 pagination 는 어떻게 구현을 하는가?

 

Django는 pagination를 제공하고 있어 따로 구현을 할 필요가 없다

 

직접구현

try:
	page = request.query_params.get("page", 1)
	page = int(page)
except ValueError:
	page = 1

page_size = 20
start = (page - 1) * page_size
end = start + page_size
pagenation = Product.objects.all()[start:end]

 

Django에서 제공하는 pagination

from django.core.paginator import Paginator


product = Product.objects.all()
paginator = Paginator(product, 20)
page = request.query_params.get("page", 1)
products = paginator.get_page(page)

 

동작 방식으로는 일단 목록을 전체 자져오고 그것을 임의수(20)으로 나누고 현재 요청한 페이지의 내용만 가져오는 식으로 동작이 되고 있다

'Web' 카테고리의 다른 글

Django) Response와 Serializer  (0) 2024.09.05
Django) ChoiceField(serializers)  (1) 2024.09.04
Redis  (0) 2024.08.29
Google AI Gemini에 대하여  (13) 2024.08.28
Django) 데이터터베이스 변경 사항 오류 - 해결  (0) 2024.08.23

3. Django의 QuerySet 메서드 중 데이터베이스에서 특정 조건에 맞는 모든 레코드를 반환하는 메서드는 무엇인가요?

  • A) filter()
  • B) get()
  • C) exclude()
  • D) all()

정답 : A) filter()

이유: 모든 레코드를 반화하는 메서드만 있었으면 D)all()이 맞지만 앞에 특정 조건이 들어가기에 filter()가 맞다

또한 특정 한개만 조회할때에는 get()을 쓰는게 맞다

 

 

8.Django의 MTV 패턴에서 각 요소(Model, Template, View)의 역할을 간단히 설명하세요.

 

  • 나의 답
    • Model: 데이터베이스, 데이터 관리
    • Template: 사용자에 보여지는 곳
    • View: 사용자의 요청을 처리하고 응답하는 곳
  • 정답
    • Model: 데이터베이스 구조를 정의하고, 데이터를 관리하는 역할을 합니다. 데이터베이스 테이블과 매핑되며, 데이터를 저장, 조회, 수정, 삭제하는 기능을 제공합니다.
    • Template: 사용자에게 보여지는 화면을 담당합니다. HTML 파일과 같은 템플릿을 통해 데이터를 시각적으로 표현하며, 동적인 웹 페이지를 생성하는 데 사용됩니다.
    • View: 사용자의 요청을 처리하고, 적절한 데이터를 가져와서 템플릿과 결합하여 응답을 생성하는 역할을 합니다. View는 Model과 Template 사이에서 중개자 역할을 합니다.
  • 개념적으로 틀리지는 않았지만 정답에 나와있는 것처럼 조금 풀어서 설명하면 좋았을거 같다

 

9. Django에서 settings.py 파일의 주요 역할을 구체적인 예시를 들어 설명하세요.

  • 나의 답
    • 장고에서 사용할 설정 및 정적 또는 미디어 파일의 경로를 설정 할 수 있고 또한 중복된 html의 경우 따로 templates안에 만들어서 각각의 앱에서 호출 할 수 있게 경로를 잡을 수 있습니다
  • 정답
    • settings.py 파일은 Django 프로젝트의 설정을 관리하는 파일입니다. 데이터베이스 설정, 설치된 앱, 미들웨어, 정적 파일 경로, 템플릿 설정, 국제화 설정, 보안 키 등의 다양한 프로젝트 설정이 이 파일에 포함됩니다. 프로젝트 전반의 동작을 조정하고, 필요한 외부 리소스나 라이브러리를 연결하는 역할을 합니다.

10. Django ORM이란 무엇이며, 왜 사용하는지 설명하세요.

  • 나의답
    • 데이터 베이스를 생성및 수정 삭제를 조금더 간편하게 하여 개발자가 SQL에 쏟을 시간을 절약하여 필요한 비지니스코드에 좀더 집중 하게 만들어 줍니다.
  • 정답
    • **Django ORM(Object-Relational Mapping)**은 Python 객체를 데이터베이스의 테이블과 매핑하여 데이터베이스 조작을 간단하고 직관적으로 수행할 수 있게 해주는 도구입니다. SQL 쿼리를 작성하지 않고도 Python 코드만으로 데이터베이스와 상호 작용할 수 있게 해줍니다. 이를 통해 데이터베이스 독립성을 유지할 수 있으며, 데이터베이스 작업을 더 안전하고 효율적으로 수행할 수 있습니다.

11. Django의 Custom UserModel을 사용하는 이유와 장점을 설명하세요.

  • 나의답
    • 장고에 기본적으로 사용되는 UserModel에는 딱 필요한 부분만 있기에 제작하고 있는 UserModel에 필요한 부분을 추가하기 위하여 Coustom UserModel을 사용합니다.
  • 정답
    • Django의 기본 User 모델을 사용하는 대신 Custom UserModel을 사용하면, 사용자 모델을 확장하거나 수정할 수 있어 프로젝트의 요구사항에 맞게 사용자 정보를 관리할 수 있습니다. 예를 들어, 추가적인 사용자 필드가 필요하거나 로그인 방식(예: 이메일로 로그인)을 변경하고 싶을 때 유용합니다. Custom UserModel을 사용하면 향후 확장성도 더 좋아지고, 프로젝트 시작 시 이러한 커스터마이징을 도입하면 나중에 구조 변경이 필요할 때 발생할 수 있는 문제를 예방할 수 있습니다.

12. Django에서 Model 클래스는 데이터베이스 테이블과 매핑됩니다. Django ORM에서 모델을 정의할 때 필드를 정의할 수 있는 다양한 옵션 중 ManyToManyField에 대해 구체적인 사용 사례를 들어 설명하세요.

  • 나의답
    • 해시 태그의 경우 내가 쓴 글에만 적용되는것 이아닌 다른 글에도 적용이 가능하기에 해시태그 테이블과 제품(또는 게시글)과 ManyToMany가 됩니다.
  • 정답
    • Django의 ManyToMany는 두 모델간의 다대다 관계를 정의할 때 사용됩니다. 다대다 관계란 한 모델의 여러 인스턴스가 다른 모델의 여러 인스턴스와 연결될 수 있는 경우를 말합니다. 예를 들어, 하나의 학생이 여러 과목을 수강할 수 있고, 동시에 하나의 과목을 여러 학생이 수강할 수 있는 상황이 있을 수 있습니다.
    • Django는 이러한 관계를 처리하기 위해 자동으로 중간 테이블을 생성하며 이 테이블에는 두 모델의 외래 키가 저장되어 있습니다.

14. Django 모델을 작성하세요. "BlogPost"라는 이름의 모델을 만들고, 제목(title), 내용(content), 작성일(created_at), 수정일(updated_at) 필드를 추가하세요.

  • 제목은 문자열(CharField), 내용은 텍스트(TextField), 작성일과 수정일은 날짜/시간(DateTimeField) 필드로 정의합니다.
  • created_at과 updated_at 필드는 각각 자동으로 생성되도록 설정하세요.
  • 나의 답
  • class BlogPost(models.Model):
        title = models.CharField(max_length=120)
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at  = models.DateTimeField(auto_now=True)
  • 정답
  • from django.db import models
    
    class BlogPost(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    
        def __str__(self):
            return self.title

 

14. Django에서 사용자가 로그인할 수 있는 간단한 로그인 뷰를 작성하세요.

  • 사용자가 로그인 폼을 제출했을 때, 해당 사용자를 인증하고, 성공적으로 로그인할 경우 'home' 페이지로 리디렉션합니다.
  • 로그인 실패 시 다시 로그인 페이지로 리디렉션하며, 실패 메시지를 출력하세요.
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        
        # 이곳에 코드를 작성해 주세요.
        
    return render(request, 'login.html')

 

정답

더보기
# 내가 찾은 정답
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def login_view(request):
	context = {}
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        
        # 이곳에 코드를 작성해 주세요.
        userObject = authenticate(username = username, password = password)
        if userObject is not None:
        	login(request, userObject)
            return redirect("home")
        context = {
        	"error": "fail"
        }
        
    return render(request, 'login.html', context)
    
# 캠프에서 제공한 정답
답안
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            messages.error(request, 'Invalid username or password')
            return redirect('login')
    return render(request, 'login.html')

 

내가 찾은 정답코드는 context라는 값을 통해 다시 login.html쪽으로 값을 전달 하여 html쪽에서 오류메시지를 처리하는 데 비해 캠프에서 제공한 정답코드를 보니 messages를 통해 값을 쉽게 전달하였다. 그런데 검색해보니 messages를 쓸려면 상단 form django.contrib import messages를 선언 해주어야 한다

 

문제에서 요구하는 사항으로 뒤에 messages 또는 context를 이용하는 것은 개발자의 자유로 보인다. 여기서 문제는 authenticate의 사용법을 아는가 모르는가로 나뉘는 부분이라 이부분은 확실히 알아 두는게 좋을 거 같다

 

15. 다음의 Post에 대해 CRUD를 하는 코드의 일부입니다. 아래 내용을 참고하여 코드를 완성해 주세요.

Post 모델은 다음과 같은 필드를 가진다고 가정합니다.

  • title: CharField(max_length=100)
  • content: TextField()
  • created_at: DateTimeField(auto_now_add=True)

15 - 1. Read

  • 내코드
  • def post_list(request):
        posts = Post.objects.all()
        context = {'posts': posts}
        return render(request, 'posts/index.html', context)
  • 정답코드
  • def post_list(request):
        posts = Post.objects.all()
        return render(request, 'posts/index.html', {'posts': posts})

15 - 2. Create

  • 내코드
  • def post_create(request):
        if request.method == 'POST':
            form = PostForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('post_list')
        else:
            form = PostForm()
        return render(request, 'posts/form.html')
  • 정답코드
  • def post_create(request):
        if request.method == 'POST':
            form = PostForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('post_list')
        else:
            form = PostForm()
        return render(request, 'posts/form.html', {'form': form})

15 - 3. Update

  • 내코드
  •  
  • def post_update(request, post_id): post = Post.objects.filter(pk=post_id) if request.method == 'POST': form = PostForm(request.POST, instance=post) if form.is_valid(): form.save() return redirect('post_list') else: form = PostForm(instance=post) return render(request, 'posts/form.html', {'form': form})
  • 정답코드
  • def post_update(request, post_id):
        post = get_object_or_404(Post, pk=post_id) # 모두 정답
        post = get_object_or_404(Post, id=post_id) # 모두 정답
        post = Post.objects.get(pk=post_id) # 모두 정답
        post = Post.objects.get(id=post_id) # 모두 정답
        if request.method == 'POST':
            form = PostForm(request.POST, instance=post)
            if form.is_valid():
                form.save()
                return redirect('post_list')
        else:
            form = PostForm(instance=post)
        return render(request, 'posts/form.html', {'form': form})

15 - 4. Delete

  • 내코드
  • def post_delete(request, post_id):
        post = Post.objects.filter(pk=post_id)
        if request.method == 'POST':
            post.delete()
            return redirect('post_list')
        return render(request, 'posts/confirm_delete.html', {'post': post})
  • 정답코드
  • def post_delete(request, post_id):
        post = get_object_or_404(Post, pk=post_id) # 모두 정답
        post = get_object_or_404(Post, id=post_id) # 모두 정답
        post = Post.objects.get(pk=post_id) # 모두 정답
        post = Post.objects.get(id=post_id) # 모두 정답
        if request.method == 'POST':
            post.delete()
            return redirect('post_list')
        return render(request, 'posts/confirm_delete.html', {'post': post})

'기타' 카테고리의 다른 글

공공 API 연동 하기  (1) 2024.09.30
LLM - LangChain  (3) 2024.09.21
git branch 생성 방법 및 상태  (0) 2024.08.27
전문반 숙제) 논문을 읽고 난 후  (0) 2024.08.26
Git Pull requests 하기 위하여  (0) 2024.08.23

개인 프로젝트 진행 도중 다중 이미지 처리때문에 이미지 삭제는 개별로 진행하도록 수정하는 도중 오류가 발생하였다

 

update.html 유저화면
update.html 소스코드 중 이미지 삭제부분 처리할 로직 부분
삭제버튼 클릭시 발생한 오류 내용

 

처음 delete_image is not defined라는 내용을 통하여 delete_image라는 내가 만든 함수를 못불러오는 현상이라 생각하여 위치를 update.html이 아닌 base.html쪽 하단으로 이동도 해보았지만 결국 위의 오류내용은 변함이 없었다.

 

그래서 일단 onlick을 인식하는 먼저 테스트를 진행하였다.

 

 

 

onclik자체에는 문제 없는 것을 확인 하였고 그렇다면 이번에는 함수쪽 문제인가 확인을 하였다.

 

함수쪽도 문제 없이 동작이 되었다.

그러다 이제 경로 설정하는 부분쪽의 pk쪽을 확인 해보니 +가 들어가야 할 자리에 =이 들어가 있는 것을 확인 하였다.

 

즉 이번 문제는 오타때문에 발생한 문제였는데 함수내 오타이기에 함수자체가 호출이 안되서 발생한 문제로 확인 되었다.

'Web > 개발 오류' 카테고리의 다른 글

Django AWS S3 연동  (2) 2024.10.02
Django) 테이블 생성 오류 TypeError:ForeignKey  (0) 2024.09.25
Django) 테이블 생성 오류  (1) 2024.09.12

이번 주차에 장고 기초 팀프로젝트가 끝났다. 무사히 아무 낙오없이 모든 팀원들이 각자의 역할 이상을 보여주어 프로젝트의 퀄리티도 충분히 높였고, 영상과 발표자료(PPT)는 팀원인 새예님이 잘 만들어 주셨다.

 

이때 영상과 PPT를 잘 못다루어 도움을 드리지 못해 이부분은 새예님께 감사하면서도 죄송스럽다.

 

다음에는 유튜브를 통해 영상은 힘들더라도 PPT는 도움이 될 수 있도록 노력을 해야 할 같다.

 

팀프로젝트가 끝나고 새로운 장고 심화 주차가 들어갔는데 들어가자마자 개인프로젝트 2개를 9월9일까지 제출 해야 한다고 하여 조금 부담이 왔다. 기능 구현은 그래도 어찌저찌 가능할 거 같은데 readme 부터 와이어프레임, ERD까지도 진행해야 할 거 같아 아무래도 시간이 조금 부족하지 않을까라는 생각이 들었다

 

특히 2개의 프로젝트 중 하나는 Rest 방식의 DRF이고 다른 하나는 퓨어장고에 open AI를 연동하여 제출하여 한다.

 

가능한 이번 주말까지는 둘중 하는 절반정도는 끝내려고 계획중이기는 한데 잘 될려는지 모르겠지만 화이팅!!!

'기타 > WIL' 카테고리의 다른 글

[내일배움캠프] 12 주차  (0) 2024.09.13
[내일배움캠프] 11 주차  (2) 2024.09.06
[내일배움캠프] 9 주차  (0) 2024.08.23
[내일배움캠프] 8 주차  (0) 2024.08.16
[내일배움캠프] 7 주차  (0) 2024.08.09

문제) 방 배정

 

해당 문제는 초등학교 학생들이 단체로 수학여행을 하게 되어 남녀 & 학년별로 방을 배정 하려고 했을 때 최소 방을 몇개 잡아햐 하는 지를 구하는 문제 였다

 

처음 문제를 봤을 때 파이썬의 딕셔너리 키 값을 학년으로 잡고 그후 남녀를 구분하는 리스트 값을 넣으려고 했다

 

초등학생 = {
'1학년' : {
	'남학생' : 0,
    '여학생' : 0
    },
'2학년' : {
	'남학생' : 0,
    '여학생' : 0
    },   
    .....
}

 

대략 적으로 위의 방식으로 풀면 어떨까 라는 생각을 하다가 굳이라는 생각이 들게 되었다. 그래서 DP 방식으로 학년 별 남녀 그룹만큼 배열을 만들고 0으로 초기화 하여 해당 문제를 풀게 되었다

 

더보기

정답 주의!!!

 

import sys
N, K = map(int, sys.stdin.readline().split())
stds = [0] * 12
for _ in range(N):
    s, ss = map(int, sys.stdin.readline().split())
    stds[((ss * 2) - (1 - s)) - 1] += 1

answer = 0
for std in stds:
    answer += std // K
    if std % K != 0:
        answer += 1

sys.stdout.write(f'{answer}')

 

'Python > Python 문제' 카테고리의 다른 글

백준) queuestack  (0) 2024.08.14
백준) 풍선 터뜨리기  (0) 2024.08.14
백준) 골드바흐 파티션  (0) 2024.08.09
프로그래머스) 쿼드압축 후 개수 세기  (0) 2024.08.07
백준 ) 게리맨더링  (0) 2024.08.05

Redis 란?

  • Remote Dictionary Server의 약자로서, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.
  • 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다.(출처: 위키백과)

 

Redis 동작 방식

  • Redis는 여러개의 명령을 한번에 처리하는게 아닌 1개씩 들어온 순서대로 처리한다
  • 일반적으로 한번에 처리하는 게 좋은게 아닐까? 라는 생각을 하겠지만 특정 상태에서(티켓팅 같은 순서가 중한 상황)는 1개씩 순서대로 처리하는게 좋다
  • 즉, 상황에 따라 Redis를 사용하거나 사용하지 않을 수 있는 것이다

Redis 를 사용하는 이유

  • Redis는 위에 설명한 대로 메모리 기반으로 된 DBMS 방식이기에 보조기억장치에서 데이터를 조회하는 속도보다 빠르다.
  • 이를 통하여 캐시 데이터를 이용하여 캐시가 없을 때에는 데이터베이스 서버쪽에서 조회를 하고 그 조회한 내용을 Redis가 기억하게 한 뒤 이후 동일 데이터를 요청하면 데이터베이스 서버쪽에서 다시 조회하는게 아닌 Redis가 가지고 있는 데이터를 넘겨주어 속도 차이를 개선 할 수 있다.(약 55%의 속도 향상)

 

Redis 설치 

  • Redis 설치
    • Redis 공식 홈페이지  에서 자신이 해당하는 OS에 맞게 설치파일 받아 설치를 진행 하신 후 window의 경우에는 설치 한 위치에서 cli를 실행하지 않고 cmd 창에서 실행하시려면 환경변수에 해당 경로를 입력해야 지만 cmd창에서 redis를 실행할 수 있다

설치 위치로 올라가서 직접 redis-cli.exe 를 실행

 

cmd 창에서 redis-cli를 사용하위하여 환경변수 창으로 들어 가기전 화면
시스템 변수 중 Path로 된 부분을 찾아 편집을 누리기 전 화면
찾아보기를 이용하여 Redis폴더 위치를 찾고 환경변수 안에 입력된 화면

 

환경 변수 설정후 redis가 잘 동작되는 확인 하는 화면

 

공식 사이트에 나와 있는 대로 설치가 잘 되었다면 redis-cli를 실행하고 ping이라는 입력값을 주면 PONG이라는 리턴값이 나오는 것을 확인 할 수 있다.

'Web' 카테고리의 다른 글

Django) ChoiceField(serializers)  (1) 2024.09.04
Django) Pagination  (1) 2024.09.03
Google AI Gemini에 대하여  (13) 2024.08.28
Django) 데이터터베이스 변경 사항 오류 - 해결  (0) 2024.08.23
특강) 프론트엔드 훑어보기  (0) 2024.08.20

Gemini(제미니) 란?

제미니(Gemini, 구 명칭: 바드, Bard)는 구글이 개발한 대화형 생성형 인공지능 챗봇으로 처음에는 LaMDA 계열의 대형 언어 모델(LLM), 나중에는 PaLM에 기반을 두었다. 오픈AI ChatGPT의 상승에 직접 대응하기 위해 개발되었으며 다른 국가들에 확장시키기 전에 2023년 3월 기능에 제한을 두고 출시되었다. (출처:위키백과)

 

그래서 Gemin가 정확히 무엇인지 모르겠어서 Gemini에게 할 수 있는 것을 물어봤고 그에 대한 답변이 아래 내용이다.

Gemini가 할 수 있는 모든 것들: 당신의 개인 AI 비서

Gemini는 Google AI에서 개발한 대규모 언어 모델로, 다양한 작업을 수행할 수 있는 강력한 도구입니다. 마치 개인 비서처럼 당신의 곁에서 필요한 정보를 찾아주고, 다양한 질문에 답변하며, 창의적인 작업까지 도와줄 수 있습니다.

Gemini가 할 수 있는 일들의 예시:

  • 정보 검색 및 요약: 어떤 주제든지 질문하면 정확하고 간결한 답변을 제공합니다. 뉴스, 과학, 역사, 스포츠 등 다양한 분야의 정보를 쉽게 찾을 수 있습니다.
  • 텍스트 생성: 다양한 형식의 텍스트를 생성할 수 있습니다. 예를 들어, 이메일, 보고서, 시, 소설 등을 작성하거나 아이디어를 위한 브레인스토밍을 할 수 있습니다.
  • 언어 번역: 여러 언어 간 번역을 실시간으로 제공합니다. 해외 여행이나 외국어 공부에 유용하게 활용할 수 있습니다.
  • 코드 작성: 파이썬, 자바스크립트 등 다양한 프로그래밍 언어로 코드를 작성하거나, 기존 코드를 수정하고 디버깅하는 것을 도와줍니다.
  • 창의적인 글쓰기: 시, 소설, 시나리오 등 다양한 창의적인 글쓰기를 위한 아이디어를 제공하고, 초고를 작성하는 데 도움을 줄 수 있습니다.
  • 학습 자료 생성: 특정 주제에 대한 학습 자료, 요약, 질문지를 생성하여 학습 효과를 높일 수 있습니다.
  • 데이터 분석: 숫자나 데이터를 분석하고, 그 결과를 시각화하여 이해를 돕습니다.
  • 대화: 자연스러운 대화를 통해 다양한 주제에 대해 이야기하고, 당신의 질문에 답변하며, 함께 문제를 해결할 수 있습니다.

Gemini를 어떻게 활용할 수 있을까요?

  • 학습: 궁금한 점을 바로 질문하고, 학습 자료를 생성하여 효율적인 학습을 할 수 있습니다.
  • 작업: 보고서 작성, 이메일 작성, 프로그래밍 등 다양한 업무를 더욱 효율적으로 처리할 수 있습니다.
  • 창작: 새로운 아이디어를 얻고, 창의적인 글쓰기를 통해 자기 표현을 할 수 있습니다.
  • 일상생활: 정보 검색, 번역, 일정 관리 등 다양한 일상생활에서 유용하게 활용할 수 있습니다.

Gemini의 가능성은 무궁무진합니다.

 

 

보기는 좋으나 내가 이해하기로 그냥 텍스관련 된 연관 작업을 수행하는게 특징인거 같다.

 

그렇다면 이를 통하여 개발자가 할 수 있는게 무엇이 있을까 하여 고민해니 사이트의 글로벌화가 가능하지 않을까라는 생각이 들었다.

 

물론 완전완벽한 번역은 힘들지만 특정 핵심 단어의 경우 대부분 번역이 가능 할거고 그렇다면 웹 사이트의 글로벌화는 생각보다 비용이 적게 들며 완성이 되지 않을까라는 생각을 하게 되었다.

'Web' 카테고리의 다른 글

Django) Pagination  (1) 2024.09.03
Redis  (0) 2024.08.29
Django) 데이터터베이스 변경 사항 오류 - 해결  (0) 2024.08.23
특강) 프론트엔드 훑어보기  (0) 2024.08.20
Django 기본 셋팅  (0) 2024.08.19

git에서 branch를 생성하는 방법은 여러가지 이다

 

기본적으로 로컬에서 branch 생성하는 방법으로는 

 

git branch branch_name

git switch -c branch_name

git checkout -b branch_name

 

위의 3가지 방법이 있다

 

그리고 위의 방법은 현재 선택된 branch의 정보를 그대로 상속을 받고 있는 상태로 브랜치가 생성이 되는데 임의로 다른 브랜치를 상속받은 브랜치를 생성하기 위해서는 위 3가지 방법 중 마지막 에 서술한 checkout 부분의 branch_name 뒤에 상속받을 branch_name을 입력해 주면된다

 

만약에 로컬이 아닌 깃허브에서 브랜치의 내용을 상속을 받으려면 

git checkout -b branch_name origin/dev

식으로 주면 로컬이 아닌 깃허브에서 해당 브랜치의 내용을 받아 생성이 된다

 

이것을 몰라서 프로젝트 진행 중 merge 및 full requests를 진행하다가 브랜치가 꼬일 때마다 그냥 해당 프로젝트 폴더를 날리고 clone을 다시했었다.

 

그런데 로컬이 아닌 깃허브에서 해당 브랜치를 상속받을 수 있는걸 알게 된 지금은 로컬 브랜치들을 삭제하고 다시 생성할 때 깃허브에서 당겨오기만 하면 된다.

 

+ Recent posts