슈퍼코딩에서 라이브코딩 시간에 개발자의 글쓰기라는 책이 좋다는 이야기를 주워 들어가지고 글쓰기에 대해서 약간 고민이 많았던터라, 적어도 개발관련 글을 쓸 때 조금이라도 잘 써보려고 바로 책을 구매했다.
평소에 강의며, 프로젝트며, 과제며 해야할 것이 산더미처럼 있어가지고 항상 여유가 없다고 여겨 왔는데, 적어도 하루에 짬으로 있는 시간들을 모아서 앞으로 책을 한 두 권 읽어나가려고 한다.
일단은 아들래미 어린이집 데려다주고, 10시에 데일리 스크럼 시작하기 전에 30분 정도 시간이 있고, 데일리 스크럼 끝나고 11시에 강의 듣기 전에 30분 정도 시간이 있다. 그렇게 하루에 1시간 정도 책을 읽는 시간을 만들어보려 한다. 오늘은 30분 정도만 지켰지만, 내일부터는 최대한 시간을 지켜보려고 한다.
절대 조급하게 읽지 말고 제대로 읽고 정리하도록 하자.
주말에 앞으로 어떻게 할지 나름대로 계획을 세워봤다. 이번에 슈퍼코딩 진행하면서 시간을 정해놓고 어떻게 하는지에 따라 생산성이 많이 올라갈 수 있다는 걸 느꼈기에, 중구난방으로 공부하기보다는 정해진 시간에 어떻게 공부할지를 좀 더 자세하게 결정해놓았기 때문에 무엇을 해야할지 결정하는 시간을 줄일 수 있었다.
그래서 오늘부터 리액트 강의를 정해진 시간에 들으려고 했고, 생각처럼 지켜지지는 않았지만 그래도 나름 집중해서 들을 수 있었다.
원래는 전체적으로 강의를 보고 나 혼자서 유튜브 클론 코딩을 해볼까 했는데, 그냥 일단 혼자서 해보고 나중에 강의를 듣는 방식으로 시도해봐야겠다.
계속 강의가 밀리니까 조급함이 생기게 되는데, 약간 나만의 규칙을 세워야 할 것 같다. 프로젝트를 완성하는데 어느 정도의 시간이 걸릴지 정하고 그 시간안에 최대한 구현해보고 안되면 그때 강의를 보는 방식으로 진행하는 게 좋겠다.
그래서 오늘은 유튜브 클론코딩을 하기 위해서 준비해야 할 부분들에 대해서만 강의를 들었다.
구글 클라우드에 접속해서 프로젝트 하나를 생성하고 관련 API Key를 발급받은 다음에, 그걸 이용해서 원하는 API로 원하는 정보를 가지고 올 수 있게 하고, 여러가지 API들을 관리하기 위해 Postman으로 등록해서 관리할 수 있는 환경을 만드는 것까지 시도했다.
sales 테이블:
product_id / sale_date / sale_amount
상품별 매출 합계를 계산하고, 매출이 높은 상품부터 낮은 상품 순으로 정렬하여 출력하는 SQL 쿼리를 작성
SELECT product_id, SUM(sale_amount) as total_sales
FROM sales
GROUP BY product_id
ORDER BY total_sales DESC;
customers 테이블:
고객의 나이를 기준으로 10년 단위의 연령대별로 고객 수를 계산하는 SQL 쿼리를 작성해보세요. 현재 년도는 2023년이라고 가정
SELECT birth_year, COUNT(FLOOR(2023 - birth_year) / 10) * 10) as people_by_age_group
FROM customers
GROUP BY people_by_age_group
ORDER BY people_by_age_group;
get /memos 라는 API에 정렬할 수 있는 쿼리를 붙여서 요청하면 서버에서 정렬된 데이터를 내려줄 수 있도록 구현해(정렬 기준은 가나다ABC순 또는 등록순 2가지 모두 구현)
# 사전강의에서 진행했던 crud-memo에 직접 적용해서 테스트. 메모를 생성할 때 정렬해서 get할 수 있도록
# post 메서드에 적용
# content 오름차순 정렬
@app.post('/memos')
def create_memo(memo: Memo):
memos.append(memo)
memos.sort(key=lambda x: x.content)
# content 내림차순 정렬
@app.post('/memos')
def create_memo(memo: Memo):
memos.append(memo)
memos.sort(key=lambda x: x.content, reverse=True)
# 등록순 정렬 (id가 new Date이기 때문에 id를 기준으로 오름차순 정렬)
@app.post('/memos')
def create_memo(memo: Memo):
memos.append(memo)
memos.sort(key=lambda x: x.id)
하지만 이렇게 되면 쿼리로 요청하는 게 아니라 애초에 서버에서 정렬해서 내려주는 게 되버림.. 쿼리를 요청해서 받아오게 하려면 아래와 같이 시도..
@app.get('/memos')
def read_memos(
sort_by: str = Query(None),
sort_order: str = Query("asc")
):
if sort_by == "created":
memos.sort(key=lambda x: x.id, reverse=sort_order == "desc")
elif sort_by == "title":
memos.sort(key=lambda x: x.content, reverse=sort_order == "desc")
return memos
WHERE 절:
WHERE 절은 테이블의 각 행에 대한 조건을 지정할 때 사용됩니다.
HAVING 절:
HAVING 절은 집계 함수 (SUM, COUNT 등)와 함께 사용되어 GROUP BY로 그룹화한 결과 집합에 조건을 적용하여 원하는 그룹만을 포함하도록 필터링합니다.
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말합니다.
조인을 이용해서 원하는 데이터를 엮거나 추출할 수 있습니다. 두 테이블의 조인을 위해서는 기본키와 외래키 관계로 맺어져야 하고, 이를 일대다 관계라고 합니다.
INNER JOIN(내부 조인)
두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 합니다.
OUTER JOIN(외부 조인)
두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옵니다.
LEFT OUTER JOIN(왼쪽 외부 조인)
왼쪽 테이블의 모든 값이 출력되는 조인입니다.
RIGHT OUTER JOIN(오른쪽 외부 조인)
오른쪽 테이블의 모든 값이 출력되는 조인입니다.
집합 기호로 표현하면 다음과 같습니다
내부 조인 (Inner Join): A ∩ B
외부 조인 (Outer Join): (A - B) ∪ (B - A) ∪ (A ∩ B)
오른쪽 외부 조인 (Right Outer Join): (B - A) ∪ (A ∩ B)
왼쪽 외부 조인 (Left Outer Join): (A - B) ∪ (A ∩ B)
벤다이어그램 (https://fierce-baryonyx-006.notion.site/JOIN-56c369ab787d45ceacde2e9c2e060129?pvs=4)