묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Expected java.lang.IllegalStateException to be thrown, but nothing was thrown. 원인을 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강제로 중복 회원가입을 시켜서 에러를 발생시켜서 익셉션에 담긴 메세지랑 assertThat으로 비교하는 코드인데 잘 동작되던 코드가 JdbcTemplate 강의를 듣던 중에 테스트를 돌리니 에러가 발생하였습니다.@Test public void 중복_회원_예외() { //given Members members1 = new Members(); members1.setName("spring"); Members members2 = new Members(); members2.setName("spring"); //when membersService.join(members1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> membersService.join(members2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); //then }public Long join(Members members) { validateDuplicateMember(members); membersRepository.save(members); return members.getId(); }public class MembersService { private final MembersRepository membersRepository; @Autowired public MembersService(MembersRepository membersRepository) { this.membersRepository = membersRepository; } private void validateDuplicateMember(Members members) { membersRepository.findByName(members.getName()).ifPresent(members1 -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); } }
-
미해결실전! 스프링 데이터 JPA
UsernameOnlyDto에서 오류가 납니다...
계속 생성자에 인자를 안줬다는 오류가 나는거 같은데 수업과 똑같이 코드를 작성했는데 어디가 문제인지 모르겠습니다java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3e5e7f4c testClass = study.datajpa.repository.MemberRepositoryTest, locations = [], classes = [study.datajpa.DataJpaApplication], 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@2805d709, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@194bcebf, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@53ce1329, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@51e69659, org.springframework.boot.test.context.SpringBootTestAnnotation@a1c5547c], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost 8080/hello 에러
view 환경설정 강의 보면서 하는데 local:8080은 되는데 /hello만 하면 에러페이지가 뜨네요.뭐를 놓친건지 모르겠어요..ㅠ
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
외래키를 지양하라는 질문에 대한 궁금증
외래키 사용을 지양하라는 내용이 있어서 링크된 글을 읽어봤는데 궁금증이 있습니다. 외래키를 지양한다면 PK 값을 다른 테이블에 넣으면서 그 값으로 조인을 사용하는건가요?외래키를 지양했을 때 성능상의 이점은 알겠는데 결국 데이터 정합성 부분에서 문제가 발생합니다. RDB에서 데이터 정합성이 깨지면 사용하는 의미가 없다고 하는데 이부분에선 어떻게 생각하시나요?외래키를 안쓸경우 JPA에서 ManyToOne같은 메소드도 사용하지 않는건가요?그리고 해당 주장에 대해 반박하는 아래의 링크도 있는데 이 의견은 어떠신가요?https://gdsc-university-of-seoul.github.io/foreign-key/
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
예외처리 질문
try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } 이 코드를 실행하면 왜 밑에있는 출력문이 10개가 나오는지 궁금합니다 HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool -- HikariPool-1 - Added connection conn1: url=jdbc:h2:tcp://localhost/~/test user=SA
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.properties 안에 작성하는 것이 아니라 yml 파일로 두는 것인가요?
안녕하세요~! 질문이 있어 이렇게 남깁니다. 다른 답글을 보니 다양한 설정 방법이 있다라는 말씀을 남겨주셨는데 제가 다운 받은 springboot 에는 application.properties가 따로 있는데 이것과 병행해서 사용해도 문제가 없는 건가요? 아니면 환경설정을 하나로만 유지해야 되는건가요?
-
미해결스프링 부트 - 핵심 원리와 활용
IntelliJ무료버전 톰캣 실행이 안됩니다.
Smart Tomcat을 사용해서 실행하는데java.io.FileNotFoundException: C:\Users\...\smart-tomcat\conf\server.xml (지정된 파일을 찾을 수 없습니다) 발생합니다.경로가 Catalina base에 자동으로 채워지는 부분이었어요..어떻게해야될까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
필터와 인터셉트 & afterCompletion()에 대해서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]1.필터와 인터셉트의 선능차이 관련 로그인 체크해서, 로그인 페이지로 날려버리는 기능을 추가할때필터의 경우는 디스패치서블릿 이전에 실행되고, 차단할 수 있으니까 인터셉터보다는 서버 비용을 조금이라도 더 절감할 수 있는건가요?? 아니면 그냥 무시할정도의 미비한차이니까 인터셉터를 사용하든 상관 없나요? afterCompletion()로 로그처리 afterCompletion의 경우는 핸들러에서 예외가 발생할때에도 실행이 되니까, 모~든 핸들러의 예외를 로그 메세지로 관리하고 싶은 경우에는 "/*"로 필터를 걸고 afterCompletion에 예외관련된 로그 메세지를 출력되게 하면 되나요?실무에서도 이런식으로, 시스템 전체의 예외 메세지를 남기기위해서 사용하나요?
-
미해결스프링 핵심 원리 - 기본편
Configuration질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]컴포넌스 스캔을 사용하면 클래스 내의 메소드에 빈을 하나하나 등록할 필요없이 컴포넌스만 붙이면 알아서 빈에 등록하는 것으로 이해했습니다. 그런데 강의 내용 중 컨피그레이션을 사용하는 경우 내부적으로 컴포넌트가 붙여져 있음을 알려주셨는데요. 그럼 컨피그레이션을 붙이면 빈을 일일히 등록해줄 필요가 없어지는 거 아닌가요?? 맞다면 이 경우 컴포넌트를 사용하는 것과 컴피그레이션을 사용하는 것의 유의미한 차이가 무엇인지 궁금합니다.
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
MVC02에서 List 화면이 나오지 않습니다
안녕하세요, 강의 실습을 따라서 진행하는 중에 화면이 잘 안나오는 문제가 있어서 질문 드립니다.지난번에 MVC01에서 화면이 로드되지 않는 문제에 대해 maven clean, install을 알려주셔서 이후에는 화면 부분을 생성할 때마다 maven clean, install을 진행했습니다ㅜㅜ하지만 이번에는 maven clean,install을 실행하거나 프로그램을 껐다가 다시 해봐도 List가 나오지 않습니다.브라우저의 결과는 아래와 같습니다.List 출력 전 json 알림까지도 잘 나왔고 http://localhost:8080/controller/boardList.do에서도 아래 이미지처럼 나왔습니다.main.jsp 파일입니다. 제가 보기에는 오타 없는 것 같아요. 32번줄 table부분은 var listHtml="<table class='table table-boardered'>";로도 바꿔봤는데 결과는 같습니다.controller 부분입니다.또한 pom.xml dependency도 추가했습니다.서버도 문제 없이 작동되고 있습니다.어디가 문제일까요... 강의를 너무 잘 듣고 있는데 환경 설정 때문인지 자꾸 실행되지 않는 부분이 생겨서 질문 남깁니다ㅜㅜegov 4.0으로 초기 셋팅은 강사님과 동일합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestMapping에 대해서 질문이있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Controller 인터페이스 HttpRequestHandler 인터페이스를 상속받은클래스를 OverRide한 메소드를 사용하는경우에는 해당 클래스의 객체 단위로 Mapping이 등록되는것으로 아는데 @RequestMapping를 사용하면 기존과는 다르게 HandlerMapping부분에는 메소드 단위로 Mapping에 등록이 되는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
샘플 데이터 입력시 OrderItem, Delivery를 persist()하지 않는 이유
확인 차원에서 질문드립니다. 샘플 데이터를 넣는 코드에서 member, book, order은 em.persist()를 통해 영속성 컨텍스트에 등록합니다.반면에 orderItem과 delivery는 따로 persist()를 하지 않습니다. 그 이유가 Order 엔티티 연관 관계에서 Cascasde 옵션을 했기 때문에, order 객체를 영속성 컨텍스트에 올려 놓는 순간, orderItem과 delivery 객체도 함께 등록되기 때문이라고 이해했습니다.제가 잘 이해했는지 궁금합니다.package jpabook.jpashop.domain; @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { .... @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; .... } public void dbInit1() { Member member = createMember("userA", "서울", "1", "1111"); em.persist(member); Book book1 = createBook("JPA1 BOOK", 10000, 100); em.persist(book1); Book book2 = createBook("JPA2 BOOK", 20000, 100); em.persist(book2); OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2); Delivery delivery = createDelivery(member); Order order = Order.createOrder(member, delivery, orderItem1, orderItem2); em.persist(order); }
-
미해결스프링 부트 - 핵심 원리와 활용
HTTP 방식의 actuator가 메트릭을 수집하는 방법
Actuator 강의를 수강하고 추가적으로 공부하다가 생긴 의문점입니다. Actuator는 크게 HTTP와 JMX 방식을 통해 모니터링을 제공한다고 알고 있습니다. 스프링부트 공식문서를 읽다보니, JMX 방식의 경우에는 MBean이라는 객체를 통해특정 메트릭들에 대한 정보를 노출 시킨다는 사실을 알았습니다.(https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.jmx) 그러면 HTTP 방식으로 노출된 메트릭들의 경우 어떤 방식으로 데이터가 수집되는지에 대한 의문이 생겨 질문드립니다. 뇌피셜로는 MBean으로부터 동일하게 정보를 가져와서 적절히 추상화 시킨 후 HTTP로 노출시키는게 아닐까? 라는 생각이 드는데 공식적인 레퍼런스를 아직은 찾지 못했습니다. 해당 질문에 대한 답변 또는 참고할만한 레퍼런스가 있다면 답변을 부탁드립니다.좋은강의 항상 감사드립니다.
-
미해결실전! 스프링 데이터 JPA
페이징 처리에서 1부터 시작하기
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]페이지처리에서 1부터 하는거에 대해서 질문이 있습니다. data: web: pageable: default-page-size: 10 max-page-size: 2000 one-indexed-parameters: true이렇게 처리를 하고 // 상품에 대한 문의글 보기 @Transactional(readOnly = true) @Override public Page<BoardDTO> getBoards(Pageable pageable, Long itemId, String email) { // 회원 조회 MemberEntity findUser = memberRepository.findByEmail(email); log.info("유저 : " + findUser); // 상품 조회 ItemEntity findItem = itemRepository.findById(itemId) .orElseThrow(EntityNotFoundException::new); log.info("상품 : " + findItem); // 조회해올 게시글을 넣을 곳 Page<BoardEntity> findAllBoards = boardRepository.findAllByItemItemId(itemId, pageable); // 댓글이 있으면 답변완료, 없으면 미완료 for(BoardEntity boardCheck : findAllBoards) { if(boardCheck.getCommentEntityList().isEmpty()) { boardCheck.changeReply(ReplyStatus.REPLY_X); } else { boardCheck.changeReply(ReplyStatus.REPLY_O); } } for (BoardEntity boardEntity : findAllBoards) { // 파라미터로 받아온 이메일이 있다면 if (email != null) { // 해당 게시글을 만들때 이메일과 조회한 이메일을 체크 // 그리고 맞다면 읽을 권한주고 없으면 잠가주기 if (boardEntity.getMember().getEmail().equals(findUser.getEmail())) { boardEntity.changeSecret(BoardSecret.UN_LOCK); } else { boardEntity.changeSecret(BoardSecret.LOCK); } } else { boardEntity.changeSecret(BoardSecret.LOCK); } } log.info("조회된 게시글 수 : {}", findAllBoards.getTotalElements()); log.info("조회된 게시글 : {}", findAllBoards); return findAllBoards.map(board -> BoardDTO.toBoardDTO( board, board.getMember().getNickName(), board.getItem().getItemId())); }// 상품에 대한 문의글 전체 보기 @GetMapping("") @Tag(name = "board") @Operation(summary = "문의글 전체 보기", description = "모든 상품에 대한 문의글을 봅니다.") public ResponseEntity<?> getBoards( // SecuritConfig에 Page 설정을 한 페이지에 10개 보여주도록 // 설정을 해서 여기서는 할 필요가 없다. @PageableDefault(sort = "boardId", direction = Sort.Direction.DESC) Pageable pageable, @PathVariable(name = "itemId") Long itemId, @RequestParam(value = "email", required = false) String email) { try { log.info("email : " + email); // 검색하지 않을 때는 모든 글을 보여준다. Page<BoardDTO> boards = boardService.getBoards(pageable, itemId, email); Map<String, Object> response = new HashMap<>(); // 현재 페이지의 아이템 목록 response.put("items", boards.getContent()); // 현재 페이지 번호 response.put("nowPageNumber", boards.getNumber()+1); // 전체 페이지 수 response.put("totalPage", boards.getTotalPages()); // 한 페이지에 출력되는 데이터 개수 response.put("pageSize", boards.getSize()); // 다음 페이지 존재 여부 response.put("hasNextPage", boards.hasNext()); // 이전 페이지 존재 여부 response.put("hasPreviousPage", boards.hasPrevious()); // 첫 번째 페이지 여부 response.put("isFirstPage", boards.isFirst()); // 마지막 페이지 여부 response.put("isLastPage", boards.isLast()); return ResponseEntity.ok().body(response); } catch (Exception e) { return ResponseEntity.badRequest().build(); } }여기서 현재페이지를 response.put("nowPageNumber", boards.getNumber()+1);로 +1해서 0부터 시작이 아니라 1부터 시작으로 했는데 여기서 나머지 정보들은 0을 기준으로 한다는건가요?
-
해결됨실전! 스프링 데이터 JPA
getTeam()만 했는데 team테이블을 조회하는 쿼리가 나갑니다
member객체에서 team객체를 lazy fetch로 설정하고getTeam().getClass()를 조회하면 가짜프록시로 조회됩니다.그런데 getTeam()을 하니 select Team문이 새로 나가는데 이는 team을 출력을 해야돼서 team을 불러오게 되는 건가요?
-
미해결실전! 스프링 데이터 JPA
업데이트가 아닌 delete쿼리를 날리면
영속성 컨텍스트가 반영 안되게 쿼리를 먼저 날려서 DB에만 반영되고 영속성 컨텍스트는 더티체킹을 못해서 반영이 안되었다고 이해했는데요 나이 업데이트 코드가 아니라 멤버를 저장 후에 바로 멤버 하나를 삭제하는 쿼리를 실하면 DB에는 멤버가 삭제되고 영속성 컨텍스트에는 반영안되어서 삭제한 멤버가 조회될 줄 알았는데 조회가 안되더라고요 deleteMemberByUsername메소드가 사용한 쿼리구요테스트 코드 입니다. 멤버를 테스트 코드 내에서 저장하고, member5를 삭제하고 조회를 해보았습니다.delete문을 실행하면 update와는 다르게 테이블의 구조가 변경되는 쿼리문이여서 영속성 컨텍스트에서 더티 체킹을 하는 걸까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java.lang.UnsupportedClassVersionError
java -jar hello-spring-0.0.1-SNAPSHOT.jar오류: 기본 클래스 org.springframework.boot.loader.launch.JarLauncher을(를) 로드하는 중 LinkageError가 발생했습니다. java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0Java 17, 스프링부트 3.2.0 입니다이런 에러가 뜨는데 어떻게 해결해야하나요??
-
해결됨스프링 핵심 원리 - 기본편
웹 스코프에서 Provider 사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 Provider에 대해 이해한게 맞는지 궁굼해서 질문 드립니다. 강의는 9강 스코프와 Provider입니다!먼저 Error creating bean with name 'myLogger': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton;이 오류가 일어나는 이유가 스프링 컨테이너에서 request 스코프 빈에 대한 의존관계를 주입하려고 하는데, 아직 클라이언트가 요청을 하지 않아서 리퀘스트 스코프 빈이 생성되지 않아서 오류가난다라고 이해했습니다1번이 맞다면..Provider을 사용하는 이유가, Request 스코프 빈이 의존관계 주입 시점에 호출이 안되서 오류가 났었는데, 클라이언트가 요청한 시점에 getObject나 get 메서드를 이용해서 request 스코프 빈을 생성하고 반환하는 DL기능을 써서, 의존관계가 잘 주입되게 해준다라고 이해했습니다질문은 총 두 개 입니다.
-
해결됨Java 마이크로서비스(MSA) 프로젝트 실습
직접 어플리케이션 서버에 요청을 보내면 동작하는데, gateway 서버로 보내면 404가 뜹니다
config-server / eureka-server / gateway-server /그리고 item-service-server 대신에 제가 만드는 rms라는 애플리케이션 서버를 띄웠습니다.게이트웨이 서버를 통해서 http 요청을 보내면 404가 뜨고직접 애플리케이션 서버로 요청을 보내면 잘 동작하는 상태입니다.그래서 config-server의 gateway-server-local.yml 파일에서 spring.cloud.gateway 부분에 문제가 있을거라 추측하고 계속 찾아봤는데... 어떻게 변경해야 할지.. 잘 모르겠어서 질문드립니다. 일단 파일 전체를 공유하겠습니다.config-serverresources.application.ymlspring: application: name: config-server profiles: active: native cloud: config: server: native: search-locations: classpath:/config encrypt: enabled: false server: port: 8080 resources.bootstrap.ymlencrypt: key: IRON0000 resources.config.eureka-server-local.ymllogging: file: name: logs/eureka.log max-size: 500MB max-history: 10 level: root: info org.com.iron.eureka-server: debug spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: eureka-server client: serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ register-with-eureka: false fetch-registry: false management: endpoints: web: exposure: include: "*" resources.config.gateway-server-local.ymllogging: file: name: logs/gateway-local.log max-size: 500MB max-history: 10 level: root: info org.hibernate.SQL: debug # org.hibernate.type: trace spring: application: name: gateway-server cloud: gateway: routes: - id: rms uri: lb://rms eureka: instance: prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka resources.config.rms.ymllogging: file: name: logs/api.log max-size: 500MB max-history: 10 level: root: info org.hibernate.SQL: debug # org.hibernate.type: trace spring: datasource: url: jdbc:h2:tcp://localhost/~/server-iron username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true default_batch_fetch_size: 1000 #최적화 옵션 mybatis: mapper-locations: mybatis/mappers/*.xml springdoc: default-consumes-media-type: application/json default-produces-media-type: application/json swagger-ui: operations-sorter: alpha disable-swagger-default-url: true display-query-params-without-oauth2: true resources.config.rms-local.ymllogging: file: name: logs/rms-local3.log max-size: 500MB max-history: 10 level: root: info org.hibernate.SQL: debug # org.hibernate.type: trace spring: datasource: url: jdbc:h2:tcp://localhost/~/server-iron username: sa password: '{cipher}' driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true default_batch_fetch_size: 1000 #최적화 옵션 mybatis: mapper-locations: mybatis/mappers/*.xml springdoc: default-consumes-media-type: application/json default-produces-media-type: application/json swagger-ui: operations-sorter: alpha disable-swagger-default-url: true display-query-params-without-oauth2: true token: expiration_time: 86400000 secret: IRON0000 eureka: instance: instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}} prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka eureka-server.ymlresources.bootstrap.ymlspring: application: name: eureka-server profiles: active: local cloud: config: uri: http://localhost:8080 loadbalancer: ribbon: enabled: false gateway-serverresources.bootstrap.ymlserver: port: 8070 spring: application: name: gateway-server profiles: active: local cloud: config: uri: http://localhost:8080 loadbalancer: ribbon: enabled: false management: endpoints: web: exposure: include: refresh, health, beans rmsresources.bootstrap.ymlserver: port: 0 spring: application: name: rms profiles: active: local cloud: config: uri: http://localhost:8080 loadbalancer: ribbon: enabled: false refresh: extra-refreshable: com.zaxxer.hikari.HikariDataSource management: endpoints: web: exposure: include: refresh, health, beans build.gradle 파일들도 올려야할까요...
-
해결됨스프링 핵심 원리 - 기본편
스코프와 Provider 강의에서 질문합니다.
안녕하세요. 선생님 영상을 보면서 라이브 코딩하면서 오류가 발생할때 저는 오류가 발생을 안하고오류가 발생하면 안되는 곳에서는 발생해서 질문남깁니다.package web; import hello.core.common.MyLogger; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } } package web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id) { MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("service id = " + id); } } 18:48:19.302 [main] INFO hello.core.CoreApplication -- Starting CoreApplication using Java 17.0.8.1 with PID 1715 (/Users/kssk3-/Desktop/study/core/build/classes/java/main started by kssk3- in /Users/kssk3-/Desktop/study/core) 18:48:19.303 [main] INFO hello.core.CoreApplication -- No active profile set, falling back to 1 default profile: "default" 18:48:19.661 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer -- Tomcat initialized with port 8080 (http) 18:48:19.665 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Initializing ProtocolHandler ["http-nio-8080"] 18:48:19.665 [main] INFO o.a.catalina.core.StandardService -- Starting service [Tomcat] 18:48:19.665 [main] INFO o.a.catalina.core.StandardEngine -- Starting Servlet engine: [Apache Tomcat/10.1.16] 18:48:19.683 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] -- Initializing Spring embedded WebApplicationContext 18:48:19.684 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext -- Root WebApplicationContext: initialization completed in 363 ms call AppConfig.memberRepository call AppConfig.memberService call AppConfig.orderService 18:48:19.817 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Starting ProtocolHandler ["http-nio-8080"] 18:48:19.825 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer -- Tomcat started on port 8080 (http) with context path '' 18:48:19.829 [main] INFO hello.core.CoreApplication -- Started CoreApplication in 0.642 seconds (process running for 1.077)영상초반에 Provider 적용후 강의에서는 local 사이트 화면에서는 OK로 변경된 화면이 나오지만저의 사이트에서는 여전히 오류가 발생하고 있어서 문의드립니다.추가로 인텔리제이 종료후 재시작해서 CoreApplication를 작동해보았는데 추가적인 오류가 나왔습니다. 18:59:26.308 [main] INFO o.a.coyote.http11.Http11NioProtocol -- Starting ProtocolHandler ["http-nio-8080"] 18:59:26.310 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext -- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' 18:59:26.317 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger -- Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 18:59:26.325 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -- *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8080 or configure this application to listen on another port. Process finished with exit code 1