묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React with 스프링부트 API서버
Product 컨트롤러 api 결과값 리턴 질문
상품 등록이나 수정을 하고나서return Map.of("result", "Success")이렇게 리턴해주셨는데실무에서 이런 방식을 많이 사용하나요 아니면 교육목적이기 때문에 조금 러프하게 하신건가요??이번 강의를 보고 실무와 가깝게 프로젝트를 진행하고 싶은데 이렇게 Map에 간단하게 리턴할지 아니면 api마다 매번ResponseEntity에 Http Status Code 담아 리턴해야 할지 기준을 모르겠습니다.제 목적에 맞게 하려면 어떤 방식으로 api 결과를 리턴해줘야 할까요??
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter
테스트 코드 실행시 의존성 주입이 안되는 듯한 에러가 있습니다...org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.mkim.portfolio.domain.repository.ExperienceRepository experienceRepository] in constructor [public com.mkim.portfolio.domain.repository.ExperienceRepositoryTest(com.mkim.portfolio.domain.repository.ExperienceRepository)]: Failed to load ApplicationContext for [MergedContextConfiguration@41120e48 testClass = com.mkim.portfolio.domain.repository.ExperienceRepositoryTest, locations = [], classes = [com.mkim.portfolio.PortfolioApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@15bb5034, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@34be3d80, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@854e4b26, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@7a35b0f5, [ImportsContextCustomizer@165a5979 key = [org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcClientAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@7bd7d6d6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2a8448fa, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@4d8dfd98], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] @Autowired 도 잘 넣은듯한데 왜 해당 에러가 발생하는지를 파악을 못하고 있습니다...test를 하려하는 타겟 레포지토리도 하위 경로에 잘 존재합니다.interface ExperienceRepository : JpaRepository<Experience, Long> { fun findAllByIsActive(isActive: Boolean): List<Experience> }현재 플러그인과 디펜던시는 아래와 같습니다.plugins { id("org.springframework.boot") version "3.3.0" id("io.spring.dependency-management") version "1.1.5" kotlin("plugin.jpa") version "1.9.24" kotlin("jvm") version "1.9.24" kotlin("plugin.spring") version "1.9.24" } dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.springframework.boot:spring-boot-starter-validation") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly("com.h2database:h2") runtimeOnly("com.mysql:mysql-connector-j") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") testRuntimeOnly("org.junit.platform:junit-platform-launcher") }제가 확인해야할 부분을 잘 못찾고 있는듯합니다... 혹시 제가 놓치는 부분이 있을까요?
-
해결됨실전! Querydsl
QMemberDto는 생성되었는데 사용할 수가 없습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.QMemberDto는 정상적으로 생성되었는데 테스트 코드에서 사용하려고 하니 import가 안돼서 질문드립니다.아래는 소스코드입니다.https://drive.google.com/file/d/1PSyqZZg2S84G2hQ9QsG-FgfR6Az6kFYm/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member 객체 id 생성 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트를 실행할 때마다 member 객체가 초기화되고, repository에 저장이 되는데, 그럼 db에 userName=memberA로 갖는 객체가 여러 개 저장되야 하는 거 아닌가요?왜 테스트를 계속 실행해도 DB엔 userName=memberA인 객체 하나만 저장되어 있는 건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
h2 콘솔 접근 불가
위의 에러가 나옵니다 활성화도 제대로 된거 같은데 h2-console에 jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER를 입력하고 connect버튼을 누르면 에러가 나오고 url은 초기화 됩니다. local로 돌려도 화면상에 mysql연결이 된 거 같이 데이터는 그대로 입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 서비스 개발 할 때, 주문 상품 생성에 관해
[질문 템플릿]1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요?예[질문 내용]주문 생성 시에 매개변수로 OrderItem을 여러개 받을 수 있게 했었는데 그렇다면 주문 서비스도 ItemId를 여러 개 받게 해야 하지 않나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실무에서는 테이블생성할때
지금 현재 데이터베이스 스키마 자동생성ㅇ을 보고 있는데요엔티티 클래스 만들때 이제 테이블이 자동생성이 되잖아요근데 실무에서는 이렇게 안하고 테이블 생성하고엔티티 작성하나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
예외 날리는 이유에 대해서
안녕하세요강의 듣다가 문득 든 의문인데 코드를 짜실 때 조건이 아닌 경우에 다른처리를 하는 것이 아니라 바로 예외를 날려서 처리를 하시는데 이유가 있을까요? 혼자 짤 때는 예외처리를 하지 않고 else로 조건 분기 시켜서 따로 따로 코드 진행시키는데 바로 예외날리시는 이유가 궁금합니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa repository에서 JPQL 엔티티 리턴 관련 질문
내가 댓글 단 게시글을 조회할 때, @JPQL을 이용해서 다음과 같이 댓글 Repository에서 JPQL 사용해서 PostEntity를 반환하고 있는데, 이 방식이 혹시 문제가 있을까요? @Repository public interface CommentRepository extends JpaRepository<CommentEntity,Long> { @Query("SELECT DISTINCT c.post FROM CommentEntity c WHERE c.user.userId = :userId") Page<PostEntity> findPostByUserComment(@Param("userId") String userId, Pageable pageable); }질문은 다음 3가지 입니다.1. CommentRepository에서는 CommentEntity로만 반환하고 CommentEntity.getPost()를 통해 게시글을 가져오는 게 맞을까요? 아니면 위 코드대로 진행해도 괜찮을까요? 실무에서 선호하는 방식이 궁금합니다. 내가 댓글 단 게시글을 조회하는거니까, CommentRepository에서 메소드를 만드는 게 맞다 생각했는데 혹시 PostRepository에서 메소드를 구현하는게 더 좋을까요?만약 위 코드처럼 한다면, 다대일이기 때문에 fetch join을 추가해서 pageable 같이 써도 문제 없는게 맞을까요?
-
미해결실전! 스프링 데이터 JPA
DB,검증코드 에서는 member가 다른팀을 가지고있으나 soutv에서 같은팀을 가지고있다고 하는문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.member = Member(id=1, username=member1, age=10)member.getTeam() = Team(id=1, name=teamA)memberList = [Member(id=1, username=member1, age=10), Member(id=2, username=member2, age=20)]member = Member(id=2, username=member2, age=20)member.getTeam() = Team(id=1, name=teamA)memberList = [Member(id=1, username=member1, age=10), Member(id=2, username=member2, age=20)]member = Member(id=3, username=member3, age=30)member.getTeam() = Team(id=1, name=teamA)memberList = [Member(id=3, username=member3, age=30), Member(id=4, username=member4, age=40)]member = Member(id=4, username=member4, age=40)member.getTeam() = Team(id=1, name=teamA)memberList = [Member(id=3, username=member3, age=30), Member(id=4, username=member4, age=40)]이부분이 soutv 프린트결과입니다.이부분부터 테스트코드인데요 여기서분명히 팀을 다르게넣어주었고 실제로 db에도 적용되어있습니다.@Test @DisplayName("entity test") void entityTest() { Team team = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(team); em.persist(teamB); Member member = new Member("member1",10,team); Member member1 = new Member("member2",20,team); Member member2 = new Member("member3",30,teamB); Member member3 = new Member("member4",40,teamB); em.persist(member); em.persist(member1); em.persist(member2); em.persist(member3); List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList(); for (Member memberList : members) { System.out.println("member = " + memberList); System.out.println("member.getTeam() = " + member.getTeam()); System.out.println("memberList = " + memberList.getTeam().getMembers()); } Assertions.assertThat(member.getTeam()).isEqualTo(team); Assertions.assertThat(member1.getTeam()).isEqualTo(team); Assertions.assertThat(member2.getTeam()).isEqualTo(teamB); Assertions.assertThat(member3.getTeam()).isEqualTo(teamB); } 어떤게 문제인지모르겠어서 질문남깁니다!entity code 도 남기겠습니다.package study.datajpa.entity; import jakarta.persistence.*; import lombok.*; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id","username","age"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; public Member(String username) { this.username = username; } public void memberTeamSetting(Team team) { if (this.team != null) { this.team.getMembers().remove(this); } this.team = team; team.getMembers().add(this); } public Member(String username, int age, Team team) { this.username = username; this.age = age; if(team != null) { memberTeamSetting(team); } } } package study.datajpa.entity; import jakarta.persistence.*; import lombok.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id","name"}) public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); public Team(String name) { this.name = name; } }
-
미해결코드로 배우는 React with 스프링부트 API서버
파일 업로드 관련 질문
[파일 업로드 설정과 확인] 강의에서 DB에 아주 중요한게 아니라면 성능적인 부분때문에 DB에 파일을 저장하면 안된다고 하셨습니다. 클라우드를 이용하는게 일반적이라고 생각합니다만 한가지 궁금한게 있습니다. 만약 게시글이라는 엔티티에 대표 사진이 딱 한장 들어갈 수 있다고 한다면 아래와 같은 순서로 구현할 수 있겠다는 생각이 들었습니다. 이런 방법에 대해 어떻게 생각하시나요?? 애플리케이션 단에서 이미지 등록 -> 이미지 base64 인코딩 -> 인코딩 된 긴 문자열을 압축 -> 압축된 문자열을 RDB(MYSQL) 게시글 테이블에 게시물 대표이미지 (longtext 형)에 저장.조회할때는 애플리케이션 단에서 별도로 압축된 문자를 원래 인코딩 된 문자열로 디코딩하는 로직 필요하겠지만 비용이 크지 않다고 생각했습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료 제공 문의
결재후 강의를 수강중입니다.보니, 강의자료 제공이라고 써 있는데, 어떻게 받을 수 있나요.Gracias!!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컨트롤러에서 호출하는 서비스 질문드립니다.(+더티체킹)
안녕하세요 항상 양질의 강의 해주셔서 먼저 감사드립니다. 현재 코드 작성 중에 어떤게 더 나은 방법인지 궁금해서 문의드립니다.카드 충전하는 서비스가 있다고 가정하면 컨트롤러를 통해 카드 충전 서비스를 호출할 예정입니다.class Controller { private final ChargeService chargeService; void charge() { chargeService.charge(); } }위와 같이 충전 진행 시, 내부에서는 카드를 찾고 외부 API를 통해 충전을 진행 후 더티체킹을 통해 카드 상태를 업데이트 할 예정입니다.class ChargeService { private final CardFindService cardFindService; private final ChargeHistoryService chargeHistoryService; void charge() { var card = cardFindService.findCard(); cardApiService.charge(); // 외부 API 호출 chargeHistoryService.save(); // 충전 내역 저장 card.updateStatus(); // 카드 상태 변경 } }여기서 궁금한게 충전을 진행하는 ChargeService 내에서 더티체킹을 통해 카드의 상태를 업데이트 하는게 좋을지, 아니면 컨트롤러단에서 ChargeService와 CardUpdateService를 각각 호출해주는게 좋을까요?class Controller { private final ChargeService chargeService; private final CardUpdateService cardUpdateService; void charge() { chargeService.charge(); cardUpdateService.updateCardStatus(); } }OSIV를 꺼둔 상태에서 진행 시 chargeService 내 하나의 트랜잭션 내에서 충전 내역과 카드 상태까지 업데이트를 하는게 편리해 보이긴 하지만, chargeService 내에서 카드의 상태를 업데이트하는 역할까지 주어지는 것 같아 고민이 됩니다. 만약 서비스 2개를 각각 호출하게 되면 cardFind도 각 서비스 내에서 1회 씩 총 2번 호출되는 점도 마음에 걸립니다.이와 같은 상황에서는 어떤 방식이 실무에 더 적합하고 좋을지 의견 부탁드리겠습니다.감사합니다.
-
해결됨실전! Querydsl
yaml profiles 인식이 안 됩니다 ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의에 나온 내용대로 아래 처럼도 해 보고spring: profiles: active: local검색해서 나온대로 아래처럼도 해보았는데,spring: config: activate: on-profile: local오류도 뜨지 않고 콘솔에는 insert 쿼리가 아예 뜨지 않습니다 ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
yml 과 properties의 차이가 큰가요?
현재 MemberRepository test를 진행하고 있습니다.데이터베이스 같은 경우는 mysql로 진행을 하고 있습니다.properties를 사용할 경우에는 테스트가 성공적으로 진행되는데 yml로 테스트를 진행할 경우 jdbc에서 dialect를 인식하지 못하거나 BeanCreationException 오류가 생깁니다. 분명 둘다 시스템 설정을 저장하는 파일인데 왜 이런 차이가 생기나 궁금해서 질문 남깁니다
-
미해결실전! 스프링 데이터 JPA
UsernameOnlyDto 에서 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]클래스로 할때 오류가 납니다 ㅠㅠUsernameOnlyDtopackage study.datajpa.repository; public class UsernameOnlyDto { private final String username; public UsernameOnlyDto(String username) { this.username = username; } public String getUsername() { return username; } } MemberRepositoryList<UsernameOnlyDto> findProjectionByUsername(@Param("username") String username);Test @Test public void projections() { // given Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); memberRepository.save(m1); memberRepository.save(m2); em.flush(); em.clear(); //when List<UsernameOnlyDto> result = memberRepository.findProjectionByUsername("m1"); for (UsernameOnlyDto usernameOnlyDto : result) { System.out.println("usernameOnlyDto = " + usernameOnlyDto); } //then }오류내용java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@66450129 testClass = study.datajpa.repository.MemberRepositoryTest, locations = [], classes = [study.datajpa.SpringDataJpaApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@28f2a10f, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@56cdfb3b, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@35aea049, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7c24b813, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@485966cc, org.springframework.boot.test.context.SpringBootTestAnnotation@b5608ce], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
필드와 컬럼매핑
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.컬럼과 필드매핑 강의에서 처음 main을 실행하면 create Member하면서 아래에 이것저것 나와야하는데 저는 7월 24, 2024 7:53:00 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]7월 24, 2024 7:53:00 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.4.2.Final7월 24, 2024 7:53:00 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp://localhost/~/test]7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {password=****, user=sa}7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH10001115: Connection pool size: 20 (min=1)7월 24, 2024 7:53:01 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)7월 24, 2024 7:53:02 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateServiceINFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)7월 24, 2024 7:53:02 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]이렇게만 나오는데 왜그러는지 알려주세요 ㅠㅠ h2데이터베이스 켰습니다!코드와 함꼐 올리겠습니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
findById, findAll 테스트 질
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]serviceImpl 테스트코드를 짜다가 궁금한 점이 생겨서 질문 남깁니다 !객체를 save메서드로 저장하고findById로 조회한 객체와 findAll로 조회한 리스트에서 .get(0)을 한 객체는 왜 주소값이 다른가요 ??.equals()로 코드를 짰는데 코드자체가 잘못된걸까요 ??객체만 같은걸 주고 주소는 다르게 반환되나요 ..??객체가 같으면 주소도 같은걸로 알고있었는데 헷갈립니다 ㅜㅜ!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
DB에서 데이터가 삭제되지 않습니다.
안녕하세요 강사님. 강사님의 강의를 들으면서 혼자 프로젝트를 진행 중인데 혹시 이런 에러상황도 있을 수 있는지 여쭤보고 싶어서 질문남깁니다. 웹 사이트에서 특정 데이터 값을 삭제를 진행했고, 서버에서도 삭제가 잘 되었다는 로그와 함께 에러없이 삭제 완료되었는데, DB에서 그 값을 검색하면 그대로 남아있는 경우엔 어떻게 해결해야할까요? 삭제를 할때, 테이블의 PK값으로 해당 데이터를 삭제하는 것이 아니고 레코드의 PK말고 다른 값들을 찾아서 그 값이 있으면 데이터를 삭제하라고 로직을 짰거든요.그리고 처음에 기능을 완료했을땐, 잘 삭제가 되었는데 나중에 다시 테스트 진행하니 갑자기 DB에서 삭제가 되지않고 있습니다. // 권한 거부 확인 버튼 클릭 이벤트 핸들러 $(document).on('click', '#confirmRevokePermissionButton', function() { const selectedPermission = $('#permissionSelect').val(); const selectedUsers = $('.user-checkbox:checked').map(function() { return $(this).val(); }).get(); const projPK = $('#projectSettingForm').data('proj-pk'); if (selectedPermission && selectedUsers.length > 0) { $.ajax({ url: `/projMgmt/setting/${projPK}/revokePermission`, type: 'DELETE', data: JSON.stringify({ userPKs: selectedUsers, perPK: selectedPermission }), contentType: 'application/json', success: function(response) { Swal.fire({ icon: 'success', title: '권한 삭제 완료', text: '권한이 성공적으로 삭제되었습니다.', confirmButtonText: '확인' }).then((result) => { if (result.isConfirmed) { loadSetting(projPK); $('#permissionModal').modal('hide'); } }); }, error: function(xhr, status, error) { let errorMessage = '권한 삭제 중 오류가 발생했습니다.<br>'; if (xhr.responseText) { errorMessage += xhr.responseText; } Swal.fire({ icon: 'error', title: '권한 삭제 실패', html: errorMessage, confirmButtonText: '확인' }); } }); } else { Swal.fire({ icon: 'warning', title: '선택 없음', text: '권한을 선택해주세요.', confirmButtonText: '확인' }); } });이렇게 서버로 코드를 보내고 있고,@DeleteMapping("/setting/{projPK}/revokePermission") @ResponseBody public ResponseEntity<String> revokePermissions(@PathVariable Long projPK, @RequestBody Map<String, Object> requestBody) { try { List<Long> userPKs = ((List<?>) requestBody.get("userPKs")).stream() .map(Object::toString) .map(Long::valueOf) .toList(); Long perPK = Long.valueOf(requestBody.get("perPK").toString()); for (Long userPK : userPKs) { log.info("revokePermission projPK: {}, userPK: {}, perPK: {}", projPK, userPK, perPK); userPermissionService.revokePermission(projPK, userPK, perPK); } return ResponseEntity.ok("권한 거부 완료"); } catch (IllegalStateException e) { return ResponseEntity.status(HttpStatus.CONFLICT).body(e.getMessage()); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("권한 거부 중 오류가 발생했습니다: " + e.getMessage()); } }서버에서 값을 받으면@Override @Transactional public void revokePermission(Long userPK, Long projPK, Long perPK) { List<UserPermission> userPermissions = userPermissionRepository.findByUser_UserPKAndProject_ProjPKAndPermission_PerPK(userPK, projPK, perPK); if (userPermissions.isEmpty()) { throw new IllegalStateException("해당 사용자는 부여된 권한이 없습니다."); } userPermissionRepository.deleteAll(userPermissions); log.info("Deleted permissions for userPK: {}, projPK: {}, perPK: {}", userPK, projPK, perPK); }보내진 값을 확인하고 값이 있으면 그 값을 삭제하고 값이 없으면 에러 메시지를 발송되게 해놨습니다. 추가로 작성하자면, 체크된 사용자를 권한삭제 버튼을 클릭했을 때권한선택창이 뜨고 수정 권한 삭제를 클릭하면, 완료되었다는 알림창이 뜨고 서버쪽에서는이렇게 로그가 발송되지만, DB에 찾아보면 여전히 값이 남아있는 것이 확인이 됩니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA - 각 마이크로 서비스마다 별도의 DB사용 질문
#질문 배경#user-service , catalog-service , order-service 까지 실습을 하고 확인해보니 아래 사진들과 같이 각 서비스마다 다른 DB를 사용하는 것을 알게되었습니다. 마이크로 서비스들을 공통적으로 yml 파일에다 DB명을msauser 라고 명명해 헷갈렸지만 말이죠.#질문#: 강의내용을 들어보고 생각해봤는데 실제로 마이크로 서비스를 배포할때 mysql같은 RDB를 각 마이크로 서비스들(3개라고 가정)이 사용한다고 가정하면 각 마이크로 서비스들이 사용할 DB 3개를 만들어줘야 한다고 이해하고 있습니다. 맞나요? (+ 다른 DB지만 메시징큐로 각 서비스들끼리 통신) 그런데 시스템에 DB의 양이 적다면 DB 1개만 만들고 각 마이크로 서비스들이 하나의 DB를 접근하게 구현하기도 하나요?