묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Persistence Connection과 Connection:close 헤더
안녕하세요 :)강의 들으면서 RFC 7230 문서를 함께 읽어보던 중, Persistence Connection 연결이 종료되는 기준에 대해 궁금한 점이 생겼습니다.Persistence Connection이 종료되는 기준이 궁금해져서 본 강의의 커뮤니티에 질문을 검색했을 때, [Persistence Connection 에는 약 60초의 타임아웃이 있다.](https://www.inflearn.com/questions/169548/persistence-connection-%EC%97%B0%EA%B2%B0-%EC%9C%A0%EC%A7%80%EC%99%80-%EC%A2%85%EB%A3%8C-%ED%8C%90%EB%8B%A8%EC%9D%98-%EC%A1%B0%EA%B1%B4)라는 답변을 봤습니다.그래서 "60초의 대기 시간 후에도 클라이언트에서 요청이 없으면 서버가 자동으로 연결을 종료하는구나!" 라고 이해했었는데요,공식 문서의 Connection 부분에는 [Persistent Connection은 클라이언트, 혹은 서버에서 헤더에 Connection:close를 명시하면 종료된다.](https://datatracker.ietf.org/doc/html/rfc7230#section-6.3) 라는 말이 있더라구요.그리고 Timeout 에 대해서는The use of persistent connections places no requirements on the length (or existence) of this timeout for either the client or the server.라는 말이 있는데, 저는 이 말을 "Persistent Connection은 timeout을 가지고 있지 않다." 라는 의미로 이해했습니다.여기에서 생긴 제 궁금증은 다음과 같습니다.Persistent Connection은 "요청과 응답이 계속 오가는 상황에서는" Connection:close에 의해 종료되는 것이 맞을까요?1번의 조건을 전제로 하고, connection이 장기간 idle 상태로 있는 경우에 connection을 낭비하지 않기 위해 timeout 후에 서버가 connection을 종료하는 것인가요, 아니면 계속해서 connection을 열어두는 것인가요? 강의 잘 듣고 있습니다. 감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화 중에서 딜레이후 동기화 처리
실무에 가깝게 적용할만한 캐릭터간 이동 동기화 중에서 딜레이후 동기화 처리에 대한 참고할만한 이론이나 문서 같은것이 있을까요? 게임 장르는 존 방식이고 한 방에 최대 100명 이하? 정도 될것 같은데요환경은 모바일이고요 약.. 서버에서 1초에 4~8번 정도(정확히 아직 1초에 몇번 보내는지는 모릅니다)의 이동관련 패킷을 TCP나 UDP로 보낸다고 가정할 경우 일정 시간 이동 관련 위치 값을 수집해서 보간 처리 해볼까 하는데 언리얼 데디케이트 서버에서 어떻게 해야 할지 좀 막막한것 같은데 관련된 문서나 방식등이 있을까요?루키스님 강의 중 C++ 쪽 서버강의에서 이미 강의는 어느정도 듣긴했지만 이동 관련된것이 없는것 같아서 질문 남깁니다답변좀 부탁드리겠습니다!
-
미해결실전! Querydsl
BooleanExpression을 이용해서 쿼리 검색
안녕하세요! BooleanExpression으로 메소드를 만들어 필터링 기능을 구현중입니다.Repository에서 이런식으로 BooleanExpression 메소드를 and으로 엮었습니다.return queryFactory.selectFrom(member) .innerJoin(member.activities, activities) .where(checkActivityContainsPart(part), checkMemberBelongToTeam(team)) private BooleanExpression checkActivityContainsPart(String part) { if (part == null) return null; return QMemberSoptActivity.memberActivity.part.contains(part); } private BooleanExpression checkMemberBelongToTeam(String team) { if (team == null) return null; switch (team) { case "임원진" -> { return QMemberSoptActivity.memberActivity.part.contains("회장") .or(QMemberSoptActivity.memberActivity.part.contains("부회장")); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } case "운영팀" -> { return QMemberSoptActivity.memberActivity.part.contains("총무"); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } default -> { return null; } } } memberActivity에는 파트원인지, 회장인지에 대한 활동 정보가 들어있습니다.어떤 기수에서는 회장을, 어떤 기수에서는 파트원을 했을 경우가 있습니다.이 모든 경우에 맞는 회원을 찾는 것이목표인데, 조건이 and( ) and( )으로 엮어지면서, 메소드checkActivityContainsPart()와 checkMeberBelongToTeam() 조건을 모두 포함하는 경우를 찾지 못합니다. (하나하나 조건을 줄때는 구해지지만, 둘다 모두 필터링 걸었을때는 찾아지지 않아요..)이를 가독성 있게 분리하면서 해결할 수 잇는 방법이 있을까요?원하는 쿼리는 (activities.part like ? and activities.part like ? or activities.part like ? or activities.part like ?) 이렇게 다 엮이는 것입니다!
-
해결됨토비의 스프링 부트 - 이해와 원리
@Value에 대해서 질문있습니다.
@MyAutoConfiguration class SampleBeanConfigClass { @Value("${name}") String name; @Bean SampleBean sampleBean(){ System.out.println("sampleBean name = "+name); } }@Configuration class UserConfigClass { @Value("${name}") String name; public UserConfigClass(){ System.out.println("UserConfigClass name = "+name); } @Bean public UserConfigBean userConfigBean(){ System.out.println("UserConfigBean name = "+name); return new UserConfigBean(); } }//application.properties name = springsampleBean name = ${name} UserConfigClass name = null UserConfigBean name = spring아직 PropertySourcesPlaceholderConfigurer는 MyAutoConfiguration으로 등록하지 않은 상태입니다. 그런데 @Value의 위치에 따라null, spring, ${name} 이렇게 각각 나오더라구요이렇게 value의 위치마다 다르게 작동하는 이유가 있을까요..?
-
해결됨만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)
thunder client로 get 요청시 무한로딩
안녕하세요. thunder client로 get 요청시 무한로딩이 됩니다.localhost:3000/api/hello에 대한 요청이 되지 않습니다.다른 open api 요청을 쏴봤는데요. 그건 됩니다.혹시 원인이 무엇일까요?개발 환경은 실행중입니다.폴더 구조입니다. 아래는 코드입니다.// hello.ts // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import { NextApiRequest, NextApiResponse } from 'next'; import FirebaseAdmin from '@/models/firebase_admin'; export default function handler(_: NextApiRequest, res: NextApiResponse) { FirebaseAdmin.getInstance().Firebase.collection('test'); res.status(200).json({ name: 'John Doe' }); } // firebase_admin.ts import * as admin from 'firebase-admin'; interface Config { credential: { privateKey: string; clientEmail: string; projectId: string; }; } /** 싱글톤 패턴을 이용해서 어디서든 같은 인스턴스를 불러낼 수 있도록 한다. */ export default class FirebaseAdmin { public static instance: FirebaseAdmin; /** 초기화 여부 */ private init = false; /** 인스턴스를 반환하는 메서드 */ public static getInstance(): FirebaseAdmin { if (FirebaseAdmin.instance === undefined || FirebaseAdmin.instance === null) { /** 초기화 진행 */ FirebaseAdmin.instance = new FirebaseAdmin(); /** 환경을 초기화한다. */ FirebaseAdmin.instance.bootstrap(); } return FirebaseAdmin.instance; } /** 환경을 초기화할 때 사용할 메서드 */ private bootstrap(): void { /** 등록되어 있는 앱의 갯수가 0이 아니어야 앱이 존재함을 의미한다. */ const haveApp = admin.apps.length !== 0; if (haveApp) { this.init = true; return; } /** config를 활용해서 초기화한다. */ const config: Config = { credential: { /** process.env.로 환경변수에 접근하여 각 값들을 받아온다. * 각 갑들은 undefined일 수 있으므로, 값이 없을 경우 빈 문자열을 할당한다. */ projectId: process.env.projectid || '', clientEmail: process.env.clientEmail || '', /** * privateKey는 원래 개행이 들어간 여러 줄 짜리 텍스트인데, 반환할 때는 json에서는 그렇게 표현할 수 없기 때문에 한 줄이 된다. * 그 한줄짜리 json을 원래대로 개행이 들어가도록 임의로 다시 개행문자를 넣어주는 것이다. */ privateKey: (process.env.privatekey || '').replace(/\\n/g, '\n'), }, }; admin.initializeApp({ credential: admin.credential.cert(config.credential) }); console.info('bootstrap firebase admin'); } /** firestore를 반환 */ public get Firebase(): FirebaseFirestore.Firestore { if (this.init === false) { this.bootstrap(); } return admin.firestore(); } public get Auth(): admin.auth.Auth { if (this.init === false) { this.bootstrap(); } return admin.auth(); } }
-
미해결게임 수학의 이해
이득우의 언리얼 프로그래밍 Part2 개강일
안녕하세요 혹시이득우의 언리얼 프로그래밍 Part2 개강예정일을 알수있을까요?
-
미해결UX/UI 시작하기 : Figma 입문 (Inflearn Original)
constraints에서 상단 스크롤 고정을 할 수 있는 체크 박스 가 보이지 않아요.
constraints에서 상단 스크롤 고정을 할 수 있는 체크 박스 가 보이지 않아요.ㅠ
-
해결됨[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
캐스트 오버헤드 질문
상위 클래스를 특정 하위 클래스로 형변환을 할 때, 캐스트의 성공 여부를 알 수 있는데, 그렇단 의미는 BP에서의 캐스팅은 기본적으로 다이나믹 캐스트로 이루어지나요? 만약 맞다면, 캐스팅이라는 작업이 RTTI로 인한 성능에 저하가 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
psum[0] 값이 0인이유
안녕하세요 선생님 수업 잘 듣고 있습니다! 혹시 뇌를 잃어버린 승철이 문제에서 psum[0]값을 정의하지 않았음에도 0인 이유는 무엇인가요? 예전에는 값을 정의하지 않으면 랜덤한 값이 나온다고 어디서 들었던것 같은데 print를 해봐도 0이나와서 신기해서 여쭤봅니다. 강의 잘 듣고 있습니다 감사합니다!
-
미해결홍정모의 따라하며 배우는 C언어
[5.1 반복 루프] goto문 결과 질문
5.1 강의의 6:11초쯤에서 goto문의 출력 결과로 1~9까지만 나오고 10은 안 나왔는데 나중에 설명한다고 하셨는데 설명을 안 하셔서 질문 남깁니다.교수님이 작성하신 코드에서는 n이 10일 때 printf를 안 하고 바로 goto out;이 실행되기 때문에 결과가 9까지 출력되는 것 맞나요?goto문으로 1~10까지 출력되는 반복문을 만들려면 n == 10이 아니라 n == 11로 써야하는 것 맞을까요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한요청 부탁드립니다.
인프런 아이디 : jongseungim5348@gmail.com인프런 이메일 : jongseungim5348@gmail.com깃헙 아이디 : jongseungim5348@gmail.com깃헙 Username : limjongseung
-
미해결스프링 배치
@JobScope JobParmeter Binding 질문
안녕하세요. @JobScope에 대해서 궁금한게 생겨서요!@Jobscope 를 쓰면 갖는 이점에 대해서는 이해했습니다. 웹어플리케이션이 실행될 때, Job Bean 객체에는 Scope의 JDKProxy 또는 CGLibProxy가 주입되는 것을 이해했고 Step 메소드 실행 시, 실제 Step 객체가 주입되는 것을 이해했습니다.그러므로 여러 스레드 ( 병렬 처리 ) 가 요청에 대한 처리를 할 때, thread safe에 대한 이점도 있을 거고 동시성에도 이점이 있을 거라고 생각됩니다. 여기서 궁금한게, @Value JobParmeters를 바인딩 하는 부분이 궁금한데요.질문 1. 이 JobParmeters는 그럼 Job에서 설정한 여러 Jobpameters 중 꼭 한가지 key값이여야만 하는 걸까요? 가령, name, requestDate 라한다면 둘 중 하나를 선택해도 무방한거죠? 두개는 안될까요?2. 당연한 말이겠지만 여러 Job들에서 다른 Step을 공유하기 위해선 이 Jobparmeter를 정적인 변수보다는 requestDate와 같은 yyyyhhmm ss 같은 변수를 사용하는 것이 좋겠죠?감사합니다!
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
EsLint 적용 불가 문의드립니다.
안녕하세요 강의 보고 실습 중, ESLint가 정상 작동하지 않는 것으로 보여문의 드립니다.현재 상황 (버전)npm Version : 9.6.4Vue Version : 3.2.47VsCode Version : 1.77.3설치된 확장 플러그인Auto Rename TagCSS PeekESLintHTML CSS SupportHTML to CSS autocompletionindent-rainbowKorean Language Pack For visual Studio CodeVue Language Features (Volar)Vue VSCode Snippets플러그인 충돌이 발생 할 수 있어, 기존 VS Code 전체 초기화 후 재 설치 하였습니다.강의에 나온 내용으로 .eslintrc.cjs 수정 및 Eslint.validate도 변경하였으며,오타가 있을 수 있어서 노션에 있는 코드를 그대로 복사 붙여 넣기 하였습니다.Format on save 도 체크 해제 되어 있습니다.현재 문제점이라고 생각하는 부분은npm run lint 커맨드 실행 시 PS > npm run lint> learn@0.0.0 lint> eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignoreOops! Something went wrong! :(ESLint: 8.39.0ReferenceError: Cannot read config file: \.eslintrc.cjsError: OfflineAudioCompletionEvent is not defined at Object.<anonymous> (\.eslintrc.cjs:15:70) at Module._compile (node:internal/modules/cjs/loader:1254:14) at Module._extensions..js (node:internal/modules/cjs/loader:1308:10) at Module.load (node:internal/modules/cjs/loader:1117:32) at Module._load (node:internal/modules/cjs/loader:958:12) at Module.require (node:internal/modules/cjs/loader:1141:19) at module.exports [as default] (node_modules\import-fresh\index.js:32:59) at loadJSConfigFile (\node_modules\@eslint\eslintrc\dist\eslintrc.cjs:2562:47) at loadConfigFile (\node_modules\@eslint\eslintrc\dist\eslintrc.cjs:2646:20) at ConfigArrayFactory.loadInDirectory (\node_modules\@eslint\eslintrc\dist\eslintrc.cjs:2856:34)에러가 출력 됩니다.구글 검색하여 npm install eslint 등 추가로 모듈을 설치 하였으나, 실행이 되지 않습니다.이 이외에는 사실상 Error Line, Warn Line 등 소스 코드에 노란 줄이나 붉은 줄은 나오지 않아사용에는 큰 불편함은 없으나, 자동 줄 정렬이 되지 않아 소스가 상당히 지저분하며, 복습 시 소스 분석에 어려움을 겪고 있어 질문 드립니다.항상 좋은 강의 감사드립니다.요약npm run lint 커맨드 사용 불가소스 자체에 붉은 색, 노란 색 줄은 생기지 않으나 코드가 자동 정렬 되지 않음입니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 질문입니다.
3:58초 경에 findMember.setAge(20)으로 결과가 바뀌면 영속성 컨텍스트에 관리가 되는 거고, 안바뀌면 관리가 되지 않는다라는데 이유가 뭔가요 ?JPA가 DB의 데이터에 접근하고 수정하고 작성,삭제 할 수 있다 = 영속성 컨텍스트가 관리한다 같은 말일까요 ?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
캐스팅4총사 강의 질문입니다
뒤에 부분을 다 안보고 질문드렸더니 조금 애매해졌네요.상식적인 캐스팅이 아니라애초에 부모가 어떤 자식의 타입이었는지 확실할때쓰는 것이라고 하는게 맞겠네요.강의에서 나오는 것처럼요Player* p = new Knight();Knight* k1 = static_cast<Knight*>(p);말이 안되는건 아니니까 그때 쓴다 이런 뜻이었네요.역시 한국말은 끝까지 들어봐야 되는거 같네요.. ㅎㅎ답변은 안해주셔도 되겠습니다. 감사합니다.=================================일단 주말에 질문을 드려서 죄송합니다.답변은 월요일에 해주시면 될 것 같습니다!3분 13초부터 나오는 상속 관계끼리의 타입변환에대해서 주석으로 이야기 해주시는 부분인데요Player*->Knight* (다운캐스팅) 이게상식적인 캐스팅이라고 하셨는데 아무리 들어도 뭔가 잘못된게 아닌가싶어서요. 반대로 이야기 하신것 아닌가요?..자식은 부모를 포함하고 있으니까 애초에 부모로도캐스팅 될 수 있는데 부모가 자식으로 캐스팅 되는 것은 타입변환 강의에서도 위험하다고 하셨던것 같은데혹시 player가 자식인가 싶어서 뒤에 내용도 봤는데 Knight가 자식이더군요. 제가 짐작하건데 반대로 이야기 하신게 아닌가 싶은데맞나요??업캐스팅이 상식적인것이고 다운캐스팅은 위험한것 아닌가요?그래서 위험하니까 다운캐스팅 시에는 명시적으로 했던 것이구요.인터넷에서 찾아봐도 다운캐스팅은 업캐스팅에 비해 안전하지 않다고 하는데 다운캐스팅이 상식적인 캐스팅이라는게 이해가 안되어서 질문드려 봅니다.같은 질문이 있나 찾아봐도 없어 이렇게 질문글 남깁니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 의존성 추가
두가지 궁금사항이 있습니다.1.첫번째@Aspect 애노테이션 을 사용한다면의존성 추가해야된다고 인터넷에 나와있는데,꼭 안해도 되는건가요???implementation 'org.springframework.boot:spring-boot-starter-aop' 2.두번째TimeTraceAop class에 @Component 애노테이션을 추가하면 에러가 안나는데,SpringConfig class에 @bean 으로 등록시 에러가 납니다.콘피그에 빈으로 등록코드를 적을경우 또다른 코드를 주입해야되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상품주문 질문
한명의 회원이 하나의 상품을 여러개 주문하는 것은 가능하지만, 여러개의 상품을 주문하지는 못하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
formatter에 pattern이 일어나는 시점
@GetMapping("/formatter/edit") public String formatterForm(Model model){ Form form = new Form(); form.setNumber(10000); form.setLocalDateTime(LocalDateTime.now()); log.info("form={}",form); model.addAttribute("form",form); return "formatter-form"; } @PostMapping("/formatter/edit") public String formatterEdit(@ModelAttribute Form form){ log.info("post form={}",form); return "formatter-view"; }로그를 통해 form, post form을 출력해보았습니다.저는 처음 form은 그냥 입력한 값이 나오고 그다음 post form은 ModelAttribute에 들어갈 때public String formatterEdit(@ModelAttribute Form form){포멧터가 form의 타입을 변경하고 입력한다고 예상했습니다.하지만 로그를 보니 form=FormatterController.Form(number=10000, localDateTime=2023-04-23T12:39:53.251212) post form=FormatterController.Form(number=10000, localDateTime=2023-04-23T12:39:53)값은 값이 나오는 것을 확인했습니다. 제가 생각했을 때는 Argument Resolver 안에 ConversionService 안에 Formatter 가 controller를 호출하기 전 @ModelAttribute에 입력할 때 실행되지만@Data static class Form{ @NumberFormat(pattern = "###,###") private Integer number; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime localDateTime; }에서 @NumberFormat(pattern = "###,###") 패턴이 적용 되는 시점은 html에서"${{form.number}}"중괄호2개가 있을 때다. 그래서 로그는 값은 같은 값이 출력이 되지만 html에서는 다른 값이 출력된다. 라고 이해를 했는 데 맞게 생각한 것인지 궁금합니다. 답변주시면 정말 감사하겠습니다.
-
미해결실전! Querydsl
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?? @Autowired보다 생성자 주입이 더 좋은 거처럼 더 좋은 방법이 따로 있는건지 궁금합니다 !
-
미해결실전! Querydsl
distinct 테스트코드 관련 질문 드립니다.
@Test public void distinct() { em.persist(new Member("member1")); em.persist(new Member("member2")); em.persist(new Member("member2")); em.persist(new Member("member5")); List<String> usernames = queryFactory .select(member.username).distinct() .from(member) .fetch(); assertThat(usernames) .containsExactly("member1", "member2", "member3", "member4", "member5"); } 테스트코드 직접 짜본 경험이 별로 없어서 그런데이렇게 짜면 되는걸까요 ...?