๋ณดํต ๋ฆฌ์กํธ์์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ useEffect ์์์ ๊ฐ์ ธ์ค์ง๋ง Next.js ์์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋ค.1. getStaticProps- Static Generation์ผ๋ก ๋น๋ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ๋ค. (๋ฏธ๋ฆฌ ๋ง๋ค์ด์ค)- getStaticProps ํจ์๋ฅผ async๋ก export ํ๋ฉด, getStaticProps์์ ๋ฆฌํด๋๋ props๋ฅผ ๊ฐ์ง๊ณ ํ์ด์ง๋ฅผ pre-render ํ๋ค.- ๋น๋ํ ๋ ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๋ค. getStaticProps๋ฅผ ์ฌ์ฉํด์ผ ํ ๋- ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์ ์์ฒญ๋ณด๋ค ๋จผ์ ๋น๋ ์๊ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋- ๋ฐ์ดํฐ๋ฅผ Headless CMS์์ ๊ฐ์ ธ์ฌ ๋- ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ์บ์ ํ ์ ์์ ๋ (์ฌ์ฉ์๋ณ X)- ํ์ด์ง๋ ๋ฏธ๋ฆฌ ๋ ๋๋ง ..
๐ป ๊ฐ๋ฐ
1. ์ค์ ํ๊ธฐbuild.gradleimplementation 'org.springframework.boot:spring-boot-starter-actuator'implementation 'io.micrometer:micrometer-registry-prometheus' application.ymlmanagement: endpoint: health: show-components: always # show-details: always endpoints: web: exposure: include: "*" info: java: enabled: true os: enabled: true env: enabled: tr..
users:100:profile: ์ฌ์ฉ์๋ค ์ค์์ PK๊ฐ 100์ธ ์ฌ์ฉ์ ํ๋กํproducts:123:details: ์ํ๋ค ์ค์์ PK๊ฐ 123์ธ ์ํ์ ์ธ๋ถ์ฌํญ
ํ์ฌ ์งํ ์ค์ธ ํ๋ก์ ํธ๊ฐ GitHub ์๋น์ค์ ๋งค์ฐ ๋ง์ด ์์กดํ๋ค.GitHub OAuth ๋ก๊ทธ์ธ์ ์งํํ๊ณ ๋ฐ๊ธ๋๋ GitHub ์๋น์ค์ Access Token๊ณผ Refresh Token ์ด ํ์์ ์ผ๋ก ํ์ํ๋ค.๊ทผ๋ฐ gho_ ํ์์ Access Token ๋ง ๋ด๋ ค์ฃผ๊ณ Refresh Token ์ ๋ด๋ ค์ฃผ์ง ์์๋ค..์ด๋ ๊ฒ ๋๋ฉด Access Token ์ด ๋ง๋ฃ๋ ๋๋ง๋ค redirect ํด์ ์๋ก์ด Access Token์ ๊ฐฑ์ ํด์ค์ผ ํ๋๋ฐ.. ๋๋ฌด ๋ถํธํ๋ค.๊ฑฐ์ ์๋ก ๋ก๊ทธ์ธ์ ๋ค์ ํด์ผ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ค. gho_ ํ์์ผ๋ก๋ง ๋ด๋ ค์คฌ๋ ์ด์ ๊ฐ OAuth Apps๋ก ๋ง๋ค์๊ธฐ ๋๋ฌธ์ด๋ค..GitHub Apps๋ก ๋ง๋ค๊ณ Refresh Token์ ๋ด๋ ค์ค ๊ฑฐ๋? ์ ์ฒดํฌํด ์ฃผ๋ฉด ghu_ ํ์์ผ๋ก Access To..
AWS S3์ ์ด๋ฏธ์ง ์
๋ก๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์, ์น๊ตฌ์ S3๋ฅผ ํจ๊ป ์ฐ๊ธฐ ์ํด IAM ๊ณ์ ์ ์์ฑํด S3 ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ค. ํ์ํ ์ถ๊ฐ ๊ถํ์ด ์๋ค๋ฉด IAM ์ ์ฑ
์ ์ค์ ํด ์ฃผ๋ฉด ๋~1. AWS์์ IAM์ ๊ฒ์ํ๋ค. 2. ์ข์ธก์ "์ฌ์ฉ์" ๋ฉ๋ด ํด๋ฆญ ํ "์ฌ์ฉ์ ์์ฑ" ์ฃผํฉ์ ๋ฒํผ ํด๋ฆญ 3. ์ฌ์ง์ฒ๋ผ ์ฒดํฌํ ํ ๊ณ์ ์์ฑํ๊ธฐ 4. ์ฝ์ ๋ก๊ทธ์ธ URL๋ก ์ ์ํ๊ณ ๋ก๊ทธ์ธํ๊ธฐ
dev ํ๊ฒฝ์ด ์๋๋ฉด h2 console์ ์ฌ์ฉํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ dev ํ๊ฒฝ์์๋ง ์ฌ์ฉํ ์ ์๊ฒ๋ ๊ตฌ์ฑํ๋ค. spring: h2: console: enabled: true@Bean@ConditionalOnProperty(name = "spring.h2.console.enabled", havingValue = "true")public WebSecurityCustomizer configureH2ConsoleEnable() { return web -> web.ignoring() .requestMatchers(PathRequest.toH2Console());}
์๋น์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์๋ฐ์ ์๋ค.์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ง์ EC2์ ์ ์ํด์ ๋ก๊ทธ๋ฅผ ํ์ธํ๊ณ .. ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๋ค.์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด์ํ๊ณ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด Slack์ ์๋ฆผ์ด ์ ์ก๋๊ฒ๋ ๊ตฌํํด ๋ดค๋ค.1. Slack Webhooks ์ถ๊ฐํ๊ธฐ์๋ฆผ์ด ์ ์ก๋ ์ฑ๋ ์ฐํด๋ฆญ -> ์ฑ๋ ์ธ๋ถ์ ๋ณด ๋ณด๊ธฐ -> ํตํฉ -> ์ฑ ์ถ๊ฐ -> "Incoming Webhooks" ์ถ๊ฐ 2. ๊ตฌ์ฑ ์ค์ ํด์ฃผ๊ธฐ 3. ์์กด์ฑ ์ถ๊ฐํ๊ธฐimplementation 'net.gpedro.integrations.slack:slack-webhook:1.4.0' 4. Slack API ์ฌ์ฉ ์ค์ ํ๊ธฐapplication.ymlslack: webhook: url: URL ์ ์ด์ฃผ๊ธฐ SlackLogAppenderConfig.java@Con..
@EnableBatchProcessing -> DefaultBatchConfiguration- ๋ฐฐ์น ์์
๊ตฌ์ฑ ๋ฐ ์คํ์ ํ์ํ ์ ํธ๋ฆฌํฐ ๋น์ ์๋์ผ๋ก ์ค์ - Spring Batch 5.0- ๋ ์ค ํ๋๋ง ์ฌ์ฉ- ์ ์ธ์ vs ํ๋ก๊ทธ๋๋ฐ- @EnableBatchProcessing ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ Batch ์ํคํ
์ฒ Chunk-oriented & AbstractPagingItemReader- ํ์ด์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ abstract ํด๋์ค- AbstractPagingItemReader๋ฅผ ์์ํ๋ ํด๋์ค > JdbcPagingItemReader > JpaPagingItemReader ClassifierComposite-ItemWriter- ๋ถ๊ธฐ์ ๋ฐ๋ผ ์ ์ ํ ItemWriter์๊ฒ ์ ๋ฌ- th..