[TIL/React] 2023/08/23
src/pages/EventPage.js π‘ > src/data/EventList.js π‘ > src/images/index.js π‘ > νμ¬ λͺ¨μ΅ π‘ μ λ‘λμ€.. > νκ³ π’ 'μ΄μλ μ΄νλ μλλ€'λΌλ ννμ κ³Όλνκ°μ κ³Όμνκ°λ₯Ό λ§μΌλ €λ μλλ‘
src/pages/EventPage.js π‘
import React, { useState } from "react";
import styled from "styled-components";
import { events } from "../data/EventList";
const CardContainer = styled.div`
display: flex;
overflow-x: scroll;
width: 100%;
height: 200px;
cursor: grab;
background-color: #424242;
`;
const Card = styled.div`
height: 100%;
margin: 30px;
display: flex;
justify-content: center;
align-items: center;
font-size: 20px;
transition: transform 0.3s ease;
&:hover {
transform: scale(1.1);
cursor: pointer;
}
`;
const EventCardWrapper = styled.div``;
const EventCardImg = styled.img`
width: 400px;
height: 400px;
`;
const EventPage = () => {
const [isMousePressed, setIsMousePressed] = useState(false);
const [containerScrollLeft, setContainerScrollLeft] = useState(0);
const [startMouseX, setStartMouseX] = useState(0);
const handleMousePress = (e) => {
setIsMousePressed(true);
setStartMouseX(e.pageX - e.currentTarget.offsetLeft);
setContainerScrollLeft(e.currentTarget.scrollLeft);
console.log(e.currentTarget.scrollLeft);
};
const handleMouseMove = (e) => {
if (!isMousePressed) return;
const currentMouseX = e.pageX - e.currentTarget.offsetLeft;
e.currentTarget.scrollLeft =
containerScrollLeft - (currentMouseX - startMouseX);
};
const handleMouseRelease = () => setIsMousePressed(false);
return (
<CardContainer
style={{ height: "1000px" }}
onMouseDown={handleMousePress}
onMouseMove={handleMouseMove}
onMouseUp={handleMouseRelease}
onMouseLeave={handleMouseRelease}
>
{events?.map((event) => (
<Card key={event.id}>
<EventCardWrapper>
<EventCardImg src={event.image} alt={event.title} />
<h3
style={{
color: "rgb(255, 255, 255)",
fontWeight: "bolder",
textAlign: "center",
}}
>
{event.title}
</h3>
<p
style={{
color: "rgb(155, 155, 155)",
fontWeight: "bolder",
textAlign: "center",
}}
>
{event.subtitle}
</p>
</EventCardWrapper>
</Card>
))}
</CardContainer>
);
};
export default EventPage;
src/data/EventList.js π‘
import { eventImg } from "../images";
export const events = [
{
id: "1",
image: eventImg.eventImg1,
title: "2023 μ¬λ¦ μ λ¬ΌμΈνΈ",
subtitle:
"μΌλ¦¬λ²λ κΈ°κ°, μ΅λ 7% ν μΈλ κ°κ²©μΌλ‘ μ΄μ μ ν κ°μ¬μ λ§μμ μ νμΈμ!",
},
{
id: "2",
image: eventImg.eventImg2,
title: "νΈμ§ν λ°λ² ν νν° μ΄λ²€νΈ",
subtitle: "μ΅λ 15,000μ ν μΈλ°κ³ νΈμ§ν λ°λ² ν νν°λ₯Ό μ€λΉνμΈμ!",
},
{
id: "3",
image: eventImg.eventImg3,
title: "μΉκ΅¬ μ΄λ μ΄λ²€νΈ",
subtitle: "μ¦κ±°μ΄ μΌμμ λ³ν 'μ΄μ μ 'μ μμ€ν μ¬λμκ² μλ €μ£ΌμΈμ!",
},
{
id: "4",
image: eventImg.eventImg4,
title: "μ± μ€μΉ μ΄λ²€νΈ",
subtitle: "μ μ‘κ° μ± μ€μΉνκ³ μ΄μ μ ν μΌμμ λλ €λ³΄μΈμ!",
},
{
id: "5",
image: eventImg.eventImg5,
title: "μν 리뷰 νν",
subtitle: "λ§μ‘±νμ λ§μμ λ΄μ μν 리뷰λ₯Ό μμ±ν΄μ£ΌμΈμ.",
},
{
id: "6",
image: eventImg.eventImg6,
title: "μ μ νλ λ°°μ‘ νν",
subtitle: "ν λ² λ°°μ‘λΉλ‘ 4ν 무λ£λ°°μ‘",
},
{
id: "7",
image: eventImg.eventImg1,
title: "2023 μ¬λ¦ μ λ¬ΌμΈνΈ",
subtitle:
"μΌλ¦¬λ²λ κΈ°κ°, μ΅λ 7% ν μΈλ κ°κ²©μΌλ‘ μ΄μ μ ν κ°μ¬μ λ§μμ μ νμΈμ!",
},
{
id: "8",
image: eventImg.eventImg2,
title: "νΈμ§ν λ°λ² ν νν° μ΄λ²€νΈ",
subtitle: "μ΅λ 15,000μ ν μΈλ°κ³ νΈμ§ν λ°λ² ν νν°λ₯Ό μ€λΉνμΈμ!",
},
{
id: "9",
image: eventImg.eventImg3,
title: "μΉκ΅¬ μ΄λ μ΄λ²€νΈ",
subtitle: "μ¦κ±°μ΄ μΌμμ λ³ν 'μ΄μ μ 'μ μμ€ν μ¬λμκ² μλ €μ£ΌμΈμ!",
},
{
id: "10",
image: eventImg.eventImg4,
title: "μ± μ€μΉ μ΄λ²€νΈ",
subtitle: "μ μ‘κ° μ± μ€μΉνκ³ μ΄μ μ ν μΌμμ λλ €λ³΄μΈμ!",
},
{
id: "11",
image: eventImg.eventImg5,
title: "μν 리뷰 νν",
subtitle: "λ§μ‘±νμ λ§μμ λ΄μ μν 리뷰λ₯Ό μμ±ν΄μ£ΌμΈμ.",
},
{
id: "12",
image: eventImg.eventImg6,
title: "μ μ νλ λ°°μ‘ νν",
subtitle: "ν λ² λ°°μ‘λΉλ‘ 4ν 무λ£λ°°μ‘",
},
];
src/images/index.js π‘
import logo from "./logo.jpeg";
import backgroundImg from "./background.png";
import termsImg from "./terms.jpeg";
import porkImg from "./porkbelly-fresh-list.png";
import chickenImg from "./chickef-cut-list.png";
import porkcutletImg from "./porkcutlet-sirloin-list.png";
import eggImg from "./egg-fresh-list.png";
import milkImg from "./milk-fresh-list.png";
import hanuroundImg from "./baby-hanuround-bmix-list.png";
import carthegardenImg from "./carthegarden.jpeg";
import eventImg1 from "./eventImg1.png";
import eventImg2 from "./eventImg2.png";
import eventImg3 from "./eventImg3.png";
import eventImg4 from "./eventImg4.png";
import eventImg5 from "./eventImg5.png";
import eventImg6 from "./eventImg6.png";
const eventImg = {
eventImg1,
eventImg2,
eventImg3,
eventImg4,
eventImg5,
eventImg6,
};
export {
logo,
backgroundImg,
termsImg,
porkImg,
chickenImg,
porkcutletImg,
eggImg,
milkImg,
hanuroundImg,
carthegardenImg,
eventImg,
};νμ¬ λͺ¨μ΅ π‘

hoverλλ©΄ μ½κ° 컀μ§λ€.
νκ³ π’
'μ΄μλ μ΄νλ μλλ€'λΌλ ννμ κ³Όλνκ°μ κ³Όμνκ°λ₯Ό λ§μΌλ €λ μλλ‘ μμ£Ό μ¬μ©νλ€. 'μ΄μ μ λ¨μ΄λ€'μ΄λΌλ μ± μμλ ν΄λΉ ννμ΄, μ€μ μ무κ²λ λ§νμ§ μλ κ²½μ°κ° λλΆλΆμ΄λΌ, λ©μ©‘ν λ¬Έμ₯μ μν¬μ μΌλ‘ 무μλ―Έν λ¨μ΄λ€μ λ§λΆμ΄λ λ―Όλ§μ€λ¬μ΄ λ§μ₯λμ΄λΌκ³ μμ νλ€.
μ°λ¦¬λ 'μ΄μλ μ΄νλ μλλ€'λΌλ ννμ μ¬μ©ν λ, κ³Όλνκ°λκΈ° μ¬μ΄ λμμ κ°μΉλ₯Ό νΉμ κΈ°μ€μ μ κ³ μ νλ μν μ μ§μ€νλ€. λ°λ©΄ κ³Όμνκ°λλ λμμ μΉνΈνλ μν μ λ±νμνλ κ²½ν₯μ΄ μλ€.
무μλ―Έν λ§μ₯λκΉμ§λ μλλΌκ³ μκ°νλ€. μ€μ€λ‘μ λν(νΉμ 무μμΈκ°μ λν) νκ°κ° μΌλ°ν΄μ§ λ κ³Όμνκ°λ₯Ό λ§μμ€μΌλ‘μ¨ λ©νμ μ μ μ μΌλ‘ μ μ§ν΄ μ€λ€. λ΄ μκ° κ·Έ μ΄μλ μ΄νλ μλλ€.
More to read
Amazon VPC Architecture μ΄ν΄νκΈ°
μλ‘μ΄ νλ‘μ νΈλ₯Ό κΈ°ννλ©°, κ°λ°μμ 무μμ κ°μ₯ λ¨Όμ κ³ λ―Όν΄μΌ νλμ§ λ€μ λμλ³΄κ² λμμ΅λλ€.νλλ νλ‘ νΈμλκ° λͺ¨λ μ€κ³μ μΆλ°μ μ΄λΌκ³ λ―Ώμμ΅λλ€. μ μ κ° λ¬΄μμ λ³΄κ³ , μ΄λ€ νλ¦μμ 머무λ₯΄κ³ μ΄ννλμ§μ λν μ΄ν΄ μμ΄ μλΉμ€λ₯Ό λ§λ λ€λ 건 λΆκ°λ₯νλ€κ³ μκ°νκΈ°
'μμ¬μ΄νΈ'νλ‘ νΈμλ κ΄μ μΌλ‘ μκ³ λ¦¬μ¦ μ΄ν΄νκΈ°
μ€λλ§μ λ°©λ²λ‘ μ κ΄ν κΈμ μ°κ² λμμ΅λλ€. μ΅κ·Ό μν©μ μ΄λ μ΅λλ€. SSAFYμμλ ν루μ μμ²λ μμ μκ³ λ¦¬μ¦ λ¬Έμ λ€μ κ³Όμ λ‘ μννκ² λ©λλ€. κ·Έ κ³Όμ μμ, 'ꡬνλ ₯'μ΄ λ§€μ° λ¨μ΄μ§λ€λ μκ°μ΄ λ€μμ΅λλ€. μμ ν μ΄λ €μ΄ λ¬Έμ λΌλ©΄ 'μμ¬μ'μ΄λΌλ κ°μ μ‘°μ°¨ λλΌμ§
SubnetVPC μ€κ³μ μμ: IPμ Subnet
λ°λ³΅λλ λ£¨ν΄ μμμ μ»μ μμ κ°μ λ°ν μΌμ, μ΄μ λ κΈ°μ μ μ€ννΈλΌμ λνκΈ° μν κ°μΈ νλ‘μ νΈμ μ°©μνκ³ μ ν©λλ€.μ΄λ² νλ‘μ νΈμ λͺ©νλ λ¨μν ν¬νΈν΄λ¦¬μ€ ꡬμΆμ λμ΄, μ€μ μλΉμ€ μμ€μ λΈλ‘κ·Έ μμ€ν ꡬνκ³Ό λ€κ΅μ΄ μ²λ¦¬ μ μ© λ± μ€λ¬΄μ κ°κΉμ΄ μλμ ν λ¨κ³