깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • DFS(깊이우선탐색)
  • Trie
  • 코딩테스트 연습문제
  • Binary Tree(이진 트리)
  • 자료 구조
  • 팀 프로젝트
  • 재귀 함수
  • Til
  • 자바스크립트 기초 문법
  • 트러블 슈팅 Troubleshooting
  • BFS(너비우선탐색)
  • POST / GET 요청
  • 점화식(Recurrence Relation)
  • 자잘한 에러 해결
  • leetcode-cli
  • Inorder Traversal(중위 순회)
  • BST(이진 탐색 트리)
  • tree
  • 최소 힙(Min Heap)
  • 01. 미니 프로젝트
  • 혼자 공부하는 자바스크립트
  • Linked List
  • TypeScript
  • 최대 힙(Max Heap)
  • Leetcode
  • Preorder Traversal(전위 순회)
  • 시간 복잡도
  • Backtracking(백트래킹)
  • 프로그래머스
  • TIT (Today I Troubleshot)
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

12/7 (API를 불러오는 서버사이드 렌더링 어떨까, 수) TIL

2022. 12. 8. 00:51

(2번째 프로젝트 하는 중)

  • 더미 데이터를 만들어 게시글 테이블을 채워넣었다. 게시글을 저장하는 테이블은 하나이고, 그 안에서 카테고리에 따라 글이 네 가지로 분류된다. 그래서 저렇게 흩어진 게시글 번호가 나타난다.

    조회수 항목을 추가하고, 날짜 형식을 제대로 (YYYY-MM-DD 형식으로) 출력하게 만들었다. 게시글을 클릭해서 조회하고 나오면 1씩 값이 늘어나 있는 것을 볼 수 있.

  • 코드를 대폭 간단하게 만들었다. 예를 들면 카테고리별로 다른 데이터가 없던 시절에는
    @app.route('/mainBoard-layout')
    def mainBoardLayout():
        category1, category2, category3, category4 = = _get_mainBoard_posts()
        return render_template('index.html', component_name='mainBoard',
                               category1_list=category1,
                               category2_list=category2,
                               category3_list=category3,
                               category4_list=category4)
    
    
    def _get_mainBoard_posts():
    		data1 = text('''
                        SELECT actor_id, first_name, last_name, city, view
                        FROM copy_actor2 AS a
                        LEFT join copy_city2 AS c 
                        ON a.actor_id = c.city_id 
                        ORDER BY actor_id DESC;
                        ''')
        category1 = app.database.execute(data1).fetchmany(5)
    
        data2 = text('''
                        SELECT actor_id, first_name, last_name, city, view
                        FROM copy_actor2 AS a
                        LEFT join copy_city2 AS c 
                        ON a.actor_id = c.city_id 
                        ORDER BY actor_id DESC;
                        ''')
        category2 = app.database.execute(data2).fetchmany(5)
    
        data3 = text('''
                        SELECT actor_id, first_name, last_name, city, view
                        FROM copy_actor2 AS a
                        LEFT join copy_city2 AS c 
                        ON a.actor_id = c.city_id 
                        ORDER BY actor_id DESC;
                        ''')
        category3 = app.database.execute(data3).fetchmany(5)
    
        data4 = text('''
                        SELECT actor_id, first_name, last_name, city, view
                        FROM copy_actor2 AS a
                        LEFT join copy_city2 AS c 
                        ON a.actor_id = c.city_id 
                        ORDER BY actor_id DESC;
                        ''')
        category4 = app.database.execute(data4).fetchmany(5)
    
        return category1, category2, category3, category4

    이렇게 if문으로 4번 비슷한 내용을 작성하던 것을, 게시글 테이블에 카테고리 필드가 생기고 카테고리 값(1~4)을 인수로 넘겨줌으로써 아래와 같이 코드가 간단해졌다.

    @app.route('/mainBoard-layout')
    def mainBoardLayout():
        category1 = _get_mainBoard_posts(1)
        category2 = _get_mainBoard_posts(2)
        category3 = _get_mainBoard_posts(3)
        category4 = _get_mainBoard_posts(4)
        return render_template('index.html', component_name='mainBoard',
                               category1_list=category1,
                               category2_list=category2,
                               category3_list=category3,
                               category4_list=category4)
    
    
    def _get_mainBoard_posts(category):
        data = text('''
                        SELECT b.id, title, u.user_nick, DATE_FORMAT(b.created_at, '%Y-%m-%d'), view
                        FROM board as b
                        LEFT JOIN board_category AS c
                        ON b.category_name = c.category_name
                        LEFT JOIN user AS u
                        ON b.user_id = u.id
                        WHERE c.id = :category
                        ORDER BY b.id DESC;
                        ''')
        placeholder = {'category': category}
        result = app.database.execute(data, placeholder).fetchmany(5)
        return result

  • 아이디어를 얻었는데, 일단 GET등을 받는 API 메소드를 만들고 그 메소드를 내부적으로 불러오는 다른 렌더링 메소드를 다시 만드는 식으로, 서버사이드 렌더링의 간편함과 API 기능 구현의 두 마리 토끼를 모두 잡을 수도 있지 않을까? 일단 그렇게 해도 문제는 없겠지?

  • 어제 먹통된 파이참 프로젝트에서 새 프로젝트 폴더로 얼른 옮겨갔다. 새로운 곳에서는 파이썬 인터프리터가 잘 작동한다. git에 연결은 아직이다.

  • MySQL이 기본으로 주는 데이터베이스들과 테이블들에서 적절한 항목들을 뽑아서 합치고 묶고 내가 만든 테이블에 값으로 넣고 하는 과정이 시간이 좀 걸렸다. 괜히 했나 싶기도 하지만… 일단 600개쯤 되는 게시글 데이터를 보니 뿌듯하다. 유저 테이블의 유저 id와의 연계까지 기가 막힌 (전혀 user 데이터가 아닌 테이블들에서 가져온 값들이라 기가 막힌) 설계다. 음. 역시 뿌듯하군. 쿼리문 연습 엄청 했다고 생각하자. 아! 쿼리문 새로 알게 된 것들이 많다. 여기에 쓰기엔 너무 많고 나중에 정리해서 올려봐야겠다.
  • 오늘 팀원들과 의논을 많이 할 수 있어서 좋았다. 우리 모두 우당탕쿵탕 하면서도… 모두 적극적으로 달려들고 있다. 나였으면 우리 팀원들이 하는 것만큼 한 문제를 붙잡고 오랜 시간 구글링을 하지 못했을 것을 안다. 금방 해결되는 문제로 검색해보는 것 말고 찾아봐도 잘 안되는 걸 붙잡고 있는 게 제일 힘든 일인데… 구글링 체력이란 게 있다면 다들 그 총량이 대단하다고 생각된다. 덩달아 나도 더 열심을 냈다. 내일도 화이팅해서 잘 마무리하자..!


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 12/13 (Node.js의 Router를 만나다, 화) TIL
    • 12/12 (Node.js를 시작하다, 월) TIL
    • 12/6 (서버 사이드 렌더링을 선택하다, 화) TIL
    • 12/5 (render_template을 반환하는 응답은 API가 아니었다, 월) TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바