묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
의존성주입 대해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 해당 수업과는 관계가 없는 내용이긴 한데..의존성 주입 관련해서 조금 헷갈리는 부분이 있어 질문드립니다. 먼저, ItemServiceApplication 클래스에서 보면 스캔 범위가 hello.itemservice.web 이하의 경로로 지정되어 있습니다.아래는 SpringDataJpaConfig 클래스입니다.SpringDataJpaItemRepository 를 주입받는 과정에서, 빨간 에러 표시가 뜨고 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 빈을 찾을 수 없다는 메시지가 표시됩니다. 어찌보면 당연한 것 같습니다. 해당 레포지토리가 속해있는 경로는 스캔 대상이 아니거든요. 게다가 SpringDataJpaItemRepository 에는 해당 인터페이스를 빈으로 등록할만한 요소를 가지고 있지는 않습니다. 따로 component 로 등록될만한 애노테이션이 붙은것도 아니고요. 그런데 생각해보면 JpaRepository 인터페이스를 상속받고 있어서, 해당 인터페이스에 스프링 빈으로 등록될만한 요인이 있다면 가능한 것일까 싶은 생각은 드는데..이 부분에 대한 확신이 들지 않아 질문드립니다. 실제로 ItemServiceApplication 에서 스캔 범위를 "hello.itemservice.web" -> "hello.itemservice" 으로 변경해보면 위에서 본 빨간 에러는 사라집니다.그런데 만약 빨간 에러가 나오는게 맞는 상황이라면, 저희가 지금까지 작성한 로직들이 동작하지 않아야 할 것 같아서요.특히 SpringDataJpaItemRepository 를 주입받는 ItemServiceV1 클래스에서 주입이 안되는게 맞지 않나 싶습니다. 물론 서비스는 추상화된 레포지토리의 의존하고 있긴 하지만, 의존성이 주입되는 시점에는 구체 클래스인 SpringDataJpaItemRepository 클래스가 주입될텐데 이게 정상적으로 동작하는게 이해가 조금 안됩니다. 글이 너무 길었는데..정리해서 말씀드리면SpringDataConfig.java 에서 SpringDataJpaItemRepository 를 주입받을 때 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 메시지가 IDE에 표시된다.실제로 SpringDataJpaItemRepository 클래스는 컴포넌트 스캔 대상 범위에 속하지 않는다.그런데도 애플리케이션 로직 및 테스트 로직이 정상적으로 수행된다.해당 상황이 이해가 되지 않는다.입니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Validation Map -> 어떻게 변경하는게 좋은지 궁금합니다.
안녕하십니까. 데이터 검증2 를 듣다가 궁금한점이 생겨서 질문을 남기게 되었습니다. @Getter @RequiredArgsConstructor public class ErrorResponse { private final String code; private final String message; private final List<Validation> validations = new ArrayList<>(); public void addValidation(String fieldName, String errorMessage) { this.validations.add(new Validation(fieldName, errorMessage)); } private record Validation(String fieldName, String errorMessage) { } } @Test @DisplayName("/posts 요청시 title 값 필수.") void test2() throws Exception { mockMvc.perform(post("/posts") .contentType(MediaType.APPLICATION_JSON) .content("{}") ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.code").value("400")) .andExpect(jsonPath("$.message").value("잘못된 요청입니다.")) .andExpect(jsonPath("$.validations[0].errorMessage").value("title을 입력해주세요.")) .andExpect(jsonPath("$.validations[1].errorMessage").value("content를 입력해주세요.")) .andDo(print()); } 일단 Map -> List<Validation> 방식으로 수정해보았는데요@Setter @Getter @ToString public class PostCreate { @NotBlank(message = "title을 입력해주세요.") private String title; @NotBlank(message = "content를 입력해주세요.") private String content; }테스트 코드에서 0번째 에러메시지가 title을 입력해주세요 가 될 줄 알았는데 content를 입력해주세요 가 나와서 실패했습니다. (PostCreate 필드 순서대로 validations에 담길 줄 알았는데 예상되로 나오지 않았습니다.) -> 테스트 할 때마다 결과가 뒤죽박죽 이네요. 이러한 경우 어떻게 테스트 하는지 궁금합니다.또한 이렇게 만약 여러 error field가 잡히거나, 에러 메시지가 바뀌는 경우가 생기면 테스트 코드 수정이 빈번해 질 것 같은데 어떻게 해결할 수 있을지 궁금합니다.마지막으로 List<Validation> 방법 말고 조금 더 많이 쓰이는 ? 혹은 괜찮은 방법 있으면 추천해주시면 감사하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태와 비영속 상태의 차이점
[질문 내용]준영속 상태와 비영속 상태의 차이점에 대해 이해한바는 다음과 같습니다. 비영속 상태 : 한번도 엔티티 매니저의 관리를 받아본적 없는 엔티티준영속 상태 : 엔티티 매니저의 관리를 받다가 연결을 끊음으로써 더이상 관리 받지 않고있는 상태. 제가 아는 차이점은 이것 뿐인데 혹시나 이게 두 상태의 차이점의 전부라면 굳이 상태를 나눌 필요가 있나? 라는 생각이듭니다. 그냥 '준영속 상태' 라는 단계를 없애고 연결이 끊기면 비영속 상태로 ,다시 연결을 맺으면 영속 상태로 이렇게 단계를 줄여도 되지 않을까요? 혹시나 제가 모르거나 잘못이해하고 있는점이 있다면 알려주시면 감사드리겠습니다!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 파일을 실행시켰을때 결과화면
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.h2데이터베이스에 잘 실행이 되는것을 확인했는데 강사님 화면처럼 insertinto ~~이런식으로 안떠서 뭐가 문제인건가요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
보상 트랜잭션의 대한 후속 강의 2차 문의합니다.
보상 트랜잭션의 대한 후속 강의 문의합니다.8개월 전쯤 상반기에 출시 계획이 있다고 하셨는데, 언제쯤 강의를 출시할 계획이신가요?전체적인 로드맵을 공유해주시면 좋을 것 같습니다.후속 강의가 너무 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 로그가 안나옵니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.MemberRepositoryTest 실행시에 실행잘되고 기대했던 결과도 나오지만 쿼리 로그가 보이지 않습니다. junint5로 테스트 실행했습니다. 1. MemberRepositoryTest 클래스 파일 소스 package jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import javax.transaction.Transactional; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(value = false) public void testMember() throws Exception{ //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then assertThat(findMember.getId()).isEqualTo(member.getId()); assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } } ///////////////////////////// 설정파일 정보는 아래와 같습니다. 1. build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } tasks.named('test') { useJUnitPlatform() } 2. application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: #show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug #org.hibernate.type: trace #스프링 부트 2.x, hibernate5
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IO Exception: "/Users/eulyoungjung/test.mv.db" [90028-224] 90028/90028 (Help)
test.mv.db 를 직접 생성 하여 했는데도 연결이 되지 않습니다 ... 빠른답변 부탁드려요 !!
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
GET API까지는 잘 하다가 인텔리제이 껐다가 다시 키고 POST API 수업따라 코드 작성 후 서버 실행하니 라는 오류가 발생합니다...
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
"%" + itemName + "%"가 @Param에서 읽히지가 않아요
@Override public List<Item> findAll(ItemSearchCond cond) { String itemName = cond.getItemName(); Integer maxPrice = cond.getMaxPrice(); if (StringUtils.hasText(itemName) && maxPrice != null) { //return repository.findByItemNameLikeAndPriceLessThanEqual("%" + itemName + "%", maxPrice); return repository.findItems(itemName , maxPrice); } else if (StringUtils.hasText(itemName)) { return repository.findByItemNameLike("%" + itemName+"%"); } else if (maxPrice != null) { return repository.findByPriceLessThanEqual(maxPrice); } else { return repository.findAll(); } }JpaItemRepositoryV2에서 이름이랑 가격이 모두 있을 때 return repository.findItems(itemName, maxPrice); 이 코드를return repository.findItems("%" + itemName + "%", maxPrice);로 변경하면@Query("select i from Item i where i.itemName like :itemName and i.price <= :price ") List<Item> findItems(@Param("itemName") String itemName, @Param("price")Integer price);여기 코드에서 @Param("itemName")이 itemName을 %itemName%으로 받아서 그런지 org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.; nested exception is java.lang.IllegalStateException: For queries with named 이런 오류가 뜹니다어떻게 해결할 수 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@MapsId 에서 cascade가 기본옵션인가요?
@Entity @Getter @Setter public class Board { @Id @GeneratedValue private Long id; private String title; @OneToOne(mappedBy = "board") private BoardDetail boardDetail; } @Entity @Getter @Setter public class BoardDetail { @Id private Long boardId; @MapsId // BoardDetail.boardId와 매핑 @OneToOne @JoinColumn(name = "board_id") public Board board; private String content; } public class OneToOne { private EntityManager em; private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("non"); @BeforeEach void setUp(){ em = emf.createEntityManager(); } @AfterAll static void finish(){ emf.close(); } @DisplayName("1:1 식별 매핑일 경우 ") @Test void t1(){ EntityTransaction tx = em.getTransaction(); tx.begin(); Board board = new Board(); board.setTitle("T1 4번째 월즈 우승"); BoardDetail boardDetail = new BoardDetail(); boardDetail.setContent("상혁아 축하해"); boardDetail.setBoard(board); em.persist(boardDetail); tx.commit(); } }여기서 제가 부모 테이블인 board를 저장하지 않고 바로 boardDetail만 저장했습니다.cascade옵션을 주지 않았는데도 부모 테이블에 갱신이 되더라구요Hibernate: call next value for hibernate_sequence Hibernate: /* insert non.Board */ insert into Board (title, id) values (?, ?) Hibernate: /* insert non.BoardDetail */ insert into BoardDetail (content, board_id) values (?, ?)공식 문서에서도 Person 저장하고 PersonDetail을 저장하던데이렇게 해도 동작하는 이유가 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@EmbeddedId 복합키 질문이 있습니다
강사님 안녕하세요 !!@Entity @Getter @Setter public class EmParent { @Id private String id; private String name; } @Entity @Getter @Setter public class EmChild { @EmbeddedId private EmChildId id; @MapsId("parentId") @ManyToOne @JoinColumn(name = "parent_id",foreignKey = @ForeignKey(name = "parent_fk")) public EmParent parent; private String name; @EqualsAndHashCode @Getter @Setter @Embeddable public static class EmChildId implements Serializable { private String parentId;//@MapsId("parentId")와 매핑 @Column(name = "child_id") private String id;//Child.childId 매핑 } }테스트코드 EmParent emParent = new EmParent(); emParent.setName("내장 할아버지"); emParent.setId("A001"); em.persist(emParent); //복합키 만들기 EmChild.EmChildId id = new EmChild.EmChildId(); id.setId("F001"); id.setId("fake data"); //자식 엔티티 생성 EmChild emChild = new EmChild(); //자식 엔티티에 복합키 주입하기 emChild.setId(id); //아래 정보를 넣지 않으면 예외가 발생 emChild.setParent(emParent); emChild.setName("내장 아버지"); em.persist(emChild);식별 관계에서 @EmbeddedId를 사용할 때자식 엔티티에 Id 객체인 EmChildId 를 넣어줄 때EmChildId 클래스의@Column(name = "child_id") private String id;//Child.childId 매핑만 참조를 하고 부모의 pk를 참조하는 private String parentId;에는 어떤 값이 들어가도의미가 없더라구요@MapsId("parentId") @ManyToOne @JoinColumn(name = "parent_id",foreignKey = @ForeignKey(name = "parent_fk")) public EmParent parent여기에 값을 넣어줘야 EmChild 엔티티가 정상 동작합니다. 제가 실수한 부분있는 걸까요 ?아니면 식별관계일 때 @EmbeddedId는 읽어올때만 상관이 있고 저장할 때에는 상관이 없는 객체인가요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
서비스단 Transactional에 대해 질문 드립니다
안녕하세요!서비스 클래스 상단에 @Transactional(readOnly = true) 옵션을 두는 경우에 대해 질문이 있습니다.만약 Transactional을 적용하고 싶지 않은 메서드가 있으면 어떻게 하는 것이 좋을까요? 저의 경우 외부 api 요청을 보내고 응답을 반환하는 메서드에 Transactional을 적용하지 않으려고 합니다(CQRS에 대해 말씀해주신 부분을 듣고 애초에 외부 API 호출하는 기능이 분리 되어야 하나 싶기도 드네요 ㅠㅠ) @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class SpotService { private final MapApiClient mapApiClient;
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
docker에 관하여 질문 드립니다.
안녕하세요 우선 끝까지 강의 잘들었습니다!!! docker 부분이 아직 익숙하지 않아 질문드립니다docker를 따라 설치하니 저장소 같은 곳에 이미지가 저장되는 것을 확인하였습니다.해당 이미지를 aws 인스턴스에서 받아서 바로 사용할 순 없는건가요? -> 굳이 git clone으로 프로젝트를 받아와야 하는지 궁금합니다 / docker 저장소에 이미지를 올리고 바로 받아서 실행하면 되는게 아닌가 싶어서 질문드립니다...2.가 만약 틀린거라면 build/libs에 있는 파일이 직접적으로 실행을 시키면서 애플리케이션이 실행되는 것 같은데 이 이미지를 굳이 docker 저장소에 올리는 이유가 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jar 파일 access 불가
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 항상 강의 잘 보고 있습니다.JPA와 DB설정, 동작확인 강의 중jar 빌드해서 동작확인 하는 단계에서 Unable to access jarfile jpashop-0.0.1-SNAPSHOT 라고 뜨네요..해당 경로에 파일은 있는 것으로 확인되는데 어떻게 해결하면 좋을까요?감사합니다
-
해결됨실전! Querydsl
[질문 X] 스프링 부트 3.2 QueryDSL gradle 설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]plugins { ...... // QueryDSL 관련 명령어 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies { ........ //QueryDSL 종속성. implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } //QueryDSL 설정 //def generated = 'src/main/generated' def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile querydsl { jpa = true querydslSourcesDir = generated } sourceSets { main.java.srcDir generated } compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl } configurations { compileOnly { extendsFrom annotationProcessor } querydsl.extendsFrom compileClasspath } //def generated = 'src/main/generated'def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile 이 둘의 차이는 src 폴더 안에 구현체인 Q 파일들을 넣느냐, 아니면 빌드 폴더에 넣느냐인데, 만약 이 gradle을 쓰면서 영상처럼 compileQuerydsl 하고 시작하면java: Attempt to recreate a file for type study.querydsl.entity.QTestEntity 이런 오류가 날 수 있음.그러니까, Test를 시작할 때 빌드 하면서 시작하는데, 아마도 build에 compileJava가, compileJava에 compileQuerydsl이 포함되어 있음. 그래서 이미 compileQuerydsl로 QueryDSL 파일들을 빌드 한 상태에서 시작을 하려니,저 파일을 다시 생성하려고 시도한다는 오류가 뜨는 걸로 추측됨. 근데 또 신기한게 뭔가 기록? 캐시가 남는지, QueryDSL 파일을 import 안한 상태로 뻘건줄 쭉쭉 있는 상태로 테스트 돌려서 자동으로 빌드가 따라오게끔 하면 저런 오류가 안뜸.근데 이런 아무리 알고 있는 에러이지만 저런 환경에서 코드를 짠다는 건 좀..저는 그래서 그냥 일단def generated = 'src/main/generated'여기에 Q파일을 일단 뒀다가, gitignore에 저거 등록 하고,build 할 때만 def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile이걸로 바꿔놓는 걸 추천.. 저는 그렇게 했고 더 좋은 방법도 있을거임..
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
DTO, Request, Response 차이점
질문이 너무 짧아서 죄송하지만... 제목 그대로 3가지 쓰임의 차이점을 알고 싶습니다. 언제 어떤것을 사용해야 하는지 잘모르겠네요...
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
item_id 네이밍 관련 질문드려요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Item 엔티티 설계할때 id 를 item_id로 하는것이 구체적으로 명명하는게 좋아서 그렇다고 다른 질문에서 답변을 남겨주셨는데요, 그렇다면 order 엔티티도 order_id로 하는게 좋지 않나요? 그렇게 하지 않으신 이유가 order에 이미 memberId 필드가 있어서 그런걸까요? 굳이 order_id라고 명명하지 않아도 memberId와 구분되서 그런건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 동시성...? 관련 질문입니다
em.flush를 명시적으로 적어주거나, 트랜잭션이 끝나서 커밋이 될 때 DB에 쿼리를 날리는 JPA에 관해서 궁금한게 있습니다. DB 제약은 복합키로 되어있고 insert 하는 상황에서 궁금증이 있는데요 동일한 복합키를 가진건 DB쿼리를 그대로 날려도 Exception을 뱉어서 실제 DB에는 들어가지 않는다는 것은 알고 있습니다. 다만 궁금한게 순수히 오로지 JPA로만 해결이 가능한 문제인지 궁금증이 있습니다. id와 name은 사용자로 부터 요청 받은 부분이고Member requetMember = new Member(id,name);Optional<Member> m = repository.findByIdAndName(id,name);if(m.isPresent()){repository.insert(requestMember);} 제가 궁금한 상황은 멀티서버 환경에서 실행 되는 쓰레드가 2개 있다고 했을때 동시에 2번의 요청을 보내고 2개 모두 예외는 발생하지 않아야 하는 상황입니다. A,B 쓰레드 모두 m.isPresent() 코드를 통과 하였고그 와중에 A 쓰레드가 실행될때, insert까지 마치고 트랜잭션 커밋까지 이루어진 상황에서 B쓰레드가 repository.insert(requestMember);이 부분을 실행 할 때 에러가 나는걸 방지 할 수 있는지 궁금합니다. JPA로 해보려다 딱히 방안이 생각나지 않아서insert 할 때 sql로 insert into memberselect id , namewhere not exist(select * from member where id='id', name='name') 이런식으로 insert 할 때 select를 1번의 쿼리로 하면서 하고있는데요, 이런 경우는 어떻게 해야할까요?
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
강사님 감사 인사 드리러 왔습니다.
강사님 덕분에 잘 취업해서 살고 있습니다.취업해보니 강사님의 원리 위주의 강의를 들은 것이 많은 도움이 되고 있습니다.어려운 기술들 보다 Base되는 원리 하나를 잘 습득하는 게 참 중요하다는 걸 많이 느낍니다.뭐가 잘 안되면 블로그나 검색엔진을 사용하기 보다는 강사님 강의하면서 배운 내용을 다시금 봅니다.왜냐면 그 안에 현업에서 쓰는 기본적인 것들이 많이 담겨져 있기 때문입니다.조금 실력이 몇개월 쌓인 뒤에 보니 어려웠던 내용들도 쉬운건데 어렵다고 생각을 해서 어려웠구나 라는 생각도 하게 되네요특히 요약 파일 띄워놓으시고 마우스로 그리면서 설명해주시는 것이 정말 도움 많이!!! 됐습니다.Spring이 아니라 사물인터넷 mosquitto 들으러 인프런에 잠시 왔는데요예정보다 조금은 시간이 많이 흘렀지만 어떤 종류의 강의든 다음 강의를 기대하고 있습니다.중간중간에 답변도 늦지 않게 잘 해주셨던 기억이 있어서 더더욱 감사드립니다.행복한 하루되시고 누군가에게는 긍정적인 큰 영향을 주셨다는 거 기억해주세요.선생님 아니였으면 취업 준비하다가 포기했을 거 같아요.(진심)좋은 하루 되세요^^-선생님 모든 강의를 다 구독한 1人 올림-
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
TestRepositoryImpl 질문이요
where(QTestEntity.testEntity.name.eq(name)과 같이조건을 넣어줘야되지 않나요..?