프롬프트 AI&OpenAPI&공공데이터를 활용한 웹앱개발자 양성 과정 45일차

서명원·2024년 2월 14일

1. 좋아요 기능에 대한 과제 수행 및 코드 비교

내코드

강사님 코드와의 차이점

강사님은 reactionPoint라는 하나의 테이블로 처리하셨다.
강사님 코드에는 relTypeCode(관련 데이터의 타입 코드), regDate, updateDate, point가 테이블에 포함됬다.
regDate는 있는 편이 나중에 유지보수를 할때 편할 것이다..
relTypeCode역시 확장성을 고려할 때 있는 편이 좋다.(댓글 좋아요 기능 등)
또한 point를 통해 하나의 테이블로 좋아요와 싫어요를 관리하고 있는데, (1, 0, -1)
상태는 좋아요, 아무것도 아닌 상태, 싫어요 셋중 하나이게 되므로, 이런식으로 코드를 짜면 row가 나뉘어지지 않고 깔끔하게 하나의 칼럼안에서 좋아요 싫어요 무상태를 표현할 수 있다.

내 코드

강사님 코드 차이점

강사님은 좋아요, 싫어요, 추천합 세가지 필드를 추가하여 사용하셨다.
추천합은 좋아요의 총 개수에서 싫어요의 총 개수를 뺀 합이다.

2. 좋아요 싫어요 추천합 과제 수행

챗GPT의 도움을 많이 받아 수행했다.
직접 해볼 때 Left Outer Join만 세번 사용하여, reactionPoint를 세번 연결해 주려고 했더니, 개수가 망가지는 현상이 있었다.
초기 시도

            SELECT A.*, M.nickname AS extra__writer,
            SUM(GoodReaction.point) AS extra__goodReactionPoint,
            SUM(BadReaction.point) AS extra__goodReactionPoint
            FROM article AS A
            INNER JOIN `member` AS M
              ON A.memberId = M.id
            LEFT OUTER JOIN reactionPoint GoodReaction
              ON A.id = GoodReaction.relId AND GoodReaction.relTypeCode='article' AND GoodReaction.point>0
            LEFT OUTER JOIN reactionPoint BadReaction
              ON A.id = BadReaction.relId AND BadReaction.relTypeCode='article' AND BadReaction.point<0
            GROUP BY A.id

gpt이용한 쿼리 수정

강사님은 COALESCE 대신 IFNULL을 CASE대신 IF를 사용하셨는데
이쪽이 더 깔끔해보인다. 괄호에 주의

3. COALESCE, NVL, IFNULL

COALESCE는 다양한 데이터베이스 시스템에서 작동하는 표준 SQL 함수인 반면, NVL은 Oracle에만 적용되고 IFNULL은 MySQL에만 적용된다.

4. 엔티티(entity)문자셋

2번의 내 코드나 강사님 코드를 <script>로 묶었을 때 에러가 났다.
원인은 쿼리문 중에 < 와 >가 있는데 xml형식이 경우 해당 기호들이 예약어 취급이 되서 그렇다.
예약어를 기존에 사용하던 의미 그대로 사용하기 위해 별도로 만든 문자셋을 엔티티(entity) 문자셋이라고한다.

5. update join

gtp답변--
SQL에서 "업데이트 조인"은 일반적으로 다른 테이블과의 조인 조건에 따라 테이블에서 업데이트 작업을 수행하는 것을 의미합니다. 이 작업을 사용하면 다른 테이블의 데이터를 사용하여 한 테이블의 행을 업데이트할 수 있습니다.

업데이트 조인의 작동 방식에 대한 기본 설명은 다음과 같습니다.
업데이트 및 조인할 테이블 지정: UPDATE 문에서 함께 업데이트하고 조인하려는 테이블을 지정하는 것부터 시작합니다.

조인 조건 정의: 다음으로 테이블의 행을 일치시키는 방법을 지정하는 조인 조건을 정의합니다. 여기에는 일반적으로 일치하는 행을 결정하기 위해 비교해야 하는 각 테이블의 열을 지정하는 작업이 포함됩니다.

업데이트 값 설정: 그런 다음 대상 테이블에서 업데이트할 새 값을 지정합니다. 이러한 값은 조인된 테이블의 열, 상수 또는 두 테이블의 열과 관련된 표현식에서 나올 수 있습니다.
UPDATE 문 실행: 마지막으로 지정된 조인 조건 및 업데이트 값을 기반으로 업데이트 작업을 수행하는 UPDATE 문을 실행합니다.
업데이트 조인의 일반적인 예는 다음과 같습니다.

UPDATE employees AS e
JOIN salaries AS s ON e.employee_id = s.employee_id
SET s.salary = s.salary * 1.1
WHERE e.department = 'Engineering';

강사님 update join 코드

# update join -> 기존 게시물의 good,bad RP 값을 RP 테이블에서 가져온 데이터로 채운다
UPDATE article AS A
INNER JOIN (
    SELECT RP.relTypeCode,RP.relId,
    SUM(IF(RP.point > 0, RP.point, 0)) AS goodReactionPoint,
    SUM(IF(RP.point < 0, RP.point * -1, 0)) AS badReactionPoint
    FROM reactionPoint AS RP
    GROUP BY RP.relTypeCode, RP.relId
) AS RP_SUM
ON A.id = RP_SUM.relId
SET A.goodReactionPoint = RP_SUM.goodReactionPoint,
A.badReactionPoint = RP_SUM.badReactionPoint;
profile
백엔드 취업을 꿈꾸는 일본어 전공자

0개의 댓글