안녕하세요. 양질의 강의 덕분에 제한된 시야에서 새로운 인사이트를 얻을 수 있었습니다. 섹션 18 - 안정감 있는 아키텍처 개선 챕터를 수강하고 있으며, 현재까지 강의를 들으면서 궁금 했던 내용 두 가지를 여쭈어보고 싶습니다. 질문 1. " TDD를 사용해 만들어진 먹구름 아키텍처를 어느 시점에서 개선 해야 할까요? " 질문을 하게 된 계기는 전형적으로 많이 사용되는 레이어드 아키텍처를 첫 기능 구현 단계에서 부터 차용하여 개발을 진행 해왔는데, 왜 이 아키텍처를 사용했을까? 란 의문이 없었거든요. 강의에서는 흔히 말해 스마트 UI 패턴으로 요구사항을 충분히 충족 해오며 점진적으로 개선 해왔습니다. 그러다 모종의 이유로 내부 아키텍처를 개선 하면서 진행이 되었는데, 아키텍처를 개선 해야겠다고 느끼는 요소가 무엇인지 궁금합니다. 요구사항이 추가 되었을 때 개발 비용을 최소화 하여 충족 시킬 수 있는가? 라고 생각을 하고 있는데, 현재 까지 불편함을 느낄 정도의 확장성을 강요 받아본 적 없어서 감을 못 잡는 것 같습니다. 질문 2. " 어떤 영역을 대상으로 테스트를 작성해야할까? " - 테스트 코드 작성 범위 고민 위 질문 내용과 답변을 보고 무언가 감이 오는 듯 하나, 아직 정리되지 않는 느낌입니다. API 계층의 동작이 가볍다 또는 무겁다의 판단 기준 API 계층의 동작이 가벼운지 무거운지에 대한 판단은 어떻게 하시는지 궁금합니다. 해당 강의에선 API 계층의 동작이 가벼웠기 때문에 API 스펙에 인수테스트를 진행 한 것 같습니다. 서비스 대상으로 테스트를 많이 실행하고, API 는 간단한 성공 경우에 테스트를 한다 . 이 케이스에선 아래와 같은 테스트 시나리오가 있다고 가정한다면 테스트를 어떻게 하면 좋을까요? - username 속성이 null 이거나 공백이라면 HasUsernameNullOrEmpty 예외를 반환한다 - username 속성이 올바른 형식을 따르지 않으면 InvalidUsername 예외를 반환한다 - username 속성이 올바른 형식을 따르면 User 객체를 생성한다 서비스 테스트에서 위 3가지 케이스에 대해 검증 인수 테스트에서 username 을 정확히 입력한 경우 상태코드와 유저에 대한 정보를 반환 하는지 검증 이렇게 테스트를 구성한다고 이해 했는데 제대로 이해한걸까요? 다시 한 번 질문을 빌미로 감사 인사를 드리면서 고견 부탁드리겠습니다. 항상 건강하세요!
안녕하세요 강사님. 좋은 강의 남겨주셔서 잘 수강하고 있습니다. 강의 중에 Bastion Host를 통해 프라이빗 인스턴스에 접근할 때도 Cloud Router가 필요하다고 말씀해주셨는데, 제가 이해한 바로는 Cloud Router는 Cloud NAT 구성 시에만 필요한 리소스 인 것 같아 헷갈려서 질문 드립니다. Bastion Host에서 프라이빗 VM으로 SSH 접속하는 경우에도 Cloud Router가 꼭 필요한 구성 요소인지 궁금합니다. 혹시 제가 놓치고 있는 부분이 있을까요?
인사말 안녕하세요. 질 높은 강의를 제공해주셔서 너무 감사하다는 말씀드립니다. 아직 강의를 모두 본 것은 아니어서, 제가 질문드리고자 하는 내용이 강의에 포함이 되어있을지 모르겠습니다만.. 궁금한 내용을 질문드립니다. 질문 많은 모놀리식 프로젝트에서는 Spring Web + Spring Data JPA를 의존성을 주입하고 개발을 하고 저 또한 이러한 방식의 개발을 경험해왔습니다. Spring Data JPA와 Spring Web은 동기방식으로 동작하게 되는데, MSA의 독립 모듈을 만들 때 해당 의존성들을 사용하는 것이 바람직한지 모르겠습니다. 강의의 내용처럼 하나의 서비스는 독립적으로 구성된 수십개에서 수백개의 독립된 애플리케이션으로 동작을 하게 될 것인데요. 상황에 따라 다르기는 하겠지만 Spring Web과 Spring Data JPA를 사용하는 독립된 애플리케이션이 있게 된다면 이쪽에서 병목이 일어나 엄청난 성능 이슈가 발생할 것으로 생각이듭니다. 이와 같은 고민을 갖고 GPT한테 물어보니 WebFlux와 R2DBC를 사용하여 모두 비동기적으로 만드는 것이 권장되는 사항이라고 하는데 이 답변이 맞을까요? MSA를 구성한다고 한들, 모놀리식보다 성능상 좋지가 않으면 MSA로 구축할 필요성이 없을 것인데, 제가 우려하는 성능상의 심각한 문제 / 병목현상을 예방하기 위한 설계를 어떻게 해야하는지 너무 궁금합니다. 추가적으로는 Speing web이나 Spring Data Jpa가 MSA에거 어느 점에 필요하게 됭까요? 성능 관점에서 도무지 필요성을 느끼지 못하고있습니다. 질문이 너무 두서가 없는데... 질문 내용이 강사님께 잘 전달되었길 바랍니다..!
강사님 안녕하세요. 전에 독립적인 환경에서 실행하면 병렬처리가 된다고 하셨던 것 같은데, 그렇다면 생성하는 코드 후 id 비교를 할 때 다른 테스트 코드에서 상품이 등록되어 반환되는 리스트가 달라질 수 있다고 생각됩니다. 그렇다면 이런 경우에는 이 테스트가 진행될 때는 다른 테스트가 동작하지 않게 처리하던가 하는 방식이 있나요? 예를 들어 최신 리스트를 반환한다고 할 때 테스트 리스트를 넣고 act 하기 전에 다른 테스트에서 arrange 단계에 추가 코드가 동작되면 act에서 리스트 조회할 때 반환할 때 다른 곳에서 추가한 값이 반환되어 테스트 실패 이렇게 될 것 같아 질문드립니다. 좋은 강의 감사드립니다.
spring_cloud_gateway_requests_seconds_count{ httpMethod ="GET", httpStatusCode ="401", instance ="localhost:8000", job ="apigateway-service", outcome ="CLIENT_ERROR", routeId ="user-service", routeUri ="lb://USER-SERVICE", status ="UNAUTHORIZED"} 22 spring_cloud_gateway_requests_seconds_count{ httpMethod ="GET", httpStatusCode ="404", instance ="localhost:8000", job ="apigateway-service", outcome ="CLIENT_ERROR", routeId ="order-service", routeUri ="lb://ORDER-SERVICE", status ="NOT_FOUND"} 회원가입과 로그인만 하더라도 이러한 것들의 숫자가 올라가 총 요청 수 중 성공한 숫자가 매우 적습니다. chat gpt에서는 자동으로 health-check를 해서 그렇다라고는 하는데 정확히 어떤 것이 문제인지 잘 모르겠습니다.
현재 my-sink-connect 등록도 잘되었고 아무 문제없이 작동을 잘 합니다. 또한 파워쉘을 통해서 데이터가 shema형태로 잘 통신되는 것도 확인 잘 되었습니다. 하지만 my_topic_users 테이블이 생성되지 않아 문제가 생겼습니다. 오류 메시지나 로그 또한 아무것도 나오지 않아 해결을 어떻게 할지 잘 모르겠습니다. PS C:\Work\kafka_2.12-3.4.0> .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic my_topic_users --from-beginning {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":true,"field":"user_id"},{"type":"string","optional":true,"field":"pwd"},{"type":"string","optional":true,"field":"name"},{"type":"int64","optional":true,"name":"org.apache.kafka.connect.data.Timestamp","version":1,"field":"created_at"}],"optional":false,"name":"users"},"payload":{"id":1,"user_id":"user1","pwd":"1111","name":"userA","created_at":1753221466000}} {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":true,"field":"user_id"},{"type":"string","optional":true,"field":"pwd"},{"type":"string","optional":true,"field":"name"},{"type":"int64","optional":true,"name":"org.apache.kafka.connect.data.Timestamp","version":1,"field":"created_at"}],"optional":false,"name":"users"},"payload":{"id":2,"user_id":"user2","pwd":"2222","name":"userB","created_at":1753221589000}} mysql> use mydb; Database changed mysql> show tables; +----------------+ | Tables_in_mydb | +----------------+ | orders | | users | +----------------+ { "name": "my-sink-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", "delete.enabled": "false", "connection.password": "test1357", "auto.evolve": "true", "connection.user": "root", "tasks.max": "1", "topics": "my_topic_users", "value.converter.schemas.enable": "true", "name": "my-sink-connect", "auto.create": "true", "connection.url": "jdbc:mysql://localhost:3306/mydb" }, "tasks": [ { "connector": "my-sink-connect", "task": 0 } ], "type": "sink" }
java.sql.SQLException: No suitable driver found for jdbc:h2:mem:testdb java.sql.SQLException: Access denied for user 'root'@' localhost ' (using password: YES) 현재 kafak connect 연결시 이런 오류가 뜹니다. order-service를 mariadb Driver로 설정했는데 왜 h2메모리방식의 드라이버를 찾는지 이유를 잘 모르겠으며 해결방법이 절실합니다. Kafka의 zookeeper, Kafka server는 현재 작동이 잘됩니다. 윈도우 사용자입니다. 도움이 절실합니다.
현재 zookeeper, kafka server는 다 실행되고 topic list도 잘 나오는 상황입니다. 하지만 현재 Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb 이 에러 때문에 진도를 못나가고 있는 상황입니다. 강의 그대로 했음에도 불구하고 어떤것이 문제인지 모르겠습니다. 제발 도와주세요
안녕하세요, (추가) Compute Engine 생성 시 주의사항 강의 부분에서 질문이 있어 남깁니다. AZ를 모두 선택 하는 경우, 제가 아는 바 로는 단순히 "Google에서 머신 유형과 가용성을 기반으로 영역을 자동으로 선택해주는 것" 일 뿐, Failover, 지연시간 비용, 관리편의성 등 이런 것들과는 관련이 없습니다. [1] 혹 제가 알고있는 내용이 아닐수도 있어, 공식적인 Docs가 있다면 해당 내용의 출처를 알려주시면 감사하겠습니다. [1] https://cloud.google.com/compute/docs/regions-zones?hl=ko
저는 기존에 jdk 11 을 환경변수로 넣고 있어서 jdk21 은 인텔리제이에서 잡아다 쓰고 있었는데, 터미널은 시스템의 환경변수를 따라가다보니 좀 귀찮아서 찾아보니까 프로젝트 루트 디렉토리에 gradle.properties 라는 파일 생성한 뒤 org.gradle.java .home= 의 값을 넣어줘야합니다. 인텔리제이 상단 메뉴에서 File -> project Structure -> SDKs -> jdk21 버전 클릭 -> 'JDK home path' 의 경로를 통째로 org.gradle.java .home 의 값으로 복붙 -> 역슬래시(\)는 슬래시(/) 로 변경 -> 우측 사이드 패널에서 코끼리(gradle) 펼쳐다가 수동으로 새로고침 -> 인텔리제이 터미널에서 ./gradlew bootRun --args='--server.port={포트번호}' 입력하면 잘 됩니다.
학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요. 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요. 서로 예의를 지키며 존중하는 분위기를 함께 만들어가요. 잠깐! 인프런 서비스 관련 문의는 1:1 문의하기를 이용해 주세요 안녕하세요 좋은 강의 만들어주셔서 감사합니다. 실무에 적용할 수 있도록 열심히 듣고 있습니다. 강의 내용과는 조금 거리가 있는 질문일수도 있겠으나 궁금해져서 여쭤봅니다. assertThat으로 응답코드 검증 시 getStatusCode().value() 와 200으로 직접 코드값을 검증하시는 이유가 있을까요? getStatusCode() 와 HttpStatus.OK 로 enum 타입 검사가 의도가 명확하지 않나? 라는 의문이 들어서 특별한 이유가 있으신 건지 궁금해서 질문 남겨봅니다
안녕하세요. 올려주신 강좌 너무 유익하게 잘 보고 있습니다. 감사합니다. 섹션 12. GCS (Google Cloud Storage) BIgQuery에서 사용할 데이터를 업로드 하기 에서 수업 노트에 올라와있는 구글 드라이브에 액세스 권한이 필요하여 다운로드가 안됩니다. (아파트거래, 시군구코드 csv 파일 입니다) 익명 액세스에 대해서 read 권한을 부여해주시면 감사하겠습니다
ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
12_3강을 듣고 있는데, HelloASP 프로젝트에서 종속성 부분을 우클릭해서 프로젝트참조추가 버튼을 눌러 Business Layer를 추가한다고 말씀주셨습니다. 똑같이 따라 했는데 추가가 되지 않네요. 종속성 부분을 다시 우클릭해서 프로젝트참조추가 버튼을 누르면 Business Layer에 체크 박스가 해제 되어 있습니다. 제가 놓친 부분이 있으니까 그런 거 같은데 어딘지 모르겠습니다 ㅠㅠ 살펴 볼 만한 요소가 있을까요 ㅠㅠ
기존에는 http://localhost:8081 과같이 보내줬는데, 이걸 lb:/MY-FIRST-SERVICE 로 바꿨습니다. 그렇다면, 원래 localhost:8081로 직접 http 프로토콜로 보내줬던건, 유레카를 거치지 않았고, 하드코딩으로 직접 보내줬던 것이고, 그리고 lb:/를 이용하는 것이 유레카에 저장되어 있는, 정보들을 통해 읽어와서 동적으로 보내주는 것으로 이해하였는데, 제가 이해한게 맞을까요?
안녕하세요! TDD 평소에 관심이 많았지만 실무에서 막상 적용하려니 고민이 많았는데 좋은 강의 만들어 주셔서 감사합니다. 섹션5까지 수강했는데 벌써 만족스럽네요 수강평 5점 먼저 드렸고 평소에 실무에서 항상 고민이 되던 부분이 있어서 질문드려요! 테스트코드가 너무 많아지는 것이 부담스러워서 하는 고민인데요. 특정 Service 메서드의 테스트코드를 작성 할 때 해당 메서드가 사용하고 있는 Repository 메서드 에서 테스트한 내용을 Service 에서 중복적으로 테스트해야하는 가에 대한 고민입니다. 참고로 Service, Repository 메서드 둘다 응답에 영향을 미치는 동일한 파라미터를 인풋으로 받고 있다는 전제입니다. GPT 에게 물어보면 아래와 같이 대답을 하는데요. 서비스 메서드의 인풋값이 변경되면 응답에 영향을 미치는데 Repository에서 테스트했다고 안하는 것이 맞는가? 라는 고민이 계속 되네요. 고견 주시면 감사하겠습니다! [GPT 답변] Service 테스트는 Repository 동작이 "올바르다고 믿는다는 전제 하에" 작성하는 것이 일반적인 전략 입니다. 즉, Repository의 구현 자체를 Service 테스트에서 다시 검증할 필요는 없습니다. 질문 카테고리가 "수업질문"인데 전체질문으로 변경하는 버튼이 없어서 일단 그대로 둡니다 ㅜㅜ
안녕하세요! 강의 절반을 본 수강생입니다. 뒷내용에 나올법한데 질문드려봅니다. 강의에서 거짓음성에 대한 경험때문에 테스트 코드에 @Transactional 를 안붙이신다고 하셨습니다. 그럼 예를 들어서 개발 디비기준으로 CRUD 테스트를 작성하시는건가요? 또 다른 질문으론 TDD 기법이 아닌 , 실무 회사 코드에서 기존 코드에 인터페이스 테스트를 작성하려고 합니다 TDD가 아닌 유닛테스트로 이해가 되는데, 이런 방법또한 상관 없을까요?