๋ฒ์ Spring Boot 3AWS SDK for java v2firebase-admin 6.5.00. ๋์
๋ฐฐ๊ฒฝ๊ธฐ์กด ๊ตฌ์กฐ๊ธฐ์กด์๋ ํธ์ ์๋ฆผ ์์ฒญ์ ๋ฐ๋ผ์ ์๋ฒ ๋ด์์ ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๊ณ Firebase๋ก ๋ฉ์ธ์ง๋ฅผ ์ ์กํ๋ค. ํ์ง๋ง, ์ฌ๊ธฐ์ ํธ์ ์๋ฆผ์ ๋ณด๋ผ ์ฌ์ฉ์๊ฐ ๋ง๋ช
, 10๋ง๋ช
, 100๋ง๋ช
์ด ๋๋ค๋ฉด... ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ ์๋ฆผ์ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ์ํ Firebase์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด์. ๋จผ์ ํ๊บผ๋ฒ์ ๋ณด๋ด๋ sendAll์ Deprecate๋์๊ณ , ๋์ sendEach๋ฅผ ์จ์ผํ๋ค. sendEach()๋ ๊ฐ ํ ํฐ๋ณ ์ฌ๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง, ๊ฐ ๋ฉ์ธ์ง๋ง๋ค ๋ณ๋์ HTTP ์์ฒญ์ ๋ง๋ค์ด๋ธ๋ค. 10๋ง๊ฐ์ ์์ฒญ์ด๋ฉด 10๋ง๊ฐ์ HTTP ์์ฒญ์ด ์์ฑ๋๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ง์ด, mes..
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() ๋ฉ์๋๋ฅผ..