π° λ°μλ―Έ @miyad927 |
π§Ά λ°μΈμ° @yeon7485 |
β½ μκ·νΈ @Ahngyuho |
π€ͺ μ€μΉμ¬ @dhtmdwo |
π’ μ μΉνΈ @seungho99 |
π μ²νν @taehoon0518 |
μ΅κ·Ό μλΉμλ€μ κ³ λ¬Όκ° μλμλ λΆκ΅¬νκ³ μ λͺ μ€ν μ °νλ€μ΄ μ΄μνλ λ§μ§μ κΈ°κΊΌμ΄ μ°Ύμκ°κ³ μλ€. μ΄λ λ―Έμμ λν κ΄μ¬μ΄ λμμ§κ³ , νΉλ³ν κ²½νμ μν΄ λΉμ©μ μλΌμ§ μμΌλ €λ μλΉ μ±ν₯μ λ°μν κ²°κ³Όμ΄λ€.
νΉν λ°©μ‘ νλ‘κ·Έλ¨ 'νλ°± μ리μ¬βμ μΈκΈ°κ° μ΄λ¬ν νΈλ λμ λμ± λΆμ μ§νΌλ©°, μ λͺ λ§μ§μ λν μμλ₯Ό νμΈ΅ λμ΄κ³ μλ€. κ·Έλ¬λ μ΄λ¬ν λ§μ§μ μκ° μ νμ μ΄κΈ° λλ¬Έμ μμ½ κ²½μμ΄ μΉμ΄ν μν©μ΄λ€.
Eatzzyμ μ£Όλ³ μ λͺ λ§μ§κ³Ό μμμ μ μμ½ν μ μλ μλΉμ€λ₯Ό μ 곡νλ©°, μμ½μ μ€ν¨ν κ³ κ°λ€μ μν΄ ν΄λΉ λ§μ§μ λ Ένμ°κ° λ΄κΈ΄ λ°ν€νΈλ₯Ό μ§μΌλ‘ λ°°λ¬νλ μλΉμ€λ₯Ό μΆκ°λ‘ μ 곡νλ€.
λν, μ§μμ νΈμνκ² λ§μ§ μμμ μ¦κΈ°κ³ μΆμ κ³ κ°μ΄λ κ±°λ¦¬κ° λ©μ΄ μ§μ λ°©λ¬Έμ΄ μ΄λ €μ΄ κ³ κ°λ€μ λ°ν€νΈ ꡬ맀λ₯Ό ν΅ν΄ μλΉ λ°©λ¬Έ μ¬λΆμ κ΄κ³μμ΄ λ§μ§μ μ리 κ²½νμ κ°νΈνκ² μ§μμλ λλ μ μλ€.
ν΄λ¬μ€ν° λ°©μμ μ¬μ©ν μ΄μ
βοΈ λ°μ΄ν° μΌκ΄μ± μ μ§
ν΄λ¬μ€ν°λ λ
Έλ κ° λ°μ΄ν° λκΈ°νλ₯Ό ν΅ν΄ νμ μΌκ΄λ λ°μ΄ν°λ₯Ό μ μ§νλ€.
μ΄λ‘ μΈν΄ νΉμ μλ²κ° μ₯μ λ‘ μΈν΄ λ€μ΄λλλΌλ, λλ¨Έμ§ λ
Έλλ€μ΄ μ μμ μΌλ‘ λμνλ©° μλΉμ€μ μ°μμ±μ 보μ₯νκ³ , λ°μ΄ν° μμ€μ΄λ λΆμΌμΉ λ¬Έμ λ₯Ό μ΅μννλ€.
βοΈ λΆν λΆμ°
μ λͺ λ§μ§ μμ½ λ± μ€μκ° νΈλν½μ΄ κΈμ¦νλ μν©μλ μ¬λ¬ λ Έλλ‘ λΆμ° μ²λ¦¬νμ¬ μ±λ₯μ΄ μ ννλ κ²μ λ°©μ§νκ³ , μμ μ μΈ μλ΅ μλλ₯Ό μ μ§ν μ μλ€.
βοΈ μ°κΈ° μμ μ κ°ν ꡬ쑰
μλΉμ€ νΉμ± μ μλΉ μμ½, μν ꡬ맀, 리뷰 μμ± λ± λ°μ΄ν° μ°κΈ° μμ μ΄ λ§μ νκ²½μ΄κΈ° λλ¬Έμ, λ€μμ λ Έλκ° λ³λ ¬λ‘ μμ μ μ²λ¦¬νλ―λ‘ λμ μ°κΈ° μ±λ₯μ μ 곡νλ€.
βοΈ κ³ κ°μ©μ±
νΉμ λ
Έλμ μ₯μ κ° λ°μνλλΌλ, HAProxyκ° μ μμ μΈ λ
Έλλ‘ νΈλν½μ λΆλ°°νμ¬ μλΉμ€ μ€λ¨ μμ΄ μμ€ν
μ μ§μμ μΌλ‘ λμν μ μλ€.
μ€μκ° μμ½μ΄λ μν ꡬ맀 κ°μ μ€μν μλΉμ€μλ μμ μ μΈ μ΄μμ΄ κ°λ₯νλ€.
βοΈ νμ₯μ±
ν΄λ¬μ€ν°μ μλ‘μ΄ λ Έλλ₯Ό μΆκ°νμ¬ μ½κ² νμ₯ν μ μμ΄, νΈλν½μ΄ μ¦κ°ν λ μ μ°νκ² λμ²κ° κ°λ₯νλ€.
μ₯μ 볡ꡬ μλ리μ€
βοΈ 1λ μ₯μ λ°μ μ
- HAProxyκ° μ₯μ λ Έλλ₯Ό κ°μ§νκ³ ν΄λΉ λ Έλλ‘μ νΈλν½μ μλμΌλ‘ μ°¨λ¨
- ν΄λΌμ΄μΈνΈλ λλ¨Έμ§ λ λμ λ Έλλ₯Ό ν΅ν΄ μ μμ μΈ μλΉμ€ μ΄μ© κ°λ₯
- μ₯μ κ° ν΄κ²°λλ©΄ DB μλ²λ₯Ό μ¬μμνκ³ ν΄λ¬μ€ν°λ‘ λ€μ μ°κ²°
- ν΄λ¬μ€ν° λ΄ λ€λ₯Έ λ Έλμμ μ₯μ λ Έλλ‘ λ°μ΄ν°λ₯Ό μλ λκΈ°ννμ¬ μ΅μ μνλ‘ λ³΅κ΅¬
- 볡ꡬ μλ£ ν HAProxyκ° νΈλν½μ λ€μ λΆλ°°νλλ‘ μ€μ
βοΈ 2λ μ₯μ λ°μ μ
- HAProxyκ° μ μμ μΌλ‘ λμνλ 1λμ λ Έλλ‘ νΈλν½ μ§μ€
- μ₯μ κ° ν΄κ²°λλ©΄ 1λμ© μλ²λ₯Ό μ¬μμνκ³ ν΄λ¬μ€ν°λ‘ λ€μ μ°κ²°
- 볡ꡬλ λ Έλλ₯Ό ν΄λ¬μ€ν°λ‘ λ€μ μ°κ²°νμ¬ λ°μ΄ν°λ₯Ό λκΈ°ν
βοΈ 3λ μ₯μ μλ°©
- μ κΈ°μ μΌλ‘ λ°μ΄ν° λ°±μ
- 보쑰 DB ν΄λ¬μ€ν°λ₯Ό ꡬμΆνμ¬ λ°μ΄ν° μμ€μ λλΉ
- μ¬ν΄ λ°μ μ 보쑰 ν΄λ¬μ€ν°λ₯Ό μ¦μ νμ±ννμ¬ μλΉμ€ μ€λ¨ λ°©μ§
μν
κΈ°μ‘΄ sqlμ μΈκΈ° μλ κ°κ²μ μ 보λ₯Ό λΉΌμ€κΈ° μν΄μλ λ€μ― κ°μ ν μ΄λΈμ JOIN ν΄μΌνλ€.
νμ§λ§ κ·Έλ¬μ λ μ±λ₯μ μΈ λΆλΆμμ κ²°ν¨μ΄ λ§μκ³ ν΄λΉ μ 보λ₯Ό λΉ λ₯΄κ² λ°μμ€κΈ° μν΄ ν μ΄λΈμ νλ μΆκ°ν΄ μ 보λ₯Ό μ μ₯νλ€.
μμ μ 쿼리
SELECT stores.idx, store_images.image_path, stores.name, stores_category.name,
ROUND(AVG(store_reviews.star_point), 1) AS average_star_point,
COUNT(store_reviews.idx) AS count_reviews,
stores.address, COUNT(likes.idx) AS count_likes
FROM stores
JOIN stores_category ON stores_category.idx = stores.category_id
JOIN store_images ON store_images.store_id = stores.idx
JOIN store_reviews ON store_reviews.store_id = stores.idx
JOIN likes ON stores.idx = likes.store_id
GROUP BY stores.idx
ORDER BY count_likes DESC
LIMIT 10;
μμ ν 쿼리
SELECT
store_id, image_path, store_name,
category_name, average_star_point,
count_reviews, count_likes,
address, allowed
FROM stores_summary
WHERE allowed = 'Yes'
ORDER BY count_likes DESC
LIMIT 10;
μλ‘ λμ ν ν μ΄λΈ
CREATE TABLE stores_summary (
store_id INT PRIMARY KEY,
image_path VARCHAR(255),
store_name VARCHAR(255),
category_name VARCHAR(255),
average_star_point DECIMAL(3, 1),
count_reviews INT,
count_likes INT,
address VARCHAR(255),
allowed ENUM ('Yes', 'No', 'Waiting')
);