์ „์ฒด

๋ฒ„์ „Spring Boot 3AWS SDK for java v2firebase-admin 6.5.00. ๋„์ž… ๋ฐฐ๊ฒฝ๊ธฐ์กด ๊ตฌ์กฐ๊ธฐ์กด์—๋Š” ํ‘ธ์‹œ ์•Œ๋ฆผ ์š”์ฒญ์— ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ๋‚ด์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Firebase๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋ช…, 10๋งŒ๋ช…, 100๋งŒ๋ช…์ด ๋œ๋‹ค๋ฉด... ๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์ผ๊ด„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ผ๊ด„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Firebase์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณด์ž.  ๋จผ์ € ํ•œ๊บผ๋ฒˆ์— ๋ณด๋‚ด๋Š” sendAll์€ Deprecate๋˜์—ˆ๊ณ , ๋Œ€์‹  sendEach๋ฅผ ์จ์•ผํ•œ๋‹ค.  sendEach()๋Š” ๊ฐ ํ† ํฐ๋ณ„ ์—ฌ๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ ๋ฉ”์„ธ์ง€๋งˆ๋‹ค ๋ณ„๋„์˜ HTTP ์š”์ฒญ์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. 10๋งŒ๊ฐœ์˜ ์š”์ฒญ์ด๋ฉด 10๋งŒ๊ฐœ์˜ HTTP ์š”์ฒญ์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‹ฌ์ง€์–ด, mes..
ยท CS
0. ๋””์ž์ธ ํŒจํ„ด์ด๋ž€?ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์„ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ๊ด€๊ณ„ ๋“ค์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜์˜ ๊ทœ์•ฝ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ๋†“์€ ๊ฒƒ   1. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด Singleton Patternํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๊ฐ€์ง€๋Š” ํŒจํ„ด. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ชจ๋“ˆ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์ด ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์ด ์ค„์–ด๋“œ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜์กด์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. class Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singleton(); } pu..
Spring Security 6 ๋ฒ„์ „ ๊ธฐ์ค€ ์ตœ๊ทผ Spring Security ๋ฅผ ์ด์šฉํ•œ JWT๊ธฐ๋ฐ˜ ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋ฉด์„œ ์ธ์ฆ/์ธ๊ฐ€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๋‹ค๋ค„๋ณด์•˜๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆํฌ์™€ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋งŽ์ด ๋ณด์•˜์ง€๋งŒ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ๋ชจ๋‘ ๋‹ฌ๋ž๋‹ค. ๊ทธ๋ž˜์„œ Spring Security ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ๊ทธ ์ค‘ ์ธ๊ฐ€(Authorization) ๋ฐฉ๋ฒ•์„ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ค„๋ณผ ๊ฒƒ์ด๋‹ค. 1. AuthUser์ด ํด๋ž˜์Šค๋Š” ์„œ๋น„์Šค๋‹จ์—์„œ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž์˜ uniqueํ•œ ์‹๋ณ„์ž๋“ค์„ ์ •๋ณด๋ฅผ ๋„ฃ์–ด ์ „๋‹ฌ๋˜๋Š” ์ž„์‹œ ๊ฐ์ฒด๋กœ,ํ˜„์žฌ ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด์•„ ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋‹ค. @Getter@AllArgsConstructorpublic class AuthUser { private final Long id; ..
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() ๋ฉ”์„œ๋“œ๋ฅผ..
ddonghyeo
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)