inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

25강 질문있습니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

저장기능 변경에서 save를 하게 되면 저장된 User객체가 반환되는데 이때 id를 사용할 수도 있다.라고 했는데반환되는것이 User객체의 ID인건가요? 그리고 꼭 반환 안하고 처음에 작성했던 public void saveUser(UserCreateRequest request) { userRepository.save (new User(request.getName(), request.getAge())); } 이렇게 써도 되는건가요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
우잉 댓글 1 좋아요 0 조회수 94

25강 질문있습니다

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

JpaRepository를 UserRepository가 상속받게 해줄때, 만든 테이블의 매핑 객체인 User 와 유저 테이블의 id인 Long 타입을 각각 적어주어야 한다고 하셨는데 user객체는 이해가 가는데 갑자기 id인 Long타입은 왜 적나요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
우잉 댓글 2 좋아요 0 조회수 114

OncePerRequestFilter 질문

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

OncePerRequestFilter는 요청당 한 번만 필터가 동작하도록 보장된? 필터라고 말씀해주셨는게 하나의 요청에 하나의 필터가 여러 번 동작하는 경우도 있나요..?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
정민교 댓글 2 좋아요 0 조회수 393

Hikari 라이브러리가 없으면 오류가 나는거 아닌가요

미해결

토비의 스프링 부트 - 이해와 원리

제가 이번 강의까지 보다가 한달만에 다시봐서 헷갈리는걸수도 있는데 갑자기 궁금하여 질문드립니다.. Hikari 라이브러리를 gradle에서 가져오지 못하는 이슈 때문에 이번 강의의 커뮤니티 게시판에 다른 분이 작성한 글을 참고하여 토비님과 다르게 gradle에 implementation('com.zaxxer:HikariCP:4.0.3')를 추가해줘서 강의를 보고 있는데요. 강의에서 DataSourceConfig 클래스 안에서 Hikari 관련된 빈을 등록하여 사용하려고 하는데, 이게 어떻게보면 Hikari 관련된 라이브러리가 있으면 사용하고, 아니면 기본 DataSource를 사용하게끔 하는 의도가 있는 자동구성등록하는 방법 이잖아요.. 근데 Hikari 라이브러리를 gradle에 추가 후, 토비님 처럼 테스트를 하면 Hikari가 DataSource로 사용되어 정상 동작하는데, 만약에 반대로 Hikari를 gradle에서 빼면 기본적인 SimpleDriverDataSource 객체가 사용되는게 예상을 하였는데, 당연하게도? gradle에서 Hikari 관련된 implement를 제거해버리면, SimpleDriverDataSource 객체를 사용하기 전에 DataSourceConfig 클래스 안에서 Hikari 관련된 로직들이, Hikari 라이브러리가 없기 떄문에 오류가 나지 않나요? 즉, Hikari라는 라이브러리가 없도록, gradle에서 Hikari와 관련된 implements를 빼버리면 SimpleDriverDataSource 가 사용되는게 아니라, 애초에 소스에서 오류가 나는게 맞는건데.. 제가 어디부터 혼란이 온지 모르겠네요.

  • spring
  • spring-boot
  • spring-jdbc
전인호 댓글 2 좋아요 0 조회수 375

open-in-view값 true/false

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

@Controller @RequiredArgsConstructor @RequestMapping("/board") public class BoardController { @PostMapping("/update") public String update(@ModelAttribute BoardDTO boardDTO, Model model) { BoardDTO board = boardService.update(boardDTO); model.addAttribute("board", board); return "detail"; } } @Service @RequiredArgsConstructor public class BoardService { private final BoardRepository boardRepository; public BoardDTO findById(Long id) { System.out.println("findById : "+ em.getDelegate()); // 이 아래 코드에서 질문 있습니다. Optional<BoardEntity> optionalBoardEntity = boardRepository.findById(id); if (optionalBoardEntity.isPresent()) { BoardEntity boardEntity = optionalBoardEntity.get(); return BoardDTO.toBoardDTO(boardEntity); } else { return null; } } public BoardDTO update(BoardDTO boardDTO) { System.out.println("update : "+ em.getDelegate()); BoardEntity boardEntity = BoardEntity.toUpdateEntity(boardDTO); boardRepository.save(boardEntity); return findById(boardDTO.getId()); } } @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @Getter public class BaseEntity { @CreationTimestamp @Column(updatable = false) private LocalDateTime createdTime; @UpdateTimestamp @Column(insertable = false) private LocalDateTime updatedTime; } @Entity @Getter @Setter @Table(name = "board_table") public class BoardEntity extends BaseEntity { @Id GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String boardWriter; private String boardPass; private String boardTitle; private String boardContents; private int boardHits; public static BoardEntity toUpdateEntity(BoardDTO boardDTO) { BoardEntity boardEntity = new BoardEntity(); boardEntity.setId(boardDTO.getId()); boardEntity.setBoardWriter(boardDTO.getBoardWriter()); boardEntity.setBoardPass(boardDTO.getBoardPass()); boardEntity.setBoardTitle(boardDTO.getBoardTitle()); boardEntity.setBoardContents(boardDTO.getBoardContents()); boardEntity.setBoardHits(boardDTO.getBoardHits()); return boardEntity; } } 위에 코드 상황에서 open-in-view를 true로 하면 optionalBoardEntity에 createdTime 값이 null입니다. 제 생각으로는 open-in-view가 true 이므로 update()에서 (createdTime 값이 없는) boardEntity가 영속성 컨텍스트 1차 캐시에 존재하고, findById()에서 boardRepository.findById(id) 값을 호출하지만 1차캐시에 있는 값을 줘서 최종적으로 boardEntity값에는 createdTime값이 없는 것으로 이해했습니다. 그런데 왜 open-in-view값을 false로 하면 boardEntity에 createdTime 값이 있는지 모르겠습니다. open-in-view가 true 이건 false 이건 영속성 컨텍스트 생존 범위에 Service는 포함되니 createdTime 값이 둘 다 없어야 되는것이 아닌지 궁금합니다.

  • java
  • spring
  • spring-boot
  • jpa
lwisekiml 댓글 1 좋아요 0 조회수 208

스프링 JdbcTemplate강의를 듣고 궁금한 점이 생겨 질문드립니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 다른 강의의 내용에서 스프링 빈에 dataSource와 JdbcTemplate이 등록이 되어 있는 내용을 보았습니다. 그래서 dataSource를 통해 DB와 커넥션을 만드는 부분에서는 새로운 객체를 생성하지 않고 dataSource를 받아와 의존성 주입을 받았는데 여기에서는 JdbcTemplate의 새로운 객체를 생성하여 의존성 주입을 받는데 그러면 싱글톤에서 위배가 되는것 아닌가요? 다른 강의에서는 SQL을 DB로 사용하였습니다. 혹시 DB의 차이에 따라 위와 같이 새로운 JdbcTemplate의 객체를 생성할 수 있는 걸까요?

  • java
  • spring
  • mvc
  • spring-boot
꽓꼵이 댓글 1 좋아요 0 조회수 332

[스프링부트 3.2] RefreshToken 발급시 파라미터 오류

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

스프링부트 3.2 버전인데 APIRefreshController의 refresh의 파라미터중 String refreshToken만 적으면 -parameter 오류가 나네요. 인텔리제이에서 gradle로 빌드하거나 어노테이션에 이름을 붙여 적으니 잘 동작합니다. 식겁했습니다..

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
ghoonpark 댓글 1 좋아요 1 조회수 206

트랜잭션 관련 질문

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 현재 컨트롤러에서 직접 리포지토리를 접근하는데 예전 강의에서 단순 엔티티 조회할때는 실용적인 관점으로 서비스를 통해 접근하는 것이 아닌 리포지토리로 바로 접근하기도 한다는걸 들었습니다. 이번 강의에 그 점이 적용이 된거 같습니다. 여기서 궁금점은 jpa의 모든 데이터 변경은 트랜잭션 안에서 실행된다고 하셨는데 현재 레포지토리에 바로 접근하면서 @Transactional 애노테이션을 사용안하는 것을 확인하였습니다. 단순 조회에서는 트랜잭션을 시작할 필요가 없는 건가요? 아니면 숨겨진 기능이 있는건지 궁금합니다!

  • java
  • spring
  • spring-boot
  • jpa
장재현 댓글 1 좋아요 0 조회수 170

14강. 유저 업데이트 API, 삭제 API 개발과 테스트 수정하기 안됨

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

코드대로 글을 잘 작성하고 POST,GET,DELETE도 전부 잘 동작하고 db에서도 확인이 되는데, 수정하기만 동작하지 않습니다..어떻게 해야할까요.. 수정하기 버튼을 누를시 아무런 화면의 변화가 없습니다.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
노움킴 댓글 2 좋아요 0 조회수 236

MemberRepository { 질문이요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 해당 부분에서 오류 발생되는데 왜 그런 걸까요 public class MemoryMemberRepository implements MemberRepository { 이부분에 빨간줄이 있습니다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.*; /** * 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려 */ public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findByID(long id) { return Optional.ofNullable(store.get(id)); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } public void clearStore() { store.clear(); } }

  • java
  • spring
  • mvc
  • spring-boot
장진웅 댓글 2 좋아요 0 조회수 360

ModelMapper 와 entityToDto 차이

미해결

코드로 배우는 React 19 with 스프링부트 API서버

강사님의 강의에서 엔티티를 DTO로 변환할때 2가지 방식을 다 보여주셨는데 , 모델 매퍼로 엔티티 -> DTO 변환방식과 entityToDto 메소드 처럼 직접 개발자가 명시해줘서 엔티티를 DTO로 변환하는 방식의 차이점과 선택기준이 궁금합니다!!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
현이 댓글 1 좋아요 0 조회수 140

섹션3 질문 있습니다

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요! 섹션3 마지막 부분쯤 나온 @Component 어노테이션에 대해 질문이 있습니다! 이 어노테이션은 다음과 같은 경우에 사용된다고 하셨는데요! 컨트롤러, 서지스, 리포지토리가 모두 아니고, 개발자가 직접 작성한 클래스를 스프링 빈으로 등록할 때 사용된다. 제가 궁금한 것은 Service 나 리포지토리 모두 우리가 직접 작성한 클래스 아닌가요?? 그러면 컴포넌트 어노테이션 아닌가요?? 답변해주시면 감사하겠습니다

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 123

섹션3 컨트롤러테스트 오류

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

안녕하세요. 강의노트와 강의를 보면서 수정해 보았는데 resume에서만 test가 실패합니다. 제가 보기엔 resume가 JSON이 null이라서 그런것 같은데 어느 부분을 봐야할지 모르겠습니다. Datainitiallizer.kt를 봐도 잘 안보이네요. 아래는 에러 메세지와 코드입니다. java.lang.NullPointerException: Cannot invoke "org.json.JSONArray.length()" because the return value of "org.json.JSONObject.optJSONArray(String)" is null at com.dogu.portfolio.presentation.controller.PresentationApiControllerTest.testGetResume(PresentationApiControllerTest.kt:66) at java.base/java.lang.reflect.Method.invoke(Method.java:569) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) @Test @DisplayName("resume") fun testGetResume() { //given val uri = "/api/v1/resume" //when val mvcResult = performGet(uri) val contentAsString = mvcResult.response.getContentAsString(StandardCharsets.UTF_8) val jsonObject = JSONObject(contentAsString) //then Assertions.assertThat(jsonObject.optJSONArray("experiences").length()).isPositive() Assertions.assertThat(jsonObject.optJSONArray("achievements").length()).isPositive() Assertions.assertThat(jsonObject.optJSONArray("skills").length()).isPositive() }

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
Lerna 댓글 1 좋아요 0 조회수 169

join과 join feth 차이점

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

public List<Order> findSearchOrders(OrderSearch orderSearch){ return em.createQuery("select o from Order o join o.member m" + " where o.orderStatus = :status" + " and m.name like :name", Order.class) .setParameter("status", orderSearch.getOrderStatus() ) .setParameter("name", orderSearch.getMemberName()) .setMaxResults(1000) .getResultList(); } public List<OrderQueryDto> findQueryOrder() { List<OrderQueryDto> result = findAllOrder(); for (OrderQueryDto order : result) { List<OrderItemQueryDto> orderItems = findOrderItem(order.getId()); order.setOrderItems(orderItems); } return result; } public List<OrderItemQueryDto> findOrderItem(Long orderId) { String query = "select new jpabook.jpashop.repository.order.query." + " OrderItemQueryDto(oi.order.id, oi.orderPrice, oi.count )" + " from OrderItem oi " + " join oi.item i" + " where oi.order.id = :orderId"; return em.createQuery(query,OrderItemQueryDto.class) .setParameter("orderId", orderId) .getResultList(); } public List<OrderQueryDto> findAllOrder(){ String query = "select new jpabook.jpashop.repository.order.query." + " OrderQueryDto(o.id, m.name, d.address, o.orderStatus, o.orderDate) " + " from Order o " + " join o.member m" + " join o.delivery d"; return em.createQuery(query, OrderQueryDto.class).getResultList(); } 첫번째 코드 블럭은 order를 select 할때 member를 join 하면 member를 프록시 객체로 가져오는걸로 알고 있습니다. join fetch 를 하게 되면 바로 객체로 가지고 오는걸로 알고 있습니다. 하지만, 두번째 코드 블럭은 그냥 join을 했는데, 왜 프록시 객체에서 객체로 전환? 프록시 객체가 객체를 가르키는 행위를 하지않고도 dto에 바로 삽입이 가능한가요? ex) order.getName() , member.getName()

  • java
  • spring
  • spring-boot
  • jpa
김동훈 댓글 1 좋아요 0 조회수 242

26강 오류입니다 !

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

Execution failed for task ':LibraryAppApplication.main()'. > Process 'command 'C:/Program Files/Java/jdk-11/bin/java.exe'' finished with non-zero exit value 1 이것은 어떤 에러일까요 ㅠㅠ

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
쿵야 댓글 2 좋아요 0 조회수 146

비즈니스로직 처리 위치

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 지금까지 컨트롤러단에서 로직을 다 작성하셨는데요 원래 비즈니스로직 같은 경우는 서비스 단에서 처리를 해야 되지 않나 생각이 들어 질문합니다. 간단한 예시여서 컨트롤러 단에서 로직을 처리하고 dto를 이너클래스로 만드신 건가요? 비즈니스로직 처리 위치를 컨트롤러에서 해야될지 서비스단에서 해야될지 기준이 잘안서서 질문드립니다.~~

  • java
  • spring
  • spring-boot
  • jpa
gogo 댓글 1 좋아요 0 조회수 231

kafka Producer 실행 중 에러 시 redis count 정합성 이슈

미해결

실습으로 배우는 선착순 이벤트 시스템

안녕하세요! 섹션3 Producer 관련 강의를 보다가 궁금한 점이 생겼습니다. redis를 활용해 count 증가 후 선착순에 들어 kafka 로 이벤트를 발행하는 도중 네트워크 오류 등의 문제가 발생한다면 count 값만 늘어나고 쿠폰 생성이 안될 것 같습니다. 이 경우, 실무에서는 어떤 식으로 처리하시나요?? (redis쿼리 -> kafka 이벤트 발행)의 원자성을 보장해줘야 될 것 같다는 생각이 들었습니다. kafka의 이벤트 발행 부분을 try...catch로 감싸서 redis의 count를 감소시키는 로직을 작성하는게 가장 간단해보입니다. 그런데, 해당 롤백 로직에서 에러가 발생할수도 있기 때문에 카운트 증가 -> 이벤트 발행의 원자성을 보장하기 어려울 것 같습니다. 추가) kafka 이벤트 발행 실패 시 userId, eventId, count 값을 로그로 남겨 추후 kafka 이벤트를 재발행하는 방법도 있을 것 같습니다. 이때, 재실행은 로그에서 데이터를 추출 개발자가 수동 혹은 배치 등의 프로그램을 작성해 정합성을 맞추는걸까요?? 실무에서 어떤 식으로 실패한 요청을 다시 성공시키는지 궁금합니다

  • java
  • docker
  • spring-boot
  • kafka
  • redis
차영호 댓글 2 좋아요 0 조회수 459

쿠버네티스 버전에서의 토큰 검사

해결됨

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

안녕하세요, 강의 잘 들었습니다. 기존에 로그인 후 발급한 토큰을 apigateway에서 검사했었는데 k8s 버전에서는 별도로 토큰을 검사하지 않는 것 같습니다. 로그인하는 의미가 없어질 것 같은데 이부분을 추가하려면 각 서비스에 따로 추가를 하는게 좋을까요? 아니면 중앙으로 처리하는 방법이 따로 있을까요?

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
Corwin 댓글 2 좋아요 0 조회수 188

MemberServiceIntegrationTest 에서 Service대신 Repository로 테스트하는 이유가 궁금해요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

6강 스프링 DB 접근 기술.pdf 내용을 보면 MemberServiceIntegrationTest 에서는 MemberService로 join하고 Id를 찾는 내용은 Repository 를 통해 수행하는데요. service에 대한 테스트 코드기때문에 이전에 작성한 MemberServiceTest에서처럼 Service로 일관되게 사용하는게 맞지않나요? MemberServiceIntegrationTest .java //When Long saveId = memberService. join (member); //Then Member findMember = memberRepository. findById (saveId). get (); assertEquals (member. getName (), findMember. getName ()); MemberServiceTest.java Long saveId = memberService.join(member); Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName());

  • java
  • spring
  • mvc
  • spring-boot
인영 댓글 1 좋아요 0 조회수 163

'회원 이름 필수 입력' 기능

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 웹계층 회원등록 부분 강의 따라서 코딩하고, HTML 파일도 복붙했는데 홈페이지에 이름을 입력 안 해도 '회원 이름을 필수입니다' 메세지가 뜨는 반응이 없이 redirect됩니다. h2에는 이름이 비어 있는 상태로 데이터가 들어와 있습니다. @NotEmpty가 왜 작동하지 않는지 질문드립니다. https://drive.google.com/file/d/1jvu4wiWz3GwoZ3YazNDJWsFTOxgSqt-M/view?usp=sharing

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sichelmond 댓글 2 좋아요 0 조회수 184

인기 태그

인프런 TOP Writers

주간 인기글