inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

Controller와 Service간의 requestDto를 구분하는 측면

미해결

Practical Testing: 실용적인 테스트 가이드

충분히 공감가고 이해되는 내용입니다! 좋은 내용 설명해주셔서 감사합니다! 그렇다면 responseDto도 순수 서비스 응답과 , 각 컨트롤러 별 응답으로 구분하는게 좋을까요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
요니 댓글 2 좋아요 0 조회수 737

ApiResponse에 HttpStatus를 설정하는것의 의미 관련 질문

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하십니까! 항상 좋은 강의 감사드립니다. ApiResponse에 HttpStatus를 필드로 두어, 응답 상황에 따라 적절한 HttpStatus를 설정하도록 강의에서 의도해주셨습니다. 실제로 저도 이런식으로 사용하고 있었는데요, 그런데 이번에 테스트 하면서 알게 된 것이지만, ApiResponse에 HttpStatus를 넣어준다고 하더라도 실제 응답 HTTP의 status에는 반영이 되지 않고, 단순히 응답 body에만 설정한 status가 쓰여졌습니다. 아래 첨부한 사진을 보면 201로 setting 하였지만, 실제 응답은 200 인걸 예로 확인할 수 있었습니다. 그래서 제가 질문 드리고 싶은 부분은, "그렇다면 응답을 어떻게 해야 하는가?" 입니다. ApiResponse라는 공통 응답을 한번 더 ResponseEntity<> 안에 감싸서 보내는 방법 을 생각해 볼 수 있을 것 같습니다. 단 이방식은 ApiResponse의 status를 ResponseEntity의 status로 동기화 시켜주는 작업 과, 그리고 응답 타입도 ResponseEntity<ApiResponse<>> 이런식으로 depth가 2번 생기게 되는 단점이 있을 것 같습니다. (depth가 2번 생긴다는게 올바른 표현인지는 모르겠으나, 서비스 응답을 ApiResponse로 한번 감쌌는데, 이를 한번 더 ResponseEntity로 감싼 것을 2번의 depth로 표현하였습니다.) 두 번째로는 오직 응답 바디에 있는 값 만을 사용하기로 프론트와 규약을 정하고 사용하는 방법 이 있을 것 같습니다. 이렇게 하면 굳이 한번 더 ResponseEntity<>로 감쌀 수고는 덜어질 것 같습니다. 제가 생각한 방식은 이렇게 두가지가 있을 것 같고, 제가 속한 회사에서 기존 방식은 2번째 방식을 사용 하고 있었습니다. 그런데 , 저는 신규 프로젝트에 투입되어 있는 상황 이여서 코드를 제가 원하는 대로? 짤 수 있는 상황 인데요,, 그래서 위 두가지 방식중에 어떤것이 좋을지, 혹은 더 나은 방식이 있을지 질문 드리고 싶습니다. 제가 3개월 차라 .. 경험이 많이 부족해서,, 강사님 경험에 기반하여 답변해주시면 정말 감사하겠습니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
요니 댓글 2 좋아요 5 조회수 1357

nestjs+graphql로 작업할때 response도 dto로 만들어야하나요?

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

선생님, 질문두가지 드릴게요, 감사합니다 1. nestjs+graphql로 작업할때 response도 dto로 만들어야하나요? 2. class-validator를 entity에서 사용하고 dto를 pick, omit으로 상속받는게 좋나요? 아니면 dto들에서 따로 class-validator를 적용하는게 좋나요?

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
Chansoo 댓글 1 좋아요 0 조회수 634

inteface UserRepsotiroy 를 service 패키지로 뺀 이유에대해서 궁금합니다.

해결됨

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

service 레이어는 repository 보다 상위 레이어에 있습니다. 일반적으로 service 레이어는 repository 를 주입받아서 사용됩니다. OOP 원칙에서도 상위레이어는 하위레이어를 알아도 괜찮은것으로 알고있습니다. 반대로 하위레이어는 상위레이어를 알아서는 안됩니다. '외부 연동을 다루는 방법' 강의 1:53 ~ 2:04 에 상위 레이어인 Service 가 infraStructure 에 의존하는 모습을 보이기때문에 라고 하셨습니다. 이말을 해석하면, 앞으로 변경될 코드에서는 UserService 는 interface 인 UserRepository 를 의존하게됩니다. 그러나 자세히 들어가면 service 레이어가 UserRepository 에 의존하는것이 아닌 의존성역전을 통해 그의 Impl 을 받게됨으로 약결합이 되게됩니다. 그러므로, service 가 interface 인 UserRepository 에 의존하는건 아니기때문에 service 패키지로 해당 interface 를 옮긴것인지 궁금합니다.

  • spring
  • tdd
  • jpa
  • 소프트웨어-테스트
  • unittest
햄스터 댓글 3 좋아요 2 조회수 917

도커의 데이터베이스 컨테이너와 nestjs typeORM이 어떤 방식으로 연동되는지 궁금해요

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

docker-compose 에 있는 my-database의 연결 app.module.ts에 있는 typeOrmModule에 있는 데이터베이스 연결이 어떤 원리로 작동되는지 궁금합니다. my-database: image: mysql:latest environment: MYSQL_DATABASE: 'mydocker' MYSQL_ROOT_PASSWORD: 'root' ports: - 3306:3306 TypeOrmModule.forRoot({ //.env 파일은 모두 string 형태로 인식이 됩니다. 따라서, type과 port에 추가 설정을 해주었습니다. type: mysql, host: "localhost", port: 3306, username: "root", password: "12345678", database: practice, entities: [Board], synchronize: true, logging: true, })

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
송원 댓글 1 좋아요 0 조회수 517

CSS 정렬 강의 실습 중

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

코드 자동저장돼 있고 혹시몰라 수동저장 후 다시 라이브서버 켰는데 박스까지만 만들어지고 정렬이 전혀 되지 않으면서 아무 응답이 없는데 제가 혹시 코드를 잘못 쓴 부분이 있는걸까요?

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
ㅎㅇㄴ 댓글 1 좋아요 0 조회수 332

버퍼가 비워지는 시점

미해결

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

안녕하세요. Backpressure의 Drop 전략에서 버퍼가 비워질 때까지 Emit된 데이터가 Drop이 된다는 것은 이해했습니다. 그런데 1번 데이터가 subscriber에게 전달되어서 처리가 되면 버퍼에 자리가 한 자리 비게 되는데 왜 데이터가 계속 Drop이 되는건가요? (코드 실습에서 onNext()함수가 호출이 되어도 255,256,257 ~ 1024까지 모두 드랍됨) | 1, 2 | <-------- 3 듣랍 | 2, |. <-------- 4 드랍 (여기서 왜 4번 데이터는 안들어가나요?) | 5, 6 | Buffer DROP-LATEST를 보면 | 1, 2 | <---- 3들어오는 중 버퍼 가득 차서 drop | 2, 4 | <------ 1번이 버퍼에서 나가고 한 자리가 비어서 4번이 들어와짐 이런식으로 동작을 하는데 Drop은 이렇게 동작하지 않는 것 같아 버퍼가 어떻게 동작하는지 궁금하여 질문드립니다.

  • java
  • spring
  • project-reactor
  • webflux
jhjikhsdsdw 댓글 1 좋아요 1 조회수 364

ProductNumber 계산 로직

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하십니까! 먼저 항상 좋은 강의 감사드립니다. 특히 이번 강의에서는 Transaction에서 readOnly 옵션을 사용하므로써 JPA 최적화를 통해 성능 향상을 이점을 얻을 수 있다와 함께, CQRS 측면을 말씀해 주셔서 좋았습니다! 저의 경우는 아직 master/slave DB 구조를 다뤄본적이 없어서 몰랐는데, 이렇게 readOnly 옵션을 사용할 경우 DB endpoint를 구분하여 명시하므로써 master/slave DB 구조를 사용할 수 있다는 측면도 알게되어서 좋았습니다. 본론으로 넘어가서, Q1. ProductNumber를 계산하는 로직을 DB에서 최신값을 읽어온 후에 , 그 값을 기반으로 다음 productNumber 값을 계산하는 로직을 저의 경우는 동시성 이슈를 고려하여 , 1.일단 SaveAndFlush()로 Id를 할당받고 2. 그 Id 값으로 만들자 라는 로직을 사용하였습니다. (IDENTITY 전략이므로 테이블당 1부터 Id가 할당되기 때문에 가능) 이러한 저의 로직에 문제가 있는지 피드백 주시면 정말 감사하겠습니다. 특히 calculateProductNumber() 메소드를 저의 경우는 도메인 주도 전략에 기반하여 서비스의 private Method로 정의하지 않고 , Entity 안에 정의하여 사용하는 편인데, 이러한 스타일에 대해서도 문제가 없을지 여쭤보고 싶습니다. Q2.두번째로 저의 경우는 createProduct() 메소드 테스트를 1.처음 생성 일의자리 productNumber로 생성 십의자리 productNumber로 생성 백의자리 productNumber로 생성 1000개를 넘어가면 예외발생 으로 구분하여 테스트 하였습니다. 그런데 이 테스트를 한꺼번에 돌렸을 땐 직전 테스트로 이미 저장된 Product에 의해 다음 테스트에 영향을 미쳐 일부 테스트가 실패하는 상황이 발생하였습니다. 이상황을 어떻게 해결할 수 있을지 질문 드리고 싶고 (sleep() 으로 간격을 주어야 할까요,,) 또한 이 원인이 테스트를 한꺼번에 실행시킬 경우, 각 테스트 메소드가 각 쓰레드로 동시에 실행되기 때문인지 여쭤보고 싶습니다! 감사합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
요니 댓글 2 좋아요 0 조회수 446

도커 컴포즈 질문드립니다

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

yml파일,mongo 파일,Dockerfile 만들고 docker-compose build docker-compose up 하고 다른 쉘에서 docker ps했는데 아무것도 안뜹니다 파일은 제대로 따라 적었는데도 오류 뜨고 몽고 db는 삭제했고 몽고db 컴패스는 오류걸려서 그냥 삭제했습니다

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
kql 1 댓글 1 좋아요 0 조회수 412

로그인 프로세스 설명 중 질문

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

해당 장을 설명해주실 때 철수가 1050번째, 영희가 2050번째라고 가정했을때, 수직 파티셔닝 된 데이터베이스 중 어디에 있는지는 미리 알 수 있는 방법이 있을까요?

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
박호정 댓글 1 좋아요 1 조회수 297

productsSalesLocation.service create method

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

create({productSalesLocation}): Promise<ProductSalesLocation>{ return this.productsSalesLocationsRepository.save({...productSalesLocation}); } 강의 중 위와 같은 코드를 작성해주셨는데, create의 parameter type은 ProductSalesLocation(Entity)의 타입에서 id만 제외하고 사용하는 형태로 작성하는 것이 맞을까요?

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
박호정 댓글 1 좋아요 0 조회수 209

product entity의 deletedAt type

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

다음처럼 DeletedDateColumn 데코레이터를 붙인 deletedAt은 db에서 nullable이니까 optional 타입으로 하는 것이 맞을까요? @DeleteDateColumn() deletedAt?: Date; 공식 문서에서는 optional 타입으로 되어 있지는 않네요 https://orkhan.gitbook.io/typeorm/docs/decorator-reference#deletedatecolumn

  • javascript
  • node.js
  • express
  • docker
  • tdd
  • rest-api
  • nestjs
박호정 댓글 1 좋아요 0 조회수 226

코틀린에서 builder 패턴은 사용하지 않나요?

미해결

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

강사 님께서는 객체를 인스턴스화 하실 때, 생성자를 사용하거나, 정적 팩토리 메서드를 사용하는 방식 2가지를 이용하셨는데 혹시 코틀린에서 builder 패턴을 사용하는건 어떻게 생각하시나요?? defalut 파라미터를 이용하고 naming을 통해 builder패턴 처럼 사용할 수 는 있겠지만 java에서 builder패턴을 통해 객체를 만들었던 것에 비하면 불편하다는 생각이듭니다. 조언 해주시면 감사하겠습니다.

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
백엔드 주니어 개발자 댓글 2 좋아요 2 조회수 2379

POJO 상품 등록 기능 구현하기 강의 질문

미해결

실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD

안녕하세요. POJO 상품 등록 기능 구현하기 강의의 3:58 에서 throw new UnsupportedOperationException("Unsupported addProduct");가 제안으로 바로 뜬 이유를 여쭙니다..!

  • tdd
  • spring-boot
  • pojo
  • 소프트웨어-테스트
  • api
J J 댓글 1 좋아요 1 조회수 562

주문한 상품 개수만큼 Stock을 감소시키는 로직

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하십니까! 저의 경우는 해당 로직을 stockRepository.findByProductNumberIn()이 아니라, 일일이 재고와 관련된 ProductNumber에 대하여 stockRepository.findByProductNumber()로 조회 하여 decreaseQuantity()를 수행하였습니다. 그렇게 하여도, 동일 Stock의 경우 EntityManager에서 조회해오기 때문에 중복된 쿼리가 나가지 않아 어느정도의 성능 감소를 막을 수 있다 고 판단하였고, (물론 In절로 한꺼번에 가져오는것 보단 성능이 덜 나올 것 같습니다) 그대신에 , 로직이 직관적이라는 장점 이 있을 것 같아서 위와 같이 해당 로직을 작성하였습니다. 이에 대해서는 어떻게 생각하시는지 의견 남겨주시면 감사하겠습니다!

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
요니 댓글 2 좋아요 0 조회수 467

요청값으로 넘어온 productNumber의 Product가 재고와 관련있는 상품인지 확인하는 로직 질문

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하세요! 강의에서는 해당 로직을 ProductType이 BOTTLE이나 BAKERY인 경우에 한하여 true가 되도록 containsStockType() 메소드를 작성하여 판별 해주셨습니다! 혹시 이 경우를 stockRepository.existsByProductNumber() 를 호출하여, 재고가 있는 상품들만 필터링 해내는 로직 으로 작성하게 되면, 주문 상품수가 많을 경우 쿼리가 여러번 나가기 때문에 비효율적이어서, 요구사항에 따른 검증 로직을 작성하셨는지 여쭙고 싶습니다!

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
요니 댓글 2 좋아요 0 조회수 297

레디스에서 락이 필요한 상황에 대하여

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요, 강의를 보고 공부를하다 궁금한 점이 생겨 질문드립니다. 제가 예측한 강의 내용으로는, "경쟁 상태 예시(재고 수량)에 대하여 레디스 를 활용한다." 라고 예측 했습니다. 이에 대하여, "레디스는 싱글 스레드 기반이니깐, 락킹 없이 해당 작업이 가능할 것" 이라고 추측하였는데요, 그러나 제가 생각지 못한 레디스 lock 과 관련된 내용을 접하게 되어 신기하면서도 또 궁금한 부분이 생겨 질문드립니다. 레디스 락 전략이 사용되는 이유와 예시를 조금더 들어볼 수 있을까요? 혹은 이와 관련하여 추가적으로 공부해볼 수 있는 자료를추천해주시면 감사하겠습니다.

  • java
  • spring
  • 동시성
성연 댓글 1 좋아요 0 조회수 500

@MockBean, @Mock

미해결

Practical Testing: 실용적인 테스트 가이드

@MockBean, @Mock 두 개 사용이 계속 헷갈려서 질문 드립니다. 스프링 서버를 띄워서 테스트 할 때 @MockBean을 사용하는 걸로 알려주셨는데 @MockBean도 결국 Mock 객체를 사용하는 거니 @MockBean 대신 @Mock을 써서 테스트를 해도 될 것 같은데 왜 @SpringBootTest나 @WebMvcTest 어노테이션과 @MockBean을 같이 사용해서 테스트 하는 지 궁금합니다. Controller 테스트를 할 때 @WebMvcTest를 사용하기 위해서 @MockBean을 사용하는 걸까요? @WebMvcTest와 @MockBean이 짝궁(?)이어서 이렇게 사용하는걸까요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
fbfbf1 댓글 2 좋아요 1 조회수 659

공유소스 실행시 에러 문의 드립니다~

해결됨

부트캠프에서 알려주지 않는 것들 (리액트) 1편

안녕하세요 다름이 아니라 공유해 주신 소스를 기반으로 코드 리포지토리: https://github.com/things-not-learn-from-bootcamp/form-practice/tree/use-reducer-fancy-typing 의 소스를 실행 시켜 보았는데요 위 와 같은 에러가 계속 발생해서요 아무리 구글 검색을 해도 해결이 안되어 문의 드립니다. 또 한가지 더 문의 부탁드립니다 위 동일한 레파지토리 소스를 실행시켰을 빌드해서 실행시켰을 때 위 처럼 빨간줄이 생겨서요 좀처럼 이해가 안되어서 같이 문의 드립니다. 바쁘신데 죄송하면 문의 부탁드립니다. 감사합니다.

  • react
  • tdd
  • React-Context
  • jest
  • 소프트웨어-테스트
manhattansky73 댓글 1 좋아요 1 조회수 439

WebMvcTest에서의 when

미해결

Practical Testing: 실용적인 테스트 가이드

Controller 테스트를 하실 때 어떤 경우에서는 when으로 값을 세팅해주고 어떤 경우에는 사용을 안하시는데 기준이 있으실까요

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
fbfbf1 댓글 2 좋아요 1 조회수 380

인기 태그

인프런 TOP Writers

주간 인기글