๊ฐ๋ฐ ๊ธฐ๋ก
๊ฐ์ํ์ฌ ์ ํฌ Subport์์๋ ๊ตฌ๋ ๊ฒฐ์ ์ผ์ด ๋ค๊ฐ์ค๋ฉด ์ด๋ฉ์ผ๋ก ์๋ฆผ์ ๋ฐ์กํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์๋ฆผ ์ค์ ์ ON/OFF๊ฐ ๊ฐ๋ฅํ๊ณ ๊ฒฐ์ 1์ผ ์ ๋๋ 3์ผ ์ ์ ์ ํํ ์ ์์ต๋๋ค. ๋ฉ์ผ ๋ฐ์ก ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.์ค์ผ์ค๋ฌ๋ฅผ ํตํด ๋งค์ผ ์ค์ 6์ 30๋ถ์ ์ค๋์ด ๋ฐ์ก์ผ์ธ ๊ตฌ๋ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ์ด๋ฉ์ผ ๋ฐ์ก์ฉ ๊ฐ์ฒด ์์ฑํด๋น ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ 7์์ ์ด๋ฉ์ผ ๋ฐ์ก@Transactional(readOnly = true)public void send(LocalDateTime now) { List emailNotifications = getEmailNotifications(now, SendingStatus.PENDING); log.info("์ด๋ฉ์ผ ๋ฐ์ก ์์ - ๋์ ๊ฑด์: {}", emailNo..
AWS์ ํ๋ฆฌํฐ์ด ์ ์ฑ ๋ณ๊ฒฝ์ง๋ 2025๋ 7์๋ถํฐ AWS์ ํ๋ฆฌํฐ์ด ์ ์ฑ ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ์ ํจ ๊ธฐ๊ฐ์ด 12๊ฐ์์์ 6๊ฐ์๋ก ์ค์ด๋ค๊ณ , ์๋น์ค๋ณ ๋ฌด๋ฃ ์ฌ์ฉ๋ ํ๋ ์ค์ ๋์ ํฌ๋ ๋ง ์ฌ์ฉ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ธ๋ฐ ์ด์ ํ๋ฆฌํฐ์ด ์ฒดํ์ด ๋ช ์๋น์ผ๋ก ์ ์ฉ๋์ด ๋์ผ ๋ช ์๋ก ์ฌ๋ฌ ๊ณ์ ์ ๋ง๋ค์ด๋ ์ด๋ฏธ ํ๋ฆฌํฐ์ด๋ฅผ ์ฒดํํ๋ค๋ฉด ์ถ๊ฐ๋ก ์งํํ ์ ์์ต๋๋ค.์ ๋ ๊ทธ์ ๊น์ง๋ ๊ณ์ ์ ๊ณ์ ๋ฆฌํํ๋ฉฐ ๋๊น์๋ AWS ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์์๋๋ฐ, ์ด์ ์ ๋ช ์๋ก๋ ๋ ์ด์ ํ๋ฆฌํฐ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ง์ฝ ๋์์ ์ฐพ๋๋ผ๋ ์ต๋ 6๊ฐ์, ํ ํฐ ์์ง ์๋์ ๋ฐ๋ผ ๊ทธ๋ณด๋ค ์งง์์ง ์ ์์ด ์๋น์ค ์ด์์ฉ์ผ๋ก๋ ์ ํฉํ์ง ์๋ค๊ณ ํ๋จํ์ต๋๋ค. ๊ทธ๋ผ ์ด์ ์ ์น๊ตฌ๋ฅผ ์ฐพ์ ๋์ค ์๊ฐ์ ๋๋ค. ๋ง์นจ..
๊ฐ์์ง๊ธ๊น์ง ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํด ์์ต๋๋ค. ๊ฐ์ฅ ์ฒ์ ์ ํ ์ํคํ ์ฒ์๊ณ , ์ต์ํ๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ฝ๊ฒ ์ ํํด ์์ต๋๋ค. ํ์ง๋ง ์๊ฐ์ด ์ง๋ ์๋ก ๋ ์ด์ด๋ ์ํคํ ์ฒ์ ๋ํ ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค. ํจํค์ง ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ค์ด์ค์ง ์์๊ณ , ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ ๋๋ง๋ค ์ด๋์ ์์น์์ผ์ผ ํ ์ง ๊ณ ๋ฏผํ๋ ์๊ฐ๋ ๋ง์์ก์ต๋๋ค. ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋์์ต๋๋ค.์ด๋ฐ ๊ฒฝํ์ด ์์ด๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ๋ค๋ฅธ ์ํคํ ์ฒ์ ๊ด์ฌ์ด ์๊ฒผ์ต๋๋ค. ํด๋ฆฐ ์ํคํ ์ฒ์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ, ์ด์ ๋ถํฐ ๋ง์ด ๋ค์ด๋ดค์ง๋ง, ๋น์์๋ ํฌ๊ฒ ์๋ฟ์ง ์์๊ณ , ์ดํด ์์ด ์ ์ฉํ๋ ค ํ๋ ์ด๋ ต๊ฒ๋ง ๋๊ปด์ ธ ๋ฏธ๋ค๋์์ต๋๋ค. ํ์ง๋ง ์์ ์ธ๊ธํ ๋ฌธ์ ๋ค์ด ๊ณ์๋๋ฉด์ ์ด์ ๋ ์ ๋๋ก ์ดํดํ๊ณ ์ ์ฉํด ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต..
๊ฐ์๊ฒ์๊ธ ์ข์์ ๊ธฐ๋ฅ์ ์ ์ ๊ฐ ์ข์์ ์์ฒญ์ ๋ณด๋ด๋ฉด PostLike ์ํฐํฐ๋ฅผ ์์ฑ ๋ฐ ์ ์ฅํ๊ณ , ๋์์ ํด๋น ๊ฒ์๊ธ์ ์ข์์ ์๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ก์ง์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.๊ทธ๋ฐ๋ฐ ์ฌ๋ฌ ์ ์ ๊ฐ ๋์ผํ ๊ฒ์๊ธ์ ๋์์ ์ข์์ ์์ฒญ์ ํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ๊ฐ ๋ฝ ๊ฒฝํฉ์ผ๋ก ์ธํ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ต๋๋ค.(์ด ๊ธ์ MySQL InnoDB ์์ง์ ๋ฝ ๋ฉ์ปค๋์ฆ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค.) ๋ฌธ์ ์์ธ@Transactionalpublic void likePost(Long postId, Long userId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); ..
๊ฐ์ํ์ฌ ์ ํฌ ์๋น์ค์์๋ ์นด์นด์ค ๋ก๊ทธ์ธ ์, ๋๋ค์์ ํ์ ํญ๋ชฉ, ํ๋กํ ์ฌ์ง์ ์ ํ ํญ๋ชฉ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ก๊ทธ์์ ํ ๋ค์ ๋ก๊ทธ์ธ์ ์งํํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ํ๋กํ ์ฌ์ง์ด ํ์ ํญ๋ชฉ์ผ๋ก ๋ฐ๋์ด ์ฌ์ฉ์์๊ฒ ๊ฐ์ ๋ก ์ ํํ๋๋ก ์๊ตฌ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ OAuth2 ๋ก๊ทธ์ธ ์ค์ ํ์ผ(.yml)์ scope ์ต์ ์ค์ ๋๋ฌธ์ด์๋๋ฐ, ์ฒ์์๋ scope ํญ๋ชฉ์ด ๋จ์ํ ์ฌ์ฉ์ ์ ๋ณด ์์ฒญ์ ์ํด ํ์ํ ์ค์ ์ผ๋ก๋ง ์๊ฐํ์ฌ ์๋ชป ์ฌ์ฉํ์ต๋๋ค.ํ์ง๋ง ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํด ๋ณด๋ฉด, scope ์ต์ ์ ์ถ๊ฐ ํญ๋ชฉ ๋์ ๋ฐ๊ธฐ ์์ฒญ ์ ์ฌ์ฉํ๋ค๊ณ ๋์ด์์ต๋๋ค. ์ฆ, ํด๋น ์ต์ ์ ์ค์ ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ๋ก๊ทธ์ธํ ๋๋ง๋ค ์ฌ์ฉ์ ๋์๋ฅผ ๋ค์ ์ ๋ํ๋ ๊ฒ์ด์์ต๋๋ค. ์๋ชป๋ ์ค์ scope: - prof..
๊ฐ์ํ๋ก์ ํธ ๋น๋ ์, ์ง์์ ์ผ๋ก ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฉ์์ง์ ์์ธ์ ํ์ธํ ๊ฒฐ๊ณผ, ๊ธฐ์กด์ ์ฌ์ฉํ๋ org.springframework.cloud:spring-cloud-starter-aws ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ธํด 2021๋ 2์ ์ดํ Maven Repository์์ ๋ ์ด์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์์ ํ์ง ์๋๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค.build.gradle์์๋ ์๋์ ๊ฐ์ด ์์กด์ฑ์ ์ทจ์ฝ์ ์ด ์๋ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ๊ฒฝํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด org.springframework.cloud:spring-cloud-starter-aws ๋์ io.awspring.cloud:spring-cloud-aws-starter-s3:3.0.0 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. impleme..