๐ฅ๏ธ ๋ฐฑ์๋/SpringBoot22 ์ด์ 1 2 3 4 ๋ค์ [KakaoPay] ์นด์นด์คํ์ด ๋จ๊ฑด ๊ฒฐ์ ์ปจํธ๋กค๋ฌ ์์ ์๋ด๊ธ ๊ฒฐ์ ํ๋ฆ์ ๋ณด๊ธฐ ์ํด debug ๋ชจ๋์ ๋ก๊ทธ ์ถ๋ ฅ์ด ๋ง์ต๋๋ค ๊ตฌํ ์ด๊ธฐ์ ์ฝ๋๋ผ ๋ถ์กฑํ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ์ํดํด์ฃผ์ธ์! ํ๋ฆ์ ์ดํดํ๊ธฐ ์ํด ๋ฉ์๋ ์์์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ๋๋ก ์ฝ๋๋ฅผ ๋จ์ํํจ ์นด์นด์คํ์ด ๊ฒฐ์ ์ค๋น ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํ REST ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ๊ตฌํ @RestController public class KakaoPayController @PostMapping("/api/pay/kakaopay") public ResponseEntity processKakaoPayRequest(@RequestBody OrderInfoDTO orderInfoDTO) @Transactional @PostMapping("/api/pay/kakaopay") public ResponseEntity p.. 2024. 3. 29. [KakaoPay] ์นด์นด์คํ์ด ๋จ๊ฑด ๊ฒฐ์ ๊ณผ์ ์ค ๊ฒช์ ์ค๋ฅ ๋ชจ์ ์ค๋ฅ์ ์์ธ๋ค (๊ตฌ) ์นด์นด์คํ์ด API ์์ 2024์ ์๋ก ๋ฐ๋๋ฉด์ ํ์์์ด์ง ํ๋๊ฐ ๋๋ฌธ์ Jackson ๋ชจ๋ url ์ค์ key๊ฐ์ dev์ฉ์ผ๋ก ์์จ์ ํ๋ ๋ถ์ผ์น ์ธ์ฆ ํค ๋ณ๊ฒฝ๋จ (๊ตฌ) headers.set("Authorization", "KakaoAK " + kakaoPayConfig.getSecretKeyDev()); (์ ) headers.set("Authorization", "SECRET_KEY " + kakaoPayConfig.getSecretKeyDev()); ์นด์นด์ค๊ฐ ์ ๊ณตํ๋ ๊ฒฐ์ ์ค๋ฅ์ฝ๋ ์ ๋ฆฌ ์์ ํ์ผ ๋ด๊ฐ ๊ฒช์ ์ค๋ฅ ๋ฉ์ธ์ง ์ ๋ฆฌ ์ค๋ฅ ๋ฉ์ธ์ง Create breakpoint ์์ธ (์ถ์ธก) ํด๊ฒฐ๋ฐฉ๋ฒ org.springframework.web.client.HttpClientErrorExc.. 2024. 3. 29. [KakaoPay] ์นด์นด์คํ์ด ๋จ๊ฑด ๊ฒฐ์ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐฉ๋ฒ (2024 ์ ๊ท API ๋ฒ์ ) ์ฌ์ ์ค๋น ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก https://developers.kakaopay.com/applications ์นด์นด์คํ์ด | ๊ฐ๋ฐ์์ผํฐ ์๋ก์ด ๊ธฐํ์ ๊ฐ์น๋ฅผ ํจ๊ป ๋ง๋ค์ด๋ด์ developers.kakaopay.com ํค ๋ฐ๊ธ๋ฐ๊ธฐ ๊ด๋ จ ๋ฌธ์ ํฌ๋ผ https://developers.kakaopay.com/forum/ ํฌ๋ผ ์นด์นด์คํ์ด ๊ฐ๋ฐ์์ผํฐ ์ด์ฉ ๊ด๋ จ ์ง๋ฌธ ๋ฐ ๋ต๋ณ์ ๊ณต์ ํ๋ ์ปค๋ฎค๋ํฐ์ ๋๋ค. developers.kakaopay.com 2024 ์นด์นด์คํ์ด API ์ธ์ฆ์ ์ฌ์ฉํ ๊ฐ ์ธ์ฆ ์คํค๋ง (๊ตฌ) "KakaoAK " -> (์ ) " SECRET_KEY " Secret Key๊ฐ์ ํ ์คํธ์ ๊ฒฝ์ฐ Secret Key(dev) ์ฌ์ฉํ๊ธฐ ์นด์นด์คํ์ด ๊ฒฐ์ ๊ตฌํ ๊ณผ์ OrderInfoDTO : ์ฌ์ฉ์ ์ฃผ๋ฌธ ์ ๋ณด Kakao.. 2024. 3. 29. [์ธ์ฆ๋ฒํธ] sms ๋ฌธ์ ๋ฐ์ก ๊ตฌํ - ์ฟจ์์ค์ ์์ค (2024) ์ผ๊ฒฝํ ๋ง์ง๋ง API ๊ณผ์ ์ค ํ๋์๋ ๋ฌธ์๋ก ํ์๊ฐ์ ์ธ์ฆ๋ฒํธ ๋ฐ์กํ๊ธฐ ์ฌ๋ฌ ๋ฌธ์๋ฉ์ธ์ง ๋ฐ์ก ์ฌ์ดํธ์ค์ ๋ฌด๋ฃ 300ํฌ์ธํธ๋ฅผ ์ฃผ๋ ์ฟจ์์ค์ ์์ค๋ฅผ ์ ํํจ https://coolsms.co.kr/ ๊ตฌ๊ธ๋ง์ผ๋ก ์ฐพ์ ์ฝ๋๋ค์ ํ์ฌ ์ฟจ์์ค์ ์์ค์์ ์ฌ๋ฆฐ ๊น ์ฝ๋์ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ด์ ์ฟจ์์ค์ ์์ค์ ๊นํ๋ธ๋ฅผ ์ฐธ๊ณ ํ ์ฝ๋๋ก ๊ธ์ ์์ฑํจ ์ฟจ์์ค์ ์์ค ํ์๊ฐ์ ๋ฐ ๋ณธ์ธ์ธ์ฆ ํ๊ธฐ ๋ณธ์ธ์ธ์ฆ์ 300ํฌ์ธํธ ๋ฌด๋ฃ ์ฆ์ ์นด์นด์คํก ์๋ฆผ๋ ๊ฐ๋ฅํ๋ค๊ณ ํจ API Key์ API ๋น๋ฐ๋ฒํธ ํ์ธํ๊ธฐ ๋์๋ณด๋ - ๊ฐ๋ฐ ํญ์์ SDK ์ git repository ํ์ธํ๊ธฐ net.nurigo sdk 4.3.0 ์คํ๋ง ์ฝ๋ private final DefaultMessageService messageService; /** * ๋จ์ผ ๋ฉ์์ง ๋ฐ.. 2024. 2. 29. [Querydsl] ๋์ ์ฟผ๋ฆฌ - Where์์ ๋ค์ค ํ๋ผ๋ฏธํฐ ์ฌ์ฉํ๊ธฐ ๋์ ์ฟผ๋ฆฌ - Where์์ ๋ค์ค ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ์กฐ๋ฆฝ์ ํ ์ ์์, ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ์ฟผ๋ฆฌ์์ ์ฌํ์ฉ ๊ฐ๋ฅํจ ์ฟผ๋ฆฌ ์์ฒด์ ๊ฐ๋ ์ฑ์ด ๋์์ง null ์ฒดํฌ๋ ์ฃผ์ํด์ ์ฒ๋ฆฌํด์ผํจ @Test public void ๋์ ์ฟผ๋ฆฌ_WhereParam() throws Exception { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember2(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1); } private List searchMember2(String usernameCond, Integer ageCond) { return queryFacto.. 2024. 1. 8. [Querydsl] SpringDataJPA + Querydsl + ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ์์ฑ public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); } SpringDataJPA๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋ ์ธ์ ํ์ํ ๋ฉ์๋๊ฐ ์์ ๋ ์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ๊ตฌํ public class MemberRepositoryImpl implements MemberRepositoryCustom { private final JPAQueryFactory queryFactory; public MemberRepositoryImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override //ํ์๋ช , ํ๋ช , ๋์ด(ag.. 2024. 1. 7. [Querydsl] DTO ์กฐํ ๋ฐฉ๋ฒ ์์ JPA์์ DTO ์กฐํ List result = em.createQuery( "select new study.querydsl.dto.MemberDto(m.username, m.age) " + "from Member m", MemberDto.class) .getResultList(); new ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผํจ DTO์ package์ด๋ฆ์ ๋ค ์ ์ด์ค์ผํจ ์์ฑ์ ๋ฐฉ์๋ง ์ง์ํจ Querydsl ๋น ์์ฑ(Bean population) ๊ฒฐ๊ณผ๋ฅผ DTO ๋ฐํํ ๋ ์ฌ์ฉํจ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ง์ํจ ํ๋กํผํฐ ์ ๊ทผ ํ๋ ์ง์ ์ ๊ทผ ์์ฑ์ ์ฌ์ฉ [ํ๋กํผํฐ ์ ๊ทผ - Setter] List result = queryFactory .select(Projections.bean(MemberDto.class, member.user.. 2024. 1. 7. ์ด์ 1 2 3 4 ๋ค์