묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
프로젝트 compile시 npm install시 No repository field
npm install시 위와같은 오류와 함께 컴파일이 종료됩니다. 혹시 해결 방법이 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.close()한 경우에도 업데이트 문이 실행되는데요.
이렇게 실행했는데, 로그에 업데이트 쿼리가 찍히네요.실제 사용할때는 트랜잭션 종료 이후에 em.close() 실행될텐데...테스트 코드라서 이상한긴 한데 좀 궁금하네요.public class JpaDetachMain {public static void main(String[] args) {final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); final EntityManager em = emf.createEntityManager(); final EntityTransaction tx = em.getTransaction(); tx.begin(); try{//영속 Member member = em.find(Member.class, 10L); member.setName("111"); em.close(); System.out.println("=============="); tx.commit(); }catch (Exception e){tx.rollback(); }finally {em.close(); emf.close(); }}}
-
미해결Practical Testing: 실용적인 테스트 가이드
섹션7 - 테스트 환경의 독립성을 보장하자
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의 재미나게 잘 보고있습니다.제목에 남겨드린 강의에서 creatOrderWithNoStock의 주제와 벗어나 given절의 deductQuantity에서 예외가 발생할 수 있는 상황을 예를 들어서 설명해 주셨고, 테스트 환경에서는 가능한 생성자를 기반으로 환경을 구성하여 진행하는것이 좋다고 말씀 주셨는데 그럼 이 경우에는 Stock stock1 = Stock.create("001", 2); Stock stock2 = Stock.create("002", 1);와 같이 생성 시점에 이미 부족한 수량으로 설정 하여 테스트를 진행하여 deductQuantity를 사용하지 않고, deductQuantity의 경우 따로 단위 테스트를 통해 수량 감소를 확인하는걸로 테스트를 구성하는 식으로 가면 되는건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 설계 관련된 질문이 있습니다
[질문 내용]배운 내용을 바탕으로 혼자 프로젝트 생각해서 만들고 있는데요어떤게 궁금한지 간단히 말씀드리면멤버라는 엔티티가 있습니다.. 멤버라는 엔티티에는 오늘의 추천 할 일이 필요하고 날마다 바뀝니다. 추천할 일은 개발자 혹은 운영자가 직접 넣는 것이구요.. 이러면 member랑 추천선행이랑 연관관계가 필요가 없지 않나요??이러면 추천선행은 ERD? 같은거 설계할때 연관관계ㅒ 없이 동떨어져있는 걸로 그리면 될까요?? 혹시라도 전에 사용했던 추천선행이 안나오게 하려면 이 경우는 연관관계를 세팅하는게 좋을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키(EmbeddedId) 사용시 도커환경에서 API Empty Value 반환 이슈
안녕하세요 영한님,영한님 강의중 QueryDsl, JPA 다 시청한 수강자인데따로 복합키 복합키 EmbeddedId 를 언급하는 강의가 없어 여기에 질문 남기는점 죄송합니다,현재 복합키로 구성되어있는 엔티티를 QueryDSL로 조회하여 반환하는 API를 설계했는데 로컬 IDE 즉 제 로컬 인텔리제이에서 빌드해서 Application을 띄울 시에 원하는 시나리오대로 DB의 저장되어있는 데이터를 반환하지만, Image 환경 즉 Docker Container, ECS 환경에서 이 JAR 파일을 빌드시에 쿼리는 잘 나가지만 데이터가 불러와지지 않는 현상이 발견됩니다,(제 로컬에서 터미널을 통해 Jar파일을 빌드해도 잘 됩니다.)복합키로 구성되어있는 테이블중 다른 일반타입의 필드(컬럼)만을 조회할땐 문제가 없지만 복합키중 일부 컬럼을 같이 조회할 시 이런 현상이 발견되고 있습니다.. 이런 이슈를 겪어본적이 있으신지 아니면 이 문제에 대해 해결방법이 있는지 궁급합니다. +++@Query 어노테이션으로 네이티브 쿼리를 짜봐서 도커 환경에서 테스트 해봤는데 네이티브 쿼리는 또 정상작동을 하네요...
-
미해결실전! Querydsl
on join 을 사용할 경우 select 에 하나의 객체만 넣으면 안되나요?
@Test public void join_on() { List<Tuple> result = query .select(member, team) .from(member) .leftJoin(member.team, team) .on(team.name.eq("teamA")) .fetch(); for (Tuple tuple : result) { System.out.println(tuple); } }이게 강사님께서 설명해주신 코드입니다. 이렇게 조회하게 되면 정상적으로 tuple 에 team name 이 "teamA" 것만 포함됩니다.근데 여기서 select 에 member 만 추가하게 되면 다음과 같습니다.@Test public void select_one() { List<Member> result = query .selectFrom(member) .leftJoin(member.team, team) .on(team.name.eq("teamA")) .fetch(); for (Member member1 : result) { System.out.println(member1); System.out.println(member1.getTeam()); } }이럴 경우 member getTeam 을 통해 team 을 확인하면 "teamB" 인 team도 포함되어 있습니다. 왜 이렇게 되는지 궁금해서 sql 을 봤는데 순서대로 아래가 강사님이 짜주신 select(member, team) 으로 발생한 sql 이고select m1_0.member_id, m1_0.age, m1_0.team_id, m1_0.username, t1_0.team_id, t1_0.name from member m1_0 left join team t1_0 on t1_0.team_id=m1_0.team_id and t1_0.name=? 아래가 제가 임의로 짠 select(member) 만 해서 발생한 sql입니다.select m1_0.member_id, m1_0.age, m1_0.team_id, m1_0.username from member m1_0 left join team t1_0 on t1_0.team_id=m1_0.team_id and t1_0.name=?보면 select 하는 부분만 다르고 left join 하는 부분은 완벽하게 같은데.. 왜 위의 코드로 실행하면 정상적으로 teamA 만 join 되고 아래 코드로 실행하면 teamB까지 join 되는 건가요..?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
login 요청하면 404 에러가 발생합니다.
포스트맨으로 API_GW를 경유해서 http://127.0.0.1:8000/user-service/login 요청하면 404 에러가 발생합니다.근데 http://127.0.0.1:54656/login 로 바로 리퀘스트하면 200 상태가 반환됩니다.로그인만 저렇고 http://127.0.0.1:8000/user-service/users 요청하면 회원가입은 또 됩니다..어디 부분부터 잘못되었는지 찾아봐야할까요?필터부분도 오타없이 잘 되었는데.. - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/login - Method=POST filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment}/ - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/users - Method=POST filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment}/ - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment}/
-
미해결Practical Testing: 실용적인 테스트 가이드
controller, service용 dto를 분리시키는 것에 대한 질문
항상 잘 듣고 있습니다. 감사합니다. controller layer와 service layer의 dto를 서로 분리시켜서 service layer가 상위 레이어를 모르도록 한다는 것은 이해가 되었습니다.질문 드리겠습니다! dto를 분리할 때, 중복된 코드가 복잡성을 증가시킬 수도 있고 운영 시, 두 dto 간의 변환 과정의 비용이 어느 정도 성능에 영향을 미칠 수 있다고도 생각합니다.2개로 분리하는 방법은 일반적인 설계 패턴은 아니라고 생각되는데, 혹시 현업에서도 자주 사용하는 방식이신지가 궁금합니다. service에서 생성된 response 데이터에 대해서도 controller만의 response dto를 따로 생성할 필요가 있는지 궁금합니다. 클라이언트로 내려주는 응답 객체로 controller 클래스에서 ResponseEntity는 사용하지 않으시는지,주로 현업에서도 강의에서처럼 응답 객체(ApiReponse)를 커스텀해서 내려주는 방식을 선호하시는지 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Controller 테스트할 때, Service 에 대한 로직
안녕하세요! 테스트에 대해 의아했던 부분이 많이 풀리는 강의입니다. 정말 감사드려요. 강의를 잘 듣고 있다가 궁금한게 생겨서요!controller @mockBean Service service @test void postData() { // when when(service.message()).thenRetrun() }간단하게 코드를 적어봣는데요!service에 대해 MockBean으로 주입만 해줬을 뿐, Service에 대한 로직이 없어서요!제 생각에는 Service가 return 하는 부분은 이미 서비스 계층에서 테스트가 끝났고 Controller 에 테스트를 해야하는 주점은1 ) Request 에 오는 데이터들의 검증뿐이라고 생각하는데 맞나요? Get 같은 경우에도 Service에 오는 건 그냥 빈 배열처리하셨더라구요! 감사합니다!
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
토이 프로젝트 github 주소 공유 부탁드려요!
따라해보려고 합니다! 토이프로젝트 소스 공유 부탁드려요!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 쿠키 관련 질문이 있습니다
안녕하세요 강의 정말 잘보고있습니다!!쿠키의 수명이 30일인데 만약 토큰의 세션값(UUID)이 탈취된다면 해당방식에선 어떻게 대응할수있을까요?httpOnly나 Secure옵션 등으로인해 현실적으로 탈취는 쉽지않을것이다.. 로만 생각하기엔 뭔가 찝찝한부분이 있는것같은데 제가 놓치고있는부분이 있을까요??또한 호돌님이 생각하시는 해당강의에서 다뤘던 쿠키에 세션토큰을 담아서 인증하는 방식의 단점이 궁금합니다!!
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
강사님! 질문입니다. 프로젝트를 진행중인데 빠른 답변 부탁드립니다 ㅠㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 프론트와 백앤드로 나눠서 프로젝트를 진행중입니다. swagger를 강의를 참고하여 적용중인데, 다음과 같이 문서화가 되지 않고있습니다.@Configuration@EnableSwagger2@EnableAsync@EnableWebMvcpublic class SwaggerConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select() // ApiSelectorBuilder 생성.apis(RequestHandlerSelectors.basePackage("com.example.petree.domain")) // API 패키지 경로 todo 패키지 경로 수정.paths(PathSelectors.ant("domain/**/controller/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정.build().apiInfo(apiInfo()) // API 문서에 대한 정보 추가.useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거.securityContexts(Arrays.asList(securityContext())).securitySchemes(Arrays.asList(apiKey()));}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("API 문서").description("API에 대해서 설명해주는 문서입니다.").version("1.0").build();}private SecurityContext securityContext() {return SecurityContext.builder().securityReferences(defaultAuth()).build();}private List<SecurityReference> defaultAuth() {AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];authorizationScopes[0] = authorizationScope;return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));}private ApiKey apiKey() {return new ApiKey("Authorization", "Authorization", "header");}} 위는 저희 프로젝트의 패키지경로입니다. 무엇이 문제인가요..? 혹시 몰라 SecurityConfig도 올려보겠습니다..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
이미지 파일과 첨부 파일을 같은 타입의 엔티티 콜렉션으로 사용시 발생하는 문제
안녕하세요, 배운 내용을 기반으로 스스로 개발 연습을 하고 있었습니다.Article이라는 엔티티에 본문에 첨부되어 뷰에서 보일 이미지 파일들과 버튼을 누르면 다운로드가 가능한 첨부 파일들을 동시에 넣고자 했습니다.이미지 파일과 첨부 파일은 모두 UploadFile이라는 엔티티를 사용하였습니다.서버에서 실험차 Article 엔티티를 작성해보니, 이미지 파일과 첨부 파일 리스트가 각각 적용 되는 것이 아니라 합쳐졌습니다.예를 들어 이미지 파일을 2개 등록하고 첨부 파일을 3개 등록하였으면, imageFiles와 attachedFiles List의 사이즈가 각각 2, 3개 인 것이 아니라 똑같이 5, 5개였습니다.이미지 파일과 첨부 파일이 다른 종류의 파일임에도 불구하고 결국 같은 엔티티를 공유하고 있어서 발생한 문제인걸까요?현재 생각하고 있는 해결책은 이미지 파일과 첨부 파일을 각각 다른 엔티티로 만들어서 따로 테이블을 관리하면 되겠다고 생각중입니다.하지만 혹시 이보다 더 좋거나 근본적인 해결책이 있지 않을까 싶어서 질문을 올려봅니다.두 엔티티의 코드는 다음과 같은데 혹시 다른 코드가 더 필요한 것이라면 올리겠습니다!// 게시글 엔티티 @Entity @Getter public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "article_id") private Long id; private String writer; private String title; @Lob private String content; @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, orphanRemoval = true) private List<UploadFile> imageFiles = new ArrayList<>(); @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, orphanRemoval = true) private List<UploadFile> attachedFiles = new ArrayList<>(); public static Article createArticle(ArticleAddForm articleAddForm, List<UploadFile> imageFiles, List<UploadFile> attachedFiles) { Article article = new Article(); article.writer = articleAddForm.getWriter(); article.title = articleAddForm.getTitle(); article.content = articleAddForm.getContent(); article.imageFiles.addAll(imageFiles); article.attachedFiles.addAll(attachedFiles); for (UploadFile imageFile : imageFiles) { imageFile.setArticle(article); } for (UploadFile attachedFile : attachedFiles) { attachedFile.setArticle(article); } return article; } } // 업로드 파일 엔티티 (이미지 파일, 첨부 파일의 엔티티로서 동시에 사용됨) @Entity @Getter public class UploadFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "upload_file_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "article_id") private Article article; private String originalName; private String storeName; public UploadFile() { } public UploadFile(String originalName, String storeName) { this.originalName = originalName; this.storeName = storeName; } public void setArticle(Article article) { this.article = article; } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hibernate.hbm2ddl.auto create로 했을 때
외래키 제약들이 걸려있어서 테이블이 삭제 될 때 순서대로 삭제하는 것이 아니라 막 삭제해서 제대로 테이블이 삭제되지않습니다org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "CATEGORY" because "FKPEKL6BDCJ36BTQ87GKJ9MLDNQ" depends on it; SQL statement해당 경우는 어떻게 해결하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mapping table 질문
(1)ORDER_ITEM은 ORDERS,ITEM에 N:M구조의CATEGORY_ITEM은 ITEM, CATEGORY에 N:M구조의 Mappting table인기요? (2)ORDER_ITEM은 다대다 구조를 @ManyToOne로 다대일로 나눠서 해결했고CATEGORY_ITEM은 다대다 구조를 @ManyToMany로 해결했는데 실무에서는 @ManyToMany를 사용하면 안된다 라고 이해하면 될까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
낙관적 락 엔티티 관련
안녕하세요.낙관적 락을 공부하며 생긴 질문을 드립니다..@Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; @Version private Long version; @Builder public Stock(Long productId, Long quantity) { this.id = null; this.productId = productId; this.quantity = quantity; this.version = 0L; } public void decrease(Long quantity) { if(this.quantity - quantity < 0) throw new IllegalArgumentException("재고가 부족합니다."); this.quantity -= quantity; } }위와 같이 Entity 를 작성하였습니다. 실행환경은 MySQL 입니다. 동작 과정은 다음과 같습니다.엔티티를 생성하고..JpaRepository 인터페이스를 상속받은 Repository 의 save 메서드의 파라미터로 엔티티를 전달하였습니다..저는 여기서 파라미터로 전달한 엔티티 인스턴스가 영속 상태로 관리될 것이라 생각했습니다.(일반적으론 그렇더라구요..)그런데 version 프로퍼티 때문인지.. 영속성 컨텍스트에 관리되는 엔티티는 파라미터로 전달한 엔티티 인스턴스가 아니라.. JPA 가 만들어낸 새로운 인스턴스였습니다..(파라미터로 전달한 엔티티 인스턴스에는 id 가 채워지지 않았습니다.) 해당 상황에 대해.. 원리와 이유가 궁금합니다.. 늘 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA 트랜잭션과 batch_fetch_size 질문이 있습니다.
@Transactional public List<Order> findAllWithMemberDelivery(int offset,int limit) { List<Order> resultList = em.createQuery( "select o from Order o" + " join fetch o.member m" + " join fetch o.delivery d", Order.class) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); return resultList; } 1. @Transaction이 있을 때 조회쿼리select o1_0.order_id, d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status, m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name, o1_0.order_date, o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id join delivery d1_0 on d1_0.delivery_id=o1_0.delivery_id offset ? rows fetch first ? rows only 2023-07-15T01:15:30.105+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [INTEGER] - [0] 2023-07-15T01:15:30.105+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [2] as [INTEGER] - [100] select o1_0.order_id, o1_0.oder_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where array_contains(?,o1_0.order_id) 2023-07-15T01:15:30.122+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[1, null, null, null,...] select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.artist, i1_0.etc, i1_0.author, i1_0.isbn, i1_0.actor, i1_0.director from item i1_0 where array_contains(?,i1_0.item_id) 2023-07-15T01:15:30.139+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[2, 1, null, null, null,...] select o1_0.order_id, o1_0.oder_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where array_contains(?,o1_0.order_id) 2023-07-15T01:15:30.142+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[2, null, ...] select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.artist, i1_0.etc, i1_0.author, i1_0.isbn, i1_0.actor, i1_0.director from item i1_0 where array_contains(?,i1_0.item_id) 2023-07-15T01:15:30.144+09:00 TRACE 20476 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[4, 3, null, null, null,...] public List<Order> findAllWithMemberDelivery(int offset,int limit) { List<Order> resultList = em.createQuery( "select o from Order o" + " join fetch o.member m" + " join fetch o.delivery d", Order.class) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); return resultList; }트랜잭션 없이 실행된 쿼리 select o1_0.order_id, d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status, m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name, o1_0.order_date, o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id join delivery d1_0 on d1_0.delivery_id=o1_0.delivery_id offset ? rows fetch first ? rows only 2023-07-15T01:19:19.943+09:00 TRACE 14616 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [INTEGER] - [0] 2023-07-15T01:19:19.943+09:00 TRACE 14616 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [2] as [INTEGER] - [100] select o1_0.order_id, o1_0.oder_item_id, o1_0.count, o1_0.item_id, o1_0.order_price from order_item o1_0 where array_contains(?,o1_0.order_id) 2023-07-15T01:19:19.957+09:00 TRACE 14616 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[1, 2, null, null,...] select i1_0.item_id, i1_0.dtype, i1_0.name, i1_0.price, i1_0.stock_quantity, i1_0.artist, i1_0.etc, i1_0.author, i1_0.isbn, i1_0.actor, i1_0.director from item i1_0 where array_contains(?,i1_0.item_id) 2023-07-15T01:19:19.977+09:00 TRACE 14616 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [ARRAY] - [[2, 1, 4, 3, null, null, null, null, null, null]] @트랜잭션이 있을 때에는 쿼리가 5번 실행이 되고@트랜잭션이 없을 때에는 쿼리가 3번이 실행이 됩니다. 왜 이렇게 동작하는지 생각을 해도 이해가 잘 안되네요
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
도메인 객체를 불변으로 만들어야 하는가가 궁금합니다.
Post를 수정한다면 새로 만들어지는 것이 아닌 존재하는 객체를 변경하는게 조금 더 잘 읽힐것 같은데 불변객체로 만드신 이유가 궁금합니다. 혹시 실무에서도 도메인 엔티티에 대해 불변으로 사용하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ddl-auto = update 정확한 정의!
안녕하세요 강의 열심히 수강중인 학생입니다. ddl-auto관련 설정이 정확히 궁금해서 여러가지 시도를 해보고 있었습니다! ddl-auto = update 로 진행을 할 경우 궁금증이 생겨서 글 남깁니다.이전과 비교하여 바뀐 부분을 수정한다라고만 생각하고 여러가지를 해보았는데 예를 들면 엔티티 필드 private Integer price에 @NotNull을 작성한 상태였습니다. 이를 지우고 재실행 시켰을 시 여전히 NotNull제약조건이 적용되어있었습니다. 또한 아예 필드를 지웠을 경우에도 데이터 베이스에는 price가 남아있었습니다. 구글링을 해보니 그나마 찾은 것이 없던것을 추가시킨다는 정도의 답변을 찾은 것 같습니다. 그렇다면 제약 조건을 바꾸거나 속성을 삭제하는 경우등은 직접 쿼리를 작성해서 처리해야하는 것일까요? update는 없던 것을 생성 시켜주는 처리만 해주는 것이 맞는지 궁금합니다!
-
미해결실전! 스프링 데이터 JPA
loginfailureHandler에서 db에 로그 저장 시 에러
안녕하세요질문이 있어서 글을 남깁니다. 로그인 실패 시 handler에서 DB에 로그를 남기고 싶은데,마지막 loginLogService.saveLoginLog(loginLogDto); 에서 null 됩니다.어떤 것이 문제일까요???답변 부탁드립니다.감사합니다.