inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

12강 실습 (섭씨 화씨)

미해결

처음 만난 리액트(React)

안녕하세요 12강 실습코드를 그대로 작성했는데 섭씨온도를 적었을때 화씨온도로 자동으로 변환되어 나타나지 않습니다. 화씨온도를 먼저 적었을때도 마찬가지고요. 코드 한번 봐주실 수 있나요? 감사합니다. Calculator import React, {useState} from "react"; import TemperatureInput from "./Temperatureinput"; function BoilingVerdict(props){ if(props.celsius >= 100){ return <p>물이 끓습니다.</p>; } return <p>물이 끓지 않습니다.</p>; } function toCelsius(fahrenheit){ return ((fahrenheit-32)*5)/9; } function toFahrenheit(celsius){ return (celsius*9)/5+32; } function tryConvert(temperature,convert){ const input = parseFloat(temperature); if(Number.isNaN(input)){ return ""; } const output = convert(input); const rounded = Math.round(output*1000)/1000; return rounded.toString(); } function Calculator(props){ const [temperature, setTemperature] = useState(""); const[scale,setScale]=useState("c"); const handleCelsiusChange = (temperature) => { setTemperature(temperature); setScale("c"); }; const handleFahrenheitChange = (temperature) => { setTemperature(temperature); setScale("f"); }; const celsius = scale === "f" ? tryConvert(temperature, toCelsius):temperature; const fahrenheit = scale === "c" ? tryConvert(temperature, toFahrenheit):temperature; return ( <div> <TemperatureInput scale="c" temperatrue = {celsius} onTemperatureChange={handleCelsiusChange}/> <TemperatureInput scale="f" temperatrue = {fahrenheit} onTemperatureChange={handleFahrenheitChange}/> <BoilingVerdict celsius={parseFloat(celsius)} /> </div> ); } export default Calculator; Temperatureinput const scaleNames = { c:'섭씨', f:'화씨', }; function TemperatureInput(props){ const handleChange = (event) => { props.onTemperatureChange(event.target.value); }; return ( <fieldset> <legend> 온도를 입력해주세요(단위:{scaleNames[props.scale]}); </legend> <input value={props.temperature} onChange={handleChange} /> </fieldset> ); } export default TemperatureInput;

  • HTML/CSS
  • javascript
  • react
윤혜원 댓글 1 좋아요 0 조회수 733

TS클래스 접근제어자 상속 질문있습니다!

해결됨

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

class Employee2 { constructor( public name: string, protected age: number, private position: string ) {} work() { console.log("일하는중"); } } class Emp extends Employee2 { constructor( public name: string, protected age: number, public codeNum: number ) { super(name, age); this.codeNum = codeNum; } } private를 설정한 경우 클래스 Emp처럼 상속받았을때 super에서 3개 인수가 필요한데 2개를 가져왔다고 오류가 뜨는데 그렇다고 private 설정한 position을 con structor이나 super에 적어도 오류가발생하고 private를 설정한 클래스를 상속받아서 사용할때는 어떤식으로 해야할까요??

  • typescript
  • 접근제어자
eko09 댓글 1 좋아요 0 조회수 423

페이지 컴포넌트에 props 전달하는 부분 관련

미해결

Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 함수로 props를 전달하는 부분 (강좌 12:00 ~)에서, 기존에는 받은 값을 int로 바꾸는 작업을 했었는데 함수로 전달하면서 애초에 int값을 주는 것으로 변경했습니다. 이 변화로 인해 기존 코드에서 parseInt 관련 부분을 삭제/수정했습니다. 그런데.. 12:57 부근에서 <PostDetailView id="1"> 을 <PostDetailView :id="1"> 로 변경했습니다. 이 작업이 어떤 의미를 갖나요? v-bind를 추가한 것이 "1"을 string에서 int로 인식하게 하는게 이해가 되지 않습니다. 미리 감사합니다!

  • vue.js
eg2data 댓글 2 좋아요 0 조회수 596

인터페이스 강의 관련 질문있습니다

미해결

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

interface Person { name: string; age: number; sayHi(): void; // 오버로딩 sayHi(a: number, b: number): void; } const person: Person = { name: "name", age: 1, sayHi: function () { console.log("hi"); }, }; person.sayHi(); person.sayHi(1, 2); 이런식으로 코드가 있는데 sayHi에 매개변수가 없을땐 console.log("hi")를 있을땐 console.log(`Hi ${a}, ${b}`) 이런식으로 만들고싶은데 person을 초기화할때 어떤식으로 해야할지 모르겠습니다 person객체 안에 sayHi를 두개적으면 당연하게도 오류발생하더라고요ㅜㅜ 아 그리고 type은 마우스 올렸을때 구조를 알수있는데 인터페이스는 마우스 올렸을때 구조를 안알려주던데 혹시 구조를 알수있는 방법이있나요? 해당 인터페이스명을 보고 선언한 코드 위치에가서 구조를 확인하는방법밖에없을까요?

  • typescript
eko09 댓글 1 좋아요 1 조회수 340

자바 기술 서적 문의할게요

미해결

비전공자를 위한 개발자 취업 올인원 가이드 [통합편]

정수님 블로그를 보다가 자바 기술 서적으로 자바의정석을 읽으신것같아서 그런데 자바의정석이 입문자로써는 조금 이해하기 힘들수도 있다고 하더라구요 그런데 비전공자인 제가 자바강의만 2개정도 듣고 자바의정석을 독학하려고하는데 혹시 이해하는데 문제없을까요?? 조금 어려우면 이것이 자바다 책을 살려고합니다. 물론 유튜브 강의도 같이 볼예정입니다!! 그리고 자바의정석3판이 나온지 7년이나되었고 내년에 4판이 나온다고 하던데 지금 3판으로 공부하는데 문제가 없을까요?? 버전들도 많이 바꼇을것같아서요 ㅠㅠ

  • 포트폴리오
  • 면접
김도현 댓글 1 좋아요 0 조회수 656

4번문제풀이

미해결

[백문이불여일타] 데이터 분석을 위한 중급 SQL 문제풀이

동일하게 코드를 작성했는데, 결과는 맞지 않다고 나오네요. null값이 제외되는거 같은데 어떻게 하면 null값을 나오게 하나요 SELECT firstName, lastName, city, State FROM Person INNER JOIN Address ON Person.personId = Address.personId

  • sql
Hyejin Yun 댓글 1 좋아요 0 조회수 488

왜 쿠폰수가 너무 많을까요?

미해결

실습으로 배우는 선착순 이벤트 시스템

분명 현재 없는 상태이고 결과가 자꾸 이상하게 나와서 sout 처리를 잠시 해보았습니다 package com.example.api.service; import com.example.api.domain.Coupon; import com.example.api.repository.CouponCountRepository; import com.example.api.repository.CouponRepository; import org.springframework.stereotype.Service; @Service public class ApplyService { private final CouponRepository couponRepository; private final CouponCountRepository couponCountRepository; public ApplyService(CouponRepository couponRepository, CouponCountRepository couponCountRepository) { this.couponRepository = couponRepository; this.couponCountRepository = couponCountRepository; } public void applyV1(Long userId) { Long count = couponRepository.count(); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } public void applyV2(Long userId) { Long count = couponCountRepository.increment(); System.out.println(count); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } } @SpringBootTest class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test public void applyOnce() { applyService.applyV1(1L); long count = couponRepository.count(); Assertions.assertEquals(1L, count); } @Test public void 여러명응모V1() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV1(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } @Test public void 여러명응모V2() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV2(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); org.assertj.core.api.Assertions.assertThat(count).isEqualTo(100); } } 그런데 여러명응모V2 test를 실행시에 count를 출력시 다음과 같은 수가 나옵니다. 20003 20011 20012 20013 20015 20016 20017 20018 20020 20022 ??? 한번 할때마다 1000씩 쿠폰의 수가 증가중인데요;;; 조회했을때는 empty라 나오는데 이렇게 되는 연유를 잘 모르갰습니다. 테스트 코드라서 rollback이 되야할거 같은데 그렇지 않는것도 잘 모르겟네요;; ㅠㅠ

  • java
  • docker
  • spring-boot
  • kafka
  • redis
seonjun Moon 댓글 1 좋아요 0 조회수 657

안드로이드에서 글자가 안보이는 현상

미해결

C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기

xamarin으로 프로젝트 생성후 최초로 생성된 프로젝트를 apk로 만들어서 핸드폰에서 실행하면 글자들이 안보이는 현상(label에 있는 글자들, 버튼에 올라간 글자는 보임) 물론 안드로이드 에뮬레이터에서는 잘보이구요. 안드로이드 버전 11로 컴파일함

  • C#
  • gui
  • Xamarin
진인사 댓글 1 좋아요 0 조회수 1234

구글 링크 오류납니다.

미해결

보내주신 안드로이드 링크 접속시 오류가 나옵니다. 확인 후 재링크 부탁드립니다.

yhch500 댓글 1 좋아요 0 조회수 649

참조 관련 질문있습니다.

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

안녕하세요. 질문이 두 가지 있습니다. 강의에선 node_modules가 호스트에 없어서 참조에서 제외하고, 나머지 소스코드는 존재하여 전부 참조하는식으로 진행이 되었는데, 그럼 docker build시 COPY ./ ./ 이부분은 아예 필요가없는거 아닌가요? 이미지에 이미 소스가 존재할텐데, 강의처럼 볼륨참조 설정을 넣어주면 컨테이너 생성 시, 이미 존재하는 소스는 호스트에서 가져와서 덮어쓰기된다고 이해하면 될까요?

  • aws
  • docker
  • github
  • ci/cd
  • travis-ci
  • 데이터-엔지니어링
안준석 댓글 1 좋아요 1 조회수 361

프로그래밍 난이도 수준

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

안녕하세요 선생님 한가지 궁금한게 있어 문의 드립니다. 이 모든 문제의 난이도는 level 1~2까지의 수준인가요? 아니면 level3까지의 문제 난이도도 있는지 궁금합니다.

  • c++
  • 코딩-테스트
sang ji Choi 댓글 1 좋아요 0 조회수 637

데이터 새성시 forms.py, models.py 관련문의

미해결

파이썬으로 장고(Django) 공략하기: 입문

예제 내용 그대로 수행하였고요. 몇가지 질문드립니다. forms.py 에서의 title 정의와, models.py에서 내린 title 정의가 서로 다를 경우, forms.py 가 우선시 되는 것 같은데요. 속성값(max_length)이 달라도 상관없는 지.. [ froms.py ] class PostForm(forms.Form): title = forms.CharField(label='제목', max_length= 2) [models.py] class PostForm(forms.Form): title = forms.CharField(label='제목', max_length= 2) content = forms.CharField(label='내용', widget = forms.Textarea) ModelForm 을 사용시 model =Post 로 가져오는 것 같은데, 기본적인 models 내용은 참조하게 되는건가요? class PostForm(ModelForm): class Meta : model = Post fields = ['title','content'] labels = { 'title' : _('제목'), 'content': _('내용'), } help_texts={ 'title' : _('제목을 입력해주세요.'), 'content' : _('내용을 입력해주세요. '), } error_messages = { 'name' : { 'max_length': _("제목이 너무 깁니다. 30자 이하로 해주세요.") } } title 입력 폼에서 성공시에는 confirm 으로가고, max 길이 오류시에 create/로 가도록 했었는데요. [views.py] def confirm(request): form = PostForm( request.POST ) if form.is _valid(): return render(request, 'second/confirm.html', {'form': form}) return HttpResponseRedirect('/second/create/') ModelForm 으로 사용시에는 동일한 코드이고 다만 에러가 나면 list화면으로 넘어가도록 되어 있는데, 성공을 해도 list 화면으로 넘어가는 이유를 모르겠습니다. [views.py] def create(request): if request.method =='POST': form = PostForm( request.POST ) if form.is _valid(): new_item = form.save () return HttpResponseRedirect('/second/list/') form = PostForm() return render(request, 'second/create.html', {'form':form})

  • python
  • django
류재안 댓글 1 좋아요 0 조회수 355

SSR을 적용해야하는 부분과 그렇지않은 부분에 대해

해결됨

[리뉴얼] React로 NodeBird SNS 만들기

강좌에서 알려주신대로 페이지의 getServerSideProps로 초기로드를 SSR하는 방식을 제 프로젝트에서도 적용을 했는데요. 모든 페이지에 SSR을 진행하다보니 막상 배포해서 돌려보면 첫페이지 로드를 빨리 보여주는 장점보다, 서버에서 렌더링을 기다려야하는 단점이 눈에 띄게 보였습니다. 사실 모든 페이지에서 SSR을 적용하면 기존의 전통적인 웹과 다를바가 없지않나라는 생각들 들고, SEO vs SPA 둘 중의 하나의 고민으로 오게되는데 제로초님은 이런경우에 어떤 기준으로 판단을 하시나요? getStaticProps() 가 SSG(static site generation)에 해당하고 getServerSideProps() 가 SSR(server side rendering)에 해당하는것이 맞나요?

  • react
  • redux
  • node.js
  • express
  • next.js
kenny 댓글 1 좋아요 0 조회수 578

유니티 패키지가 계속 오류가 납니다

미해결

제가 대학교 동아리로 처음 유니티를 배우고 있는데 다른사람과 같이 만드는 중이어서 제가 만든 메인 화면을 패키지로 압축해 다른 사람들과 같이 만드는 파일 안에 넣었는데 계속 투명하게 오류가 나요 유니티 버전은 똑같은데 컴파일 오류가 난다고 나옵니다. 지웠다 재설치를 했는데도 같은 결과인데 어떻게 해결해야 하나요?

hoonta 댓글 1 좋아요 0 조회수 227

UBTTask_Attack의 TickTask 함수 호출이 안되는 것 같습니다.

미해결

언리얼 엔진4 입문 (C++ 기반)

생성자에서 bNotifyTick = true;를 해주고 틱테스크 함수에 디버깅 포인트를 찍고 디버깅을 해봤으나 함수에 들어오지 않는 것 같습니다. 혹시 저 부분 외에 다른 작업도 해주어야 하나요? 그리고 람다를 사용해서 계속 델리게이트를 구독하는 것 같아서 bool값을 통해 초기 한 번만 등록되도록 바꿔봤는데 혹시 문제가 있을까요? 아직 델리게이트를 정확히 이해하지 못해 질문 드립니다.

  • unreal-engine
  • ue-blueprint
Coffee 댓글 2 좋아요 0 조회수 684

델리게이트에서 구독 등록 부분

해결됨

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

어떤 경우에는 AddUObject로 등록하고, 어떤 경우에는 AddDynamic로 등록하는데 이 둘의 차이는 무엇인가요? 그리고 만약 맨처음에만 등록하는게 아니라 틱마다 Add함수를 사용해서 등록한다면 등록된 만큼 콜백함수가 호출되나요? 델리게이트가 무엇인지는 이해했지만 정확한 원리를 이해하기가 힘듭니다..ㅠㅠ

  • unreal-engine
  • 언리얼-c++
Coffee 댓글 1 좋아요 0 조회수 923

기초앱 12강 가위바위보 앱 viewDidLoad() 함수 내부 구현 질문

미해결

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

안녕하세요 강의 잘 듣고있습니다!! 제가 가위바위보 앱을 강의 보면서 따라만들때는 이 오류가 안떴는데 혼자 복습하면서 만들다보니 viewDidLoad 함수 내부에서 comImageView.image = #imageLiteral( 준비 이미지를 설정하는데 빌드를 하면 오류가 뜹니다. 오류는 : Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value 라고 뜨는데 comImageView.image 에 준비 이미지를 넣어줬는데도 왜 옵셔널이라 뜨는거죠..? 원본 코드랑 비교해도 다른 점이 없고 구글링해도 안나와서 질문드립니다ㅠㅠ 답변해주시면 감사하겠습니다! 아래는 제 ViewController 화면입니다

  • ios
  • swift
gration77 댓글 2 좋아요 0 조회수 457

postman으로 테스트 해봤는데 안되는 이유를 모르겠습니다!

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 @Slf4j @RestController @RequiredArgsConstructor public class TemController { private final temRepository temRepository; private final FileStore fileStore; @GetMapping("/tems/kkk") public String kkk(){ return "temtem"; } @GetMapping("/tems/new") public String newItem(@ModelAttribute TemDto dto) { return "item-form"; } @PostMapping("/tems/new") public String saveItem(@ModelAttribute TemDto dto) throws IOException { /*// UploadFile attachFile = fileStore.storeFile(dto.getAttachFile()); UploadFile attachFileee=fileStore.storeFile(attachFile); //데이터베이스에 저장 Tem tem = new Tem(); tem.setTemName(temName); tem.setAttachFile(attachFileee); temRepository.save(tem);*/ UploadFile attachFile = fileStore.storeFile(dto.getAttachFile()); //데이터베이스에 저장 Tem tem = new Tem(); tem.setTemName(dto.getTemName()); tem.setAttachFile(attachFile); temRepository.save(tem); return "ok"; } @ResponseBody @GetMapping("/images/{filename}") public Resource downloadImage(@PathVariable String filename) throws MalformedURLException { return new UrlResource("file:" + fileStore.getFullPath(filename)); } @GetMapping("/attach/{temId}") public ResponseEntity<Resource> downloadAttach(@PathVariable Long temId) throws MalformedURLException { Tem tem = temRepository.findById(temId); String storeFileName = tem.getAttachFile().getStoreFileName(); String uploadFileName = tem.getAttachFile().getUploadFileName(); UrlResource resource = new UrlResource("file:" + fileStore.getFullPath(storeFileName)); log.info("uploadFileName={}", uploadFileName); String encodedUploadFileName = UriUtils.encode(uploadFileName, StandardCharsets.UTF_8); String contentDisposition = "attachment; filename=\"" + encodedUploadFileName + "\""; return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) .body(resource); } } 교재와 거의 흡사하게 RestController로 짰습니다. 서버에 저장할때는 saveItem을 사용했습니다. 실제로 지정된 경로에 이미지가 저장이 되었습니다. 그런데 postman통해서 이미지를 확인하고 싶어서 responseEntity<Resource>를 사용했는데... 이렇게 이미지가 나오는게 아니라 다 깨져서 나옵니다. 혹시 뭐가 잘못되었는지 아실까요?

  • spring
  • mvc
dionisos198 댓글 2 좋아요 0 조회수 611

앱번들 빌드 에러좀 봐주세요.

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

유튜브 다트 강의, 인프런 플러터 강의, 그리고 코드팩토리의 플러터 프로그래밍 책까지 잘 보고 있습니다. 양질의 컨텐츠와 친절한 답변에 매번 감사드립니다. 현재 챗gpt api를 이용한 간단한 앱을 만들었고 이것을 빌드하려고 합니다. 책 606쪽의 flutter build appbundle이라고 터미널에 치면 아래 에러가 납니다. mac@HanHoseokui-iMac kind_teacher_han % flutter build appbundle 💪 Building with sound null safety 💪 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeReleaseResources'. > Multiple task action failures occurred: > A failure occurred while executing com.android.build .gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: AAPT: error: file failed to compile. > A failure occurred while executing com.android.build .gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: AAPT: error: file failed to compile. > A failure occurred while executing com.android.build .gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: AAPT: error: file failed to compile. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 5s Running Gradle task 'bundleRelease'... 6.2s Gradle task bundleRelease failed with exit code 1 이미지 쪽에 에러가 있는 것 같아 보입니다. 저는 앱 아이콘 만들기 웹 사이트( https://www.appicon.co)에서 제가 만든 아이콘으로 안드로이드용 이미지를 만든 후 /Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res에 폴더 붙여넣기를 했었는데 이게 문제가 되었을까요? 옛날에 앱인벤터라는 교육용 블록코딩 앱 개발 플랫폼으로 했을 때는 앱 출시까지 그렇게 어렵지 않게 했었는데.. 한 달가량 헤메고 있으니 힘드네요ㅠㅠ 도와주세요!^^

  • flutter
  • 클론코딩
amorvo 댓글 1 좋아요 0 조회수 1140

쓰레드매니저 질문

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

... void ThreadManager::Launch(function<void(void)> callback) { LockGuard guard(_lock); _threads.push_back(thread([=]() { InitTLS(); callback(); DestroyTLS(); })); } ... --------------------------------------------- int main() { for (int32 i = 0; i < 5; i++) { GThreadManager->Launch(ThreadMain); } GThreadManager->Join(); } 쓰레드 매니저 예제 코드의 일부인데요, 위 코드에서 다음과 같이 InitTLS(); GThreadManager->Join(); 두 곳에 브레이크 포인트를 걸었는데 신기하게 Join에 먼저 브레이크가 걸리네요. Launch 함수가 순차적으로 실행되고 메인함수의 반복문을 빠져 나온다음에 Join이 걸릴거 같은데요. Launch 함수가 쓰레드 함수라면 그럴 수 있겠지만 ThreadManager 자체는 쓰레드가 아닌데 왜 그런 것인가요?

  • 네트워크
  • MMORPG
  • windows-server
은하수 댓글 1 좋아요 0 조회수 590

인기 태그

인프런 TOP Writers

주간 인기글