์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ ์คํ๋ง์ application.properties ์ค์ (+ ddl ์ค์ , DB url/port) (2021.07.26)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. application.properties spring.jpa.hibernate.ddl-auto=update spring.jpa.generate-ddl=false spring.datasource.url=jdbc:mariadb//{PATH}/{DATABASE} spring.datasource.username={USERNAME} spring.datasource.driver-class-name=org.mariadb.jdbc.Driver jpa ddl ์ค์ ddl-auto update : ๊ธฐ์กด์ ์คํค๋ง๋ฅผ ์ ์งํ๋ฉฐ JPA์ ์ํด ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ถ..
๐ค Backend
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4ctN2%2FbtsFfvtFmQG%2FWDt4tfTKg9nbqOKnCqT3Bk%2Fimg.png)
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ [MySQL] DB Authentication ๋ฌธ์ | ERROR 1698 | Access denied for user 'root' (2021.07.26)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. MariaDB 10.0 ๋ฒ์ ๋ถํฐ๋ ๋ณด์ ๋ฐฉ์์ด 'Unix Socket' ๋ฐฉ์์ด ์ ์ฉ๋๋ค. mysql -u root -p password spring datasource ์ ์ ๋ฐ๋ผ์ ์ด ๋ ๊ฐ์ง๋ฅผ ์ํด์๋ plugin ์ ๋ฐ๊ฟ์ผํ๋ค. ๋ง์ฝ ์ด๊ธฐ ์ ์์ด๋ผ๋ฉด, ๋น๋ฐ๋ฒํธ๋ ์ค์ ํด์ค์ผํ๋ค. $ sudo mysql mysql> use mysql; mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; mysql> CREATE USER 'user'@'%' ..
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ ๋จ์ ํ
์คํธ์ ํตํฉ ํ
์คํธ (2023.03.13)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. ๋จ์ ํ
์คํธ vs ํตํฉ ํ
์คํธ ๋จ์ ํ
์คํธ(Unit Test)๋ ํ๋์ ๋ชจ๋์ ๊ธฐ์ค์ผ๋ก ๋
๋ฆฝ์ ์ผ๋ก ์งํ๋๋ ๊ฐ์ฅ ์์ ๋จ์์ ํ
์คํธ์ด๋ค. ์ฌ๊ธฐ์ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋ํ๋ ํ๋์ ๊ธฐ๋ฅ ๋๋ ๋ฉ์๋๋ก ์ดํดํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์น์์ ๋ก๊ทธ์ธ ๋ฉ์๋์ ๋ํ ๋
๋ฆฝ์ ์ธ ํ
์คํธ๊ฐ 1๊ฐ์ ๋จ์ํ
์คํธ๊ฐ ๋ ์ ์๋ค. ์ฆ, ๋จ์ ํ
์คํธ๋ “์ด๋ค ๊ธฐ๋ฅ์ด ์คํ๋๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค" ์ ๋๋ก ํ
์คํธ๋ฅผ ์งํํ๋ค. ํตํฉ ํ
์คํธ(Integration Test)๋ ๋ชจ๋์ ํตํฉํ๋ ๊ณผ์ ์์ ๋ชจ๋ ๊ฐ์ ํธํ์ฑ์ ํ์ธํ๊ธฐ ์ํด ์ํ๋๋ ํ
์คํธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ค๋ก ๊ตฌ์ฑ์ด ๋๊ณ , ๋ชจ๋๋ค๋ผ๋ฆฌ ์ํธ์์ฉํ๋ค..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEToAO%2FbtsFftvOAfW%2FHfHQxYGrzUKmk0Jp5kjpTK%2Fimg.jpg)
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ ์๋ํ๋ธ์ Jacoco๋ก ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ๊ธฐ (2023.09.07)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. โ๏ธ Setup EC2 ์๋ฒ์ SonarQube ์ค์น ๋ฐ ์ค์ 1. ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ๋ฅผ ์ํ Swap ์ค์ ํ์ผ ์์ฑ ๋ฐ ์ค์น touch ~/swapfile sudo fallocate -l 2G ~/swapfile sudo chmod 600 ~/swapfile sudo mkswap ~/swapfile sudo swapon ~/swapfile sudo yum install java-17-amazon-corretto-headless ์๋ ํ์ผ๋ค์ ์ด์ด์ ๊ฐ์ฅ ์๋์ ์ถ๊ฐ /etc/fstab ~/swapfile swap swap defaults 0 0 /etc/sysctl.conf vm.max..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOIQz5%2FbtsFiOZv4wZ%2F9u4IISqJS9bCYuZqOO4Q11%2Fimg.jpg)
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ Transaction ์ด๋? (2023.08.11)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. ์ ๋ ๋ Swagger์ ์๋ํ์ ๊ฐ๋จํ ์ด๋
ธํ
์ด์
์ ํตํด ๋น ๋ฅธ API ๋ฌธ์ ๋ฐฐํฌ๋ง ํด๋ดค์ต๋๋ค. ๋น ๋ฅด๊ฒ ์์
๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ ์์์ง๋ง, ๋ชจ๋ ์์ฒญ์ Postman์ผ๋ก ํ
์คํธํ๋ ๊ณผ์ ์์ ์ค์๊ฐ ์์ ์ ๋ฐ์ ์์๊ณ Swagger์ ์๋ ์์ฑ ๋ฌธ์๊ฐ ์น์ ํ ํธ์ ์๋๊ธฐ์ ์ฝ๋ ์ฌ๋๋ง๋ค ๋ค๋ฅด๊ฒ ์ดํด๋๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก ํธ์์ API๋ฅผ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์์ ์ค์๊ฐ ์์ฃผ ๋ฐ์ํ๊ฑฐ๋, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์๊ฒ ์ง์ ๋ฌผ์ด๋ณด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. API ๋ฌธ์๋ฅผ ์์ฑํ ์์๊ฐ ์ฌ๋ผ์ ธ๋ฒ๋ฆฌ๋ ์ผ์ด ๋ง์์ต๋๋ค… ๐ ์ด๋ฒ ๋ฆฌ๋ทฐ๋ฉ์ดํธ ํ๋ก์ ํธ์์๋ ์ ํ๋ ์๊ฐ ๋ด์ FE์ AI ๋ชจ๋๊ฐ ์ฌ์ฉํ ์๋ฒ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAPOww%2FbtsFgsiYsn8%2Fb9RxhvZJwyAuCvKh2RkZdk%2Fimg.jpg)
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ Swagger์์ MultipartFile๊ณผ DTO ํ ๋ฒ์ ๋ฐ๋ @RequestPart ์์ฒญ์ ์คํํ ์ ์๋๋ก ๋ง๋ค๊ธฐ (2023.08.29)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. ๋ฒ๊ฑฐ๋กญ๊ฒ ์์ฒญ์ ์์ฒญํ ํ์ ์์ด ํ๋์ ์์ฒญ์์ ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ํ๋ค๊ฒ ๊ตฌํํ๋๋, ํ๋ก ํธ์์ ์ฌ์ฉํ ๋ ์์ฒญ์ด ๋ฐ์ํ๊ณ Swagger์์ ์ ๋๋ก ๋์ํ์ง ์์๋ค. ๋ณธ ํฌ์คํ
์ ๋
ธ๋ ฅ์ด ํ๋์ง ์๋๋ก ๋ฌธ์ ๋ฅผ ํ๋์ฉ ๊ณ ์ณ๋๊ฐ ๊ธฐ๋ก๋ค์ด๋ค. 1. Request body์ Content-type์ด ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์ ์ํฉ MultipartFile์ DTO๋ฅผ ํ ๋ฒ์ ๋ฐ์ ์ ์๋ ์์ฒญ์ ๋ง๋ค๋, ๋ค๋ฅธ ์ฌํ ์์ฒญ๋ค์ฒ๋ผ @PostMapping์ URL๋ง ์ค์ ํ๋ฉด Swagger์ Request b..
์ด์ ๋
ธ์
๋ธ๋ก๊ทธ์ enum ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ (2022.02.20)๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. public enum Tier { BRONZE, // 0 SILVER, // 1 GOLD, // 2 DIAMOND // 3 } @Entity public class User { @Enumerated(EnumType.ORDINAL) // Default Setting private Tier tier; } enum์ ordinal ๊ฐ์ 0๋ถํฐ ์์ BRONZE : 0 SILVER : 1 ... Default Setting์ธ @Enumerated(EnumType.ORDINAL) ์ enum์ ordinal ๊ฐ์ DB์ ์ ์ฅ ⇒ Integer ํ๋์ฒ๋ผ ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ฉด ๋จ.
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU6bId%2FbtsFhUeFGd3%2F1xTHJyf3MIX21KmR5fCJSK%2Fimg.jpg)
์ด์ Velog์ ์ธ๋ถ ์๋น์ค ์์ฒญ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ฆฌ๋ทฐ ์
๋ก๋ ์์ฒญ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฐ๊ฒฐํฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํด๋ณด์. (2023.11.02) ๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. ๋๊ธฐ ๋ฆฌ๋ทฐ๋ ๋ณธ ํ๋ก์ ํธ์ ํต์ฌ์ผ๋ก์, ์ต๋ํ ๋ง์ ๋ฆฌ๋ทฐ๋ฅผ ์
๋ ฅ๋ฐ๊ณ ์ด๋ฅผ ๋ถ์ํด ๊ฐ์น์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ฆฌ๋ทฐ์ ์
๋ก๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ์งํ๋ฉ๋๋ค. AWS S3๋ฅผ ํตํ ์ฌ์ง ์
๋ก๋์ AI ๋ฆฌ๋ทฐ ๋ถ์ ๋ชจ๋ธ์ ํตํ ๋ฆฌ๋ทฐ ๋ถ์ ์์ฒญ์ด๋ผ๋ 2๊ฐ์ ์ธ๋ถ ์๋น์ค๋ฅผ ๊ฑฐ์น ํ ในใ
ฃ๋ทฐ ๋ฐ์ดํฐ๊ฐ DB์ ์ ์ฅ๋ฉ๋๋ค. ์ฆ, ๋๊ธฐ๋ก ์๋ํ๊ณ ํ๋์ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์ด๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ์
๋ก๋ํ ๋ ์ธ ๊ฐ์ง ๊ณผ์ ์ด ๋ชจ๋ ์๋ฃ๋๋ ๊ธด ์๊ฐ์ ๊ธฐ๋ค๋ ค์ผ ํ๊ณ ์ธ๋ถ ์๋น์ค ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ฆฌ๋ทฐ ์
๋ก๋๊ฐ ์คํจํ๋ ๊ฐ๊ฒฐํฉ ๊ตฌ์กฐ์ด๋ค. ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvO6Ii%2FbtsFg49Qbuy%2F4CIyP6ZAZkz1cYBcoDewK0%2Fimg.jpg)
์ด์ Velog์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํด๋ณด์ (2) : ์ธ๋ฑ์ค ํ๋ (2023.11.12) ๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. Github main repo / Github server repo ๋๊ธฐ 1ํธ์ ์นดํ
๊ณ ๋ฆฌ๋ณ ๋ฆฌ๋ทฐ ์กฐํ๋ฅผ ์์์ผ๋ก 500ms๊ฐ ๋์ด๊ฐ๋ ์์ฒญ๋ค์ ์์ฃผ๋ก Cardinality/Selectivity๋ฅผ ๊ณ ๋ คํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง 1ํธ๊น์ง๋ ์ง์ง ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋์๋ค. 2ํธ๋ถํฐ ์ฌ๊ธฐ์ด๋์ปดํผ๋ ๋ฒค์ฒ ํ๋ก์ ํธ์ธ๋งํผ ์ฌ๊ธฐ์ด๋ ํ๋ณด์๋ฃ์ ์๋ ๋ฐ์ดํฐ ๊ท๋ชจ์์ ์ฑ๋ฅ์ ์ธก์ ํด๋ณด๊ณ ํ์ํ๋ค๋ฉด ๊ฐ์ ๊น์ง ์งํํด๋ณด์. ๊ธฐ์กด ํ
์คํธ ๋ฐ์ดํฐ ์ค์ผ์ผ ์ฌํ์ํ: 30 (๊ฐ ์นดํ
๊ณ ๋ฆฌ 10๊ฐ์ฉ, ์์, ์๋น, ๋ ํฐ์นด) ์์ฝ: 540,000 (์นดํ
๊ณ ๋ฆฌ ๋ณ 180,000) - ์ฌํ์ํ ๋ง..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3KXL%2FbtsFfUNxtyp%2FqEniHJyVbfCf2EVOsyIXtk%2Fimg.jpg)
์ด์ Velog์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํด๋ณด์ (1) : ์ธ๋ฑ์ค ์ ์ฉ (2023.10.27) ๋ก๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์
๋ ๊ธ์
๋๋ค. Github main repo / Github server repo ๋๊ธฐ ์ง๋ ๋ฒ์ ๋ค์ํ JPA ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋นํจ์จ์ ์ผ๋ก ์์ฑ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํด ์ ์ฒด์ ์ธ ์๋ฒ ์ฑ๋ฅ์ด ๋ํญ ํฅ์๋์๋ค. ํ์ง๋ง ๋ฆฌ๋ทฐ ์กฐํ API์ ์ผ๋ถ ์์ฒญ์ ๊ฒฝ์ฐ ๋ํญ ํฅ์๋์์์๋ ๋ง์กฑ์ค๋ฌ์ด ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๊ฐ์ ๋๋ฌํ์ง ๋ชปํ๋ค. ๋ค์ํ ์ ๋ ฌ๊ณผ ํํฐ๋ง์ ์ง์ํ๋ ์กฐํ ์ฟผ๋ฆฌ์ธ๋งํผ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฑด์ , ์ ๋ ฌ ์ ์ฉํ๋๋ฐ ๋ง์ ๋น์ฉ์ด ๋ค๊ณ , ํนํ ๋ฆฌ๋ทฐ์ ๋ถ์ ๊ฒฐ๊ณผ ์ค '์ฒญ๊ฒฐ' ์์ฑ์ด ํฌํจ๋ ๋ฆฌ๋ทฐ๋ค์ด๋ ๋ฆฌ๋ทฐ์ ๋ถ์ ๊ฒฐ๊ณผ ์ค '์ฒญ๊ฒฐ' ์์ฑ์ '๋จผ์ง' ํค์๋๊ฐ ํฌํจ๋ ๋ฆฌ๋ทฐ๋ค๊ณผ ๊ฐ์ด review ํ
์ด๋ธ๊ณผ..