묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Practical Testing: 실용적인 테스트 가이드
강의 내용중에 궁금한게 있습니다.
Presentation Layer 테스트 (2)0:59:00 부터 말씀해주신 내용이 대략 이렇습니다.서비스 로직이 커지게 되어 분리를 하거나 모듈화하여 사용한다면controller dto를 하위 레이어인 service에서 알고있으면필요없는 Bean Valid의 의존성을 추가해야하고, 하위레이어가 상위 레이어에 의존성이 생기게 되어 해당 서비스 로직을 다른 컨트롤러에서 사용하고 싶을때 발목을 잡는다.라고 말씀해주셨습니다. 전제 : 확장할 일도 없고, 이 서비스는 해당 컨트롤러에서만 사용하게 되는 구조일 경우Service용 Dto를 만들지 않고 Controller Dto에서 Entity로 변환해서 Service에 넣어주시나요 ?아니면 코드의 일관성을 생각해서 몇분 안걸리니까 만들어서 사용하시나요? 그리고 추가로 궁금한게 있습니다.service 패키지가 api 패키지 내에 존재하는데서비스가 확장되고 모듈화가 되어 사용한다거나 ,다른 컨트롤러에서도 그 서비스를 사용하게 된다면서비스 패키지는 도메인 패키지쪽으로 넣어서api (controller,advice,advice dto),domain( entity(entity,repository), service(service,dto)) 같은 구조로 변경을 하시는지 궁금합니다.그리고 현재 프로젝트에서 api 패키지 안에 service 패키지를 넣으신 이유도 궁금합니다. !! 질문의 영역을 벗어났다는 것을 알지만, 답변을 해주실 수 있으실까요 감사합니다(__)신뢰할만한 답변을 받을 곳이 없어서 질문을 남겨봅니다..답변하시기 어려우시다면 키워드라도 알려주시면 감사합니다!!
-
해결됨Practical Testing: 실용적인 테스트 가이드
테스트코드에서만 적용되는 yml 설정을 하고 싶습니다.
안녕하세요! 실무에서 겪었던 문제에 대한 조언을 구하고 싶습니다.test 하위에 application.yml을 만들면 테스트코드 돌릴 때 해당 yml 설정을 따른다고 배워서 적용했습니다. application-local.ymlapplication-prod.yml이런 식으로 뒤에 - 프로필이 붙은 형태이고테스트 폴더 하위에도application-local.yml파일을 만들었습니다. DB 연결이 안되길래 prod.yml 쪽으로 연결 시도를 하는거 같아테스트 코드에@ActiveProfiles("local")을 붙여주었고 테스트 서버 DB에 잘 붙어서 테스트코드를 작성했습니다.(main/applicatino-local.yml 역시 테스트 서버 DB에 연결되어 있는 상태)테스트코드를 작성하다보니 이게 불편하더라구요그래서 h2 인메모리 DB를 사용하고자 테스트 코드용 yml에 설정을 해주었습니다.jpa ddl auto 설정도 create 였구요..ㅎㅎㅎ 동료 개발자분이 테스트 서비스 로그인이 안된다길래 보니 테스트 디비 데이터가 다 날아갔습니다,,,하하하하정말 식은땀이 주륵..... 다행히 얼마 전에 다른 작업으로 백업을 해둔게 있어서 그걸로 복구했습니다만 정말 아찔했습니다 ㅠㅠ main/appication-local.yml 의 datasource url로 연결하고test/appication-local.yml 의 ddl-auto: create 설정을 따른 것으로 보여지는데왜 이런걸까요?저는 test/appication-local.yml 설정만 따를 거라고 생각했는데.. 제가 원하는 것은 local에서 서버를 직접 띄워서 사용할 때는 test 서버 db에 연결하고 싶고테스트 코드 돌릴 때는 인메모리 h2를 사용하고 싶습니다.이런 경우에 어떻게 사용하면 좋을까요? main/applilcation-local.ymldatssource: 테스트 서버 DB test/applilcation-local.ymldatssource: 인메모리 h2 DBjpa ddlauto: create -> 테스트 서버 디비 데이터 다 날아감내가 원하는 것 : 테스트 코드는 test/applilcation-local.yml 설정만을 따라 인메모리 DB 사용
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
ApolloDriverConfig를 찾지를 못해요
import { Module } from '@nestjs/common'; import { BoardModule } from './apis/boards/boards.module'; import { GraphQLModule } from '@nestjs/graphql'; import { ApolloDriver } from '@nestjs/apollo'; @Module({ imports: [ BoardModule, GraphQLModule.forRoot<apolloDriverConfig>({ driver: ApolloDriver, autoSchemaFile: 'src/commons/graphql/schema.gql', }), ], }) export class AppModule {} yarn add @nestjs/graphql @nestjs/apollo graphql apollo-server-express 이거 추가하고 수업 따라서 진행하는데 apolloDriverConfig이놈만 찾지를 못하네요... 버전이 달라서 그런걸까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
08-06 docker my-backend 접속이 안됩니다 ㅠㅠ
밑에 질문글이 있어서 똑같이 해봤는데 계속 안되네요 ㅠ..ㅠ db접속까지는 되는데 backend에서 접속이 계속 안됩니다... 살려주세요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
개인 프로젝트 관련 질문
안녕하세요 드디어 강의 완강했습니다!!^^ 뒷부분 부터는 퀴즈가 없어서 비교적 빨리 수강했네요.강의 후에 해봐야 할 것들을 생각해보았는데 조언을 듣고 싶어서 질문남깁니다.일단은 지금 것 했던 "나만의 ~~프로젝트"를 리팩토링(성능/안정성/가독성/로직개선)하고 api기능추가, 테스트코드 작성, DB쿼리성능개선등을 해보고자합니다.전부 다 하려면 시간이 오래걸리겠지만(ㅠ) 마지막에 취업준비강의에서 말씀하신 3년차개발자로 생각되기 위해선 해야할게 많은 것 같습니다..ㅎㅎ(3년차 같은 신입을 뽑는다니!!ㅠㅠ)그래서 일단 목표는 실제 현업에서 하는 것처럼 코드를 작성해보고자 하는데요, 막상 하려니 좀 막막하네요.질문은:지금 제 생각은 현업에서 쓰는 좋은 코드를 보고 어떤 식으로 설계했는지 테스트코드는 어떻게 작성했는지 등등 참고하고 분석하고 공부해서 제 나름대로 프로젝트를 리팩토링해보고 싶은 생각입니다. 그게 가장 실력도 늘 것 같구요. 그래서 혹시 관련 코드나 책이나 자료등이 있으면 추천해주시면 감사하겠습니다.아! 그리고 백엔드 심화강의에서 마이크로큐와 await의 관계를 굉장히 감명깊게 들었습니다. 비동기과정이 정말 헷갈렸는데 속이 시원해졌습니다.ㅎㅎ 혹시 이런 자바스크립트 원리나 cs관련내용도 추천해주실만한 책이나 자료 있으면 알려주시면 감사하겠습니다.일단 방향은 이렇게 잡았는데 조언해주시면 참고하겠습니다!!끝으로 제가 지금것 들었던 개발강의중 가장 자세하고 친절하고 이해도 잘되고 재밌는 강의였습니다!!퀴즈 할때나 버그나 에러날때 힘들긴 했지만, 그래도 개발이 점점 더 재밌어지고 더 잘하고 싶네요. 궁금한 것있으면 또 질문해도 되겠죠?^^;;; 감사합니다!!
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
BeforeEach 를 하위 클래스에서 다시 사용하는것에 대해서 질문 드립니다.
안녕하세요..!여쭤보고 싶은게 있어서 질문 남깁니다.현재 테스트의 구조가ApiTest 라는 클래스를 상속받아서 ProductApiTest를 만들게 되었습니다.class ProductApiTest extends ApiTest {}제가 하고 싶은 것은 코드의 중복을 줄이고 싶습니다.class ProductApiTest extends ApiTest { @BeforeEach void setUp() { ProductSteps.상품등록요청(ProductSteps.상품등록요청_생성()); } } 이런식으로 상품 조회와 상품 수정을 하게 될때 상품을 등록하게 되는데 이런 코드를 한번만 작성하면 어떨까 생각합니다.근데 이렇게 테스트를 돌리니 Connection refused 이라는 에러 메세지가 나오면서 테스트가 안돌아갑니다.아마 RestAssured.port 가 설정이 안되어서 그런것같습니다.이제 그러면 ApiTest의 필드들은 protected로 수정합니다.class ProductApiTest extends ApiTest { @BeforeEach void setUp() { if (RestAssured.port == RestAssured.UNDEFINED_PORT) { RestAssured.port = port; databaseCleanup.afterPropertiesSet(); } databaseCleanup.execute(); ProductSteps.상품등록요청(ProductSteps.상품등록요청_생성()); } }이렇게 하면 잘 돌아가는것을 확인했습니다.SET REFERENTIAL_INTEGRITY FALSE Hibernate: TRUNCATE TABLE products Hibernate: ALTER TABLE products ALTER COLUMN ID RESTART WITH 1 Hibernate: SET REFERENTIAL_INTEGRITY TRUE위의 DatabaseCleanup도 한번씩만 돌아가는것을 확인했습니다.근데 이렇게 재정의 해서 사용하는것이 맞는 방식인가..? 하는 생각이 들기도하고 이런 상황에서는 어떻게 해결하면 될까 싶어서 질문 남깁니다!
-
미해결Practical Testing: 실용적인 테스트 가이드
Order 관련 @Query 메서드 방식 문의
안녕하세요!강의 듣는 도중 해결이 안되는 부분이 있어서 문의드립니다. Mockito로 stubbing하기 강의 듣는 중인데요,첨부파일과 같이 OrderRespository에서 @Query 메서드 방식으로 JPQL 구문 입력하였는데 Order에서 빨간줄로 컴파일 에러가 발생해서요.. 해당 메서드 호출하면 Order is mapped 라는 에러 메시지가 나옵니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Stream 잘하고 싶어요
안녕하세요 강의 잘 듣고 있습니다.저도 우빈님처럼 람다, 스트림을 잘 쓰고 싶습니다!어떻게 공부하면 좋을지 알려주실 수 있나요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
1편과 2편의 차이점?
2편을 먼저 구매하여 수강중입니다. 1편과 겹치는 내용이 많다고 하셨는데, 1편을 보면 2편과는 다른 무언가를 얻을 수 있나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
Fixture 사용에 있어서...
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 이렇게 사용해도, 하나의 도메인에 여러 Builder Fixture가 생기게 될까요? public class Fixture { public static ProductBuilder aProduct() { return Product.builder() .productNumber("001") .name("아메리카노") .price(1000) .type(ProductType.HANDMADE) .sellingStatus(ProductSellingStatus.SELLING); }} final LocalDateTime registeredDate = LocalDateTime.now();final Product product1 = createProduct(ProductType.HANDMADE, "001", 1000);final Product product2 = createProduct(ProductType.HANDMADE, "002", 3000);final Product product3 = createProduct(ProductType.HANDMADE, "003", 5000);final Product product4 = Fixture.aProduct().productNumber("004").price(7000).build();
-
미해결Practical Testing: 실용적인 테스트 가이드
@AfterEach 에서 tearDown 할 경우
안녕하세요! 좋은 강의 감사드립니다. 많은 도움이 되었어요.한 가지 궁금한 점이 있는데요. 실무를 하면서 개발용 DB에 이미 다른 테스트용 row 가 저장되어 있을 때 tearDown으로 deleteAllInBatch를 사용하게 되면 해당 테스트에서 추가된 데이터뿐만 아니라 모든 데이터가 전부 삭제되는 것으로 알고 있는데 이러한 상황을 원치 않는다면 직접 하나하나 수동 삭제해 주거나 Transactional 롤백을 사용하고 계신지 궁금합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
refreshToken
refreshToken 은 DB에 저장을 따로 안해도 되나요?
-
해결됨Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
파일 옆에 "100%클래스, ..." 라는 문구 뜨게 하는 방법
강사님 처럼 위 사진처럼 파일 옆에 "100% 메서드, ..." 와 같은 문구를 프린트 하고 싶은 어떤 플러그인 사용중 이신 지 알 수 있을까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
6-1 @Query 부분
org.springframework.dao.InvalidDataAccessApiUsageException: 에 대해서 ...org.springframework.dao.InvalidDataAccessApiUsageException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.;,nested exception is java.lang.IllegalStateException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.강사님은 아래와 같이 @Param 을 붙여주지 않았는데도 에러가 안나셨는데 혹시 어떤 설정을 제가 놓친걸까요 .. ?@Repository public interface OrderRepository extends JpaRepository<Order, Long> { @Query("select o from Order o where o.registeredDateTime >= :startDateTime" + " and o.registeredDateTime < :endDateTime" + " and o.orderStatus = :orderStatus") List<Order> findOrdersBy(@Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime, @Param("orderStatus") OrderStatus orderStatus); }
-
미해결테스트주도개발(TDD)로 만드는 NodeJS API 서버
curl -X 매개변수를 찾을 수 없습니다
윈도우 11에서 강의를 수강중입니다.Hello World를 찍기위해 curl -X GET 'localhost:3000'을 하면 아래와 같이 뜹니다. cs의 터미널, 파워쉘에서 했을 때 똑같이 이렇게 뜨고 크롬에서 localhost:3000으로 했을 때 Hello World가 찍히는걸 보면 실행은 제대로 되었는데 왜 이렇게 뜰까요? 구글링 해도 잘 나오지 않아 질문합니다. curl -X GET 'localhost:3000' Invoke-WebRequest : 매개 변수 이름 'X'과(와) 일치하는 매개 변수를 찾을 수 없습니다. 위치 줄:1 문자:6 + curl -X GET 'localhost:3000' + ~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
-
미해결Practical Testing: 실용적인 테스트 가이드
클라우드 환경에서 테스트할 때 디비 사용법이 궁금해요
GitHub Actions을 사용하여 우분투 가상환경 위에서 스프링 부트 프로젝트를 빌드할 일이 있었는데요. 빌드 과정에서 테스트를 실행하는 단계가 있더라구요! application-test.yml에서 사용할 db의 정보를 지정하는 부분에 로컬 호스트 디비를 사용했는데 우분투 가상환경에서 테스트가 수행되다보니로컬호스트 디비와 연결하는 과정에서 커넥션 에러가 뜨더라구요 ㅠㅠ 이런 경우에선 테스트 환경에서 인메모리 디비를 사용해야 하나요..??어떤 방법이 최선인지 궁금해서 질문 남기게 되었습니다!
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
Nginx 설정 이후 개발용 도커 컨테이너 실행
안녕하세요! Nginx 적용 강의까지 수강한 이후 개발용 컨테이너를 실행하기 위해 docker-compose -f docker-compose.dev.yml up 명령어를 입력하였는데 다음과 같은 에러가 발생했습니다.개발용과 배포용 도커 분리하기 에서도 개발용 컨테이너를 실행하면 잘 됐었습니다. 이후 Nginx 적용하기까지 하는데도 강의와 책을 따라가며 잘 진행하여 문제없이 끝마쳤습니다. 왜 이러한 에러가 발생했는지 궁금합니다. +) 혹시나 제 코드에 무엇인가 오타가 있을까봐 수용님의 깃허브에 올라온 코드와 일일히 비교하며 찾아봤지만, 코드에 오타는 발견하지 못하였습니다.아래 사진은 Docker-Desktop에서 컨테이너와 이미지, 저장소를 캡쳐한 사진입니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
application에 쿠키가 안들어는 문제
안녕하세요 소셜로그인 강의 듣다가 질문드립니다.소셜로그인을 했을때 네트워크에는 쿠키가 들어오는데 어플리케이션에는 쿠키가 들어가지 않더라구요.검색해보니 credential 문제인 것같아서 아래와 같이 추가 시켜줬는데도 안들어왔습니다.밑에 @Get부분에도 추가시켜주려고 했는데 방법을 잘모르겠습니다.어떻게 하면 쿠키가 들어오게 할 수있을까요??
-
해결됨Practical Testing: 실용적인 테스트 가이드
'외부 계층으로 분리한다'는 말이 궁금합니다.
강의에서 LocalDateTime.now()를 파라미터로 받게끔 해서 분리하는 걸 예시로 들어주셨는데요.'테스트하기 어려운 영역을 외부 계층으로 분리한다'는 말씀이 위 예시처럼 파라미터로 받게끔한다는 것인가요?외부 계층이라는 말이 잘 이해되지 않아서 질문드립니다! 테스트하기 어려운 메서드를 호출하는 상위 레벨의 메서드를 외부 계층이라고 하는 것일까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
CSRF
안녕하세요 도저히 찾아봐도... 찾을 수가 없고 답답한 나머지 멘토님께 여쭈어보려고 합니다.현재 저는 백엔드 코스와 프런트엔드 코스를 둘 다 수강 중인 학생입니다. 백엔드 코스에서 공부한 이미지 업로드를 프런트에서 공부한 이미지 불러오기를 적용하던 중 오류가 발생하여 문의드립니다.포스트맨을 통해 이미지 업로드 정상 작동되는 것을 확인하였지만 프런트 엔드와 같이 연결하여 이미지 업로드를 진행 중"This operation has been blocked as a potential Cross-Site Request Forgery (CSRF). Please either specify a 'content-type' header (with a type that is not one of application/x-www-form-urlencoded, multipart/form-data, text/plain) or provide a non-empty value for one of the following headers: x-apollo-operation-name, apollo-require-preflight\n" 이러한 원인이 설명 부탁 드립니다... ...