묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
MinMaxScaler() 전처리 성능이 왜 더 좋은 것인가요?
안녕하세요. 2장 듣고 있는데, 입력 데이터를 MinMaxScaler 함수로 전처리를 하는데, 학습 때 정확하게 기존보다 유리한 점이 무엇이라고 말할 수 있나요? 수학에 약해서 잘 이해는 안되는데, 단순히 scaling을 하는데, 딥러닝 계산 때 값이 범위 안에 한정되어서 유리한 것인지. 간단명료하게 이유를 알고 싶습니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
mixed contents 관련 질문
안녕하세요 제로초님 항상 감사합니다 ㅠ 마지막 강의까지 다 듣고 따라하고 켜봤는데 Mixed Content 에러가 발생하고 로그인이 안됩니다 ㅠ front의 config.js파일도 말씀하신대로 바꿨습니다 export const backUrl = process.env.NODE_ENV === 'production' ? 'https://api.nextpus.com' : 'https://localhost:3065'; App.js도 마찬가지로 .. 모니터링결과 front: 백앤드 라고 뜨는데 원인이 짐작이 안가네요 ㅠㅠ 부탁드립니다! app.js 오타 sequre --> secure로 수정해도 에러나네요 ㅠ 모니터링에서 나온 already in use 해결을 위해 서버죽이고 다시켜서 들어가보니 뜬금없이 이런 메시지도 나오네요(요건 다시 새로고침해서 들어가니 해결되네요 ㅠㅠ)
-
미해결억대 연봉을 버는 프리랜서 개발자 브랜딩 로드맵
신입 프리랜서 외주 받는 방법
안녕하세요 강의 잘들었습니다 강의를 듣다가 외주를 받는 사이트를 찾아보니 위시켓이나 원티드 긱스같은 곳은 대부분 경력 3~7년 정도 있어야 지원이 가능하더라고요 이번에 강의를 듣고 개발을 처음 입문했는데 경력이 없이 외주를 받을 수 있는 방법이 있나요? 처음에는 어떻게 외주를 받을지 궁금합니다~
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
거리배열을 따로 만드는 경우 타임리밋
안녕하세요. 수업 잘 듣고 있습니다. 체크배열에 정점까지 도달하는 데 필요한 횟수를 저장하는 게 헷갈려서, dis배열을 따로 만들어봤습니다. 그랬더니 타임리밋이 걸리더라고요. 제가 보기엔 연산 속도에 큰 차이가 날 것 같지 않은데, 이렇게 배열 두 개를 사용할 경우 타임리밋이 걸리는 이유가 궁금합니다. #include <stdio.h> #include <vector> #include <queue> #include <algorithm> using namespace std; int ch[10001], dis[10001], d[3]={1, -1, 5}; int main(void){ //freopen("input.txt", "rt", stdin); int i, n, m, x, pos; queue<int> Q; scanf("%d %d", &n, &m); ch[n] = 1; Q.push(n); while(!Q.empty()){ x = Q.front(); Q.pop(); for(i=0; i<3; i++){ pos = x+d[i]; if(pos<= 0 || pos>10000) continue; if(ch[pos]==0){ dis[pos] = dis[x] + 1; Q.push(pos); } if(pos==m){ printf("%d", dis[pos]); exit(0); } } } return 0; }
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
getServerSideProps 이전 redux 상태 유지 방법
1. getServerSideProps할 때 redux의 상태가 모두 초기화되는것을 알 수 있는데 여기서 클라이언트 쪽에서 이전 redux 상태를 유지 하는 방법이 있나요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
npm i 만 해도 되는건가요?
/d/sleact/alecture (master) 에 이미 package.json 만들어져 있는데 npm i 만 해도 되나요? 프론트 폴더도 마찬가지죠?
-
미해결실전! 스프링 데이터 JPA
벌크성 수정 쿼리 질문
안녕하세요 영한님 벌크성 수정 쿼리 강의해주실 때 em.flush() em.clear() 를해야한다(영속성 컨텍스트에 있는 캐시정보들을 DB에 반영하기 위해)고 말씀해주셨는데 만약 어떤 user들의 age가 20이 넘는 사람의 인원수가 5명이라고 가정하고 이들의 나이를 1씩 올렸다고 가정했을때 캐시에는 반영이 안되고 바로 DB에만 반영이 되는데 이때 제가 궁금했던것은 em.flush를 하면 1치캐시에 있는것을 db에 반영시키는것(더티체킹을 포함하여) 이라고 생각해서 이 경우에는 1차캐시가 반영되면 안되는것 아닌가요? 캐시 DB -> 벌크성수정쿼리-> 캐시 DB -> em.flush() -> 캐시 DB 40 40 40 41 40 40
-
미해결스프링 시큐리티
Servlet Filter 질문이 있습니다.
안녕하세요. 선장님. 먼저 좋은 강의 제공해주셔서 감사합니다. 많은 공부 자료 및 자극을 주셔서 잘 공부하고 있습니다. Security 공부를 하면서 궁금한 점이 생겼습니다. DelegatingFilterProxy는 일반적인 서블릿 필터이고, 그 필터 구현 처리를 스프링에 빈으로 위임한다. 라고 이해 했습니다. 그러면 Servlet Filter를 Bean으로 등록하면 SpringContext에 접근 가능 하다고 이해해도 되는 걸까요 ?? Security가 한번에 와닿지는 않아서 여러번 보며 공부해야 할 것 같습니다 ㅎㅎ,,
-
미해결Slack 클론 코딩[실시간 채팅 with React]
강의에 나온 workspacemembers 테이블 ChannelMembers 테이블 명칭에 관한 질문.
아 그리구 강의에서 나온 다대다 테이블 명칭에서 아래와 같이 데이터베이스 테이블 명칭이 WorkspaceMember 다대다 모델이름은 workspacemembers 라는 소문자로만 이루어진 명칭이고 ChannelMember 는 through 만 사용해서 데이터베이스에서 확인하면 ChannelMembers 로 나오는데요. 이게 테이블 명칭이 ChannelMembers 가 맞는지 아니면 다른 옵션으로 channelmembers 라고 맞추어주어야 하는지도 궁금합니다!! db.User.belongsToMany(db.Channel, { through: "ChannelMembers" }); db.Channel.belongsToMany(db.User, { through: "ChannelMembers", as: "Members",}); class WorkspaceMember extends Model { { modelName: "WorkspaceMember", tableName: "workspacemembers", charset: "utf8", collate: "utf8_general_ci", // 한글 저장 sequelize,} db.User.belongsToMany(db.Workspace, { through: db.WorkspaceMember, as: "Workspaces",});
-
미해결Slack 클론 코딩[실시간 채팅 with React]
사용자 차단 로직 구성에 대한 질문
안녕하세요. 정말 좋은 강의와 소스코드 공개 정말 감사드립니다. 강의의 내용보다 더 나간 내용이긴 하지만 혹시나 가능하시다면 하여 질문드립니다. user1, user2 가 있을 때 user1 이 user2 를 사용자 차단할 경우 게시글 같은 것이 있을 경우 user1 에게도 user2 의 게시물이 안보여야하고 user2 에게도 user1 의 게시물이 안보여야 하고 DM 의 경우에도 (channelchat 과 같은 단톡은 일단 고려하지 않음) user1 이 user2 를 차단하였으므로 user1 의 사용자가 표시되는 리스트에 user2 가 안보여야하고 user2 의 사용자가 표시되는 리스트에도 user1 이 보이지 않아야하며 DM 도 user1 이 user2 에게 보낼 수 없고 user2 가 user1 에게도 보낼 수 없고 user1 과 user2 의 DM 이 있다손 치면 그것들이 차단을 했으니 상호간에 삭제되어야하고 (paranoid 방식일지라도) 하는 시나리오가 있을 경우 해당 block 이라는 user vs user 의 다대다 관계를 어떻게 구성하는 것이 좋을지 문의드립니다. https://stackoverflow.com/questions/54605069/how-should-i-design-a-user-blocking-system Table User id (pk) | user_name 1 | a 2 | b 3 | c Table Post id (pk) | user_id (fk) 1 | 1 2 | 3 3 | 2 4 | 2 Table Block id (pk) | blocker_id (fk) | blocked_id (fk) 1 | 1 | 2 2 | 2 | 1 select * from User join Block on User.id = Block.blocker_id or User.id = Block.blocked_id select * from Post p where p.user_id = @current_user_id and not exists (select id from Block where Block.blocker_id = p.user_id or Block.blocked_id = p.user_id) 이런식으로 SQL 을 짜면 된다고 stackoverflow 에서 나와 있는데요 User 의 associate 부분에 이렇게 구성하면 될까요? static associate(db) { db.User.belongsToMany(db.User, {through: "Block"}); }
-
미해결취미로 해킹#1(OverTheWire - Bandit)
weechat 설치가 안되요ㅠㅠ
강의에서 나온 링크에 들어가서 설치 방법을 보고 그대로 실행했는데 설치가 안 됩니다. 도와주세요ㅠㅠ.
-
미해결인터랙티브 웹 개발 제대로 시작하기
vw 와 % 중 유동적인 반응형에 적합한 건 무엇일까요?
삭제된 글입니다
-
미해결모던 자바스크립트(ES6+) 심화
질문있습니다!
/* 4바이트 만큼의 버퍼 생성 */const buffer = new ArrayBuffer(4); /* 생성한 버퍼를 이용하여 DataView 생성 */const view = new DataView(buffer); /* setInt16 이면 2바이트 이므로 총 2개의 Element 생성 가능??? */ /* byteOffset 이 0부터 시작이면 2 일 때는 [0, 1, 2] 해서 3번째 Element 에 설정??? */view.setInt16(2, 100, true);console.log(view.getInt16(2, true));console.log(view.getInt16(2)); 위에서 setInt16 의 byteOffset에 2가 들어갔는데도 값이 설정되는 이유를 알고싶습니다. setInt8에서는 setInt8 로 하여 byteOffset을 이리저리 설정해 보며 실행해봤지만 거기서 제가 든 의문은 여기서 생성한 ArrayBuffer는 분명 4바이트인데, setInt16이면 하나의 엘리먼트에 2바이트가 할당이 되지 않나요? 엔디언...인디언... 이것 때문에 순서가 설정되는게 바뀌는건지 아직 감이 안잡히네요 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1:56 쯤에 setter를 private로 막아놓은 이유가 있을까요..?
안녕하세요 강사님. 평소에 Getter, Setter 를 그냥 막 만들다보니 private 로 하신 이유가 궁금합니다.. 또 나중에 롬복으로 @Getter, @Setter를 많이 쓸텐데 이렇게 해도 따로 수정을 하시는지 아니면 다른방법으로 하시는지 궁금합니다 !
-
미해결쉽게 시작하는 쿠버네티스(v1.35)
만약 컨트롤러에 문제가 생기면 어떻게 될까요?
쉽고 재밌는 설명 덕에 재밌게 강의 수강하고 있습니다. 만약 컨트롤러에 문제가 생기면 어떻게 될까요?
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
RecyclerView 7분중 GroupieViewHolder 자동입력과 UserItem을 Implement Members하는법을 모르겠어요.
1:1채팅 만들기(Android + Kotlin + Firebase) RecyclerView 7분 ChatListActivity.kt package com.example.chatting_videoimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport kotlinx.android.synthetic.main.activity_chat_list.*class ChatListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_chat_list) val adapter = GroupAdapter<GroupieViewHolder>오류코드e: C:\Users\MS\AndroidStudioProjects\chatting_video\app\src\main\java\com\example\chatting_video\ChatListActivity.kt: (12, 23): Unresolved reference: GroupAdapterLoginActivity package com.example.chatting_videoimport android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport com.example.chatting_video.Rimport com.google.firebase.auth.FirebaseAuthimport kotlinx.android.synthetic.main.activity_login.*class LoginActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth private val TAG = LoginActivity::class.java.simpleName override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) auth = FirebaseAuth.getInstance() login_button.setOnClickListener { val email = login_email.text.toString() val password = login_password.text.toString() auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") //데이터베이스에 유저 정보 넣어줘야 합니다. val intent = Intent(this, ChatListActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) } } } }}MainActivity package com.example.chatting_videoimport android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport com.google.firebase.auth.FirebaseAuthimport kotlinx.android.synthetic.main.activity_main.*import android.util.Log as Logimport kotlinx.android.synthetic.main.activity_main.login_button_main as login_button_mainclass MainActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth private val TAG: String = MainActivity::class.java.simpleName override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) auth = FirebaseAuth.getInstance() join_button.setOnClickListener { val user = hashMapOf( "first" to "Ada", "last" to "Lovelace", "born" to 1815 ) val email = email_area.text.toString() val password = password_area.text.toString() auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "성공") val uid = FirebaseAuth.getInstance().uid // Create a new user with a first and last name val user = hashMapOf( "first" to "Ada", "last" to "Lovelace", "born" to 1815 ) // Add a new document with a generated ID val intent = Intent(this, ChatListActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) } else { Log.d(TAG, "실패", task.exception) } } } login_button_main.setOnClickListener { val intent = Intent(this, LoginActivity::class.java) startActivity(intent) } } }여기선 성공 실패 코드를 지운게 있어요. 넣으면 오류가 걸려서 지웠어요. // Add a new document with a generated IDdb.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }db.이부분이 빨간색이 되었어요. 어떻게 해야하나요? User ackage com.example.chatting_videoclass User(val uid : String, val username : String)UserItem.kt package Modelimport android.content.ClipDataclass UserItem : ClipData.Item<GroupieViewHolder>(){}여기에서는 GroupieViewHolder라는 명령어가 자동입력이 되지 않고 빨간색이 뜹니다. activity_chat_list.xml <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/recyclerview_list" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ChatListActivity"> <androidx.recyclerview.widget.RecyclerView android:layout_width="344dp" android:layout_height="572dp" android:layout_marginStart="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="40dp" android:layout_marginEnd="20dp" android:layout_marginRight="20dp" android:layout_marginBottom="40dp" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.761" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.632" /></androidx.constraintlayout.widget.ConstraintLayout> 여기서는 app:layoutManager="android.recyckerview.widget.LinearLayoutManager"를 넣었습니다.activity_login.xml <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#a6d8fe" tools:context=".LoginActivity"> <EditText android:id="@+id/login_email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="85dp" android:ems="10" android:inputType="textPersonName" android:hint="login_email" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/login_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:ems="10" android:inputType="textPersonName" android:hint="login_password" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/login_email" /> <Button android:id="@+id/login_button" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="80dp" android:text="login_button" android:background="#fb7606" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/login_password" /></androidx.constraintlayout.widget.ConstraintLayout>activity_main.xml <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#a6d8fe" tools:context=".MainActivity"> <EditText android:id="@+id/UserName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="85dp" android:ems="10" android:inputType="textPersonName" android:hint="UserName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/email_area" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:ems="10" android:inputType="textPersonName" android:hint="email_area" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.497" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/UserName" /> <EditText android:id="@+id/password_area" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:ems="10" android:inputType="textPersonName" android:hint="password_area" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.502" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/email_area" /> <Button android:id="@+id/join_button" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:text="join_button" android:background="#fb7606" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.473" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/password_area" /> <Button android:id="@+id/login_button_main" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="36dp" android:text="login_button" android:background="#fb7606" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.473" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/join_button" /></androidx.constraintlayout.widget.ConstraintLayout>message_list_row.xml <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="80dp"> <TextView android:layout_width="73dp" android:layout_height="26dp" android:layout_margin="20dp" android:text="name" tools:layout_editor_absoluteX="10dp" tools:layout_editor_absoluteY="30dp"> </TextView> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:text="message" tools:layout_editor_absoluteX="130dp" tools:layout_editor_absoluteY="30dp"> </TextView></androidx.constraintlayout.widget.ConstraintLayout>name messagename messagename message 이게 어떻게 뜨는지 궁금해요. video\app\src\main\java\com\example\chatting_video\ChatListActivity.kt: (12, 23): Unresolved reference: GroupAdaptere: C:\Users\MS\AndroidStudioProjects\chatting_video\app\src\main\java\com\example\chatting_video\MainActivity.kt: (36, 13): Unresolved reference: db이런오류들을 어떻게 해결해야 하나요? val adapter = GroupAdapter<GroupieViewHolder>를 인력하면 빨간색으로 떠요자동입력이 안되요. implementation "com.xwray:groupie:$groupie_version" 2.9.0은 어떻게 입력하는 것인가요? 이걸 그대로 입력하면 오류가 떠요. GroupAdapter와 GroupieViewHolder가 입력되는 부분이 없어서 빨간색 오류가 뜨고, 실행이 안되요. 무슨 코드를 추가해야 이것들이 자동 입력이 되나요? 그리고 수업강의하실때 만들었던 원본 파일있으시면 공유가능할까요? 제거랑 비교하면서 코드를 짜려고요.
-
미해결핸즈온 머신러닝 2
2부 강의에 관련하여
안녕하세요! 최근에 머신러닝에 관심이 생겨 공부하하기 시작한 입문자입니다. 강의 너무 잘 듣고 있습니다 :) 다름이아니라 강의 목록을 보니 현재 1부 강의만 업로드된 걸로 알고 있는데, 2부 강의는 언제 업로드 되는지 알 수 있을까요?
-
미해결
이클립스 lombok @getter @setter 오류 질문합니다 ㅠㅠㅠ 제발 도와주세요
lombok 설치하고 import했는데 @ 을 쓰면 outline에 잡히지 않습니다.. 구글링해서 eclipes.init 파일에다가 추가하라는건 다 추가 했어요..이클립스랑 롬복 재설치도 해봤구요.. 왜 안되는건지 모르겠습니다 제발 도와주세요.. 답답합니다.. lombok버전은 1.18.20 입니다
-
미해결윤재성의 Java 기반 Android 9.0(pie) App 개발 기본 1단계
매 강의마다 나오는 gradle싱크
.지금 api30인데요 강의시 마다 나오는 gradle싱크 마추어줘야 하는거 해야 하는 건가요? 저는 implementation 'androidx.appcompat:appcompat:1.2.0' 이렇케 보이는데 똑같이 해야하나요?
-
미해결윤재성의 Java 기반 Android 9.0(pie) App 개발 기본 1단계
강의시 마다 나오는 그레들 싱크 맞추는 부분
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.