์ „์ฒด

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() ๋ฉ”์„œ๋“œ๋ฅผ..
ยท Error
๋˜ 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..
ยท DevOps
์ฐธ๊ณ 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 ๊ฐ€ ์„ค์ •๋œ ๋งํฌ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ฐฝ..
ddonghyeo
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)