์ ์ฒด ๊ธ199 [์ค๊ณ] Tag ํ ์ด๋ธ ๋ฆฌํฉํ ๋ง ๋ฐ Tag ๊ฒ์ ๋ฐฉ์ ํ์ฌ ์ํฉ ์๋น๋ถ๋ถ, ํ๋๋, ํฌํธํด๋ฆฌ์ค, ์์ดํ ์์ ํ๊ทธ๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก N:M ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ ์ค๊ฐํ ์ด๋ธ์ ๋์ด ํ๊ทธ ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ ์ ๋ ์ฃผ์ด์ง ํ๊ทธ๋ฟ๋ง ์๋๋ผ ์์ ์ด ์ง์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์๊ณ , ์ถ๊ฐํ ํ๊ทธ๋ก๋ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฌธ์ ์ ํ์ฌ MVP ๊ธฐ๋ฅ ERD๋ง ๊ทธ๋ ธ๋๋ฐ๋ ํ ์ด๋ธ์ด ๋ง์์ง๊ณ , ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ์ค๊ฐ ํ ์ด๋ธ๋ ๋ง์์ ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ์ 1. ์ค๊ฐ ํ ์ด๋ธ์ ํ๋๋ก ํตํฉํ๊ณ , boolean ๊ฐ์ ํตํด ํ๊ทธ ์ค๊ฐ ํ ์ด๋ธ์ ๊ด๋ฆฌ - table_id (long) - is_customer (bool) - is_planner (bool) - is_porfolio (bool) - is_item (bo.. 2023. 8. 13. [์ค๋ฅ] @AuthUser์์ User ๊ฐ์ฒด๋ฅผ ๋ฐ์์ค์ง ๋ชปํ๋ ์ค๋ฅ ๋ฌธ์ ์ํฉ UserPrincipal์ ์์๋ฐ์ @authUser ์ฌ์ฉ ์ ์๋ ์๋ฌ ๋ฐ์ EL1008E: Property or field 'users' cannot be found on object of type 'swmaestro.spaceodyssey.weddingmate.domain.oauth2.UserPrincipal' - maybe not public or not valid?" ๋ฐ์ ์์ธ UserPrincipal์์ User๊ฐ ์์ด์ ๋ฐ์ํ๋ ๋ฌธ์ ํ์ฌ ํ๋ก์ ํธ์์๋ UserPrincipal์์ UserDetails๋ฅผ ๋ฐ์์ ๊ตฌํํ ์ํ์ UserDetailsService์์ Returnํ๋ ๊ฐ์ฒด๋ UserDetails ํ์ ์ด์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๊ตฌํํ๋ User ํด๋์ค๋ฅผ ์์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก.. 2023. 8. 13. [์ค๋ฅ] ์ฟ ํค ํ์ ๋๋ฉ์ธ์ด ๋ฌ๋ผ ์ ๋ฌ๋์ง ์๋ ์ค๋ฅ ๋ฌธ์ ์ํฉ ํ์ ๋๋ฉ์ธ(api.weddingmate.co.kr)์์ ์์ ๋๋ฉ์ธ(weddingmate.co.kr)์ผ๋ก ์ฟ ํค๋ฅผ ๋ณด๋ด์ผ ํ๋ ์ํฉ ResponseCookie.from("refreshToken", refreshToken) .path("/") .domain("weddingmate.co.kr") .maxAge(TimeUnit.MILLISECONDS.toSeconds(refreshTokenValidationTime)) .secure(true) .sameSite("None") .httpOnly(true) .build(); ๋ฐ์ ์์ธ Redis์ ์ ์ฅ๋ refreshToken ๊ฐ(1)๊ณผ ์ฟ ํค์ ๋ด์์ ์ ๋ฌ๋๋ refreshToken ๊ฐ(2)์ด ๋ค๋ฆ ์ฟ ํค ์ ๋ฌ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ผ๋ก ํ์ publi.. 2023. 8. 13. [์ค๋ฅ] Transactional์ ๋ฒ์์์ ๋ฒ์ด๋ dirty checking์ด ๋์ง ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ์ํฉ plannerMapper ์์ ๋๋ฒ๊ทธ๋ฌธ๋ค์ ๋ชจ๋ ์ํ๋๋ pUsers.updateNickname()์ด ์คํ๋์ง ์์ ๋ํ insert query๊ฐ ๋๊ฐ๋ db์ ๋ฐ์๋์ง ์์ผ๋ฉฐ, plannerRepository.save()๊ฐ ์คํ๋์ง ์์ UserService @Transactional public void signupPlanner(Users users, PlannerSignupReqDto reqDto) { Users pUsers = findUserByEmail(users.getEmail()); pUsers.updateNickname(reqDto.getNickname()); Planner planner = plannerMapper.toEntity(pUsers, reqDto); plannerRe.. 2023. 8. 13. [์ง์] ๋ฉ์๋ ์ฐธ์กฐ์ ์์ฑ์ ์ฐธ์กฐ @Transactional(readOnly = true) public void checkUserIsRegistered(Users users) { if (hasPlanner(users)) throw new PlannerDuplicateRegistrationException(); if (hasCustomer(users)) throw new CustomerDuplicateRegistrationException(); } PlannerDuplicateRegistrationException::new์ ๊ฐ์ด ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๋ฉ์๋๋ก ๋๋ค์์ ์ ๋ฌํ๊ฑฐ๋ ์ธํฐํ์ด์ค๋ก์ ๋ณํ์ ํ ๋ ๋ฑ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์๋ ์์ฑ์ ์์ ํด๋์ค ์ด๋ฆ์ ๋ช ์ํ์ฌ ์ฌ์ฉํด์ผ ํฉ๋๋ค. 2023. 7. 28. [์ค๋ฅ] ์์ ๊ด๊ณ์ Entity์ @Builder ์ ์ฉ ์ ์ด์ ๋ฌธ์ ์ํฉ Planner๊ฐ User๋ฅผ ์์๋ฐ๊ณ ์๊ณ , ๋ ๋ค์๊ฒ @Builder๋ฅผ ์ ์ธํ ์ํฉ @SuppressWarnings("checkstyle:RegexpMultiline") @NoArgsConstructor @Getter @Entity public class Users extends BaseTimeEntity { ... @Builder public Users(String email, String nickname, String imageUrl, AuthProvider authProvider, String authProviderId) { this.email = email; this.nickname = nickname; this.imageUrl = imageUrl; this.authProvider = .. 2023. 7. 26. [AWS S3] ๋ฒํท ์์ฑํ๊ธฐ OAuth2 ์ ์ฉ์ด ๋๋ ์ด ๋ผ์ aws ์ค์ ์ด๋ผ๋ ํ๊ธฐ... 1. ๋ฒํท ์์ฑํ๊ธฐ ์ฌ์ฉ์๋ค์ด ์ฌ์ง ์ ๋ก๋/๋ค์ด๋ก๋ํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ public์ผ๋ก ๋๋ฆฌ๊ธฐ ๋ฒํท ๋ฒ์ ๊ด๋ฆฌ๋ ๊ธฐ๋ณธ ์ํธํ๋ ์ผ๋จ ๋นํ์ฑํ๋ก ์ค์ ํ๋ค. 1. public access ์ค์ ์์ง public access๋ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ policy๋ฅผ ๋ง๋ค์ด ์ ์ฉํด์ผ ํ๋ค. ๋ฒํท > ๊ถํ > ๋ฒํท ์ ์ฑ > ์ ์ฑ ์์ฑ๊ธฐ๋ก ๋ค์ด๊ฐ ์ค์ ํด์ผ ํ๋ค. https://awspolicygen.s3.amazonaws.com/policygen.html - effet : ์ ๊ทผํ๋ ์ฌ๋์ ์ ํํ ๊ฒ์ธ๊ฐ - principal : ์ ๊ทผํ๋ ์ฌ๋ ์ ํ - actions : getObject, putObject, deleteObject (์๋น์ค์ ๋ง๊ฒ ์ค์ ) - .. 2023. 7. 13. [Github Hook] Jira ํฐ์ผ ๋ฒํธ ์ปค๋ฐ ๋ฉ์์ง ์๋ ์ถ๊ฐํ๊ธฐ ์ด๋ฒ ํ๋ก์ ํธ์์ ์ฒ์์ผ๋ก Jira๋ฅผ ์ฐ๋ฉด์ ์ปค๋ฐ ๋ฉ์์ง์ ๋งค๋ฒ ์ด์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ๊ทธ๋์ hook์ ์ด์ฉํด์ ์๋์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง ์์ ์ง๋ผ ์ด์ ๋ฒํธ๊ฐ ๋ถ๋๋ก ์ค์ ํ๋ค! ๋ด ์ค์ 1. BRANCH NAMING : feature/[SO-์ด์๋ฒํธ]-๋ธ๋์น ์์ธ ์ค๋ช ex) feature/SO-26-settings 2. feature ๋ธ๋์น์์๋ง ์์ ํ ๋ ์ด ๋ฉ์์ง๊ฐ ๋ถ๋๋ก ์ค์ main master develop release hotfix์ธ ๊ฒฝ์ฐ pass ์ฒ์์๋... ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ ํ๋ ค๊ณ ํ์ผ๋? ์ด์ํ๊ฒ๋ ๋์๊ฐ์ง ์์๋ค https://medium.com/prnd/github-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%84%B8%EC%A7%80%EC%97%90-jira-%E.. 2023. 6. 29. 0. ํ๋ก์ ํธ ์ธํ ๊ธฐ๋ณธ ์ฌํญ - Gradle - Java 17 - Spring Boot 3.1.1 0. ๋ฒ์ ์ค์ project : Gradle(Groovy) Language : Java 17 Java 20์ด 5/22์ ๋์์ง๋ง ๋์จ์ง ํ ๋ฌ ๋ ๋ฒ์ ์ ์ฐ๋ ๊ฑด ์ข ์ํํ ๊ฒ ๊ฐ์์ 17๋ก ์ ํํ๋ค. ์ด์ ํ๋ก์ ํธ์์ Collection Factory Method๋ฅผ ๋ง์ด ์ผ์๋๋ฐ, Java 17์์๋ ์ด ๋ถ๋ถ์ด ๊ฐ์ ๋์๋ค๊ณ ํด์ 17๋ก ๊ฒฐ์ ํ๊ฒ ๋์๋ค Spring Boot 3.x ์ด์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Java 17 ์ด์์ ์ฌ์ฉํด์ผ ํ๋ค https://techblog.gccompany.co.kr/%EC%9A%B0%EB%A6%AC%ED%8C%80%EC%9D%B4-jdk-17%EC%9D%84-%EB%8F%84%EC%9E%8.. 2023. 6. 29. ์ด์ 1 2 3 4 5 ยทยทยท 23 ๋ค์