묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
풀이 방법 질문 있습니다.
안녕하세요 선생님. 질문이 길어서 죄송합니다 ㅜㅜ. 구현 부분까지가 너무 난잡하시면, 논리부분만 답변해주셔도 정말 감사할 것 같습니다. 저는 이분검색을 이용하지 않은 채 해결하였는데요, 그냥 넘어가도 괜찮은지, 아니면 이분검색으로 해결해보고 넘어가는게 좋을지 모르겠어서 질문 남기겠습니다. (저는 1씩 증가시켜가며 마치 순차탐색처럼 최솟값을 확인하였지만, 선생님께서는 이분검색을 사용하여 건너뛰면서 최솟값을 확인하셨기 때문에, 제가 해결한 방법 보다는,선생님 께서 풀어주신 방법이 시간 복잡도가 더 좋은 것 같은데요, 일단 채점 폴더는 모두 통과했습니다.) => 사실 해결 당시 이분검색을 생각하지 못했고, 저한테 좀더 직관적인 방법으로 해결하였는데, 이렇게 해결하는것이 맞는것인지도 잘 모르겠습니다. <우선 제가 해결한 논리는 이렇습니다.> * 문제의 예시처럼 1, 2, 3, 4, 5, 6, 7, 8, 9 분짜리 노래 9개가 들어왔을 때, 이를 3개의 dvd에 분배해야 한다면, 논리적으로 dvd 1개의 용량의 최솟값은 15가 된다 * 따라서 최솟값을 15로 잡고, dvd용량을 15에서 시작하여 1씩 증가시켜 가며, 입력으로 주어진 노래들을 문제 조건에 맞게 분배하였을 때, 가장 먼저 분배가 된 용량이 곧 최솟값이다. (15, 16, 17 ... 증가시켜가며 확인해보면, 17이 나옴) <구현시 주의사항> 1. 논리적인 최솟값을 구할 때, 문제의 예시처럼 나누어 떨어지는 경우도 있지만, 그렇지 않은 경우도 고려하여, 경우에 따라 올림 연산 수행 2. 논리적인 최솟값 부터 1씩 증가시켜가며 , 실제 최솟값을 찾는 부분 구현시 주의사항 (반례의 경우) -> 저의 경우 선생님이 해결하신 과정과 유사하게 - 시간을 누적시키다가 min값과 같아지면 그 누적값을 바로 dvd에 분배하고 - 누적시키다가 min값을 초과하면, 초과하기 이전까지만 분배하고, 초과시킨 값은 , 다음 dvd에 누적시켰습니다. -> 그런데 min값을 추과하는 경우 바로 다음 dvd에 분배하는게 아니라 i--만을 수행하여 다음 iteration에서 다음 dvd에 대입하면서 동시에 새롭게 누적시킨 값이 min을 초과하는지 검사하였습니다. -> 그러면 반례의 경우에도, 마지막 dvd에 초과시킨 모든 값들이 누적되어, 올바르지 않은 최솟값을 출력하지 않을 수 있었습니다. (참고용 코드) int main(){ int N, M; int *arr, *dvd; // *arr : 입력한 노래의 시간 저장 , dvd : M개의 dvd를 의미 int i,j; //1_1. N, M입력 scanf("%d%d",&N, &M); //1_2. arr[N] 동적할당 arr = (int*)malloc(N * sizeof(int)); dvd = (int*)calloc(M , sizeof(int)); //1_3. arr의 element를 입력받음 for(i=0; i<N; i++) scanf("%d",&arr[i]); //2_1. (arr[N]의 element의 합 / M) 를 수행하여, 이론적으로 가능한 DVD하나의 최소 용량을 구함 int min, mod; int sum=0; for(i=0; i<N; i++) sum += arr[i]; mod = sum % M; // case 1. 나누어 떨어지는 경우 (후처리x) if(mod == 0) min = sum / M; // case 2. 나누어 떨어지지 않는 경우 -> 올림 수행 else min = (int)(((double)sum/(double)M)+1); //2_2. 이후 이론적으로 가능한 최솟값 부터 시작하여 1씩 증가시켜 가며, 실제 가능한 DVD 하나의 최소 용량을 구함 int cnt; int sub_sum; int idx; while(1){ cnt = 0; // 분배한 횟수를 count하기 위한 변수 sub_sum = 0; //실제 분배하기 전, 각 노래 시간의 합 idx = 0; // dvd배열에 접근하기 위한 index // dvd 배열 초기화 과정 for(i=0; i<M; i++) dvd[i] = 0; // 각 노래를, 최솟값 min값을 기준으로 dvd에 분배 // 마지막 M-1번째 dvd에 분배할 차례가 아닌 나머지의 경우 // -> 각 노래 시간을 누적시켜 가다가, // i) 누적시킨 sub_sum값이 최솟값 min과 같으면 -> 그대로 분배하고 cnt++ // ii) 누적시킨 sub_sum 값이 최솟값 min보다 크게 되면 -> 초과한 시간은 제외하고 나머지 누적값을 분배 후 cnt++ // 이때 i--도 진행하여, 초과시킨 값은 다음 dvd에 분배한다 // 마지막 M-1번째 dvd에 분배할 경우 //앞에서 M-2번째 dvd까지만 분배한 이후, 분배하지 못한 시간들을 모두 누적하여 M-1번째 dvd에 분배 for(i=0; i<N; i++){ sub_sum += arr[i]; if(cnt < M-1){ if(sub_sum == min){ dvd[idx++] = sub_sum; sub_sum = 0; cnt++; } else if(sub_sum > min){ dvd[idx++] = sub_sum - arr[i]; sub_sum = 0; cnt++; i--; } } if(i == N-1){ dvd[idx++] = sub_sum; } } // 최솟값 min에 따라 분배했을 때, 확인 과정 // : 각 dvd에 분배된 시간이 최솟값 min을 초과하였으면 -> 최솟값을 증가시켜 다시 분배해야 함. // 그렇지 않고 모든 dvd에 min값 이하의 시간으로 분배되어 있으면 -> 그때 min이 곧 실제 최솟값 for(i=0; i<M; i++){ if(dvd[i] > min) break; } if(i==M) break; else min++; } ///3. 최소 용량 출력 printf("%d\n", min); free(arr); free(dvd); return 0; }
-
미해결백엔드 프레임워크 만들기
세번째 생각해볼 문제에 대한 제 생각입니다. 피드백 부탁드려도될까요?
1. 비즈니스로직에 SQL 이 섞이는 SQL 의존 문제를 해결하는 방법을 생각해보세요. 스프링 프레임워크의 `layered-architecture` 참고하자면, DB와 연관되는 부분들은 `Repository` 로 뺍니다. 이 부분을 흔히 `Repository Pattern` 이라 하는데 이렇게 함으로써 디비를 사용하는 쪽은 `Repository` 안에서 처리하고 비즈니스 로직은 해당 값을 온전히 쓰는식으로 개발하면 될 것 같습니다. 2. 한번 생성한 Connection 객체를 재사용해야 하는 이유를 생각해보세요. DB 연결과 같은 경우에는 계속해서 재사용하는 부분이기 때문에 싱글톤으로 둬서 재사용을 함으로써 시스템 자원을 효율적으로 다루기 위함. 3. DB 에 데이터를 저장할때 휴대폰 번호 같은 민감정보는 암호화를 해야 합니다. 암호화 기능은 어디에 구현해야 하는지 생각해보세요. 이 부분은 제 생각에는 Framework에서 실제 암호화가 필요한 부분을 사용하고자할 때 사용해야된다고 생각합니다. 저희 코드로 보면 `SqlRunner` 에서 `HP_N` 을 업데이트하는 부분에서 사용자에게 받은 `param` 을 담기 전에 암호화를 수행하고 담은 다음에 처리를 해야된다고 생각합니다. 그 이유는 일단, DB 함수로도 암호화 처리가 가능하지만 이는 코스트를 높기 때문에 최대한 이러한 처리는 암호화가 필요한 DB의 UPDATE나 INSERT 시에 처리하는게 맞다고 생각합니다. 이 부분에 대해서 제로님께서는 어떻게 생각하시는지 궁금합니다. 4. SQL 은 데이터를 가공하는 DML, 스키마를 정의하는 DDL 그리고 DB 를 제어하는 DCL 로 구분합니다. 그리고 우리가 만든 SQL 기능은 DML뿐만 아니고 DDL, DCL 도 사용 가능합니다. 하지만 WAS 에선 DDL 과 DCL 사용을 금지해야 하는데 이유와 해결방법을 생각해보세요. DDL, DCL을 사용하면 안되는 이유는 일단 웹어플리케이션 특성 상 불특정 다수가 사용할 수 있는 서비스들이 존재합니다. 이 때문에 만약 DDL 중에서도 `ALTER` 나 `TRUNCATE` 와 같은 치명적인 쿼리를 날릴 경우에 서비스 장애가 날 수 있다고 생각합니다. DCL같은 경우에는 트랜잭션 관련된 질의와 권한 관련 질의가 있는데 권한 질의 (REVOKE, GRANT)의 경우에는 만약 db 접속 권한이 넘어가게 될 경우에 서비스에 치명적인 구멍이 될 수 있다고 생각합니다. 또한, 트랜잭션 질의인 (COMMIT, ROLLBACK)도 기존에 우리가 만들었던 transaction의 기능과 혼동의 소지가 있다고 생각합니다. 이를 막기 위해서는 WAS에서 접속하는 DB 계정의 권한 설정을 `GRANT SELECT, UPDATE, DELETE, INSERT ON EMP TO db-user` 이런식으로 둬서 필요한 권한만 사용하게끔 하는 것이 좋다고 생각합니다. 5. 트랜잭션직렬성은 우선순위가 부여된 여러개의 트랜잭션이 동시에 병행/병렬수행되더라도 결과는 순서대로 실행됨을 의미합니다. 하지만 트랜잭션직렬성이 보장되더라도 트랜잭션이 서로 얽혀 종료가 안되는 데드락이 발생할 수 있는데 프레임워크에서 이를 해결할 수 있는 방법에 대해 생각해보세요. 이 부분이 이번 섹션에서 가장 어려웠던 질문이었던 것 같습니다. 저는 이 문제를 봤을 때 키워드 2개를 떠올렸습니다. 1. Transaction Propagation 2. Locking or Transaction Isolation-level 처음에는 2번이 뭔가 맞을 것 같았는데 프레임워크에서 이를 해결할 수 있는 방법이라 하셔서 1번같기도하고? (Spring은 Propagation 설정을 지원하니..) 뭔가 2번은 DB로 처리하는 부분이고, 이 설정은 Spring Data JPA에서만 지원하니 1번같다는 느낌을 받았습니다. 혹시 모르니 제 생각을 적어보겠습니다. 1번과 같은 경우에는 스프링에서는 기본 값이 `REQUIRED` 로 되어있는 것으로 알고 있습니다. 전 회사에서는 스프링 like한 자체 프레임워크를 사용했었는데 이러한 복잡한 부모 <-> 자식 트랜잭션간의 처리가 어렵다보니 TPS가 중요했던 서비스가 아니였어서 `REQUIRES_NEW` 처럼 항상 트랜잭션을 새로 생성하여 독립성을 보장하는 식으로 작업을 했었습니다. 이렇게 되면 각각의 트랜잭션들의 독립성이 보장되니 데드락같은 문제를 해결할 수 않을까 조심스럽게 생각해봤습니다. 2번과 같은 경우에는 라킹을 통해서 트랜잭션을 보장하는 부분이라고 볼 수 있습니다. 전파는 트랜잭션이 묶이게 할껀지 아니면 독립적으로 볼 지에 대한 내용이라면, 라킹은 동시성에 대한 내용이라고 생각합니다. mysql, mariadb는 `REPATABLE-READ` 가 기본값으로 세팅되어 있는데 조회된 내용이 항상 동일함을 보장할 수 있습니다. 그래서 제로님께서 해주신 질문의 의도는 데드락과 관련이 있고, 동시성과 관련이 있어보여서 이 부분이 좀 더 맞지않을까 생각이 드는데 잘 모르겠네요 ㅠㅠ 근데 이는 프레임워크에서 처리한다는 개념보다 뭔가 DB에서 설정하는 느낌이라 혹시 위의 2개가 아니라 다른 의도를 가지고 질문을 하셨던건지 궁금합니다. 번외. 현재 필요한 것 보다 과하게 제품을 디자인 하는 것을 오버엔지니어링 이라고 합니다. 우리가 개발시 사용하는 인터페이스클래스가 오버엔지니어링이 되는 경우가 있는데 이를 생각해보세요. 이 부분의 인터페이스 클래스가 정말 자바의 인터페이스를 뜻하는 건지 아니면 큰 개념의 인터페이스인지를 제가 이해를 못했어서 두 가지 모두 생각해보았습니다. 1. 자바의 인터페이스의 오버엔지니어링 케이스 이 경우에는 구현하려는 인터페이스에 너무 많은 메서드가 있는 경우라고 볼 수 있을 것 같습니다. 이를 테면 자동차의 `Tire` 라는 인터페이스가 존재하는데 타이어교체하기() 타이어공기압체크() 타이어크기() 타이어수명() 등.. 사용하지 않을 메서드들이 많은 경우에 오버엔지니어링이지 않을까 생각이 듭니다. 2. 소프트웨어 관점에서의 Interface 오버엔지니어링 케이스 소프트웨어 관점에서 보면 인터페이스는 아이폰으로 치면 볼륨업, 볼륨다운, 전원버튼과 같이 필요한 부분만 노출 시키고 내부 구현은 사용자에게 모르게끔 하는 부분이라고 볼 수 있습니다. 이러한 케이스의 오버엔지니어링 케이스는 사용자에게 필요 없는 정보까지 노출되거나 (캡슐화 위반) 사용자가 의도치 않게 쓸 수 있는 부분이 노출되어 있거나 (휴대폰으로 치면 이상한 버튼이 있는데 이걸 누르면 공장초기화가 된다던가?) 이러한 부분이라고 생각합니다. 지금까지의 예제에서는 현재는 SqlRunner가 `SQLiteJDBCTransaction` 을 사용하는데 실제 WAS 상에서 쓰기 위한 `SQLitePoolTransaction` 을 위한 코드들이 `SqlRunner` 상에 있습니다. 물론, 실제 사용될 코드이긴하나 만약 우리가 `SQLiteJDBCTransaction` 만 사용한다고 생각하면 이 부분이 오버엔지니어링이라 볼 수 있을 것 같습니다.중요한 점은 이는 확장을 위한 설계이기 때문에 만약에 확장이 안된다는 가정이 있어야할거같은데 약간 어거지로 지금까지 예제로 적어보았습니다 ㅎㅎ;
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberForm 클래스 문의드립니다.
안녕하세요. 강의듣는도중 질문 사항이 있어서 문의드립니다. MemberController에서 create 함수를 만들때 MemberForm form을 파라미터로 넣어서 view 단에서 받는 name값을 넣어서 사용한다고 하셨는데 이전에 domain 폴더에 만들었던 Member를 사용하면 안되는지 문의드립니다. id를 제외하고 name 변수는 겹쳐서요. MemberForm과 Member 객체가 사용되는 방식이 비슷한것 같아서 문의드립니다.! 감사합니다.
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
추천시스템을 사용자 피드백을 받아서 성능을 향상 방법에 대해.
넷플릭스, 왓챠, 유튜브, 페이스북 등 많은 기업들이 추천 알고리즘을 사용합니다. 그러면 사용자가 콘텐츠에 대해 평점을 매기고, 영상을 볼 때 마다 로그를 기록하면, 처음부터 재학습을 시켜서 추천을 해주는건가요?
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
static 멤버에 대해서 질문 있습니다.
private 생성자도 있어요? 강의에서 static 멤버인 경우 클래스 사용 시점에 static 멤버는 자동으로 메모리에 로딩된다고 하셨는데 그러면 class variable도 클래스사용 시점에 static zone에 할당이 되는 건가요?
-
미해결[하루 10분|Web Project] HTML/JS/CSS로 나만의 심리테스트 사이트 만들기
안녕하세요 질문드립니다
퀄리티 높은 강의를 무료로 제공해주셔서 감사합니다. 강의를 듣다가 궁금한 점이 생겨서 글 남깁니다. 화면전환 파트 강의를 듣는데 자바스크립트를 이용해서 display none이랑 block을 통해 화면 전환하는 방법이 나오는데 아예 html을 새로 만들어서 버튼을 눌렀을때 두번째 html로 링크해주어 화면을 전환하는 방법도 있는걸로 알고있는데 어느게 더 일반적인가요? 감사합니다
-
미해결YOLO 구현으로 배우는 딥러닝 논문 구현 with TensorFlow 2.0
one_hot과 C값에 대해서 질문 드립니다.
loss_function에서 label값으로 사용되는 P에 tf.one_hot이 적용되는데, 이 때 tf.one_hot의 첫 번째 argument는 모든 label class가 할당되어야 하지 않나요? code에서 label[4]는 특정 단일 class의 label number값을 가지고 있어 반환값이 항상 [0, 0] 으로 나옵니다. 만일 class가 1개가 아니라 2개..또는 3개라면 num_class가 2일 때 P 의 값은 [0, 1] 또는 [1, 0]의 값이, num_class가 3일 때 P 의 값은 [0, 0, 1] 또는 [0, 1, 0] 또는 [1, 0, 0]의 값이 사용되어야 한다고 생각하는데 맞을까요? C값에는 IOU값을 주셨는데, 결국 C값은 object loss가 계산되는 과정에서 best box mask가 1인 cell의 위치에서만 사용이 될 것이고(나머지는 0의 값이기 때문), 해당 cell의 C값은 1이기 때문으로 이해해도 괜찮을까요? 만약 제가 이해한 것이 맞다면, C = 1을 할당해도 괜찮다고 봐도 될까요?
-
미해결[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
인덱스 생성의 목적
안녕하세요 몽고DB내에서 index를 유용하게 쓰는 예시로 'text' 타입 index관련 부분 검색 기능만 알려주셨는데, 근본적으로 ascending, descending index 등 index는 왜 필요한건가요 ? 그리고 각 필드에 대한 index를 만든다는 것 자체가 무슨 뜻이죠 ? 가령 '직업'이라는 필드에 descending index를 만들면 무슨 일이 일어나고 언제 그걸 쓸 수 있는거죠?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
unity 172,30.1.35 서버 ::1
서버의 "안녕하세요" 메세지가 클라이언트로 넘어오지않아 무슨 이유에서인지 연결이 되지 않고 있는것같습니다. 그래서 서버와 클라 ipAddress 로그를 찍어보았는데 제목 처럼 다른 형태로 나옵니다. 이것이 혹시 연결이 안되는 이유가 되는것일까요?
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
post의 private 질문 드려요
안녕하세요, 현재까지 강의를 진행했을때 저의 프로젝트로써는 로그인 하지 않아도 작성했던 포스트가 화면에 보여지고 있는데, 이게 강사님이 의도한 방향이나? 잘되고 있는거 맞나용? 아니면 로그인안하면 게시글은 보이지 않고, 로그인시 해당 유저만 게시글이 보이게 설정되는 것이 맞나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
선생님 타입 에러가 납니다.. ㅠㅡㅠ
삭제된 글입니다
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable 오류 질문
aws로 이미지 생성 시 아래와 같은 오류가 발생합니다. Step 14/16 : RUN python manage.py migrate ---> Running in bed3515386d9 Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/environ/environ.py", line 273, in get_value value = self.ENVIRON[var] File "/usr/local/lib/python3.8/os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'SECRET_KEY' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "manage.py", line 23, in <module> main() File "manage.py", line 19, in main execute_from_command_line(sys.argv) File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 86, in wrapped saved_locale = translation.get_language() File "/usr/local/lib/python3.8/site-packages/django/utils/translation/__init__.py", line 254, in get_language return _trans.get_language() File "/usr/local/lib/python3.8/site-packages/django/utils/translation/__init__.py", line 57, in __getattr__ if settings.USE_I18N: File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 82, in __getattr__ self._setup(name) File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 69, in _setup self._wrapped = Settings(settings_module) File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 170, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 843, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/home/hdtsks_django/hdtsks/settings.py", line 33, in <module> SECRET_KEY = env('SECRET_KEY') File "/usr/local/lib/python3.8/site-packages/environ/environ.py", line 123, in __call__ return self.get_value(var, cast=cast, default=default, parse_default=parse_default) File "/usr/local/lib/python3.8/site-packages/environ/environ.py", line 277, in get_value raise ImproperlyConfigured(error_msg) django.core.exceptions.ImproperlyConfigured: Set the SECRET_KEY environment variable The command '/bin/sh -c python manage.py migrate' returned a non-zero code: 1 secret key도 문제 없고 .env 파일에 잘 들어가 있는데 왜 저런 오류가 생기는지 정말 모르겠습니다 ㅠ
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
uri의 id에 대한 보안 질문
uri에 id를 노출시킬 경우 보안 문제가 발생하지 않을까요?예를 들면 어떤 사용자가 인위적으로 uri의 id값을 수정 후 delete메소드를 요청을 보낼면 자신이 아닌 다른 사용자의 정보가 삭제 될수도 있을거 같은데 이런한 문제는 어떻게 해결되어지나요?
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
overflow:hidden
overflow:hidden 은 내용이 넘치면 잘라서 안보이는거 아닌가요?? 어떤 속성 덕에 자식요소에 float 사용 시 높이 값을 자식 요소에 맞게 제어되는지 잘 모르겠어요
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
서버사이드렌더링 적용후 다이나믹 라우팅 할때 질문있습니다
안녕하세요 제로초님 !page 폴더에 /post/[id].js 만들어서 다이나믹라우팅 적용시켰는데요.[id].js 에 서버사이드렌더링 배운거 적용하고post reducer에 singlePost state추가해서 dispatch 하면 데이터 받아오도록 하였습니다근데 리스트컴포넌트에서 에서 <Link> 클릭하고 들어가면 singlePost 값이 null이 나오더라고요..새로고침하면 데이터값이 들어와있습니다.그래서 콘솔에 찍어보니 컴포넌트가 먼저 실행되고다시렌더링 된후에 singlePost 값이 찍혀있었습니다제로초님 노드버드사이트 확인해보니 다이나믹라우팅 적용하면favicon부분이 로딩아이콘으로 변하면서 콘솔창이 새로고침되던데.. 제가 뭐 적용해야하는걸 놓친건지 계속 찾다가 질문글 올립니다 /post/[id],js import React, { useState, useCallback } from "react" import { useDispatch, useSelector } from "react-redux" import { useRouter } from "next/router" import Head from "next/head" import axios from "axios" import { END } from "redux-saga" import { makeStyles } from "@material-ui/core/styles" import { Grid, Avatar } from "@material-ui/core" import Rating from "@material-ui/lab/Rating" import { FavoriteBorder, Favorite } from "@material-ui/icons" import red from "@material-ui/core/colors/red" import Layout from "../../components/Layout" import CommentForm from "../../components/CommentForm" import CommentList from "../../components/CommentList" import { LIKE_POST_REQUEST, LOAD_POST_REQUEST, UNLIKE_POST_REQUEST, } from "../../reducers/post" import PopularList from "../../components/PopularList" import wrapper from "../../store/configureStore" import { LOAD_USER_REQUEST } from "../../reducers/user" const useStyles = makeStyles({ root: { maxWidth: 1500, paddingLeft: "20rem", margin: "auto", }, }) const Post = () => { const dispatch = useDispatch() const router = useRouter() const classes = useStyles() const { me } = useSelector((state) => state.user) const { singlePost } = useSelector((state) => state.post) const { id } = router.query //const img = singlePost.Images[0].src //const Liked = singlePost.Likers.find((v) => v.id === me.id) const onUnLike = useCallback(() => { console.log("좋아요 취소") dispatch({ type: UNLIKE_POST_REQUEST, data: { postId: parseInt(id), count: singlePost.Likers.length - 1 }, }) }, []) const onLike = useCallback(() => { console.log("좋아요") dispatch({ type: LIKE_POST_REQUEST, data: { postId: parseInt(id), count: singlePost.Likers.length + 1 }, }) }, []) return ( <Layout> {console.log("포스트", singlePost)} <Head> <title>님의 글</title> </Head> {/* <Grid container className={classes.root} spacing={3}> <Grid item xs={8}> <h2>{singlePost.title}</h2> <div> <Avatar alt="Remy Sharp" src="/static/images/avatar/1.jpg" /> <span>id</span> <span>날짜</span> <Rating value={singlePost.rating} precision={0.1} readOnly /> </div> <div> <img src={ img.includes("https://") ? img : `http://localhost:3063/${img}` } alt={singlePost.title} /> <p>{singlePost.content}</p> </div> <div> <button type="button"> {Liked ? ( <Favorite style={{ color: red[600] }} onClick={onUnLike} /> ) : ( <FavoriteBorder onClick={onLike} /> )} </button> {singlePost.Likers.length}명이 좋아합니다 </div> <CommentList currentPostId={id} comments={singlePost.Comments} /> <CommentForm currentPostId={id} comments={singlePost.Comments} /> </Grid> <Grid item xs={4}> <PopularList /> </Grid> </Grid> */} </Layout> ) } export const getServerSideProps = wrapper.getServerSideProps( async (context) => { const cookie = context.req ? context.req.headers.cookie : "" axios.defaults.headers.Cookie = "" if (context.req && cookie) { axios.defaults.headers.Cookie = cookie } context.store.dispatch({ type: LOAD_USER_REQUEST, }) context.store.dispatch({ type: LOAD_POST_REQUEST, data: context.params.id, }) context.store.dispatch(END) await context.store.sagaTask.toPromise() return { props: {} } }, ) export default Post 렌더링후 postlist 컴포넌트 /post/[id],js 콘솔창
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
(아나그램 개선코드)
1. 만약 A리스트에는 a가 1개, B리스트에는 b가 2개인 경우에는 마지막 for문의 SH.get(a)>0일 경우에는 해당 값이 음수인데 이걸 걸러주지 못하지 않나요? 2. 또한 마지막 for문에서 'for x in a: '로 하면, A리스트에는 없고, B리스트에는 있는 경우는 어떻게 걸러주는 지 궁금합니다!
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
DepthStencilBuffer관련
DepthStencil을 적용하지 않았을 때는 먼저 그려진 텍스처가 나중에 그려진 텍스처에게 덮어씌워져서 나중에 그려진 텍스처가 더 앞에 그려졌는데 DepthStencil을 적용한 후에는 같은 깊이의 텍스처 끼리는 먼저 그려진 텍스처가 나중에 그려진 텍스처에게 덮어씌워지지 않고 더 앞에 그려지게 되는데 왜 이런건가요?
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
mmdetection pipeline에서의 resize scale에 대해서 질문이 있습니다
안녕하세요 'Config의 이해 Data Pipeline` 강의에서 질문이 있습니다 데이터 파이프라인에서 resize의 img_scale로 모든 이미지를 resize 한다는 것인가요? 굉장히 큰 사이즈로 reshape를 하길래, 혹시나 해서 궁금해서요 그리고 keep_ratio를 유지하면 남은 여백에 대해서는 검은색으로 padding을 한다는 것인가요? + 추가로 아래와 같은 pipeline을 봤는데 ,이때는 img_scale이 2가지가 있는데, 그럼 이때는 두 사이즈로 모두 rescale 되어서 하나의 이미지가 2개의 image로 augmentation 개념으로 변형되어서 입력으로 들어가는 형태인거죠? train_pipeline = [ dict(type='LoadImageFromFile'), dict(type='LoadAnnotations', with_bbox=True), dict(type='Concat', template_path=data_root + 'template_Images/'), dict( type='Resize', img_scale=[(3400, 300), (3400, 500)], multiscale_mode='range', keep_ratio=True), dict(type='RandomFlip', flip_ratio=0.5), dict(type='Normalize', **img_norm_cfg), dict(type='Pad', size_divisor=32), dict(type='DefaultFormatBundle'), dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), ]
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
좋은 강의 정말 감사드립니다
스프링으로 레거시 프로젝트 진행한지 6개월정도 지난 뒤 다시 배우려고 했을 때 너무 막막했는데 영한님 강의로 스프링 부트로 스프링의 기본 틀이 다시 잡혀가고 있는거 같습니다. 정말 감사드립니다. 스프링하다가 react쪽으로 선회해서 포폴을 준비했는데 예전에 배웠던 지식을 썩힌다는 게 너무 아까워서 마음 다 잡고 빡세게 해보려고 합니다. 강의내용을 완전히 제 것으로 만든다면 스프링 부트로 웹서비스 하나 만들어서 포폴 준비할 수 있길 기원하고 있습니다.지치지 않고 열심히 학습해서 도움되는 개발자가 될 수 있도록 노력하겠습니다.다시 한번 좋은 강의 감사드립니다
-
미해결웹 게임을 만들며 배우는 React
안녕하세요. 클래스내에서 함수 선언시 타입정의 질문드립니다.
안녕하세요. 강의 재밌게 수강중에 있습니다. 다름아니라, 의식을 못하고 있었는데 어느 순간부터 class 내에서 함수 (onClickScreen, renderAverage 등등) 정의할때는 왜 const나 let이 안붙는다는걸 의식했습니다. 보통 화살표 함수를 사용할때는 익명함수를 변숨에 담아야하기 때문에 const func1 = () => {...} 이런식으로 사용해야하는거 아닌가요? 왜 class안에서는 func1 = () =>{...}이런식으로 사용하는건가요? 관련키워드라도 주시면 찾아보겠습니다. 감사합니다