묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[백문이불여일타] 데이터 분석을 위한 기초 SQL
Syntax error
SELECT * FROM CustomersLIMIT 10이라고 입력하고 실행했는데 Error in SQL:Syntax error in FROM clause.이라고 뜨네요. 왜 그럴까요? Limit 10입력하기 전에는 데이터가 잘 나왔어요.
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
null(!!)인지 null일수도 있는건지(?) 판단할수있는 기준이 어떻게 되는지 궁금합니다
안녕하세요 강사님앱강의 초반에는 멘탈도 많이 나가고 많이 헤맸는데 뒤로 갈수록 조금씩 이해가 되어가는것 같네요.. 다름이 아니라 코드를 따라 보면서 작성하다가 궁금해져서 질문을 드리는데요..?와 !!를 사용하고 안했을때 코드에서 빨간줄이 나오고 그러는데어떻게 판단하고 적용하시는건지 궁금합니다 사실.. 저걸 저때 왜 쓰는건지 그런게 이해가 잘 안되네요..ㅠ 아 그리고 RVAdapter를 MainActivity하고 BookmarkActivity에서 같이 사용되고 있는데 MainActivity에서는 context를 BookmarkActivity에서 context를 사용하면 왜 오류가 뜨고 this를 사용하는건지 궁금합니다..
-
미해결실전! Querydsl
최종 질문) 페이징 & 정렬
제가 제대로 이해하고 있는지 제대로 잡고 넘어가려고 합니다. 질문1먼저 단순한 제목 검색과 페이지처리와 정렬을 구현했을 때fetchCount 대신에 fetchOne을 사용하기 위해서 별도로 count 쿼리를 생성해서 페이지 처리를 해줍니다.페이지와 정렬을 처리할 때 동적 정렬을 처리하기 위해서 OrderSpecifier을 사용해서 동적 정렬 쿼리를 하기 위해서 다음과 같이 설정http://localhost:9090/v2/members?page=1&sort=memberId,desc Pageable로 페이지랑 정렬을 받아서 동적으로 뽑아와서 메소드를 만들고 orderBy에 넣었습니다. 이런식으로 처리하는게 맞나요?질문2@Repository @Log4j2 public abstract class Querydsl4RepositorySupport { // 이 클래스가 다루는 도메인(엔터티)의 클래스 private final Class domainClass; // 도메인 엔터티에 대한 Querydsl 쿼리를 생성하고 실행 private Querydsl querydsl; // 데이터베이스와의 상호 작용을 담당하는 JPA의 핵심 객체 private EntityManager entityManager; // queryFactory를 통해 Querydsl 쿼리를 생성하고 실행합니다. private JPAQueryFactory queryFactory; public Querydsl4RepositorySupport(Class<?> domainClass) { Assert.notNull(domainClass, "Domain class must not be null!"); this.domainClass = domainClass; } // Pageable안에 있는 Sort를 사용할 수 있도록 설정한 부분 @Autowired public void setEntityManager(EntityManager entityManager) { Assert.notNull(entityManager, "EntityManager must not be null!"); // JpaEntityInformation을 얻기 위해 JpaEntityInformationSupport를 사용합니다. // 이 정보는 JPA 엔터티에 대한 메타데이터 및 정보를 제공합니다. JpaEntityInformation entityInformation = JpaEntityInformationSupport.getEntityInformation(domainClass, entityManager); // 이는 Querydsl에서 엔터티의 경로를 생성하는 데 사용됩니다. SimpleEntityPathResolver resolver = SimpleEntityPathResolver.INSTANCE; // entityInformation을 기반으로 엔티티의 경로를 생성합니다. EntityPath path = resolver.createPath(entityInformation.getJavaType()); this.entityManager = entityManager; // querydsl 객체를 생성합니다. // 이 객체는 Querydsl의 핵심 기능을 사용할 수 있도록 도와줍니다. // 엔터티의 메타모델 정보를 이용하여 Querydsl의 PathBuilder를 생성하고, 이를 이용하여 Querydsl 객체를 초기화합니다. this.querydsl = new Querydsl(entityManager, new PathBuilder<>(path.getType(), path.getMetadata())); this.queryFactory = new JPAQueryFactory(entityManager); } // 해당 클래스의 빈(Bean)이 초기화될 때 자동으로 실행되는 메서드 @PostConstruct public void validate() { Assert.notNull(entityManager, "EntityManager must not be null!"); Assert.notNull(querydsl, "Querydsl must not be null!"); Assert.notNull(queryFactory, "QueryFactory must not be null!"); } // 이 팩토리는 JPA 쿼리를 생성하는 데 사용됩니다. protected JPAQueryFactory getQueryFactory() { return queryFactory; } // 이 객체는 Querydsl의 핵심 기능을 사용하는 데 도움이 됩니다. protected Querydsl getQuerydsl() { return querydsl; } // EntityManager는 JPA 엔터티를 관리하고 JPA 쿼리를 실행하는 데 사용됩니다. protected EntityManager getEntityManager() { return entityManager; } // Querydsl을 사용하여 쿼리의 SELECT 절을 생성하는 메서드입니다. // expr은 선택할 엔터티나 엔터티의 속성에 대한 표현식입니다. protected <T> JPAQuery<T> select(Expression<T> expr) { return getQueryFactory().select(expr); } // Querydsl을 사용하여 쿼리의 FROM 절을 생성하는 메서드입니다. // from은 엔터티에 대한 경로 표현식입니다. protected <T> JPAQuery<T> selectFrom(EntityPath<T> from) { return getQueryFactory().selectFrom(from); } // 이 메서드는 주어진 contentQuery를 사용하여 Querydsl을 통해 JPA 쿼리를 생성하고 실행하고, // 그 결과를 Spring Data의 Page 객체로 변환하는 기능을 제공 protected <T> Page<T> applyPagination(Pageable pageable, Function<JPAQueryFactory, JPAQuery> contentQuery) { // 1. contentQuery를 사용하여 JPAQuery 객체를 생성 JPAQuery jpaQuery = contentQuery.apply(getQueryFactory()); // 2. Querydsl을 사용하여 페이징 및 정렬된 결과를 가져옴 List<T> content = getQuerydsl().applyPagination(pageable, jpaQuery).fetch(); // 3. contentQuery를 다시 사용하여 countQuery를 생성 JPAQuery<Long> countQuery = contentQuery.apply(getQueryFactory()); // 4. countQuery를 실행하고 총 레코드 수를 얻음 long total = countQuery.fetchOne(); // 5. content와 pageable 정보를 사용하여 Spring Data의 Page 객체를 생성하고 반환 return PageableExecutionUtils.getPage(content, pageable, () -> total); } // 이 메서드는 contentQuery와 함께 countQuery를 인자로 받아서 사용합니다. // contentQuery를 사용하여 페이징된 결과를 가져오고, countQuery를 사용하여 전체 레코드 수를 얻습니다. protected <T> Page<T> applyPagination(Pageable pageable, Function<JPAQueryFactory, JPAQuery> contentQuery, Function<JPAQueryFactory, JPAQuery> countQuery) { JPAQuery jpaContentQuery = contentQuery.apply(getQueryFactory()); List<T> content = getQuerydsl().applyPagination(pageable, jpaContentQuery).fetch(); JPAQuery<Long> countResult = countQuery.apply(getQueryFactory()); log.info("countResult : " + countResult ); Long total = countResult.fetchOne(); return PageableExecutionUtils.getPage(content, pageable, () -> total); } }fetchCount() → fetchOne()으로 변경 // count처리 까지 한것 public Page<Member> applyPagination2(MemberSearchCondition condition, Pageable pageable) { return applyPagination(pageable, contentQuery -> contentQuery.selectFrom(member) .leftJoin(member.team, team) .where(userNameEq(condition.getUserName()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe()) ), countQuery -> countQuery .select(member.count()) .from(member) .where(userNameEq(condition.getUserName()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe())) ); } private BooleanExpression userNameEq(String userName) { return hasText(userName) ? member.userName.eq(userName) : null; } private BooleanExpression teamNameEq(String teamName) { return hasText(teamName) ? team.name.eq(teamName) : null; } private BooleanExpression ageGoe(Integer ageGoe) { return ageGoe != null ? member.age.goe(ageGoe) : null; } private BooleanExpression ageLoe(Integer ageLoe) { return ageLoe != null ? member.age.loe(ageLoe) : null; } @Service @RequiredArgsConstructor public class MemberService { private final MemberTestRepository memberTestRepository; public Page<MemberTeamDTO> search(MemberSearchCondition condition, Pageable pageable) { Sort sort = pageable.getSort(); PageRequest pageRequest = PageRequest.of( (int) pageable.getOffset(), pageable.getPageSize(), sort ); Page<Member> resultPage = memberTestRepository.applyPagination2(condition, pageRequest); return resultPage.map(member -> MemberTeamDTO.builder() .memberId(member.getId()) .age(member.getAge()) .userName(member.getUserName()) .teamId(member.getTeam().getId()) .teamName(member.getTeam().getName()) .build()); } }Sort를 처리할 때 orderBy할 필요 없이 PageRequest.of로 보내주면 된다고 글을 봐서 동적으로 처리할 수 있도록 Sort sort = pageable.getSort(); PageRequest pageRequest = PageRequest.of( (int) pageable.getOffset(), pageable.getPageSize(), sort );이렇게 처리했습니다. Post맨으로 돌려본 결과 제개 원하는 대로 페이징, 정렬이 되었는데 이런식으로 하는게 맞나 확인하고 싶어서 질문드립니다. 질문3 질문1 OrderSpecifier로 동적인 쿼리 처리하고 있는데 Querydsl4RepositorySupport이거를 사용한 이유가 유지보수와 가독성을 더 높여주는 방법이라 이해했는데 맞나요?
-
해결됨Airflow 마스터 클래스
색션8 postgres
안녕하세요 선생님색션8 2장에서 docker-compose.yaml파일을 수정 하고sudo docker compose up 하니 docker-compose.yaml: services.airflow-scheduler.depends_on.networks condition is required라는 오류가 납니다. 코드는# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # Basic Airflow cluster configuration for CeleryExecutor with Redis and PostgreSQL. # # WARNING: This configuration is for local development. Do not use it in a production deployment. # # This configuration supports basic configuration using environment variables or an .env file # The following variables are supported: # # AIRFLOW_IMAGE_NAME - Docker image name used to run Airflow. # Default: apache/airflow:2.7.3 # AIRFLOW_UID - User ID in Airflow containers # Default: 50000 # AIRFLOW_PROJ_DIR - Base path to which all the files will be volumed. # Default: . # Those configurations are useful mostly in case of standalone testing/running Airflow in test/try-out mode # # _AIRFLOW_WWW_USER_USERNAME - Username for the administrator account (if requested). # Default: airflow # _AIRFLOW_WWW_USER_PASSWORD - Password for the administrator account (if requested). # Default: airflow # _PIP_ADDITIONAL_REQUIREMENTS - Additional PIP requirements to add when starting all containers. # Use this option ONLY for quick checks. Installing requirements at container # startup is done EVERY TIME the service is started. # A better way is to build a custom image or extend the official image # as described in https://airflow.apache.org/docs/docker-stack/build.html. # Default: '' # # Feel free to modify this file to suit your needs. --- version: '3.8' x-airflow-common: &airflow-common # In order to add custom dependencies or upgrade provider packages you can use your extended image. # Comment the image line, place your Dockerfile in the directory where you placed the docker-compose.yaml # and uncomment the "build" line below, Then run `docker-compose build` to build the images. image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.3} # build: . environment: &airflow-common-env AIRFLOW__CORE__EXECUTOR: CeleryExecutor AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow # For backward compatibility, with Airflow <2.3 AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0 AIRFLOW__CORE__FERNET_KEY: '' AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: 'true' AIRFLOW__CORE__LOAD_EXAMPLES: 'true' AIRFLOW__API__AUTH_BACKENDS: 'airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session' # yamllint disable rule:line-length # Use simple http server on scheduler for health checks # See https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/check-health.html#scheduler-health-check-server # yamllint enable rule:line-length AIRFLOW__SCHEDULER__ENABLE_HEALTH_CHECK: 'true' # WARNING: Use _PIP_ADDITIONAL_REQUIREMENTS option ONLY for a quick checks # for other purpose (development, test and especially production usage) build/extend Airflow image. _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-} AIRFLOW__SMTP__SMTP_HOST: 'smtp.gmail.com' AIRFLOW__SMTP__SMTP_USER: '' AIRFLOW__SMTP__SMTP_PASSWORD: '' AIRFLOW__SMTP__SMTP_PORT: 587 AIRFLOW__SMTP__SMTP_MAIL_FROM: '' volumes: - ${AIRFLOW_PROJ_DIR:-.}/airflow/dags:/opt/airflow/dags - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs - ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config - ${AIRFLOW_PROJ_DIR:-.}/airflow/plugins:/opt/airflow/plugins - ${AIRFLOW_PROJ_DIR:-.}/airflow/files:/opt/airflow/files user: "${AIRFLOW_UID:-50000}:0" depends_on: &airflow-common-depends-on redis: condition: service_healthy postgres: condition: service_healthy services: postgres_custom: image: postgres:13 environment: POSTGRES_USER: userbbs POSTGRES_PASSWORD: userbbs POSGRES_DB: userbbs TZ: Asia/Seoul volumes: - postgres-custom-db-volume:/var/lib/postgresql/data ports: - 5432:5432 networks: network_custom: ipv4_address: 172.28.0.3 postgres: image: postgres:13 environment: POSTGRES_USER: airflow POSTGRES_PASSWORD: airflow POSTGRES_DB: airflow volumes: - postgres-db-volume:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "airflow"] interval: 10s retries: 5 start_period: 5s restart: always ports: - 5431:5432 networks: network_custom: ipv4_address: 172.28.0.4 redis: image: redis:latest expose: - 6379 healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 30s retries: 50 start_period: 30s restart: always networks: network_custom: ipv4_address: 172.28.0.5 airflow-webserver: <<: *airflow-common command: webserver ports: - "8080:8080" healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 5 start_period: 30s restart: always depends_on: <<: *airflow-common-depends-on airflow-init: condition: service_completed_successfully networks: network_custom: ipv4_address: 172.28.0.6 airflow-scheduler: <<: *airflow-common command: scheduler healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8974/health"] interval: 30s timeout: 10s retries: 5 start_period: 30s restart: always depends_on: <<: *airflow-common-depends-on airflow-init: condition: service_completed_successfully networks: network_custom: ipv4_address: 172.28.0.7 airflow-worker: <<: *airflow-common command: celery worker healthcheck: # yamllint disable rule:line-length test: - "CMD-SHELL" - 'celery --app airflow.providers.celery.executors.celery_executor.app inspect ping -d "celery@$${HOSTNAME}" || celery --app airflow.executors.celery_executor.app inspect ping -d "celery@$${HOSTNAME}"' interval: 30s timeout: 10s retries: 5 start_period: 30s environment: <<: *airflow-common-env # Required to handle warm shutdown of the celery workers properly # See https://airflow.apache.org/docs/docker-stack/entrypoint.html#signal-propagation DUMB_INIT_SETSID: "0" restart: always depends_on: <<: *airflow-common-depends-on airflow-init: condition: service_completed_successfully networks: network_custom: ipv4_address: 172.28.0.8 airflow-triggerer: <<: *airflow-common command: triggerer healthcheck: test: ["CMD-SHELL", 'airflow jobs check --job-type TriggererJob --hostname "$${HOSTNAME}"'] interval: 30s timeout: 10s retries: 5 start_period: 30s restart: always depends_on: <<: *airflow-common-depends-on airflow-init: condition: service_completed_successfully networks: network_custom: ipv4_address: 172.28.0.9 airflow-init: <<: *airflow-common entrypoint: /bin/bash # yamllint disable rule:line-length command: - -c - | function ver() { printf "%04d%04d%04d%04d" $${1//./ } } airflow_version=$$(AIRFLOW__LOGGING__LOGGING_LEVEL=INFO && gosu airflow airflow version) airflow_version_comparable=$$(ver $${airflow_version}) min_airflow_version=2.2.0 min_airflow_version_comparable=$$(ver $${min_airflow_version}) if (( airflow_version_comparable < min_airflow_version_comparable )); then echo echo -e "\033[1;31mERROR!!!: Too old Airflow version $${airflow_version}!\e[0m" echo "The minimum Airflow version supported: $${min_airflow_version}. Only use this or higher!" echo exit 1 fi if [[ -z " 입니다. 어디서 잘못 된걸까요?
-
해결됨언리얼로 만드는 게임사운드 - 중.고급 과정
Quartz 를 이용한 인터렉션 질문입니다~
안녕하세요설명대로 구현햇는데..올리신 영상이랑 결과가 달라 질문드립니다1.강의 영상에는 제일 안쪽까지 들어갔나가 나올때 음악이 꺼졌다가 다른 트리거 볼륨으로 가면 다른 음악이 재생되는데..(10분49초정도)강좌와 똑같이 쿼츠 구성한 후 실행을 하면 음악이 꺼지지를 않은 상태에서 다른 음악이 재생되는거 같습니다(사운드큐는 루프가 되게 설정하는건 맞죠?)2.아 그리고 들어갔던 같은 장소를 다시 반복적으 들어가면 소리가 중첩되며 소리의 크기가 점점 커지는거같습니다 요 두가지를 해결할라면 어떻게 해야할까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 시간초과 질문입니다.
http://boj.kr/5308ff055fe74404b72f7784fa4cd8c4강사님 코드랑 거의 흡사한데왜 시간초과가 나는지 모르겠습니다.제가 봤을 땐 불필요한 로직이 없어보이는데 이유가 궁금합니다..항상 좋은 강의 감사드립니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
무상태일때
서로 통신할 때 핸드셰이크를 한다고 했는데상태 유지일 경우는 핸드셰이크를 한번 하고 쭉 유지된다고 생각하면 되는데무상태인 경우에는 응답이 오고 다시 요청을 보내고 서버가 바뀔때마다 핸드셰이크를 하는건가요??아니면 중계서버랑 핸드셰이크를 한 후 그게 계속 유지가 되는건가요?
-
해결됨김영한의 실전 자바 - 기본편
상속 받는 자식클래스의 메모리의 크기는?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]원래 클래스의 객체를 생성할때는 필드(멤버변수)에 따라서 메모리 크기가 정해지잖아요?결국 메서드는 메서드 영역 안에 있을테고, 힙 영역에 객체가 생성되면 메모리의 크기는 해당 객체 안의 필드에 따라 크기가 달라질테니까요 그렇다면 상속 관계에서 말씀하셨듯, 부모 클래스의 정보까지 함꼐 메모리 영역에 같이 할당이 되어진다면, 상속을 받는 클래스는 부모 클래스의 필드값 + 자식 클래스의 필드값 의 메모리 크기가 생성되는 건가요 ??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession과 쿠키
안녕하세요 해당 강의를 듣고 복습하던 중 의문점이 생겨 질문 드립니다!getSession()이 세션이 있는 경우에는 해당 세션을 가져오고, 없는 경우에는 새로 생성한다고 하셨는데 세션이 있는지 없는지는 요청에 있는 쿠키의 JSESSIONID 값을 기준으로 판별하는 건가요? 만약 한 사용자가 로그아웃을 하지 않은 상태로 브라우저를 종료하고 다시 로그인을 수행하면, 쿠키가 삭제되어 이전의 JSESSIONID 값이 사라지게 되어서 getSession()이 해당 세션은 없다고 판단하고 새로운 세션을 생성하게 되나요? 타임아웃이 없다고 가정한다면, 세션 저장소에는 같은 사용자에 대한 세션 정보가 여러개 저장되는건가요?
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
GameModeBase.cpp, .h가 없습니다.
7,8강에서 프로젝트를 생성하였을 때 해당 프로젝트의 GameModeBase.cpp와 .h가 저는 안생기는데 혹시 언리얼 5.3 버전에서는 다른 경로에 존재하나요? 해결방법을 알고 싶습니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Stack Frame 구조 질문 (section2 스택메모리와 스택프레임 10분~12분경)
강의에서 설명된 내용 기준으로 argument 10 및 return address가 main함수의 스택 프레임에 있는 것으로 설명되었는데, 실제 코드에서 main함수에서 Test함수를 argument 10을 주면서 호출할 시에 매개변수 10에 대한 값과 추후에 다시 main 함수로 돌아오게 될 위치에 대한 리턴 어드레스 값은 메인 스택 프레임이 아닌 그 아래에 위치할 Test함수의 스택 프레임에 있는 것이 더 정확하지 않나에 대한 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
외부 시스템 연동으로 확장할 때 궁금증
안녕하세요 강의 잘 보고 있습니다. 회원 저장소에 외부 시스템을 연동 하는 것도 인터페이스를 두고 추후에 갈아 끼우면 된다 설명 해주셔서 궁금한 내용이 있습니다.말이 안되는 예시이긴 한 것 같은데 예제가 회원이니 회원으로 예시를 들어보겠습니다.(두 객체를 상황에 따라 동적으로 변경하여 사용하는 예시로 봐주시면 될거같습니다) 예를 들어 DB 회원 저장소로 운영을 하다가, 외부 시스템 연동도 함께 추가해달라는 요구사항입니다.경우에 따라 DB 회원 저장소 또는 외부 시스템에 연동하여 저장합니다. 이때 외부 시스템은 필드명은 물론이고 패스워드 정책 등 검증해야 하는 값이 다르다면 DTO 같은걸 별도로 사용하고 외부 시스템 연동하는 로직에서 검사를 해야 하는 걸까요?아니면 클라이언트에 해당하는 컨트롤러를 분리하고 회원 서비스를 그대로 사용하면 되는걸까요?주저리 주저리 작성한 것 같은데.. 질문의 요지는 외부 시스템 연동으로 확장이 될 때는 다른 필드 다른 검증 등이 필요한데 어떻게 확장하면 좋을지에 대한 질문입니다.긴글 읽어주셔서 감사합니다!
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
그림 링크 오류
Failed to load resource: the server responded with a status of 403 () 이런 에러가 뜨는데 어떻게 해결하나요ㅜ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
apigateway-service 톰캣 서버로 실행시 안되는 이유
실수로 gateway-mvc라이브러리를 설치 후 실행 했을 때 톰캣으로 실행이 되었는데 이때는 게이트웨이url에 /first-service/welcome를 붙였을 때 실행이 되지 않았는데,gateway 라이브러리 다시 설치후 netty 에서는 정상적으로 동작 하는데 톰캣에서는 안되고, netty에서만 되는 이유가 뭔가요???
-
미해결기초부터 따라하는 디지털포렌식
cridex 다운로드가 안 됩니다.
안녕하세요!도구 설치, 환경 설정, 문제 다운로드 강의 보고 있습니다. 시스템 환경 변수 설정이랑 윈도우 터미널 설정은 완료했는데 크리덱스를 설치하려고 깃 허브에 들어가니 이제 다운로드가 불가능하네요 ㅠㅠ예제 파일을 다른 경로로 다운 받을 수 있을까요? 부탁드려요! - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
slice 활용
정답 코드 중에서while(p1<n) answer.push(arr1[p1++]);while(p2<n) answer.push(arr2[p2++]);대신 if (a < n) answer.push(...arr1.slice(a)); if (b < n) answer.push(...arr2.slice(b));slice 활용해서 풀어도 괜찮을까요? (a는 p1이고, b는 p2입니다)
-
미해결홍정모의 따라하며 배우는 C++
vscode에서 환경 설정
안녕하세요. 맥 vscode에서 환경을 설정해주고 있는데 질문글에 올라온 링크를 찾아보니c/c++: edit configuration(ui)에 들어가서 설정을 해준 뒤,c_cpp_properties 파일을 만들어줘야 하는 것을 알게 되었습니다.그런데 제가 검색했을 때는 edit configuration이 뜨지 않는 상황입니다..혹시 어떻게 해야하는지 알 수 있을까요? 참고로 extension에서 c/c++과 code runner는 모두 설치하였습니다.
-
미해결카프카 완벽 가이드 - 코어편
Idempotence 관련 질문 드립니다.
안녕하세요,좋은 강의 만들어주셔서 감사합니다.Idempotence 관련해서 보다가 궁금한게 있어서 문의 드립니다.Idempotence를 사용하면 Producer에서 전송된 Broker로 전송 시 메시지 전송 순서가 유지가 된다고 하셨는데,파티션된 토픽에 대해서는 어떻게 되는지 궁금합니다.파티션 내에서만 순서가 유지되는 걸까요? 파티션이 3개로 된 토픽의 경우는 10개의 메시지가 전달 될 때 10개의 메시지가 쪼개져서 파티션별로 데이터가 들어갈텐데 그렇게 되면 전체 토픽에 대해서 순서 유지가 안되지 않을까해서 질문 드렸습니다. 감사합니다.
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
Loss function 관련하여 질문드립니다.
강사님 안녕하세요. test loss 및 validation loss 관련하여 질문드립니다. train loss와 validation loss 플랏을 보고, 이 모델이 잘 학습이 되었는지 어떻게 판단해야 하는지가 궁금하여 질문드리게 되었습니다.강의 코드를 활용하여 학습하고자 하는 데이터에 적용해 보았습니다. 같은 데이터여도, 모델을 어떻게 구성하는지에 따라 에폭에 따른 loss 값이 큰 차이를 보였습니다. Case 1) 초기 epoch의 validation loss가 train loss보다 낮은 경우Case 2 ) validation loss와 train loss의 차이가 큰 경우Case 3) Validation loss가 감소하는 형태를 띄나, 크게 fluctuation 할 경우Case 4) Validation loss가 크게 fluctuation하며, 감소하는 형태가 아닌 경우 (증가 -> 감소)말씀드린 4가지 case 경우 모두, 최종적으로 loss 값 자체는 낮게 나왔습니다.하지만 제가 이상적이라고 생각한 loss 곡선에는 모두 벗어나는것 같아서, 위 형태들도 학습이 잘 되었다고 판단할 수 있을지 궁금하여 질문드립니다! 감사합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 내용 깃허브 또는 블로그 정리 관련 질문
안녕하세요.강의 들은 내용을 전반적으로 깃허브에 정리하려고 합니다.강의 캡쳐본이나 강의 예시 코드를 정리하고 작성을 하면서 이해하는 방식으로 학습하려고 하는데, 공개된 공간에 출처를 남긴 후 강의 캡쳐본이나 예시 코드를 함께 작성하여 정리해도 되는 지 여쭤봅니다.