[ 프로젝트 BEP ] 최종장 - 엔지니어로서의 마인드셋에 대해 : 우수한 엔지니어는 누구이고, 가져야할 마인드 셋에 대해

이미지
  들어가면서 이제 2025년도 얼마 남지 않은듯 하다.  조금 길어질 수도 있기 때문에  실제로 업로드 하는 것은 새해 이후가 될 가능성도 있으나  올해는 이 글로 마무리 해보려고 한다. 이제 이 최종장을 끝으로 이 프로젝트를 다소 마무리 할 수 있을 것 같다. 물론 전체적으로 글 자체가 부족한 부분이 여려 곳 보이지만,  이는 천천히 개선하기로 하고 일단 마무리를 잘 지어보려고 한다. 이 프로젝트의 목표는 어디까지나 주니어 엔지니어(넓은 범위로서)에게  도움이 될 수 있는 부분을 정리해 놓은 것 이며, 이를 전달하는 것에 주력을 했다. 정확히는 그 사이에 몇 번이나 직장은 바뀌었지만,  내가 다니고 있는 회사에서 작게는 멘터,  크게는 주니어 교육에 활용하기 위한 초안이였다. 들어가기 앞서서 먼저 개발자는 무엇인가에서 부터 시작해서,  수학은 필요한가, 그리고 학위에 대한 이야기를 나누어보았고, 그 다음으로 컴퓨터가 무엇인가에 대해서는,  가장 첫 장인 컴퓨터 개론에서 메모리 손실과 함께 설명하였다. 다음으로는 개발 방법론과 시스템 설계,  그리고 프로그래밍 언어에 대한 이야기로 간단하고 이론적인 이야기를 하였다. 눈치가 빠른 사람은 알 수 있듯이,  현실에서 가질 수 있는 몇 가지 의문으로 시작해서  컴퓨터라는 하드웨어 부터 시작해서,  프로젝트(개발 방법론), 설계, 프로그래밍 언어 순으로  일부러 점점 컴퓨터 세계로 들어가도록 구성을 해 놓았다. 여기서 한 걸음 더 나아가자면, 알고리즘이 들어갈 수는 있겠으나  어디까지나 가볍게 전달하는대에 목적이 있기도 하고,  개인적으로는 당장은 크게 중요하지 않은 부분이 라고 생각 했기 때문이다. 먼저 이 부분에 대해서 좀 더 자세히 이야기해보도록 하자. 시작 부터 모든 지식을 쌓을 수는 없다 이는 개발 영역에서만 해당되는 이야기는 아니지만,  모든 것에는...

[ Django, Python ] mozilla 튜토리얼 예제로 살펴보는 Django 분석 ⑤ - 1 : 책 목록 페이지 만들기


책 목록 Page


책 목록 페이지는 
모든 사용 가능한 책 레코드들의 목록을 페이지 안에 나타낼 것이다.

해당 페이지는 catalog/books/로 접근하며,
각 레코드마다 제목과 저자를 나타내고
제목은 관련된 책 페이지로 이동하게 끔 하이퍼 링크 처리를 할 것이다.

① URL Mapping


/catalog/urls.py 파일을 열어 아래와 같이 코드를 추가한다.


urlpatterns = [
    path('', views.index, name='index'),
    path('books/', views.BookListView.as_view(), name='books'),
]
이전 공식 도큐먼트 튜토리얼에서도 사용했던 
Java의 인터페이스와 비슷하게 
Django에서 지원하는 오버라이딩 할 수 있는 제네릭 뷰이다.

Django의 클래스 기반 View에서는 as_view() 클래스 메소드를 호출해
적절한 View함수에 접근할 수 있다.

② View(클래스 기반)


catalog/views.py 파일에 아래와 같은 코드를 추가해보자.


from django.views import generic

class BookListView(generic.ListView):
    model = Book
이제 코딩한 모델 Book으로 부터 모든 레코드를 가져오기 위해
데이터베이스를 쿼리할 것이다.

역시 함수 기반보다 클래스 기반의 제너릭 뷰가 
확실히 깔끔하다는 것을 느낄 수 있다.

class BookListView(generic.ListView):
    model = Boo
    context_object_name = 'my_book_list'   # your own name for the list as a template variable
    queryset = Book.objects.filter(title__icontains='war')[:5] # Get 5 books containing the title war
    template_name = 'books/my_arbitrary_template_name_list.html'  # Specify your own template name/location
또한 같은 모델을 사용하지만
여러 개의 뷰를 사용해야 하는 경우 혹은
book_list 템플릿 변수명이 마음에 들지 않는 경우,

위와 같이 다른 템플릿의 파일을 명시할 수 도 있다.

③ 클래스 기반 뷰의 메소드 오버라이딩


위에서 잠깐 언급했듯이 
메소드 오버라이딩도 가능하다.

class BookListView(generic.ListView):
    model = Book

    def get_queryset(self):
        return Book.objects.filter(title__icontains='war')[:5] # Get 5 books containing the title war
예를 들어,
get_queryset() 메소드를 오버라이딩 해 
반환되는 레코드 리스트를 
위와 같이 바꿀 수도 있다.

또한 템플릿에 추가적인 컨텍스트 변수들을 전달하기 위해

class BookListView(generic.ListView):
    model = Book

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get the context
        context = super(BookListView, self).get_context_data(**kwargs)
        # Create any data and add it to the context
        context['some_data'] = 'This is just some data'
        return context
get_context_data() 함수를 오버라이딩 할 수도 있다.

이에 대한 자세한 사항은
아래 링크의 공식 도큐먼트를 참고하기 바란다.

④ 리스트 뷰 템플릿 생성하기


/locallibrary/catalog/tempates/catalog/book_list.html 경로에
아래와 같이 파일 및 코드를 추가해보자.


{% extends "base_generic.html" %}

{% block content %}
  <h1>Book List</h1>
  {% if book_list %}
  <ul>
    {% for book in book_list %}
      <li>
        <a href="{{ book.get_absolute_url }}">{{ book.title }}</a> ({{book.author}})
      </li>
    {% endfor %}
  </ul>
  {% else %}
    <p>There are no books in the library.</p>
  {% endif %}       
{% endblock %}

⑤ 조건부 실행


if, else 그리고 endif 템플릿 태그들은 
book_list가 정의되었는지,
그리고 존재하는지 체크할 수 있다.

{% if book_list %}
  <!-- code here to list the books -->
{% else %}
  <p>There are no books in the library.</p>
{% endif %}
위의 조건문에 elif를 추가한다면 
추가적인 조건을 걸 수 있다.

⑥ 반복 구문


{% for book in book_list %}
  <li> <!-- code here get information from each book item --> </li>
{% endfor %}
for와 endfor 라는 템플릿 태그들은 
위와 같이 도서 목록을 살펴보기 위해 사용할 수 있다.

⑦ 변수 접근


반복 구문 내에서의 코드는 
각 책에 대한 리스트 아이템을 생성한다.

이 리스트 아이템은 타이틀과 작가 이름을 나타낸다.

<a href="{{ book.get_absolute_url }}">{{ book.title }}</a> ({{book.author}})

⑧ 베이스 템플릿 업데이트

base_generic.html에 아래와 같이 코드를 추가한다.


<li><a href="{% url 'index' %}">Home</a></li>
<li><a href="{% url 'books' %}">All books</a></li>
<li><a href="">All authors</a></li>






이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )