묻고 답해요
121만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
MSA, DDD 패턴으로 구현할때 고민사항
안녕하세요2일동안 강의 달리면서 실습도 하면서 궁금증을 해소하기위해 달려온 잡부개발자입니다최근 일반 레이어드 아키텍처로만 개발을 진행하니 생긴 문제들(테스트진행이 어려워짐, 소스파악하기 어려워짐 등등)이 생겨서 다른 아키텍처가 있나...찾아보다가 헥사고날 아키텍처가 가장 괜찮았다고 생각했고 DDD 형태로 진행하는게 깔끔할꺼같아서 혼자서 구조를 만들어보았어요아래 설명을 이어붙히도록하겠습니다adapterㄴ 헥사고날중 가장 바깥에 존재하는 controller, dao 부분adapter-modelㄴ adapter 에 쓰이는 모델들을 application 모듈과 연동시키기 위해 만든 model 클래스 모듈 applicationㄴ 각각의 UseCase 구현체와 인터펭이스가 존재하며 adapter-model 을 domain 객체로 변경하는 역할도 가진 모듈 domainㄴ 실제로 비즈니스로직을 가질수있는 POJO 도메인 객체위 구조는 Aggregate 를 적용하지않았기때문에 향후 각각의 작은 서버로 구성할수있는 MSA 로 뺄수있는 구조는 아니에요 다만 그건 aggregate 모듈을 만들어서 빼면 되는거라 생각하는데 그것보다도 가장 궁금한점은..... 비즈니스 로직을 POJO 객체가 있는 domain 모듈로 파싱할때 JPA 기준 A 라는 유저가 가지고있는 게임플레이 히스토리들도 가지고있잖아요? 이건 POJO 객체로 가져올때 히스토리 객체들도 모두 가지고와서 POJO 내에 넣어야하나요?반대의 경우 히스토리에서는 유저객체를 들고있을텐데 이때 의존을 모두 가져와야하나요? 아니면 유저의 키값만 객체로 들고있으면될까요?만약 해당 유저가 한시간에 1000번의 게임을 했다고 가정하면 몇일만 조회해도 엄청 많은 데이터가 램으로 올라가기때문에 좀 부담스러운데 히스토리가 필요한경우 쿼리에 비즈니스로직을 담아 타협해야하나요?물론 드라마틱한 성능차이가 없다면 도메인에서 처리해도되겠지만 성능상 차이가 많이 난다면 쿼리에 비즈니르로직을 담아야하는게 아닌가싶어서요글이 좀 생각의 흐름대로 쓰인거같아 미리 죄송합니다 ㅠ
-
미해결
백엔드 아키텍처 공부를 해보고 싶은데요 책이나 강의 추천해주실 수 있을까요..
백엔드 단에서 어떤 아키텍처 속에서 데이터가 흐르는지 궁금해져서 찾아보고 있습니다. 예를 들면 저는 이때까지클라이언트 - 서버 - 웹서버 - DB이 구조만 알고 있었거든요.. 근데 현업에선 좀 더 복잡하고 그 아키텍처를 이루기 위해 다루는 툴들도 다양하더라고요...전 그 부분이 많이 약한 것 같아서 아키텍처 위주로 책이나 강의 찾아보고 있는데아키텍처 책이나 강의 중 어떤걸 우선적으로 선택해서 공부를 시작해야 하나 고민이 되어서.. 이렇게 문의 글을 남깁니다.. ㅠㅠ전 이쪽으론 완전 초보 입니다! 유튜브를 통해서 짧게 나마 익힌 건.. 검색 엔진을 위해서는 elasticsearch를 사용하고 DB 과부화 막기 위해선 redis를 사용한다..뭐 이런 내용을 봤는데저는 좀 더 전체적인 그림을 보고 싶습니다.. ㅠㅠ
-
미해결실전! 스프링 데이터 JPA
클린 아키텍처에서 JPA
클린 아키텍처 (및 헥사고날) 설계 시 JPA 영속성 계층을 어디에 두어야하는지 궁금합니다.일반적으로 해당 아키텍처에선 영속성 계층을 도메인 계층에서 분리시켜야 한다고 주장하던데 (육각형 안 Entity는 POJO이며, JPA Entity는 바깥의 Adapter에 구현하고 Mapper로 변환하는 형식), 이렇게 되면 JPA가 제공하는 lazy loading이나dirty checking 등의 이점은 포기해야 되는것일까요?도메인 모델에 JPA 코드를 사용하자니 이러한 아키텍트 원칙에 위배되는거 같고, 그렇다고 이걸 분리해놓으면 따로 구현해야될게 많아지니 고민입니다..타협을 한다면 어느 방식으로 하는게 좋을까요? 애초에 이러한 아키텍트 방식과 JPA는 (지향점이 다르기에) 어울리지 않는 것일까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
application.yml args에러발생이유
강의 잘 듣고있습니다~실습으로 따라하면서 하고있는데 application.yml에서 에러가 발생하는데 왜 그런것일까요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
스프링 시큐리티 문의 (webSecurityConfigurerAdapter 취소선)
안녕하세요. 스프링시큐리티 로그인관련 진행하다가 extends webSecurityConfigurerAdapter 가 취소선이 나와서 확인해보니 현재는 사용하지않는다고 알게되었습니다. 나름 바꾸면서 진행중인데authenticationManager() 를 사용하려면 어떻게해야되는지 알 수 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
catalog 테이블 자동 create-drop 가 안됩니다.
안녕하세요 application.yml 설정을하고 서버 시작 시 CREATE문자체가 동작을안하는것같습니다.application.yml 과 CatalogEntity.java 는 다음과같습니다. 문제가무엇일까요...
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
H2 최신 버전 사용 시 server mode 사용에 따른 application.yml 파일 설정(테이블은 생성됐는데 data.sql INSERT 안될 시 참고)
Spring Boot 3.XX 대 버전으로 최신 버전 사용 시 H2를 이전 버전으로 사용 불가합니다.따라서 H2를 따로 켜서 실행해준 후, catalog-service에서 Server mode로 연결하던지 따로 켜 둔 H2를 연결하던지 선택해야합니다. 이 때, Server Mode로 프로젝트와 H2를 연결시키면 강의 내용의 설정만으로는 data.sql의 INSERT 쿼리문이 동작하지 않습니다. 그렇기 때문에 관련 설정을 application.yml에 추가해주어야 하는데요. 아래와 같이 설정하면 됩니다. stackoverflow와 강사님의 2021년 답변을 참고하여 해결하였습니다. server: port: 0 spring: application: name: catalog-service h2: console: enabled: true settings: web-allow-others: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:tcp://localhost/mem:testdb username: sa jpa: hibernate: ddl-auto: create-drop show-sql: true generate-ddl: true defer-datasource-initialization: true sql: init: mode: always eureka: instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka logging: level: com.example.catalogservice: DEBUG 추가한 내용은 spring.jpa.defer-datasource-initialization과 spring.sql.init.mode 설정입니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Boot 최신 3.XX 버전 Security 설정 공유드립니다.
최신 버전 진행하시는 분들을 위해 공유드립니다.Spring Security Configuration 설정 내용이 변경되었습니다. WebSecurityConfigurerAdapter 클래스가 deprecated되었는데요. 해당 클래스를 상속 받아 config 메소드를 구현하는 대신 SecurityFilterChain을 반환하고 직접 Bean으로 등록하도록 설정 방법이 바뀌었습니다. package com.example.userservice.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class WebSecurity { private static final String[] WHITE_LIST = { "/users/**", "/**" }; @Bean protected SecurityFilterChain config(HttpSecurity http) throws Exception { http.csrf().disable(); http.headers().frameOptions().disable(); http.authorizeHttpRequests(authorize -> authorize .requestMatchers(WHITE_LIST).permitAll()); return http.build(); } } 강의 내용을 진행하기 위해서 강의에 나온 설정을 위처럼 설정해보았는데요. 일단 이렇게 설정하면 강의를 진행하는데 문제 없을 것이니 참고 바랍니다~
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gradle
안녕하세요만약 9003번을 커맨드라인에서 gradle 명령어로 띄우려면 어떻게 해야하나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka 설정 관련해서 올려주신 goolge drive 링크가 만료되었습니다
Error: Could not find or load main class org.apache.kafka.connect.cli.ConnectDistributedCaused by: java.lang.ClassNotFoundException: org.apache.kafka.connect.cli.ConnectDistributedkafka connect 설정도중 위의 에러가 해결되지 않아 통합 파일을 받으려했는데 페이지를 찾을 수 없다고 나옵니다.https://www.inflearn.com/questions/601451/windows-kafka-%EC%A0%95%EC%83%81-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EB%B2%84%EC%A0%84-%EC%A0%9C%EA%B3%B5%EB%AC%B8%EC%9D%98https://drive.google.com/file/d/1GDrBskzAE4Y_GojNeXhGeN2YeMFrpFe-/view?usp=sharing링크 공유 다시해주시면 감사하겠습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
HttpTraceRepository를 찾을수가없는데 어떻게해야하나요
메이븐에 dependency추가해도HttpTraceRepository를 찾을수없는데 어떻게 진행해야할까요?ㅜ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
API Gateway를 통해 라우팅 시 user service로 전달되는 요청 url에 대해 질문 드립니다..!
안녕하세요 선생님 강의 정말 잘 듣고 있습니다..!혹시 더 좋은 방법이 있을까 싶어 질문 드립니다. spring: application: name: api-gateway cloud: gateway: routes: - id: A uri: lb://USER-SERVICE predicates: -Path=/user-service/**위와 같이 gateway 설정을 하게 되면,user service에도 /user-service/ 라는 path가 같이 합해져 요청 url로 전달되어,Controller의 /user, /health-check, /welcome 같은 매핑을 모두 /user-service/user, /user-service/health-check, /user-service/welcome 으로 변경하라고 말씀 주셨습니다혹시 이렇게 컨트롤러의 매핑 정보를 변경하지 않고,api gateway 단에서 필터를 이용해 사용자 요청 url을 조작해서 라우팅 할 수 있는 방법이 있을까요..??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
/health_check를 실행했을 때, 값이 바뀌지 않습니다.
안녕하세요.user-service application.ymlspring: application: name: user-service cloud: config: name: ecommerce config: import: optional:configserver:http://localhost:8888포스트맨에서, POST방식으로 actuator/refresh를 실행했을 때,org.springframework.cloud.config.server.environment.NoSuchLabelException: No such label: main위와 같은 에러가 발생해서 main 브랜치를 추가했더니, actuator/refresh를 실행했을 때 에러가 발생하지 않게 되었습니다.예를 들어, token.secret 값을 변경하고 main브랜치에 커밋한 후, actuator/refresh를 실행하면 정상적으로 refresh가 되는 것 같습니다.[ "config.client.version" ]http://localhost:8888/ecommerce/default 에서도 값이 변경되는 것을 확인했습니다. "source": { "token.expiration_time": 86400000, "token.secret": "user_token2", "gateway.ip": "192.168.0.8" }그런데, /health_check를 실행해보면 새로운 값으로 변경되지 않습니다.It's working in user service, port(local.server.port)=61250, port(server.port)=0, token secret=user_token1, token expiration time=86400000어디가 잘못된 건지 혹시 알 수 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JdbcSourcdConnector 에서 mariadb 드라이버 복사 질문
제가 ./m2 > repository > org 에 접속을 하면 여러 db가 보이는데 mariadb만 안보입니다. 도대체 이게 어떻게 된 일이죠...? 그래서 이제 MariaDB 사용하기 위해서 해당 jar 파일을 복사 해서 원하는 위치에 넣어야 하는데...그걸 못해서 진도가 안나가고 있습니다...
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
8분 41초부터 Kafka Connect 실행이 안됨
제가 그대로 따라해서 하고 있는데... 왜 안되는지 잘 모르겟네요... 저는 D 드라이브에 별도로 폴더를 생성해서 작업하고 있었는데요, .\bin\windows\connect-distributed.bat .\etc\kafka\connect-distributed.properties 를 실행하면 Error: Could not find or load main class org.apache.kafka.connect.cli.ConnectDistributedCaused by: java.lang.ClassNotFoundException: org.apache.kafka.connect.cli.ConnectDistributed 위와 같은 에러가 나오니... 이유가 뭘까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
filter가 작동되지 않습니다.
- 강의에 있는 거 그대로 사용했는데 log가 뜨지를 않습니다. 디버그를 찍어보니 필터를 거치지 않는데 어떻게 해결을 해야될까요??- 요청은 정상적으로 가고 응답도 first-service / second-serivIce에 맞게 잘 가져옵니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
RoutLocatortBuilder
안녕하세요 RouteLocateBuilder에 빨간 줄이 뜨는데무시하고 해도 되는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
zuul 강의에서 gradle로 하시는 분들을 위해 공유합니다
zuul을 사용하기 위해서는 spring boot 버전이 2.4보다 낮아야 한다고 해서 2.3.9.RELEASE를 사용했습니다. (2.4 미만 버전은 RELEASE가 붙더라고요)또한, spring boot 버전이 2.4 미만일 경우 spring cloud 2020.0.0 (2.4.x, 2.5.x 에서만 사용 가능) 버전을 사용할 수 없고 Hoxton 버전을 사용해야 됨을 적용했습니다.아래와 같이 해서 실행 성공했습니다.plugins { id 'java' id 'org.springframework.boot' version '2.3.9.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Hoxton.RELEASE" } } tasks.named('test') { useJUnitPlatform() }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
비대칭키 jwt 인증 문제
http://localhost:8888/ecommerce/default 에서는 {name: "ecommerce",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml",source: {token.expiration_time: 864000000,gateway.ip: "172.30.1.33",token.secret: "userToken_token"}}]}http://localhost:8888/user-service/default 에서는{name: "user-service",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\user-service.yml",source: {spring.datasource.url: "jdbc:h2:mem:testdb",spring.datasource.driver-class-name: "org.h2.Driver",spring.datasource.generate-unique-name: false,token.expiration_time: 864000000,gateway.ip: "172.30.1.33",order_service.url: "http://ORDER-SERVICE/order-service/%s/orders",spring.datasource.username: "sa",token.secret: "userToken_token"}}]} 이와 같이 token.secret이 같은데 왜 subject가 null값이 되는지 이유를 알 수 가 없습니다. login하고 나온 header값을 가지고 bearer에 넣어 인증하는 방식이 아닙니까?이유를 잘 모르겠습니다. JWT token is not valid이게 왜 뜨는지subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 여기서 왜 null값으로 값을 반환하는지 이해를 할 수가 없습니다.
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
NPU 설계에서, low-level 설계가 무엇인가요?
제가 아직 완강을 하지 않아서 드리는 질문이면 죄송합니다..^^Deep learning 설명 중에, 이미지를 예시로 들면서 low-level feature라는 단어를 언급하셨는데요,실제 NPU설계 시 Low-level 설계라 하면, 이를 위 설명과 연관지어서 이해할 수 있을까요?GPU에 비견했을 때, 연산하는 정보가 이미지가 아닌, 다른 목적(음성, 텍스트 등)일 때 해당하는 정보를 처리하는 Processing unit이라고 이해했습니다. (틀리다면 정정 부탁드립니다..^^)이런 부분에 대해서, 혹시 low-level설계에 관해 아시는 바를 좀더 구체적으로 설명주실 수 있을까요? - 강의 내용외의 개인 질문은 받지 않아요 (개별 과제, 고민 상담 등..)- 저 포함, 다른 수강생 분들이 함께보는 공간입니다. 보기좋게 남겨주시면 좋은 QnA 문화가 될 것 같아요. (글쓰기는 현업에서 중요한 능력입니다!)- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.