묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Slack 클론 코딩[실시간 채팅 with React]
프로젝트에 관한 질문있습니다!
일단 첫 웹 게임 및 노드버드 때부터 항상 강의를 지켜보던 제로초님 팬 입니다! 덕에 실무 프로젝트도 거뜬히 만들게 되었는데요. 근대 어느덧 벌써 2년정도 시간이 지났고, 노드버드 리뉴얼 강의도 나오고, 타입스크립트 강의 등등이 나왔더군요. 기본 자바스크립트 및 상태관리를 위해 redux 와 ssr을 위해 next 셋팅을 고인물 처럼 사용하다 보니, 이번기회에 타입스크립트로 전환해야겠다 싶어서 sleact 강의를 듣고 있습니다. 여기서 질문! 상태관리로 사용되는 SWR 이 전체적인 강의 흐름상, 전부를 대체하지 못하는 것 같은 느낌입니다. 그러다보니, zustend 나 recoil 을 추가로 구성하여 사용하는 것 같은데, 1. swr 과 recoil, redux, zustend 등 상태관리 라이브러리의 차이점이 무엇인가요. > 추후 강의내용중 swr 만 들었을때는 설명을 제가 지나치고 들은건지, 잘 모르겠어서 질문 드렸습니다. 2. 위 나열된 recoil 등 상태관리 라이브러리가 아직까지 next 와 연결이 어려운 상태인가요..? (좋다고 덥석 혼자 구성했다가, next 와 연동이 힘들다는 글을 본것 같습니다.) 3. 제로초님의 강의 중 필요한 부분만 모두 짬뽕으로 섞어서 구성하려고 합니다! next (ssr) , 타입스크립트, swr 등. 기본 능력치가 있을때, 노드버드 리뉴얼 버전 건너뛰고 sleact 강의로 충분하겠죠..? (스스로 학습 보다 선 제로초님의 강의가 훨씬 이해가 잘되고 시간 절약이 되어서.. 질문드립니다..) 구버전에서 리뉴얼 버전의 차이가 next 버전업과 swr 추가 등의 차이인것 같은데, 건너띄어도 괜찮겠죠...? (구 노드버드 지식과 현 sleact 강의로 대체 가능하겠죠..?)
-
미해결Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기
자바설치
여기까지 했는데요! 파일에 들어가면 이상태입니다.. 이것은 압축이 안풀어진 상태 아닌가요 ?
-
미해결React 기반 Gatsby로 기술 블로그 개발하기
사이트맵 읽을 수 없음
안녕하세요 몇 주전 부터 계속 구글 서치 콘솔 사이트맵 에러뜨길래 기다리면 되는 줄 알았더니 안 되더라구요 에러 내용은 '사이트맵을 읽을 수 없음' 그러나 '사이트맵 열기' 버튼을 누르면 잘 나옵니다. 소유권 확인도 HTML 태그, HTML 파일 모두 확인 완료가 됐습니다. 사이트맵도 링크 따라가면 잘 나오는데 구글 서치 콘솔에서만 안 되더라구요 네이버는 잘 되는데 혹시 어떤 문제일 가능성이 높나요? https://qnrjs42.github.io/sitemap/sitemap-index.xml
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
코드 실행이 안 되는데 어떻게 해결해야하나요?
The connection to the terminal's pty host process is unresponsive, the terminals may stop working. 이 경고창만 뜨고 코드 실행이 안 돼요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
유니크제약조건
안녕하세요 강의 잘듣고 있습니다. 강의를 듣다가 궁금한 점이 생겨서 질문드립니다. --- 유니크제약조건을 쓰는 이유가 무엇이고 언제쓰는지 궁금합니다.:)
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
초기에 큰 LR 의 적용할시 오버피팅 문제
안녕하세요 선생님 초기에 LR을 크게 할 때 왜 overfitting인지 잘 이해가 가지 않습니다. 초기에 큰 LR을 적용할시 Weight의 급격한 변화로 지역 최적해에 빠져 과적합 가능성이 있다고 언급하십니다. (2:00~3:35쯤 설명) 그런데, 제 생각에는 지역최적해에 빠져 나오지 못 하는 경우, 충분한 학습을 하지 못하고 수렴 한 것이라 overfitting 보다는 under fitting이라고 생각되는데, 왜 overfitting인지 잘 모르겠습니다 . 항상 즐거운 강의 감사합니다 :)
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 컬렉션에 대해서 질문드립니다.(영속성 전이, 고아객체로 인해 궁금증)
Member 코드 : @Entitypublic class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private Long id;..생략.. @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List<AddressEntity> addressHistory = new ArrayList<>();..생략..} AddressEntity 코드: @Entitypublic class AddressEntity { @Id @GeneratedValue private Long id; private Address address; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") private Member member;..생략..} 값타입컬렉션을 일대다 혹은 다대일로 설정하면(저는 다대일로 설정해봤습니다.) Member코드에서 영속성 전이와 고아객체를 사용하잖아요 ? 그럼 값타입 컬렉션은 그냥 값타입과는 다르게 여기저기 막 쓰지 못하고 단일소유자일 때만 사용할 수 있는 건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
IntelliJ에선 정상적으로 build가 되는데 cmd에서는 build가 안됩니다 ㅜㅜ
환경은 윈도우 10이고 인텔리제이 내부 터미널, 윈도우 cmd 둘 다 gradlew build 를 실행하면 해당 에러가 뜨네요... 구글링 해본 결과 자바 11버전이 정상적으로 환경변수에 할당이 안되어서 그렇다길래 환경 변수 설정도 다시 해줬는데 똑같습니다... 우선 java -version 결과는 이렇게 뜨고, gradlew 명령어랑 gradlew clean은 정상적으로 작동합니다. 어떤 부분에서 문제가 생겨서 이렇게 되는지 도저히 해결을 못하겠습니다 ㅜㅜ 오류 메세지로 봐서는 환경변수에 자바 버전이 잘못 할당된 것 같은데... 이번에 스프링 공부 시작하면서 아예 자바를 삭제하고 자바 11로 새로 깔았는데 예전 path가 아직 남아서 문제인건지 다른 곳에서 문제가 생겼는지... 도움 부탁드립니다 ㅜㅜ
-
미해결블렌더 파이썬 BPY 입문강의
코드파일을 저장해도 블렌더에서 리로드 되지 않는것 같습니다.
vscode에서 옵션 -> 확장 -> blender에서 이렇게 옵션이 켜져 있는데, 저장후 리로드가 안되는것 같습니다 import bpy class Tools_RandomCube(bpy.types.Operator): bl_idname = "tool.random_cube" bl_label = "random_cube" bl_options = {"REGISTER" , "UNDO"} def execute(self, context): for i in range(3): bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1)) return {"FINISHED"} 로 작성했는데 큐브가 자꾸 하나만 생성되길래 블렌더를 다시 껐다 켰더니 그제서야 3개가 생성됩니다. 저장할때마다 블렌더에 리로드 되기 위해 조치해야할 다른사항이 있을까요? 감사합니다.
-
미해결블렌더 파이썬 BPY 입문강의
(7:33) 디버그 콘솔에 있는 파란색 문구들이 안떠요 !
(7:33) 블렌더 켜져있는 상태에서 ctrl + s를 눌러도 디버그 콘솔에 나오는 파란색 문구들이 뜨지 않습니다. 설정에서 Blender > Addon: Reload On Save 옵션도 켜져 있는데 왜 그런걸까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
레이아웃에서 공통과 추가를 인자로 받는 부분에 대해 질문이 있습니다.
[템플릿 레이아웃1 강의에서의 질문] 안녕하세요. 김영한 강사님. 강의 정말 잘 듣고있고 있는데 궁금한 점이 생겨 여쭤봅니다. base.html 의 틀을 여러 곳에서 사용하고 싶을 때 강의에선 th:fragment="common_header(title, links)" 와 같이 공통을 제외하고 바뀌어야할 부분은 인자로 받아서 replace 하는데 사용하고 있습니다. 그런데, base.html를 사용하고 싶은 어떤 a.html이 있다고 가정할 때 a.html은 넘겨줄만한 추가 links나 title이 없는 경우 th:replace="template/layout/base :: common_header(~{::title})" 다음과 같이 사용할 수 있도록 선택적으로 인수를 받거나 주는 방법은 없을까요? 레이아웃이 되는 html은 사용하고자하는 많은 html 이 있을 것이라고 생각합니다. 선택적으로 받을 수 없다면 항상 사용하고자 하는 html 쪽에서 추가할 것이 없고 레이아웃을 그대로 따르기만 하는 상황에선, 쓸모없는 태그를 만들고 필요없는 인자를 항상 넘겨야하는지 의문이 생깁니다. 강의를 다듣고 강의에서 배운 내용들을 적극 활용해 혼자서 프로젝트를 해보는 중에 이런 문제에 부딛혔고 여차여차 어떻게든 해나가려다 보니 thymeleaf-layout-dialect 라는 것도 줏어듣게 되었는데, 이부분은 의존성 추가를 해서 해결하는 부분이라 순수하게 타임리프에서 제공하는 방법으론 해결할 수 없는지 궁금합니다. 감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
컨트롤러와 스탯
강의를 보면서 이렇게 저렇게 수정도하고 시도도 해보면서 만들고 있습니다. Attacked를 만들때 ① 강의와 같이 stat안에 메소드를 만들고 stat을 인자로 넘겨서 함수를 처리를 하는것과 ② stat을 컨트롤러에 public으로 캐싱해서 몬스터컨트롤러.Stat.Attacked(~~~)로 사용하는 것과 차이가 클까요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
Storm 토폴로지 배포 후 Spout, bolt 에러
kafka-console-consumer 까지는 데이터가 들어오는것을 확인했지만 HBASE에 데이터가 들어오지 않아서 Storm UI를 확인해봤더니 DriverCarInfo 토폴로지에 아래 캡처와 같이 에러가 나고 있습니다. 어떤 이유로 나는지 알수가 없네요... 아래는 해당 Spout, Bolt에 나오는 상세 에러로그입니다. [kafkaSpout 에러] java.lang.RuntimeException: java.lang.RuntimeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/SmartCar-Topic/partitions at org.apache.storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:99) at org.apache.storm.kafka.trident.ZkBrokerReader.<init>(ZkBrokerReader.java:44) at org.apache.storm.kafka.KafkaUtils.makeBrokerReader(KafkaUtils.java:64) at org.apache.storm.kafka.KafkaSpout.open(KafkaSpout.java:83) at org.apache.storm.daemon.executor$fn__10112$fn__10127.invoke(executor.clj:609) at org.apache.storm.util$async_loop$fn__624.invoke(util.clj:482) at clojure.lang.AFn.run(AFn.java:22) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.RuntimeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/SmartCar-Topic/partitions at org.apache.storm.kafka.DynamicBrokersReader.getNumPartitions(DynamicBrokersReader.java:113) at org.apache.storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:83) ... 7 more Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/SmartCar-Topic/partitions at org.apache.zookeeper.KeeperException.create(KeeperException.java:114) at org.apache.zookeeper.KeeperException.create(KeeperException.java:54) at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1659) at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:242) at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:231) at org.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:64) at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:100) at org.apache.curator.framework.imps.GetChildrenBuilderImpl.pathInForeground(GetChildrenBuilderImpl.java:228) at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:219) at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:41) at org.apache.storm.kafka.DynamicBrokersReader.getNumPartitions(DynamicBrokersReader.java:110) ... 8 more [HBASE Bolts 에러] ava.lang.RuntimeException: java.io.IOException: Unable to establish connection to HBase table DriverCarInfo at com.wikibook.bigdata.smartcar.storm.HBaseBolt.prepare(HBaseBolt.java:40) at org.apache.storm.daemon.executor$fn__10180$fn__10193.invoke(executor.clj:803) at org.apache.storm.util$async_loop$fn__624.invoke(util.clj:482) at clojure.lang.AFn.run(AFn.java:22) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: Unable to establish connection to HBase table DriverCarInfo at com.wikibook.bigdata.smartcar.storm.HTableConnector.<init>(HTableConnector.java:37) at com.wikibook.bigdata.smartcar.storm.HBaseBolt.prepare(HBaseBolt.java:38) ... 4 more Caused by: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:441) at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:434) at org.apache.hadoop.hbase.client.ConnectionManager.getConnectionInternal(ConnectionManager.java:312) at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:185) at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:151) at com.wikibook.bigdata.smartcar.storm.HTableConnector.<init>(HTableConnector.java:35) ... 5 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) ... 11 more Caused by: java.lang.ExceptionInInitializerError at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2639) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:354) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296) at org.apache.hadoop.hbase.util.DynamicClassLoader.initTempDir(DynamicClassLoader.java:133) at org.apache.hadoop.hbase.util.DynamicClassLoader.<init>(DynamicClassLoader.java:103) at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:256) at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64) at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75) at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:944) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:720) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:649) ... 16 more Caused by: java.lang.IllegalStateException: Shutdown in progress at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66) at java.lang.Runtime.addShutdownHook(Runtime.java:211) at org.apache.hadoop.util.ShutdownHookManager.<clinit>(ShutdownHookManager.java:47) ... 31 more
-
미해결홍정모의 게임 만들기 연습 문제 패키지
게임 실행 중 계속 프레임이 달라지는 문제점
안녕하세요, 코드 작성중에 궁금한 점이 있어 질문드립니다. 예제 코드를 계속 컴파일하다가 이상한 점을 발견했는데요, 게임의 fps가 계속 달라진다는 것입니다. 어쩔때에는 물체가 부드럽게 이동하고, 어쩔때에는 물체가 뚝뚝 끊겨서 이동하는 느낌을 받습니다. 원인이 무엇일까 생각해보다가, Game2D 클래스의 run() 메소드에 관련 코드가 있는 것을 확인했습니다. 위 if문으로 인해서 시스템이 계속 sleep을 하니까 프레임이 끊기는 것처럼 보이더라구요. 또한 dt 값을 계속 확인해보니 값이 불규칙한 것을 확인했습니다. dt 값이 불규칙적이니, sleep도 일정하지 않게 작용하면서 화면 프레임이 계속 달라지는 현상이 생기는 것으로 예상됩니다. (dt 값이 왜 불규칙한지는 모르겠습니다.) 찾아보다가 glfw 메소드 중에 glfwSwapInterval 이라는 메소드가 있어서 사용해봤는데, 인자로 1을 넣어주면 fps가 자동으로 144에 맞춰지더라구요. 또한 일정한 fps 값을 유지시켜주니, 컴파일 할때마다 게임화면의 fps가 달라지는 문제점도 해결된 것 같습니다. 그렇다면 timer class 를 사용하지 않고, 어차피 timer는 프레임 제한을 위한 도구이니 앞서 이야기한 glfwSwapInterval 메소드를 사용해도 괜찮을까요? 위는 timer class를 사용했을 때 FPS를 계산한 것이고, (worst case인 경우 위처럼 프레임이 변합니다.) 위는 glfwSwapInterval 메소드를 사용했을 때 FPS입니다.
-
미해결스프링 시큐리티
Custom `FilterSecurityInterceptor` 초기화 시점 변경에 대한 질문입니다
저의 테스트 환경이 DB 데이터가 구동시점에 초기화가 되도록 설정한 상태입니다. 이 때문에 아래와 같은 이슈가 있습니다. DB 데이터 초기화가 되지 않아 RequestMap 에 URL Resource 를 불러오지 못해서`인가`처리가 불가능합니다 이것은,src/main/resources/data.sql 또는SetupDataLoader.java 를 통해 데이터를 설정하다 보니초기화 순위에 밀려 Resource 설정이 안되는 상태를 볼 수 있었는데요, Reousrce 데이터가 입력되는 시점은 Table 이 만들어 진 직후, SecurityMetadataSource 에서 Resource 목록을 불러오고,(row = 0) Resource INSERT 문이 실행됩니다 질문입니다 이를 해결하기 위해서는,DB 인서트 쿼리를 SecurityConfig 보다 우선으로 실행하거나,customFilterSecurityInterceptor 가 @Bean 으로 등록되는 시점을 늦춰야 되는데, 혹시 , SecurityConfig 자체가 초기화 되는 시점을 늦출 수는 없을까요?(리소스 세팅 이후.. 실행) Spring 이벤트로 처리가 가능하다면 Spring 이벤트중 적절한 시점의 이벤트는 어떤게 있을까요?( DB 데이터 입력이 ContextRefreshedEvent 보다 먼저 되어야 하는데, 방법을 모르겠습니다) 외람되지만, JPA 관련 이벤트나 @Pre, Post Persist 로도 가능할까요? 어떤식으로 해결해는것이 좋을까요?읽어주셔서 감사드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
카메라 컨트롤러가 게임매니저에서 직접 플레이어를 받으면
카메라 컨트롤러가 게임매니저에게 직접 _player = Managers.Game.player로 플레이어를 받으면 안되나요? 호출순서의 문제인가요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 챗봇 사이트 만들기
Error: 7 PERMISSION_DENIED: IAM permission 오류
(node:25864) UnhandledPromiseRejectionWarning: Error: 7 PERMISSION_DENIED: IAM permission 'dialogflow.sessions.detectIntent' on 'projects/test-chat-bot-app-321515/agent' denied. at Object.callErrorFromStatus (C:\Users\wjdwl\node_modules\@grpc\grpc-js\build\src\call.js:31:26) at Object.onReceiveStatus (C:\Users\wjdwl\node_modules\@grpc\grpc-js\build\src\client.js:179:52) at Object.onReceiveStatus (C:\Users\wjdwl\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:336:141) at Object.onReceiveStatus (C:\Users\wjdwl\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:299:181) at C:\Users\wjdwl\node_modules\@grpc\grpc-js\build\src\call-stream.js:145:78 at processTicksAndRejections (internal/process/task_queues.js:75:11) (Use `node --trace-warnings ...` to show where the warning was created) (node:25864) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:25864) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that 이렇게 떴는데 구글링을 해도 해결이 안돼서 질문글 올립니다. 어떻게 해결하면 좋을까요? are not handled will terminate the Node.js process with a non-zero exit code.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
리스트 항목 제거
리스트 제거 버튼을 천천히 하나씩 누르면 로컬스토리지에서 하나씩 제거되는 모습을 볼 수 있는데 연속적으로 빠르게 누르면 로컬스토리지에는 일부 데이터가 남아있는 현상이 나타납니다. 코드를 따라 작성했지만 저만 이와 같은 현상이 일어나나해서 글을 작성했습니다:)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문취소 테스트시
주문취소쪽 테스트하다가 궁금한점 있어 질문드립니다. 취소할 주문ID를 조회하고 Order order = orderRepository.findOne(orderId); order.cancel(); 로 주문취소하기 전에 orderItems에 값이 넣어져 있는지 모르겠습니다. Order와 OrderItem은 @OneToMany로 기본이 LAZY 로딩이라 orderItems을 직접 호출하기 전까지는 데이터를 조회하지 않는거로 알고 있는데 어떻게 orderItems에 값이 채워져서 취소가 되는지요?... for (OrderItem orderItem : orderItems) { orderItem.cancel();} 저 for문 시점에 데이터를 조회하면 이해하겠는데 디버깅해보면 order를 조회할때 이미 값이 다 채워져 있습니다...
-
미해결백엔드 프레임워크 만들기
다섯번째 생각해볼 문제에 대한 제 생각입니다. 피드백 가능할까요?
벌써 제로님 강의의 수강률이 70%가 넘어가고있네요. 정말 재밌게 보고있습니다. 코드를 clone해오는 것은 실력이 안쌓인다 생각하여 깃허브에 코드를 직접 타이핑하면서 문제가 생기면 디버깅을 하면서 보고있다보니 진도가 느린 감도 없지 않아 있는거같네요. 그렇지만, 이번에도 코드를 직접 따라치고 디버깅을 하면서 전체적인 맥락을 계속 짚을 수가 있게 된거같습니다 :) 각설하고 제가 이번에 생각해볼 문제에 대한 생각은 다음과 같습니다. 1. 인증 정보는 세션에 저장됩니다. 하지만 세션을 사용할 수 없는 REST 같은 환경일 경우 인증정보를 획득할 수 있는 방법을 생각해보세요. JWT와 같은 서비스를 통해 토큰을 활용하여 인증정보를 획득할 수 있을 것 같습니다. 음 여기서 JWT에 대한 질문을 올려도 되는지 모르겠지만 KeyCloak 이나 Vault와 같은 걸로 토큰을 중앙 제어하는 것이 안전하다 들었습니다. 특히, 키클록은 인증/인가에 대한 많은 서비스를 제공해서 편리하다고 알고 있었는데 Access Token을 DB에 저장하는 것은 위험한지가 궁금하더라구요. 제가 현재 하는 사이드 프로젝트는 KeyCloak 도입은 아직 하지말자하고 테스트는 DB에서 진행 중인데 DB에 하면 위험한 행위일지? (액세스토큰 탈취 위험이 있기에..) 하지만 키클록이나 볼트도 동일하다고 생각하고 있기도 합니다.그렇다면 DB에 안전하게 액세스토큰을 저장하는 방법이 있을까요? 일단 만료시간을 최대한 짧게 해두고 리프레시토큰을 통해서 하고 있는데 이정도까지만해도 안전한지 궁금합니다. 또한, 토큰을 사용할 경우 Http header에 담는게 좋을지 아니면 POST request의 경우 Body에 담는 케이스도 경우도 있는데 https://datatracker.ietf.org/doc/html/rfc6750#section-2여길 보니 둘 다 해당 내용에 맞춰서 하면 별 문제 없는지도 궁금해졌습니다. 2. 인증과 접근제어를 통해 기밀성과 무결성을 보호하기 위한 벨 라파둘라와 비바 규칙을 알아 보세요.1. 벨 라파둘라 모델 - 기밀 정보에 대한 데미터 기밀성 및 통제된 액세스에 초점을 맞춘 모델로, 서브젝트와 오브젝트로 구분된다. 이 모델은 State-Machine의 개념을 기반으로 만들어졌으며, 컴퓨터 시스템에서 허용 가능한 상태 세트를 가지며 한 상태에서 다른 상태로 전환은 전환 기능에 의해서 정의된다. 이 모델은 두 개의 MAC 규칙을 정의한다. Simple Security Property : 더 높은 보안 수준의 개체를 읽을 수 없다. (No Read-Up) Star Secuirty Property : 낮은 보안 수준의 개체에 쓸 수 없다. (No Write-Down) 만약, 기밀, 비밀, 공개로 세 상태를 분류한다면 다음과 같다. 비밀 취급자는 자신의 상태보다 높은 기밀 파일과 자신의 상태와 동급인 비밀 파일을 만들 수 있으나, 공개 파일을 만들 수는 없으며, 비밀과 공개파일은 읽을 수 있으나 기밀 파일을 읽을 수는 없다. 한계점으로는 무결성을 파괴할 수 있다는 점이다. (낮은 레벨의 인가자가 상위 레벨의 문서를 변경가능하기 때문에) 2. 비바 모델 - 데이터의 무결성을 보장하기 위해 설계된 접근 제어 규칙을 작성하는 모델 델 라파둘라 모델("read down, write up")과 대조적으로 "read up, write down" 형식이며, 자신의 상태 이하의 파일을 만들 수 있으며, 자신의 상태 이상의 파일을 읽을 수 있다.따라서, 벨 라파둘라 모델과 다른 아래와 같은 규칙을 갖는다. Simple Security Property : 더 낮은 보안 수준의 개체를 읽을 수 없다. (No Read-Down) Star Secuirty Property : 높은 보안 수준의 개체에 쓸 수 없다. (No Write-Up) 이 두 모델은 처음 알게된 모델인데 벨 라파둘라 모델의 무결성 문제 때문에 비바모델이 나온 것으로 학습하였는데 사실 비바모델도 자기보다 높은 수준의 파일을 읽다보니 이것도 보안의 문제가 되지않나 궁금해지더라구요. 제로님의 생각은 어떠신지 궁금합니다! 3. 웹 브라우져에서 사용하는 쿠키는 WAS 에 유용한 정보를 제공합니다. 만약 쿠키가 3자에 노출되었을때 발생하는 문제점을 생각해보세요. 만약, 인증쪽에 쿠키를 사용하게 된다면 쿠키 스니핑과 같은 공격에 취약해질 수 있습니다. 이 쿠키정보를 토대로 로그인을 시도할 수 있는 문제도 발생한다고 생각합니다. 더 나아가 개인정보 침해의 문제가 있는데 사용자 이메일이나 브라우저 고유값 등과 같은 값이 포함되는 문제일 경우 이 사용자가 어떤 사이트를 접속했는지 그리고 접속한 사이트를 추정하여 연령대 및 성별 식별까지 가능하다고 생각합니다. 따라서, 개인정보보호를 위해서는 쿠키에 저장될 값은 최소화해야하며 개인정보나 그런 값들이 존재할 경우에는 난독화 혹은 https를 통해 모든 통신이 암호화되게끔 해야될 것 같습니다.