LOG
- 잠깐 잠실에 가서 코드 리팩토링을 하는 시간을 가졌다. 생각보다 뼈대 코드를 리팩토링할 부분이 많아서, 오늘은 도메인과 엔티티를 분리하고 Repository를 만들었다.
배운 것
SimpleJdbcInsert
에서usingGeneratedKeyColumns
에는 primary key를 적어주어야 한다. 다른 키를 함께 적게 되면 다른 키도 primary key로 인식되는 듯 하다. (composite key? 로 인식하는 듯)- termius 좋다. 코드 템플릿도 적어두고 재사용 가능하고, 서버와 쉽게 연결 가능한 것도 좋다. 앞으로도 애용할 듯. 특히 ip 주소 까먹는 경우가 많은데 그래서 그런지 템플릿 기능이 매우 유용하다...
- mysql 서버와 production 서버가 연결되지 않았던 이유: 외부에서는 root 권한으로 접근할 수가 없다. 따라서 production 서버를 user로 등록해서 외부에서도 연결할 수 있도록 user 테이블에 추가해주어야 한다. + 우리는 vero, hubk, dazzle 데이터베이스가 다 다른데, 각각의 유저에 데이터베이스에 접근할 수 있는 권한도 추가해주어야 했다.
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `wooteco`@`ip주소` |
| GRANT ALL PRIVILEGES ON `vero`.* TO `wooteco`@`ip주소` |
+--------------------------------------------------------------+
- 진짜 이상하게도 아래 sql은 bad sql이라는 예외가 발생한다.
SELECT ci.id, ci.member_id, ci.quantity,
m.email, m.point,
p.id, p.name, p.price, p.image_url
FROM cart_item ci
INNER JOIN member m ON ci.member_id = m.id
INNER JOIN product p ON ci.product_id = p.id
WHERE ci.member_id = ?
이걸 해결하려면 무조건 AS로 column 이름을 지정해줘야 한다.
SELECT ci.id AS cart_id,
ci.member_id AS cart_member_id,
ci.quantity AS cart_quantity,
m.email AS member_email,
m.point AS member_point,
p.id AS product_id,
p.name AS product_name,
p.price AS product_price,
p.image_url AS product_image_url
FROM cart_item ci
INNER JOIN member m ON ci.member_id = m.id
INNER JOIN product p ON ci.product_id = p.id
WHERE ci.member_id = ?
궁금한 것
- 왜 저게 bad sql 일까
느낀 것
- 오늘도 기분이 좋다~ 비도오고 그래서~ 비오는 날이 안 좋기만 한 건 아닌 것 같다. 끈적거리고 습하고 우산들고 있는 팔은 아프지만 그래도 비오는 날만의 장점이 있다. 장점은 구체적으로 칭찬 안 하고 싶으니까 여기까지~