0. Application Events์คํ๋ง์์ ์ง์ํ๋ ์ด๋ฒคํธ๋ก, ๋ด๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค. Spring Event๋ฅผ ํตํด ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ(Event-Driven Architecture)๋ฅผ ๊ตฌํํ ์ ์๋ค. 1. ์ฌ์ฉ ์ด์ ํ ์์๋ฅผ ์์๋ณด์.@Servicepublic class UserService { private final UserRepository userRepository; private final EmailService emailService; @Transactional public void registerUser(User user) { userRepository.save(user); //์ฌ์ฉ์ ์ ์ฅ emailService..
์ ์ฒด ๊ธ
๊ฐ๋ฐ ์ง์์ ์๊ณ ๊บผ๋ด ์ฐ๋ ๋ธ๋ก๊ทธ์ ๋๋ค.๋ฐฐ๊ฒฝ ํ์์๋ JPA ๊ด๋ จ ๋ฉ์๋๋ค์ ์ธ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ์๋ค.User user = userRepository.findById(id).orElseThrow(...); orElseThrow() ๋ Optional ํด๋์ค์ ๋ฉ์๋๋ก, ๋จ์ํ๊ฒ ๊ฐ์ด null์ด๋ผ๋ฉด Exception์ ๋์ ธ์ฃผ๊ณ , null์ด ์๋๋ผ๋ฉด ๋ฐํํ๋ ํจ์์ด๋ค. ์ด๋ ๋จ์ํ ๊ฒฐ๊ณผ๊ฐ null์์ ์ฒ๋ฆฌํ ์ ๋ฐ์ ์์๋ค. ์ง๊ธ๊น์ง JPA๋ฉ์๋์์ Exception์ด ๋์ ธ์ง๋ ์ผ์ ์์์ง๋ง,JPA ๋๋ Hibernate์์ ๋์ ธ์ง๋ Exception ๋ํ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํ๊ฒ ๋ค๊ณ ์์ฌํด ๋ณด์๋ค. Repository Exception ์์ฃผ ์ฌ์ฉํ๋ findById์์๋ ๋ง์ฝ id๊ฐ null์ผ ๊ฒฝ์ฐ IllegalArgumentExcept..
JPA์ save(), saveAll(), saveAllAndFlush() ๋ฉ์๋๋ค์ ์์์ฑ ์ปจํ
์คํธ ๊ฐ๋
๊ณผ ํจ๊ป ํจ์จ๊ณผ ์ฑ๋ฅ์ ๋ํ ์ฐจ์ด๋ฅผ ์์๋ณด๊ฒ ๋ค.1. save() ๋จ๊ฑด ์ํฐํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ค. @Transactional@Overridepublic S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { entityManager.persist(entity); return entity; } else { return entityManager.merge(entity); }} ๋จผ์ isNew() ๋ฉ์๋๋ฅผ..
๋ CORS ๋์ผ?1. ๋ฌธ์ ๋๋ Spring Cloud ๊ธฐ๋ฐ API ์๋ฒ๋ฅผ ๋ง๋ค๊ณ , Swagger๋ฅผ ์ด์ฉํ์ฌ API ๋ช
์ธ์๋ฅผ ๋ฐฐํฌํ๋ค. ๊ทธ๋ฐ๋ฐ.. ์ค์จ๊ฑฐ์์ ์์ธ์ง 403 Forbidden์ ๋ฐ์๋ค. Gateway์ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด์๋๋,PRE Filter๊น์ง ํต๊ณผํ์ง๋ง, POST Filter๋ก ์จ Response๊ฐ 403 FORBIDDEN ์ด์๋ค. ์ฌ๊ธฐ์ ๋ ๋ฌธ์ ๋ postman์ ์ ์ ์๋ํ๋ ๊ฒ์ด์๋ค... 2. ํด๊ฒฐ ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด CORS ์ค๋ฅ์๋ค. postman์ผ๋ก๋ ๋๋ ์์ฒญ์ด๋ฉด CORS๋ฌธ์ ๋ผ๊ณ ์ง์์ ํ์ง๋ง, ์๋๋ผ๋ฉด ๊ฐ๋ฐ์ ๋ชจ๋์ ์ด๋ ๊ฒ ๋์์ผํ๊ธฐ ๋๋ฌธ์ CORS ์ค๋ฅ๋ ์๋ ์ค ์์๋ค. https://velog.io/@mingeloper/%ED%94%84%EB%A1%9C%E..
์ฐธ๊ณ Amazon Linux 2023 Red Hat Linux ๊ธฐ์ค.0. ์์Spring Cloud ๊ธฐ๋ฐ ํ๋ก์ ํธ์ CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์๋ค. ๊ธฐ์กด CI/CD์ ๋ค๋ฅธ ์ ์ ์ฌ๋ฌ ์๋น์ค๋ฅผ ํ๊บผ๋ฒ์ ๋ฐฐํฌํด์ผ๋๋ค๋ ๊ฒ์ด์๋ค. ๋ณธ ํ๋ก์ ํธ์ ์๋น์ค๋ ์๋ ์ธ๊ฐ์ง์๋ค.- noti-service- weather-service- user-service ๋๋จธ์ง ํ๊ฒฝ์ ์ํ ์๋น์ค๋ค์ ๋ค์๊ณผ ๊ฐ์๋ค.- Eureka- api-Gateway- config-service- Kakfa & Zookeper ํด๋น ์๋ฒ๋ค ๋ชจ๋ ์ง์์ ์ธ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค. ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ ํ๋ค. - Eureka, config-service, kafka, zookeper ๋ค ๊ฐ์ง๋ ์๋น์ค ๋ก์ง์ด ์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์ปจํ
์ด๋ ์ต์ ํ๋ฅผ ..
์นด์นด์ค ๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑhttps://developers.kakao.com/docs/latest/ko/kakaologin/common๊ตฌํ ์ฝ๋https://github.com/DDonghyeo/kakao-login์ฐธ๊ณ ์ด ๊ธ์ ์ ์ฐจ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑํด ๋๊ฐ๋ ๊ณผ์ ์
๋๋ค. ์ ์ฒด ์ฝ๋๋ ๊นํ๋ธ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.ํ๋ก ํธ(ํด๋ผ์ด์ธํธ) ๋ถ๋ถ์ thymeleaf๋ก ๊ตฌํํ์์ต๋๋ค.Spring Boot 3.x.x ๋ฒ์ ๊ธฐ์ค์
๋๋ค. ๋จผ์ , ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฐฉ์์ ๋ํด ์ดํดํ๊ณ ์์ํด์ผ ํ๋ค.์๋์ฒ๋ผ ์ ๋ฆฌํ๊ณ ์งํํ๊ฒ ๋ค.์นด์นด์ค ๋ก๊ทธ์ธ ์์ฒญ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์์ฒญํ๋ค. ๋ฏธ๋ฆฌ ์ค์ ํด๋ client_id (REST API KEY) + redirect URI ๊ฐ ์ค์ ๋ ๋งํฌ๋ก ๋ค์ด๊ฐ๋ค.์ฌ์ฉ์๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ์นด์นด์ค ๋ก๊ทธ์ธ ์ฐฝ..