묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
ansible 존재여부
안녕하세요docker run --privileged -itd --name ansible-server -p 20022:22 -p 8082:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/ansible-server:m1 /usr/sbin/init위 명령어로 도커 이미지 설치 후 ssh 로 접속해서 패스워드 치고 들어가면, ansible --version 이 먹히지 않는 것으로 보면 ansible 이 설치가 되어있지 않은 것 같아요.참고로 저는 맥 m1 OS 입니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스마트 포인터부분에서 궁금한게 있습니다.
클래스 객체 내부에 shared_ptr가 있을 때, 객체가 소멸되면 shared_ptr이 가리키는 값은 nullptr로 자동으로 변경되서, shared_ptr가 가리키는 refCount가 자동으로 줄어드는건가요?
-
미해결Verilog FPGA Program 1 (Arty A7-35T)
강의자료
안녕하세요.이 강의 처음 시작할 때 메일로 강의 자료 요청 메일을 보내라고 팝업창이 떴었는데, 여기서 다운받을 수 있는 강의파일이랑 다른 건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
이름에 유니크 제약 조건을 거는 것
[질문 내용]강의에서 회원의 이름으로 중복된 계정을 검증하고, DB에서 회원의 이름을 Unique 제약 조건으로 잡는 게 좋다고 하셨는데이건 이 예제에서의 가정인 거고, 현업에선 이름만으로 중복 계정을 검증하거나, 이름에 유니크 제약 조건을 거는 경우는 거의 없다고 봐도 되나요?
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
무료/프리미엄 동시 소유 시 질문
다른 분들의 질문에 답변을 달아주신 내용을 보니까 사용자 계정에 등록된 도메인의 0번째에서 type 값을 사용하여 무료/프리미엄을 구분하는 답변을 예시로 준 것을 봤습니다.프로젝트 환경에서 하나의 사용자가 같은 도메인에 무료/프리미엄 비밀 키를 중복하여 발급 받을 수도 있고 비밀 키를 다수 발급받을 수도 있는데요 이 경우 도메인은 여러개가 조회될 것인데 이런 경우에는 어떻게 처리를 해야하나요?헤더에 비밀 키를 담아서 요청을 보내서 어떠한 비밀 키를 통한 요청인지를 특정하는 방법도 생각해봤습니다.서버 비밀 키는 어차피 클라이언트에게는 노출될 우려가 없고 클라이언트 용 비밀 키는 어차피 클라이언트에게 노출될 것을 염두해둔 비밀 키니까 노출이 되어도 크게 문제가 없을거라 생각했었습니다.하지만 이게 보안에 문제가 되는 방법은 아닌지 모르겠어서 검색을 좀 해봤지만 쉽게 판단이 서질 않습니다.아니면 일단 현재 수준에서는 보안 측면까지 이렇게 고민하기 보다 서버/클라이언트용과 무료/프리미엄용을 분리함에 의의를 두고 이런 강의를 진행하는 것이 옳은걸까요?ㅜㅜ[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
파이썬처럼 int a 선언 없이 a=10으로 해놓고 그때그때 int(a)처럼 쓰면 안되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결개발자에게 필요한 로그 관리
표준출력보다 Slf4J가 느릴 때
저는 컴터 사양이 꽤나 좋아서 인지? 항상 표준출력이 더 빠르더군요.알아보니 로깅 프레임워크가 느린 이유에는 대략 이런 이유들이 있네요.로그 출력에 여러 과정을 거침. Logger → Appender → Encoder → Layout → OutputStream레벨 설정에 의한 필터링로그 포맷팅 처리분명 표준출력이 synchronized에 의해서 멀티 스레드 환경에서 취약한건 맞으나 현재 테스트에서는 그 부분이 로깅 프레임워크의 처리 과정보다는 빨랐던 것 같습니다.테스트 환경 변경그래서 테스트 환경을 바꿔서 테스트 해보았습니다.멀티스레드 환경. 스레드 10개. 각 스레드별 100000번 출력package kr.co.shortenurlservice.log; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Slf4j public class SoutVsAsyncLoggingTest { private static final int THREAD_COUNT = 10; private static final int LOG_COUNT = 100_000; public static void main(String[] args) throws InterruptedException { // 1. System.out.println() 테스트 long sysoutTime = runTest(i -> System.out.println("[SYSOUT][" + Thread.currentThread().getName() + "] " + i) ); // 2. log.info() (AsyncAppender + Console) 테스트 long asyncLogTime = runTest(i -> log.info("[LOGGER][{}] {}", Thread.currentThread().getName(), i) ); // 결과 출력 Thread.sleep(5000); System.out.printf("System.out: %,d ms%n", sysoutTime); System.out.printf("Async log : %,d ms%n", asyncLogTime); } private static long runTest(StringConsumer task) throws InterruptedException { long start = System.currentTimeMillis(); ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); CountDownLatch latch = new CountDownLatch(THREAD_COUNT); for (int t = 0; t < THREAD_COUNT; t++) { executor.submit(() -> { for (int i = 0; i < LOG_COUNT; i++) { task.accept(i); } latch.countDown(); }); } latch.await(); executor.shutdown(); long end = System.currentTimeMillis(); return end - start; } @FunctionalInterface interface StringConsumer { void accept(int value); } } 또한 test/resources/logback.xml 설정으로 포맷을 날짜 같은것 제외하고 표준출력과 똑같이 맞춰주고 AsyncAppender를 통해 멀티 스레드 환경에서 차별점이 있도록 비동기 Appender를 추가해줌.<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="CONSOLE"/> <queueSize>10240</queueSize> </appender> <root level="info"> <appender-ref ref="ASYNC_CONSOLE"/> </root> </configuration>이렇게 하니까 표준출력보다 빠르더군요.꼭 성능문제뿐 아니라 로그 관리체계 자체가 로깅 프레임워크가 넘사이기 때문에 안쓸 비교불가겠지만..성능적으로 보더라도 실무 환경이라면 메시지 출력 전후로 비즈니스 로직들이 있기 때문에 임계영역을 통해 스레드를 대시시키는 표준출력을 사용하는것보다는 로깅 프레임워크가 더욱 성능적으로 이점이 있을 것 같습니다.
-
미해결
boolean의 return
안녕하세요! 접근제어자 강의 중 BankAccount를 클래스를 만들어 활용하는 내용입니다. 입금 & 출금 메서드를 만들고 있고, -100원이나 0원처럼 부적절한 금액이 입금되지 않도록 private boolean isAmountValid를 활용하여 amount>0인지 확인하는 중입니다.이해가 잘 안 가는 부분이: isAmountValid는 반환값이 boolean이니 return amount > 0이면 true가 반환되는 것인가요? if(true)이면 그냥 무한반복 아닌가요? 만약에 amount가 0보다 작으면 boolean이 false로 반환되나요, 아니면 아예 return amount > 0 에 해당되지 않아서 값을 반환하지 않는 건가요?boolean이 너무 헷갈려서 질문을 잘 한 것인지 조차 모르겠네요.. 헷갈리신다면 죄송합니다.package access; public class BankAccount { private int balance; public BankAccount() { //어차피 초기값 0이어서 없어도 되는데 public 사용해보려고 balance = 0; } //public 메서드: deposit public void deposit(int amount) { if (isAmountValid(amount)) { //isAmoutnValid(amount) = true 라고 왜 표기를 안 해도 되지? balance += amount; } else { System.out.println("유효하지 않은 금액입니다."); } } private boolean isAmountValid(int amount) { //정상적인 금액 입력됐는지 검증하는 로직. 내부에서만 쓸 거임. //금액이 0보다 커야함 return amount > 0; //반환값이 boolean이므로 true/false가 반환됨. } }
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
1강 연습문제&목표문제 정답지 위치
1강 연습문제&목표문제 정답지 위치가 궁금합니다
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
유니티6 6000.0.0.35f1 버전을 사용하는데 잘 됩니다~
솔직히 에러를 걱정했는데 구글 찾아보면 다 나오구요 Text Mesh Pro 관련 오류는 Window -> TextMeshPro -> Import TMP Essential 눌러서 임포트 해주시면 해결이 됩니다.이제 공부 할 일만 남았네요 선생님 감사합니다~!
-
미해결[2025년 출제기준] 웹디자인기능사 실기시험 완벽 가이드
실기시험 질문
포토샵 작업시PSD 파일은 어느 파일에 저장하는지,PSD파일도 최종 작업물 폴더와 제출해야하는지이해가 잘 안돼 질문 드립니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
서버의 역할과 서버API 개발 대상에 대해 질문이 있습니다.
우선 강사님이 말씀하신 강의 내용에서 백엔드 서버에 UI를 생성하고 배치하는데 도움을 주는 API를 설계하는 부분에서 깊은 영감을 받았습니다!또한 서버비용을 낮추기 위한 서버 구축 방법에도 많이 도움을 받았습니다.그런데 강의에서 말씀하신 방법으로 API 구현 및 서버구축에 대한 고민을 하면서 든 생각이 앱1개당 필요로 하는 API가 최소 몇십개는 될거라고 예상을 했습니다. 그러다 보니 필연적으로 서버도 많이 질수 밖에 없지 않나라는 생각이 들었습니다.여기서 질문을 하나 드리고 싶습니다.그러면 혹시 서버에 구현하신 API들은 강의때 말씀하셨던 UI 자동 생성 및 관리를 위한 API와 푸시알림, 공지를 위한 알림창 등과 같이 300개의 앱이 공통적으로 필요로 하는 API들만 구현을 하시는건건지 궁금합니다.또한 앱마다 각자가 표시하고자 하는 고유한 데이터(예를 들면 날씨앱이면 날씨 관련데이터)의 CRUD와 관련된 부분은 API로 개발하는게 아닌 앱안에서 모든것을 처리를 하는 방식인건지 궁금합니다~
-
해결됨얄코의 떠먹여주는 객체지향 디자인 패턴
질문이있습니다.
현재 예시 코드에서는 state 상태에 따라서 생성자를 매번 호출하는데이거는 메모리 오버플로우 가능성이 있는 코드라고 볼 수 있을까요?
-
미해결
수료증 영문발부
수료증을 영문으로도 받고싶습니다. 가능할까요?안된다면 언제쯤 받을 수 있을까요?
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
마테리얼 깨짐
마테리얼 파일이 깨지는데 자료 다시 올려주실수 있을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
bool
25:40초 쯤 HasNextComboCommand 변수를 bool로 선언하였는데요.헤더파일의 bool은 비트필드를 사용하는것 아니었나요? bool자료형을 사용하신 이유가 궁금합니다
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
젠킨스 빌드 성공후 shutdown
안녕하세요 우선 저는 gradle 로 진행을 했습니다.다른건 다 동일하게 했고젠킨스 도커 안에 들어가서 cd /var/jenkins_home/workspace/My-Third-Proejct nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 > app.log 2>&1 &로 실행을 하면 브라우저에서 localhost:9000 으로 접근이 잘 됩니다.그런데 젠킨스 스크립트로 실행을 하게 되면 젠킨스 도커 내의 로그를 확인해보면 계속 꺼져요. 이유가 있을까요?젠킨스 구성 설정의 shell script 는 아래와 같아요.# 기존 프로세스 종료 PID=$(ps -ef | grep "jenkins_cicd_project-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}') if [ ! -z "$PID" ]; then echo "종료 중인 애플리케이션 PID: $PID" kill -15 $PID sleep 5 fi # 새 프로세스 시작 (setsid 사용하여 별도 세션에서 실행) echo "애플리케이션 시작 중..." setsid nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 > app.log 2>&1 & APP_PID=$! echo "애플리케이션 PID: $APP_PID" # 시작 확인 sleep 10 ps -p $APP_PID > /dev/null if [ $? -eq 0 ]; then echo "애플리케이션이 PID $APP_PID로 실행 중입니다." curl -s http://localhost:9000 > /dev/null if [ $? -eq 0 ]; then echo "애플리케이션에 정상적으로 접근할 수 있습니다." else echo "애플리케이션 접근 테스트 실패!" fi else echo "애플리케이션 시작 실패!" exit 1 fi그리고 젠킨스 빌드 console out 도 아래와 같습니다.Started by user 허강준 Running as SYSTEM Building in workspace /var/jenkins_home/workspace/My-Third-Proejct The recommended git tool is: NONE No credentials specified > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/My-Third-Proejct/.git # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url https://github.com/Highjune/jenkins_cicde_project.git # timeout=10 Fetching upstream changes from https://github.com/Highjune/jenkins_cicde_project.git > git --version # timeout=10 > git --version # 'git version 2.39.5' > git fetch --tags --force --progress -- https://github.com/Highjune/jenkins_cicde_project.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10 Checking out Revision 6353899ff277302005bce6da4d498211ebeab06b (refs/remotes/origin/main) > git config core.sparsecheckout # timeout=10 > git checkout -f 6353899ff277302005bce6da4d498211ebeab06b # timeout=10 Commit message: "포트번호 수정" > git rev-list --no-walk 6353899ff277302005bce6da4d498211ebeab06b # timeout=10 [My-Third-Proejct] $ /bin/sh -xe /tmp/jenkins9188074144619929309.sh + ps -ef + grep jenkins_cicd_project-0.0.1-SNAPSHOT.jar + grep -v grep + awk {print $2} + PID=283 + [ ! -z 283 ] + echo 종료 중인 애플리케이션 PID: 283 종료 중인 애플리케이션 PID: 283 + kill -15 283 + sleep 5 + echo 애플리케이션 시작 중... 애플리케이션 시작 중... + APP_PID=420 + echo 애플리케이션 PID: 420 애플리케이션 PID: 420 + sleep 10 + setsid nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 + ps -p 420 + [ 0 -eq 0 ] + echo 애플리케이션이 PID 420로 실행 중입니다. 애플리케이션이 PID 420로 실행 중입니다. + curl -s http://localhost:9000 + [ 0 -eq 0 ] + echo 애플리케이션에 정상적으로 접근할 수 있습니다. 애플리케이션에 정상적으로 접근할 수 있습니다. Finished: SUCCESS그런데 계속 Graceful shutdown complete 가 뜹니다.참고로 다른 포트랑 충돌같은 것은 없습니다 원래 8081로 진행하다가 일부러 다른 포트로 시도해보려고 9000으로 했습니다.이렇게 젠킨스 내 컨테이너 내에서 수동 실행하면 되는데 왜 젠킨스 빌드로 하면 꺼지는 걸까요?참고로 젠킨스 도커 실행 명령어는 아래와 같습니다.docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 9000:9000 -p 50000:50000 --restart=on-failure --name jenkins-server jenkins/jenkins:lts-jdk21
-
해결됨얄코의 떠먹여주는 객체지향 디자인 패턴
DIP 질문
DIP 예제 코드에서 질문이 있습니다.Switchable 이라는 interface를 객체로 Switch가 갖게되는데요.구조가 이렇게 바뀌어도Fan의 turnOn 함수에 예를 들어 매개변수가 들어가게 되면 (Overloading)Switch 클래스에도 영향이 가지 않나요?switch class의 tunrOn함수의 device.turnOn() 함수도 바뀌어야 하니까요..?
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
CoreMinimal.h 가 찾아지지 않습니다.
15강 23분까지 따라했는데모듈 헤더에서 CoreMinimal.h가 찾아지지 않아cpp 파일에서도 오류가 발생합니다.build.cs 파일에 CommonUtility 를 넣어도 보고 빼고도 실행시켜 봤는데 모두 오류가 발생합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
블루프린트 클래스 없음
안녕하세요.10:33초 쯤에 BP_AB_CharacterPlayer 로 작업하시는데제 프로젝트에는 그런 클래스가 보이지 않네요 제가 뭘 놓치면서 진행하고있었나요?뿐만아니라 BP_ABGameMode, ABPlayer_Controller이런것들이 안보입니다.파일 탐색기에서 봤을땐 Controller, GameMode,Congratulation이런 파일들이 있는데 에디터에선 저렇게 3개 밖에 보이지않네요... 물론 BP_AB_CharacterPlayer는 파일에도 없습니ㅏㄷ.