1๏ธ. ํ๋ก์ ํธ ์๊ฐ
2๏ธ. ์ฃผ์ ๊ธฐ๋ฅ
3๏ธ. ์๋น์ค ์ํคํ
์ณ
4. ERD
5. ๊ธฐ์ ์คํ
6. ํธ๋ฌ๋ธ ์ํ
7. ๊นํ๋ธ
8. ํ์์ ๋ณด
๐๏ธ ์์ด๋น์ค๋น ์น์๋น์ค๋ฅผ ํด๋ก๋ํ ํ๋ก์ ํธ ์ ๋๋ค!
๐ ํ ๋
ธ์
๋ณด๋ฌ๊ฐ๊ธฐ
๐ธ ์์ฐ ์์ ๋ณด๋ฌ๊ฐ๊ธฐ
- Spring Security, JWT๋ฅผ ์ด์ฉํ ํ์๊ฐ์ /๋ก๊ทธ์ธ
- ์ด๋ฉ์ผ ์ธ์ฆ์ ํตํ ๋ก๊ทธ์ธ ๊ตฌํ
- AWS S3๋ฅผ ์ด์ฉํ ๋ค์ค ์ด๋ฏธ์ง ์ ๋ก๋
- JPA Pageable์ ์ด์ฉํ ํ์ด์ง ๋ฌดํ ์คํฌ๋กค
- ํ์ ๋ณ, ๊ฐ๊ฒฉ๋ณ ํํฐ๋ง ๊ธฐ๋ฅ
- ํค์๋ ๊ฒ์ ๊ธฐ๋ฅ
- ์์ ์ข์์ ๊ธฐ๋ฅ
- swagger ์ ์ฉ
- ๋ค์ค ์ด๋ฏธ์ง ์ ๋ก๋ CRUD(์กฐํ ์ ์ด๋ฏธ์ง preview)
- React , javascript
- Redux
- Redux Toolkit
- mui , styled-components
- axios
- Spring boot
- Spring Security, JWT
- Spring Data JPA
- AWS EC2
- AWS S3
- AWS RDS(MySQL)
- Swagger
- Git, Github
@Enablejpaauditing
๊ฒ์๊ธ์ ์์ ํ ๋, CreatedAt/ModifiedAt ๊ฐ์ด null๋ก ๋ฐํ๋๋ ๋ฌธ์ ๋ฐ์.
@Enablejpaauditing ์ด๋ ธํ ์ด์ ์ถ๊ฐํ์ฌ ํด๊ฒฐ.
@EnableJpaAuditing
@SpringBootApplication
public class HanghaebnbApplication {
public static void main(String[] args) {
SpringApplication.run(HanghaebnbApplication.class, args);
}
}
ํํฐ๋ง + ํ์ด์ง (with Spring Data JPA)
ํ์ด์ง๊ณผ ์นดํ ๊ณ ๋ฆฌ๋ณ/๊ฐ๊ฒฉ๋ณ ์กฐํ๋ฅผ ํ ๋ฒ์ ํ๋ ค๋ค๋ณด๋ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ ธ์ Spring Data JPA์ Query Method๋ง์ผ๋ก๋ ์กฐํ๊ฐ ์ด๋ ค์ด ์ํฉ. @Query ์ด๋ ธํ ์ด์ ๊ณผ native query๋ฅผ ์ด์ฉํ์ฌ ํด๊ฒฐํ๋ ค ํ์์ผ๋ native query์ ํ์ด์ง์ ํจ๊ป ์ฌ์ฉํ๊ธฐ๊ฐ ๊น๋ค๋ก์ ์.
countQuery๋ฅผ ์ด์ฉํ์ฌ query๋ฌธ์ ์์ฑํ๊ณ , @Param ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ํด๊ฒฐ.
@Query(countQuery = "select count(*) from room r where (r.price between :minPrice and :maxPrice) and r.type = :type", nativeQuery = true)
Page<Room> findByPriceBetweenAndType(@Param("minPrice") int minPrice,
@Param("maxPrice") int maxPrice,
@Param("type") String type,
Pageable pageable);
๋ฐ์ดํฐ ์ ๋ฌ ์ ํ์ ์ง์
String type์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์์ฌ ๋ ๊ณต๋ฐฑ๋ฌธ์๊ฐ ์์ด๋ ์๋ฌ๊ฐ ๋ฐ์. ํฌ์คํธ๋งจ์์ body - text๋ก ๋๊ณ {}์์ด ๊ทธ๋ฅ String ์ผ์ด์ผ ํจ. ์ฌํ๊น์ง๋ ์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ ์ ํ๋์ง ์๊ฐํด๋ณด๋ ์ฌํ๊น์ง๋ dto๋ก ๋ฐ์์์.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ค๋ฆญ์ค๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ๋ค๊ฐ, ํต์ผ์ฑ์ํด dto๋ก responsebody๋ก jsonํ์์ผ๋ก ๋ฐ์์ค๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ.
if-else์ try-catch
if-else๋ฌธ ๋ด๋ถ throw โ ํน์ ์กฐ๊ฑด์์๋ง ๋์ ธ์ง๋ exception.
try-catch๋ฌธ์ผ๋ก ๋ณ๊ฒฝ.
catch์ try์ฝ๋์์ ์ด๋ค exception์ด ํฐ์ง์ง ์๊ณ ์์ผ๋ ๊ทธ๊ฒ ๋ง๊ฒ ์์ฑํด์ฃผ๋ฉด ๋จ.
? โ ์ง๊ธ์ IOException์ด๋ ์ง์ ๋ง๋ CustomException ๋๊ฐ๋ก catch๋ฅผ ํ๊ณ ์์ง๋ง ์๋ฌ๊ฐ ๋์ฑ ๋ง์์ง๋ฉด ๊ณ์ ํด์ catch๋ฌธ์ ์ถ๊ฐํด์ ํด๋นํ๋ ์๋ฌ๋ฅผ ์ก์์ผํ๋?
! โ ์๋ฐ๊ฐ ๊ธฐ๋ณธ ์ ๊ณตํ๋ Exception์ค ํด๋น exception์ด ์์๋ฐ๋ ์์ ์์ ์์ exception์ด ์กด์ฌํจ. ์ด๊ธฐ์๋ ์ ์ ํ exception์ catch๋ฌธ์ผ๋ก ์ฌ์ฉํ์ฌ ์ก์ผ๋ฉด ๋์ ๋ฒ์์ catch๋ก ํธ๋ค๋ง ํ ์ ์์ผ๋ฉฐ ์ด ๋ฒ์๋ ์ต์ ํ ๊ณผ์ ์์ ์ค์ฌ๋๊ฐ๋ฉด ๋จ.
- Frontend : https://github.com/hanghaebnb/FE
- Backend : https://github.com/hanghaebnb/BE
์ด๋ฆ | ์ฃผํน๊ธฐ | ๊นํ๋ธ ์ฃผ์ |
---|---|---|
ํฉ๋ฏธ๊ฒฝ | BE | https://github.com/beautifulseoul |
์์์ | BE | https://github.com/eunsol-an |
์ฐจ์ด์ง | BE | https://github.com/leejincha/ |
๊น์ฌ์ | BE | https://github.com/code0613 |
์ด๋ฏผ๊ท | FE | https://github.com/GosuEE |
๋ ธํ์น | FE | https://github.com/rlaqndlf1 |