μν κ΄λ¦¬ μ¬μ΄νΈλ₯Ό ꡬν
1.
μν ν
μ΄λΈ μ μ
2.
Spring Boot REST API ꡬν
3.
React λ‘ μν λͺ©λ‘ νμ΄μ§ ꡬν
μν ν μ΄λΈ μ μ
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
`no` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'PK',
`id` VARCHAR(64) NOT NULL COMMENT 'UK',
`title` VARCHAR(100) NOT NULL COMMENT 'μνλͺ
',
`content` TEXT NULL COMMENT 'μ€λͺ
',
`likes` BIGINT NULL DEFAULT 0 COMMENT 'μ’μμ',
`img` TEXT NULL COMMENT 'μ΄λ―Έμ§κ²½λ‘',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'λ±λ‘μΌμ',
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'μμ μΌμ'
);
SQL
볡μ¬
Spring Boot REST API ꡬν
μμ² λ©μλ | μμ² κ²½λ‘ | νλͺ© | λΉκ³ |
GET | /products | μν λͺ©λ‘ | |
GET | /products/{id} | μν μ‘°ν | |
POST | /products | μν λ±λ‘ | |
PUT | /products | μν μμ | |
DELETE | /products/{id} | μν μμ |
β’
domain
β¦
Product.java
β’
Mapper
β¦
ProductMapper.xml
β¦
ProductMapper.java
β’
Service
β¦
ProductService.java
β¦
ProductServiceImpl.java
β’
React λ‘ μν λͺ©λ‘ νμ΄μ§ ꡬν
ν΄λΌμ΄μΈνΈμμ μλ²λ‘ λΉλκΈ° λ°μ΄ν° μμ²
const CardList = () => {
// β state μ μΈ
// π§ productList
βββ
// π λ°μ΄ν° μμ² ν¨μ
const getProductList = βββ
// β useEffect() ν
μ¬μ©
// "λ λλ§ μ νΈμΆ λλ ν¨μ"
// : ν¨μν μ»΄ν¬λνΈμμ λ§μ΄νΈ, μ
λ°μ΄νΈ, μΈλ§μ΄νΈ μλͺ
μ£ΌκΈ° μμ
μ
// μ²λ¦¬ν μ μλλ‘ ν΄μ£Όλ ν
useEffect(() => {
getProductList ();
}, []);
return (
<div>
<h1>μν λͺ©λ‘</h1>
<div style={{
display: "flex",
}}>
{
productList.map( (card, index) => {
return <Card key={card.no} card={ card } />
})
}
</div>
</div>
)
}
export default CardList
JavaScript
볡μ¬