묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html 복사 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]html 복사하면 뭔가 줄이 자꾸 어긋나거나 하면서 안 맞는데 혹시 다른 방법이 없을까요 ..?제가 수기로 적는수밖에없을까요 ..여기에 질문 내용을 남겨주세요.
-
미해결Practical Testing: 실용적인 테스트 가이드
Service dto를 만드는 대신 도메인 객체를 생성하는 전략은 별로인가요?
안녕하세요. PresentationLayer 테스트(2) 마지막 부분에 service layer용 dto를 생성하여 서비스를 presentation layer와 분리하는 것을 확인했습니다.그렇다면 presentation Dto -> service Dto -> domain으로 변경이 이루어질 것 같은데요..혹시 컨트롤러에서 바로 도메인 객체로 바꿔서 presantatio Dto -> domain 구조로 바꾸는 것은 좋지 않은 아키텍처일까요 ???
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
httpAPI가 먼가요?
GET쿼리 파라미터 ,post-HTMLFORM방식도 Httpapi아닌가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
제대로 이해했는지 확인하고싶습니다.
가장 처음에 했던 트랜잭션은 각각의 리포지터리에서 @Transactional을 걸어줘서 별도로 커밋, 롤백 되게끔 만들었습니다. 이후, 마지막에는 LogRepository에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용해서 트랜잭션 동기화 매니저에서 다른 커넥션을 가져와서 별도로 커밋, 롤백 되게끔 만들었습니다. 여기서 궁금한 점은 처음과 마지막의 트랜잭션의 구성은 다르지만 결과값은 똑같은 게 맞을까요? 다른 점이 있다면 혹시 무엇인지 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
데이터베이스 연결 에러
[질문 내용]여기에 질문 내용을 남겨주세요.2024-10-16T00:11:04.326+09:00 INFO 16884 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-10-16T00:11:04.335+09:00 INFO 16884 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-10-16T00:11:04.336+09:00 INFO 16884 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.20] 2024-10-16T00:11:04.387+09:00 INFO 16884 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-10-16T00:11:04.387+09:00 INFO 16884 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1088 ms 2024-10-16T00:11:04.433+09:00 INFO 16884 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-10-16T00:11:06.881+09:00 ERROR 16884 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.ConnectException: Connection refused: getsockopt: localhost" [90067-224]어플리케이션을 실행했더니 이러한 에러가 뜹니다... 제가 생각하기엔C:\Users\재성 이 폴더에 db파일이 없어서 생기는 오류같은데 어떻게 해결해야할 지 모르겠습니다... 다른 강의 이것저것 번갈아가면서 듣다 보니 db파일을 삭제했다가 새로 만들고 반복했었는데 오랜만에 강의 들으니까 db에서 오류가 발생합니다ㅠ
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
의존하는 객체 final 선언 질문드립니다.
안녕하세요, '서비스란 무엇인가' 강의를 보고 질문드립니다. 서비스는 불변으로 만들기 위해 서비스에서 쓰고 있는 리포지토리를 final로 선언하라고 강의를 통해 배웠습니다. 컨트롤러에서 쓰는 서비스나 리포지토리에서 쓰는 것들도 final로 선언해도 될까요? 불변이면 생성된 객체가 변경할 수 없는 것 이라는 정도만 이해하고 있는데 다른 레이어도 final로 선언하면 더 안정적인 애플리케이션이 되는 거 아닌가? 라는 생각이 들어 질문드립니다! 감사합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
강의 43분 35초쯤에 대해 질문 있습니다.
OrderResponse에서 of 메서드 부분에 빌더 패턴과 정적 팩토리 메서드를 같이 쓰는걸로 이해를 했습니다. 저는 빌더 패턴으로 객체를 생성하는 것과 정적 팩토리 메서드로 객체를 생성하는게 결이 약간 다른(?) 느낌으로 이해를 해서 이렇게 같이 써도 상관이 없는지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.원래는 service단에 @Transactional 을 걸어주는게 맞지만 지금은 강의하는거기때문에 JpaItemRepositoryV2에 @Transactional을 선언해준건가요 ?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
엔티티 설계 질문
JPA 엔티티 설계에 대한 질문입니다. 상품 엔티티가 있는데 상품을 구분하는 카테고리가 아래와 같이 2종류 있다고 가정하면상품 배송 카테고리 (직접배송, 퀵배송, 일반택배배송, 픽업가능) -> 1:N 가능상품 종류 카테고리 (명품, 의류, 전자제품 등등) -> 1:N 가능 어떻게 설계하는 게 좋을까요?상품 Entity상품 id상품이름배송 카테고리 리스트종류 카테고리 리스트=> 상품 테이블, 상품 배송 카테고리 테이블, 상품 종류 카테고리 테이블 (총 테이블 3개 생성됨) 상품 Entity상품 id상품이름카테고리 리스트 (배송 카테고리와 종류 카테고리를 한 리스트에 다 넣어놓음)=> 상품 테이블, 상품 카테고리 테이블 (총 테이블 2개 생성됨)
-
미해결Practical Testing: 실용적인 테스트 가이드
yml 프로파일 관련해서 질문 있습니다.
spring: profiles: default: local datasource: url: jdbc:h2:mem:~/cafeKioskApplication driver-class-name: org.h2.Driver username: sa password: jpa: hibernate: ddl-auto: none --- spring: config: activate: on-profile: local jpa: hibernate: ddl-auto: create show-sql: true properties: hibernate: format_sql: true defer-datasource-initialization: true # (2.5~) Hibernate 초기화 이후 data.sql 실행 h2: console: enabled: true --- spring: config: activate: on-profile: test jpa: hibernate: ddl-auto: create show-sql: true properties: hibernate: format_sql: true sql: init: mode: never 아래와 같이 default: local로 설정하면 on-profile: local로 부분이 실행된다는 걸까요?spring: profiles: default: local ... --- spring: config: activate: on-profile: local ... 하나의 파일에 local 관련 yml, test관련 yml을 작성하면 yml 파일이 굉장히 비대해질꺼 같은데 실무에서도 하나의 yml에 전부 집어넣는지 아니면 yml을 분리하는지 궁금합니다.--- 이 부분은 구분 지을려고 그냥 넣은건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 오류
Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/Users/kimhs/OneDrive/%EB%AC%B8%EC%84%9C/springboot/jpashop/build/reports/tests/test/index.html* Try:> Run with --scan to get full insights.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 11s4 actionable tasks: 1 executed, 3 up-to-date MemberRepositoryTest 를 실행하면 위와 같은 오류가 발생합니다 원인이 무엇일까요
-
미해결스프링 시큐리티 OAuth2
CustomAuthenticationProvider 질문
http://localhost:9000/oauth2/authorize?response_type=code&client_id=oauth2-client-app1&scope=openid%20read%20write&redirect_uri=http://127.0.0.1:8081형태에 첫 로그인 요청을 했을때, 로그인 페이지로 가지 않는 현상이 있습니다.=> 확인을 해봤을때, CustomAuthenticationProvider 에서 프로세스 진행 완료 후 principal = AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_ANONYMOUS]]principal 까지 확인되었습니다. 그 다음 추가적인 내용을 확인해봐야될 내용이 어떤 걸 까요?추가적으로 첫 요청에 따른 redirect 하는 클래스가 어디인지 알고 싶습니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
도메인 레이어 질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 우빈님 두 가지 질문이 있습니다. 도메인 레이어에 Repository를 넣으셨는데 도메인과 Repository를 같이 두신 이유가 있으신가요?현재 도메인 모델과 Jpa Entity를 동일하게 가져가고 있는데 이로인해서 겪으신 문제는 없으신가요? 엄격한 DDD를 위해서라면 도메인 모델을 JPA 엔티티로 쓰는 것이 아니라 JPA 엔티티에 Convert 메서드를 만들어서 처리하고 있더라구요. 이에 대한 우빈님의 생각이 듣고 싶습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
강의 2분 40초 부분에 대해 질문 있습니다.
강의 2분 40초쯤에 "개발하면서 고민했던거를 테스트 코드에 녹여낸다." 이 부분에 대해 궁금증이 있습니다. 테스트 코드를 통해서(예외 케이스도 짯다면) 다양한 케이스들 고려할 수 있기 때문에 테스트 코드에 녹여낼 수 있다.구현 로직을 테스트 코드로 테스트 하면서 살펴 볼 수 있기에 구현 로직에 대해 고민 했던 부분도 담아낼 수 있다.이렇게 이해를 했는데 맞게 이해를 한건지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
bizException 테스트 코드에서 db에 save되는지 궁금합니다.
@Test void bizException() { //given Order order = new Order(); order.setUsername("잔고부족"); //when try { orderService.order(order); } catch (NotEnoughMoneyException e) { log.info("고객에게 잔고 부족을 알리고 별도의 계좌로 입금하도록 안내"); } //then Order findOrder = orderRepository.findById(order.getId()).get(); Assertions.assertThat(findOrder.getPayStatus()).isEqualTo("대기"); }@Transactional public void order(Order order) throws NotEnoughMoneyException { log.info("order 호출"); orderRepository.save(order); log.info("결제 프로세스 진입"); if (order.getUsername().equals("예외")) { log.info("시스템 예외 발생"); throw new RuntimeException("시스템 예외"); } else if (order.getUsername().equals("잔고부족")) { log.info("잔고 부족 비즈니스 예외 발생"); order.setPayStatus("대기"); throw new NotEnoughMoneyException("잔고가 부족합니다"); } else { log.info("정상 승인"); order.setPayStatus("완료"); } log.info("결제 프로세스 완료"); }예외가 터지는데 save의 insert쿼리가 나가는지 궁금합니다. 테스트 코드가 성공했고 (테스트코드) Order findOrder = orderRepository.findById(order.getId()).get(); 이 코드에서 findOrder이 성공적으로 가져왔습니다. 그러면 서비스 코드에서 orderRepository.save(order)이 성공적으로 커밋이 된건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Unknown host 'admin'. 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위와 같은 오류가 뜨는데 인텔리제이와 스프링 자바 버전 둘 다 17로 맞췄고스프링 초기값은 다음과 같이 맞춰서 제너레이트를 했는데 위 오류 때문에 실행도 시킬 수가 없네요 어떻게 해결해야 할까요?
-
미해결토비의 스프링 부트 - 이해와 원리
MyOnClassCondition에 있는 matches method의 Invoke 횟수
안녕하세요 토비님, 질문의 앞서, 좋은 강의자료 감사드립니다. 앞으로도 계속 꾸준히 만들어 주세요! ^^ 혹시 MyOnClassCondition에 있는 matches method의 Invoke 횟수를 어떻게 예상하시나요? 저는 두번이라고 생각했는데요. "@ConditionalMyOnClass" annotation이 붙어있는 클래스가 두개 뿐이라서요. 그런데, 실제로 matches 안에서 출력을 해보니, 세번이 출력 되었습니다. 예상대로, TomcatWebServerConfig와 JettyWebConfigServerConfig를 각각 출력 했는데요. 그후에 한번 더 출력하더라구요. 마지막 출력은, 라이브러리에 포함된 것에 대한 config가 출력 됬습니다. 혹시 이유를 아시는지요?
-
미해결스프링 시큐리티 OAuth2
인증과정 질문입니다.
이전 챕터중 OAuth2Login api를 사용했을때는 인가서버로부터 accessToken을 받은후 인증처리를 하기 위해서 다시 인가서버에 userinfo endpoint로 요청을 보내서 유저정보를 가져오고 이 정보를 바탕으로 OAuth2User 객체를 만들어서 인증객체를 만들고 인증과정을 완료했습니다. 근데 지금 ResouceServer api를 사용했을때는 accessToken, 즉 jwtToken 만으로도 인증객체를 만들고 인증처리를 완료하는데 그러면 이전에는 accessToken을 받고 왜 이것만으로 인증처리를 완료하지 않은건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ArgumentResolver 지정타입
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@ModelAttribute 에서 argumentResolver로 지정해둔 타입은 제외라고 했는데,이해가 안되는점은 @ModelAttribute도 argumentResolver로 파라미터를 받는다고 배웠는데그럼 컨버터 실행하는 파라미터(@RequestBody, HttpEntity)가 존재할때 제외된다는 말씀인가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
비교연산자 <,> 사용을 하지 않고, gt or lt 를 사용하는 이유?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]<li> 1>10 = <span th:text="10 < 1"></span></li>로 표현하여도, 비교연산자로 처리가 가능하였는데, 왜 gt나 lt 로 사용하여야 하나요?