묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
apigateway 프로젝트 생성하고 실행시 Timout이출력 됩니다.
안녕하세요 강사님, 강의 영상 잘 보고 있습니다.first-service, second-service 둘다 실행 후에 apigateway-service 실행했습니다. 그런데 apigateway 쪽에서 연결 거부 당했다는 로그가 지속적으로 올라오네요 이유를 모르겠습니다. apigateway 의 application yml파일여기서 궁금한게 defaultZone 설정 해서, discoveryservice 프로젝트도 구동 시켜줬는데, 같은 에러로그가 지속 적으로 올라오네요..server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: routes: - id: first-service uri: localhost:8081/first-service predicates: # ??? Path ??? first-service?? ?? uri? ?? - Path=/first-service/** - id: second-service uri: localhost:8082/second-service predicates: # ??? Path ??? second-service?? ?? uri? ?? - Path=/second-service/**콘솔 내용2024-10-07 20:39:53.214 WARN 2024 --- [OvbxrBtUd7XQ-87] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: no further information 2024-10-07 20:39:53.214 INFO 2024 --- [OvbxrBtUd7XQ-87] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer@4dca89d2: tags=[[]], channel=null, acknowledgeMode=AUTO local queue size=0 2024-10-07 20:39:53.215 INFO 2024 --- [OvbxrBtUd7XQ-88] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [localhost:5672] 추가 예외2024-10-07 20:51:37.290 INFO 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888 2024-10-07 20:51:37.304 INFO 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available 2024-10-07 20:51:37.304 WARN 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/apigateway-service/default": Connection refused: no further information; nested exception is java.net.ConnectException: Connection refused: no further information
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Dip, @transactional
안녕하세요! 강의를 듣고, 궁금증이 생겨서 찾아보던 중 명확한 답을 얻지 못해서 질문드립니다!.첫째로 DIP에 관련된 질문입니다.회원가입과 비밀번호 암호화 강의 중 "DTO를 서비스 계층으로 바로 넘기는 게 좋지 않다"고 하셔서 궁금증을 가지고 찾아보던 중에이 질문을 보고 관련 내용들을 찾아봤지만, 궁금증을 완전히 해결하지 못해서 질문드립니다.public class Auth ControllerAuthController { private final Auth ServiceAuthService auth ServiceauthService; private final ?AppConfig ?appConfig; @Post MappingPostMapping("/APIapi/auth/signup") public void signup(@Request BodyRequestBody Signup signup) { auth ServiceauthService. signup(signup).signup(signup); }}위와 같은 코드가 있을때 DIP를 지키면서 코딩한다면 단순히 Controller -> Service로 넘기기 위한 전달용 DTO를 만들어서 사용하시는지 궁금합니다.두 번째로 @transactional에 관한 질문입니다.데이터의 수정 및 변동이 있는 부분에는 @transactional을 붙이는 것이 좋다고 들어왔습니다. 그런데 강의의 코드에서는 붙인 부분과 안 붙인 부분이 나뉘는데 특별한 이유가 있을까요?또 한 readonly 속성은 데이터를 읽기만 하는 부분에서는 성능에 도움이 된다고 들었습니다.위의 내용들로 데이터의 변동이 일어나는 부분엔 @transactional을 붙이고, 읽어오기만 하는 부분에는 readonly 속성을 습관적으로 붙여왔는데 호돌맨님 께서는 @transactional을 사용하는 기준(?) 같은게 있으실까요?긴 질문 읽어주셔서 감사합니다 :)
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findOne() 메소드 자료형
[질문 내용]MemberService 클래스에서 findOne 메소드를 정의할때 왜 자료형이 Optional<Member>여야 하는지 궁금합니다.
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
@Transactional(transactionManager = "createChatTransacationMansger") 질문 있습니다.
질문1: 강의에서 saveChatMessage() 메소드 진입시 @Transactional(transactionManager = "createChatTransacationMansger") 사용하는것을 말씀 해주셨는데요. 선생님께서 말씀해주신 강의 내용을 그대로 말씀드리자면 " 웹소켓 같은 경우에는 하나의 커넥션 즉 세션을 하나에 계속 공유하고 계속 사용 중이기 때문에 이 스톰프를 사용하는 웹소켓 통신 아니면 기본적인 웹소켓 통신에서도 이 트랜잭션에 대한 경계가 되게 명확하지가 않는 경우가 있습니다. " 즉 이 말씀은 따로 이렇게@Transactional public void saveChatMessage(Message msg) { chatRepository.save(chat); } @TransactionManager() 만 추가해서 관리 하면 문제가 생기고 @Transactional(transactionManager = "createChatTransacationMansger")이렇게 별도로 TransactionManager 를 추가해서 관리 해야 문제가 없다고 이해 하면 될까요??? 왜 TransactionManager 를 따로 만들어서 관리하는지 이해가 안가네요 ㅠ,ㅠ그리고 "웹소켓 같은 경우에는 하나의 커넥션 즉 세션을 하나에 계속 공유하고 계속 사용 중이기 때문에 이 스톰프를 사용하는 웹소켓 통신 아니면 기본적인 웹소켓 통신에서도 이 트랜잭션에 대한 경계가 되게 명확하지가 않는 경우가 있습니다"즉 이 말씀은 saveChatMessage 경우는 웹소켓 전용만 사용 할때만 이용하는 오퍼레이션 이기 때문에 다른 HTTP 통신 경우에 오는 FLOW 경우는 saveChatMessage() 메소드는 사용하지 마라 라는 의미로 @Transactional(transactionManager = "createChatTransacationMansger")이렇게 별도의 TransactionManager을 사용한 것인지 궁금 합니다. 질문2 선생님이 말씀해주신 내용을 그대로 말씀드리자면플러시는 기본적으로 JPA에서 다루고자 하는 트랜잭션이 담겨있어야 되는데 담겨있지 않았다는 에러가 발생하게 될 거예요 왜냐하면 제가 말씀드렸던 것처럼 웹소켓은 하나의 통신으로만 공유를 하기 때문에 경계가 명확하지 않아서 JPA 에서 일반적으로 트랜지액션을 잘 인식을 하지 못하고 잘 넣어주지를 못합니다 이렇게 트랜젝션을 선언하지 않으면 문제가 발생된다고 해주셨는데요. @Transactional public <S extends T> S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (this.entityInformation.isNew(entity)) { this.entityManager.persist(entity); return entity; } else { return this.entityManager.merge(entity); } }JPA save 메소드를 보면 이렇게 @Transaction 을 선언하기 때문에 굳이 @Transaction 을 선언하지 않아도 문제가 없지 않을까요??
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
SecurityContextRepository부분 질문 있습니다
강의자료 95 page에는 커스텀 한 인증 필터를 구현할 경우 securityContext.saveContext()를 명시적으로 작성해야 된다고 적혀있는데 해당 부분은 OncePerrequestFilter 를 통해 완전 처음부터 작성한 커스텀 필터일 경우이고 이번 강의에서는 AbstractAuthenticationProcessingFilter를 상속받고 그 내부에서 successfulAuthentication 을 통해서 saveContext() 가 작동한다고 이해했는데 맞을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
createMemberForm.html안에 <input name="name>태그가 setName과 동일한가
[질문 내용]createMemberForm.html안에 <input>태그에 name="name"을 HTML 화면 상에 "spring"이라고 등록하면 MemberForm 컨트롤러에서 개체인 name으로 들어오게 된다는 것을 이해 했는데요. 그렇다면 name="name"이 form.setName한거라고 봐도 무방한가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberService의 join()메소드 return값
[질문 내용]MemberService 클래스에서 join메소드의 return값을 왜 member가 아닌 member.getId()를 반환하는지 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HomeController 만든 후 home.html
[질문 내용]HomeController를 만들고 "home"을 return하면 home.html을 만들 필요가 있는데 resources 하위 폴더 아래 static폴더에 만들었을 때는 오류가 뜨는데 왜 templates폴더에 만들 때는 잘 작동하는지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
깃 업데이트 요청드립니다
Spring Boot 3.2 + Spring Cloud 2023.0.0업데이트 예정 (2024-01)위 깃 업데이트 언제 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[14:00]테스트오류 문의드립니다
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@a316f6b testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], 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@2034b64c, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@1cf6d1be, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@5149d738, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3ba987b8, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@5524cca1, org.springframework.boot.test.context.SpringBootTestAnnotation@6afadee8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
페이지 연결
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]파일을 따로따로 확인을 할 때에는 정상적으로 실행이 되나, 강의를 보고 따라했음에도 불구하고 페이지끼리 연결이 되지 않습니다. 회원 가입을 누르면 404가 떠서 아무것도 되질 않는데 어떻게 해야 할까요?https://drive.google.com/drive/folders/1WbF5awhnCLVgf-NDQlwXUP1Hfcfk6lUR?usp=drive_link
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
File imprt 어떤거 해야하죠?
File file = new File("not existing file.txt"); FileInputStream = new FileInputStream(file);이 코드를 복붙을 했는데 FileInputStream = new FileInputStream(file);이부분에서 FileInputStream 부분이 빨간줄이 뜹니다 import java.io.File; import java.io.FileInputStream;임포트는 이걸 했구요Creates a FileInputStream by opening a connection to an actual file, the file named by the File object file in the file system. A new FileDescriptor object is created to represent this file connection.First, if there is a security manager, its checkRead method is called with the path represented by the file argument as its argument.If the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading then a FileNotFoundException is thrown.이런 오류가 있는데 어떻게 해결해요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
[vite] http proxy error: /auth/login
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요. // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), vueJsx(), vueDevTools()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, server: { port: 5000, proxy: { '/api': { target: 'http://localhost:8080', rewrite: (path) => path.replace(/^\/api/, '') } } } })function dologin() { axios .post('/api/auth/login', state.login) .then((response) => { // 로그인 성공 시 처리 console.log('로그인 성공:', response.data) // 추가적인 로직 (예: 리다이렉션, 사용자 정보 저장 등) }) .catch((error) => { // 로그인 실패 시 처리 console.error('로그인 실패:', error.response ? error.response.data : error.message) // 사용자에게 에러 메시지 표시 등 }) }post 요청시 계속해서 인터넷에 라고 계속해서 오류가 나옵니다.그래서 이전에 호돌맨님께서 알려주신 방법들을 사용하여hostname을 통해 이름가져오기공인아이피 주소 사용하기방화벽8080 이용해서 연결해주기또한 버전이 문제가 될수있다고 구글링에 나와 시도해보았지만 여전히 계속해서 이오류로 인해 해결이 되지않습니다. 저는 우선 호돌맨님의 방식대로 코드를 짜고 있는중이라 처음 코딩을 클론 코딩을 통해 방식을 배우고 다시한번 영상을 보면서 저만의 포폴을 만들려고 하는중에 문제가 발생했습니다./. https://github.com/CryingPerson/blog제깃 코드입니다ㅠㅠ 살려주세요..
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
@PostCunstructer 를 사용하는 이유가 뭔가요?
DataIntialize 클래스에서 메서드에 포스트 컨스트럭터를 사용하셨는데 어떤 기능인지 잘 이해하지 못했습니다.해당 클래스를 빈으로 등록하면서 같이 초기화가 이루어 지게 하는건 안되는건가요?
-
미해결스프링 시큐리티 OAuth2
JwtDecoder 문제
org.springframework.boot:spring-boot-starter-oauth2-resource-server:2.7.3 버전에서 jwtDecoder 생성 문제가 있는 것으로 보입니다.jwt-set-uri 설정일때는 되지 않고 issuer-uri 설정일때만 문제가 발생하지 않습니다.혹시 제가 설정 문제인지 확인 차 질문드립니다.url 확인도 해봤습니다. https://github.com/okta/samples-java-spring/issues/77여기서 문제가 있다며, 일부분을 인정을 하였습니다.같은 상황으로 보입니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링부트로 실제 쇼핑몰을 제작해보고싶은데요..
스프링부트로 실제 쇼핑몰을 제작해보고싶은데요 혹시 결제기능관련이나 쪽지관련기능 로직짜는거 추가로 보강즘 해주실수없나요? 파이썬이나 자바스크립트 백엔드 관련강의들보면 결제기능 탑재나 쪽지기능 구현등 강의가 더러 널려있는데 유독 스프링부트관련해서는 이런기능을 구현하는 강의가 없는것같습니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test.mv.db 삭제 후 오류
강의 영상에서test.mv.db를 삭제하라 하셔서 rm으로 지웠는데요 다시 시작하라 하셔서 jdbc:h2:~/test 이거로 입력하니 Database "C:/Users/(사용자명)/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) 로 뜹니다... 결정적으로 이전에는 만들어졌던test.mv.db 파일이 안 만들어집니다..
-
미해결실전! 스프링 데이터 JPA
save 메서드와 변경감지 질문입니다.
안녕하세요.강의 항상 잘 보고 있습니다. SimpleJpaRepository 구현 클래스의 save 메서드 안에em.merge가 있습니다. 결국 엔티티를 변경할 일이 있으면 save 메서드를 사용하지 말고 변경 감지를 사용하라는 말씀이 맞으신가요? save 메서드는 새로운 엔티티를 저장할 때만 사용하라는 것으로 이해하면 될까요?
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
검색기능이 안됩니다
코드를 맞게 쳤는데 메뉴 이름중 일부만 검색했을때 나오질 않네요<!-- 검색에 의한 쿼리 --> <select id="doSearch" resultType="hello.sailing.v2.vo.Order_list"> SELECT no, coffee_no, coffee, price, cust_id, name, DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day FROM order_list WHERE 1=1 AND reg_day >= DATE_FORMAT( #{strStartDate},'%Y%m%d') AND reg_day < DATE_ADD(DATE_FORMAT(#{strEndDate},'%Y%m%d'), INTERVAL +1 DAY) <if test="strCoffee != 'ALL'"> AND coffee like CONCAT(#{strCoffee},'%') </if> <if test="strName != 'ALL'"> AND name like CONCAT(#{strName},'%') </if>
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
검색기능이 안됩니다
@PostMapping("/order_search") public String doSearch( @RequestParam("start_date") String strStartDate, @RequestParam("end_date") String strEndDate, @RequestParam(value = "coffee", defaultValue = "ALL") String strCoffee, @RequestParam("name") String strName, Model model ){ log.info("strStartDate :"+strStartDate); List<Order_list> list = orderSvcV2.doSearch(strStartDate,strEndDate, strCoffee,strName ); model.addAttribute("list", list); return "/v2/order/order"; }/* 조회하기 */ public List<Order_list> doSearch(String strStartDate, String strEndDate, String strCoffee, String strName) { List<Order_list> list = orderDao.doSearch(strStartDate,strEndDate, strCoffee,strName ); return list; }package hello.sailing.v2.dao; import hello.sailing.v2.vo.Order_list; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface OrderDaoV2 { List<Order_list> doList(); List<Order_list> doSearch(String strStartDate, String strEndDate, String strCoffee, String strName); }package hello.sailing.v2.vo; import lombok.Data; @Data public class Order_list { private String no; private String coffee_no; private String coffee; private String price; private String cust_id; private String name; private String reg_day; } <!-- 검색에 의한 쿼리 --> <select id="doSearch" resultType="hello.sailing.v2.vo.Order_list"> SELECT no, coffee_no, coffee, price, cust_id, name, DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day FROM order_list WHERE 1=1 AND reg_day >= DATE_FORMAT( #{strStartDate},'%Y%m%d') AND reg_day < DATE_ADD(DATE_FORMAT(#{strEndDate},'%Y%m%d'), INTERVAL +1 DAY) <if test="strCoffee != 'ALL'"> AND coffee like CONCAT(#{strCoffee},'%') </if> <if test="strName != 'ALL'"> AND name like CONCAT(#{strName},'%') </if> </select>화면에서는 조회버튼을 누르면 검색이 안됩니다...코드는 틀린게 없는데 왜 그런거죠?