묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
분산락 관련 질문입니다.
안녕하세요 좋은 강의 감사드립니다.이전까지 알아보았던 락들은 분산락이 아닌 것인가요?만약 아닌 것이라면 다중 서버 환경에서 동시성 문제를 해결하기 위해서는 위의 방법들이 아닌 분산락을 사용하여야 하는 것인지 궁금합니다. 추가로 동시성 관련 질문이 하나 있습니다.다중 서버 환경에서 게시판 등에서 조회수 기능을 동시성 문제 없이 해결하고 싶으며, 다음과 같이 구현하고자 합니다.(조회수라 어느정도 누락되어도 상관 없다고 하실 수 있겠지만, 목표는 하나도 누락되지 않게 하는 것입니다!)조회 요청이 들어오면 레디스에 조회수 증가분을 올린 이후, 특정 시간마다 배치처리를 통해 반영하고자 합니다.이때 다음 두 의문점이 있습니다.먼저 다중 서버 환경에서 레디스 증가분을 올리는 경우, 이 경우에도 동시성 문제가 발생할 수 있을 것 같습니다. 이를 해결하기 위해서는 이곳에도 분산락을 걸거나 increment()를 사용하여 동기적으로 처리해야 할 거 같은데 저의 생각이 맞는 것인지, 맞다면 다른 방법은 없는지 궁금합니다.두번째는 레디스 조회수 증가분을 배치처리를 통해 반영시키는 경우, 해당 작업 사이에 조회수 증가가 되어버리면 해당 증가분은 누락될 것 같습니다. 이를 해결하기 위해서는 배치처리를 할 때 레디스에 Lock을 걸어야 할 것 같습니다. 그런데 그렇게 된다면, 배치처리가 진행되는 그 순간동안은 레디스가 블로킹되어 있기에 게시글 조회가 이루어지지 않을 것 같습니다. 이정도는 감수하고 사용하거나, 혹은 카프카 등을 활용하여 이벤트로 처리하는 방법도 있을 것 같은데, 이러한 방법이 모두 사용 가능한 것인지, 더 나은 방법은 없는지 궁금합니다. 너무 많은 질문을 하는 것 같아 죄송합니다. 좋은 강의 정말 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 매핑 분석
회원과 주문에서 일대다, 다대일의 양방향 관계라고 하셨는데 일대다, 다대일이 다른 말인가요??아니면 M:N관계라는 뜻인가요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
npx sequelize db:create 시 connection 경로 질문
npx sequelize db:create를 해서 데이터베이스를 설치하면은 그 뒤로 workbench에서 새로 connection을 생성하면 그 데이터베이스가 새로 만든 connection에도 그대로 들어있는데 왜 그런것인가요?제가 mysql의 동작방식을 잘몰라서 이해가안되는거 같습니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
배포시 SSR 문제
안녕하세요? next.js 개발 이후 배포중에 있습니다.소스코드 내부에 getServersideProps 가 거의 대부분 페이지에 들어가있습니다.EC2 인스턴스 2개 (front, back) 에 각각 소스코드 git clone 완료 후 백엔드에서는 정상적으로 서버가 동작합니다. (express, mysql, graphql) 그런데 프론트에서 npm run build가 안되는데(동일한 소스코드로 로컬에서 빌드 시 문제없이 빌드 가능)이게 EC2백엔드의 mysql 데이터베이스에 아무런 데이터가 없어서 빌드가 안되는건가요 ? (get server side props 문제)
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
안녕하세요 좋은 코드를 어디서 찾을 수 있을까요?
안녕하세요 선생님.우리를 위한 프로그래밍 정말 잘 보고 있습니다.다름이 아니라, 외국에서 짠 코드나 잘 만든 코드를 보면 좋다고 말씀을 해주셨는데요. 그런 코드들은 어디서 구하고 따라 쳐볼 수 있을까요?현재 우리를 위한 프로그래밍 level2를 보고 있는데, 여기서 배운 것들을 직접 따라 써볼 수 있는 깃헙같은 게 있을까요? 강의 내용도 정말 좋지만, 추가로 더 따라 써보고 싶어서 여쭤봅니다. ㅎㅎ
-
미해결파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1
get_dtype_counts 은 상위 버전에서는 사용할 수 없습니다.
해당 함수는 0.25 버전 이후 삭제 되었습니다..dtypes.value_counts() 함수를 사용해서 진행하세요https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.DataFrame.get_dtype_counts.html#pandas-dataframe-get-dtype-counts
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
서버에 관해서
유니티 이제 막 시작하려고 합니다. 저는 mmorpg 를 만드는게 꿈입니다. 광활한 오픈월드를 유니티로 만들고 싶습니다. 대략적으론 원신과 같은 3d mmorpg를 1인 개발로 만들고 싶습니다. 일단 다 만들 수 있다고 생각은 해요.근데 문제는 서버입니다. 이런 대규모 서버는.. 대체 어떤 서버를 사용하나요?AWS만 파면 되는걸까요? 유니티 멀티플레이 라는 게 있던데 그건 어떤지..아! 일단은 전세계가 아닌 '한국' 내에서만 서비스할 것입니다. 게임 자체의 퀄리티는 마인크래프트와 같은 크래프팅 게임이면서 폴리곤은 2 ~ 3배 더 많습니다.(일단 원신보다는 폴리곤이 더 적을 듯) 애초에 만드는게 가능한가요? 어떤 서버를 사용해야할까요? 선생님의 유니티 강의 전부 들으면 개발 가능할까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
mariadb를 order-service의 application.yml에 등록하고 실행이 안됩니다.
안녕하세요 강사님 강의 잘 듣고있습니다. 현재저는 windows 운영체제 환경입니다.제가 orders Microservice수정 - mariadb 강의 부분을 듣다가mariadb를 order-serviced의 application.yml에 설정하고application.yml의 mariadb관련 설정은 다음과 같습니다. ( 참고로 저는 3307포트 사용합니다.)datasource: url: jdbc:mariadb://localhost:3307/mydb driver-class-name: org.mariadb.jdbc.Driver username: root password: 123456이상태에서 order-service를 실행시키니까 다음과 같은 에러가 발생했습니다.java.sql.SQLInvalidAuthorizationSpecException: Could not connect to address=(host=localhost)(port=3307)(type=master) : (conn=3) Access denied for user 'root'@'localhost' (using password: YES)Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' 에러를 검색해보니까계정에 대한 접근 권한이 제대로 설정되지 않은 경우로 보였습니다.그래서 접근 권한을 변경해주려고 했습니다.기존에> show grants for root@localhost; ( show grants; ) 명령어를 입력하면 다음과 같았고> show grants for root@'%'; 명령어를 입력하면 다음과 같았습니다.그래서grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와grant all privileges on root.* to root@'%' identified by 'root'; 명령어를 입력해 보았다.(사실 에러를 해결하려고 권한을 주려고한건데.. identified by '비밀번호' 로 설정되는걸 몰랐습니다..) > grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어 입력후에> show grants; 확인하면 빨간줄이 추가 됐습니다. 그리고 password도 변경됐습니다.> grant all privileges on root.* to root@'%' identified by 'root'; 명령어 입력후> show grants for root@'%'; 빨간줄이 추가됐습니다. 그리고 password도 변경됐습니다.그리고 나서유레카 서버를 실행시키고주키퍼, 카프카 , 카프카커넥트 까지 실행시키고apigateway 실행, config-service 실행 user-service 실행한 후마지막으로 order-service를 실행시키니까 됩니다.그런데 문제는kafka 마지막 강의인 kafka를 활용한 데이터 동기화2 부분을 따라하는데즉, orderservice를 2개 실행시키고 db에 등록이 잘 되나 확인하는 과정에서주문 요청을 잘되는데db에 등록이 안됩니다... 심지어 order-service#1, order-service#2콘솔에 모두 번갈아가며 데이터가 들오는 것도 확인했습니다.하지만 mariadb 에는 데이터가 들어가지 않습니다.h2-console에서 확인한 mariadb와 명령프롬프트 창으로 킨 마리아db모두 데이터가 들어오지않습니다. 그러다가grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와grant all privileges on root.* to root@'%' identified by '123456';이렇게 한번 바꾸고 다시grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와grant all privileges on root.* to root@'%' identified by 'root';명령어를 치고 서버를 다시 실행시키니까 데이터가 아까 요청한게 전부 들어가 있습니다...(근데 사실 mariadb의 mydb에는 postman에서 요청한0eabbd2e-f8d3-448f-89c1-79642b7ea765 이런 형식의 userId가 없는데 어떻게 데이터가 들어갔는지 의문이네요) 걸리는게"my-source-connect", "my-sink-connect", "my-order-sink-connect"이 3가지를 post 요청으로 등록할 때"connection.password":root 가 아니라"connection.password":123456 이었습니다. (히스토리 확인해보니까 확실히 맞습니다.) 또한 my-order-sink-connect를 등록할 때는 mariadb는grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와grant all privileges on root.* to root@'%' identified by '123456';을 적용한 채로 커넥트를 등록한것 같았습니다.. (사실 계속 왔다갔다 해서 확실하지 않습니다.) 현재 기존에 order-service의 application.yml에 mariadb를 등록하기 전에users/{userId} 으로 get 요청하는 것도"orders": []현재 orders의 정보가 나오지 않는 상황입니다.. 결론은 현상황을 어떻게 해결해야할지 모르겠습니다..일단 처음에러를 잘 대처한거부터가 맞는건지 모르겠습니다..현상황을 해결할 수 있는 방법이 있는지아니면 처음 에러가 발생했을 때 어떻게 해결을 해야할지 알려주시면 감사하겠습니다..긴글 읽어주셔서 감사합니다.. 마지막으로 현재 order-service의 jpa, datasource 관련 application.yml 설정은 다음과 같습니다. jpa: hibernate: ddl-auto: update # 변경된 내용이 있을 경우에만 업데이트 show-sql: true generate-ddl: true datasource: url: jdbc:mariadb://localhost:3307/mydb driver-class-name: org.mariadb.jdbc.Driver username: root password: root
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
질문이 하나 있습니다~
에러 json으로 보내실 때try 문에서 if(!id) return res.status(400).json({}) 으로 보내는 것과throw new Error('') 로 보낸 뒤 catch에서 res.json하는게 좀 다를까요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
elapsedTick 의 부등호 방향
const int WAIT_TICK = 1000 / 30if(currentTick - lastTick < WAIT_TICK)continue;에서 부등호의 방향이 반대가 되어야지 강의에서 의도한 의미가 되는것이 아닌가요?흐른 시간이 1/30 초가 될때마다 contiue 되어서화면이 갱신된다는 의미로 이해하는데. 그렇게 되려면if(currentTick - lastTick > WAIT_TICK)continue;이 되어야 하는것이 아닌지요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@transactional 테스트케이스
@transactional 이 db를 다시 삭제한다기보다는 아예 반영을 안한다는 거라고 하셨는데, 그러면 테스트를 진행할 때, db 와 연결하는 코드, db값을 보는 코드 등이 있는데 db 에서 값을 가져와서 값이 일치하는지 알려면 db 에 값이 저장이 되어야 하는데, 이런 부분들은 아예 반영 없이 , 저장 없이 어떻게 테스트를 하는 건가요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
GIT Repository에 접근은 가능한가요?
영상에 나온대로 계정도 만들고 댓글도 남겼습니다만...https://github.com/joshua1988/vue-intermediate 에 접속해봐도 404에러만 나오네요.혹시 URL이 변경된건지... 제가 놓친게 있는건지 잘 모르겠습니다.GITHUB: boolpae@gmail.com인프런: boolpae@naver.com 입니다.
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
이미지가 안나옵니다..
상품 업로드 창에서 정보들 입력하고상품 등록 하고 가면 이렇게 이미지가 안 뜹니다코드들을 다 선생님이 허브에 올려주신 걸로 바꿔서도 해봤는데 안됩니다 ㅠ 뭐가 잘못된 걸까요제가 다른 게 뭔가 비교 해봤을 때는 서버 터미널 창에 나오는 경로가'upload/~~''upload//~~' 이렇게 가는 거또 dbbrowersql에서 경로가 /가 아닌 원화 표시로 나오는 거이거 2개입니다.
-
미해결초보를 위한 도커 안내서
도커 사용 관련
안녕하세요~Front : next.js / apollo clinet(graphql)Back API : express / apollo server / graphql / mysql현재 위와 같이 개발중에 있고, 도커를 이용해서 aws EC2 서버에 배포를 하려고 합니다. 설명해주신 개념으로 보면, front와 back를 도커를 이용하여 컨테이너를 각각 하나씩 생성해서 aws EC2 가상인스턴스에 업로드를 하는개념인건가요 ?
-
미해결자바스크립트 중고급: 엔진 핵심
[[Scope]] 와 [[Environment]]는 같은 개념인가요
ES6 스펙을 보면 Function 오브젝트의 내부 프로퍼티에 [[Scope]] 는 없고 , 대신 [[Environment]] 가 있던데, ES6로 오면서 개념이 바뀐 것인지 궁금합니다.
-
미해결Node.js로 웹 크롤링하기
로그인 오류
브라우저 또는 앱이 안전하지 않을 수 있습니다. 라고 뜨며 다음 버튼이 클릭되지 않습니다. 해결방법이 있을까요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SendBufferRef에 대하여 질문 있습니다.
안녕하세요 루키스님이번 SendBuffer 강의를 들으면서 궁금한 것이 생겨 질문 드립니다.SendBuffer에 자기 자신에 대한 스마트 포인터를 갖도록 해주어 Reference Counting을 해주었는데, 이번 강의의 코드를 복습하면서 분석하다 보니 '왜 SendBuffer에 RefCounting이 필요한가?' 에 대한 의문이 생겼습니다. 일단 제가 이해한 Send의 흐름은 다음과 같습니다.GameSession에서 SendBuffer를 생성하여 원하는 데이터를 복사하여 Send를 호출하면 SendQueue에 일단 Push하여 데이터를 쌓아 놓습니다.그 때 어떠한 쓰레드에서도 그 세션에 대한 RegisterSend를 수행하고 있지 않다면 해당 쓰레드가 RegisterSend를 수행하는데 이때까지 쌓인 데이터를 SendEvent의 버퍼에 담아 WSASend를 수행합니다.그런 다음 IocpCore에서 완료 통지를 받으면 Worker 쓰레드가 Dispatch를 수행하여 ProcessSend를 수행하면서 이 때 SendQueue에 데이터가 더 있다면 그 쓰레드가 RegisterSend를 수행합니다.위의 흐름이 제가 이해한 내용인데 결국 한번에 하나의 RegisterSend가 진행되도록 하는 것이 핵심이며 한 번에 하나만 실행하기 때문에 SendEvent도 재 사용 가능한 것이라고 생각합니다. 그렇다면 이 세션에 대한 SendEvent는 Send되고 있는 동안에는 멀티쓰레드 환경에서 안전하다고 생각 되는데 그렇다면 SendEvent에 담긴 SendBuffer도 안전하여 사라질 걱정을 하지 않아도 되는 것 아닐까 싶습니다.즉, WSASend를 한 번에 하나의 쓰레드만 수행하기 때문에 SendEvent도 재 사용이 가능하고 그 속에 담긴 SendBuffer도 멀티쓰레드 환경으로부터 안전하기 때문에 SendBuffer의 RefCounting이 왜 필요한 것인지 궁금합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
Post model에 대해 질문드립니다.
만약 게시글 주제가 여러 개인 경우에는 Post를 나눠야 하나요?예를 들어, 연예인이라는 큰 Post가 있고, 하위 Post로 bts, 블랙핑크, 트와이스 등과 관련된 게시글들이 있다고 가정하면1. 연예인이라는 하나의 Post에 하위 Post를 category로 분류하는 것이 좋을까요2. 아니면 하위 Post를 개별적인 스키마로 만드는 것이 좋을까요?
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
볼륨마운트가 제대로 수행이 안됩니다.
# volume mount :: docker run -v {host path}:{container path}:{permission ro 읽기전용, rw 읽기 및 쓰기} root@ip-10-192-147-31:/var/www># docker run -d -p 8000:80 -v /var/www:/usr/share/nginx/html:ro nginx a028accb69bf2cfc604a36f76e3aa85ee98d2247869c909519026bae7a5a1863 # 마운트 시켜놓은 /var/www 경로에 아무것도 없어서 403 에러가 발생함 root@ip-10-192-147-31:/var/www># curl localhost:8000 <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.23.1</center> </body> </html> * Connection #0 to host localhost left intact # index.html 파일 생성 root@ip-10-192-147-31:/var/www># echo test1234 > index.html root@ip-10-192-147-31:/root># ls -al /var/www/ 합계 4 drwxr-x--- 2 root root 24 9월 2 18:04 . drwxr-xr-x 21 root root 293 9월 2 17:47 .. -rwxrwxrwx 1 root root 9 9월 2 18:04 index.html안녕하세요~ 호스트의 볼륨을 컨테이너에 마운트해주는 실습중 궁금한 점이 생겼습니다.여기까지 해주고, localhost:8000 으로 접속하면 test1234 가 정상적으로 떠야할 거서 같은데요# ...? 왜 안보이지 root@ip-10-192-147-31:/var/www># curl -v localhost:8000 * Trying 127.0.0.1:8000... * Connected to localhost (127.0.0.1) port 8000 (#0) > GET / HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.79.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 403 Forbidden < Server: nginx/1.23.1 < Date: Fri, 02 Sep 2022 09:04:36 GMT < Content-Type: text/html < Content-Length: 153 < Connection: keep-alive < <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.23.1</center> </body> </html> * Connection #0 to host localhost left intact # 컨테이너 안에 들어가면, 볼륨 마운트는 잘 되어 있음 root@b7819c1de150:/usr/share/nginx/html# cat index.html test1234뜨지 않습니다 ㅠㅠ 원인이 무엇일까요?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
Travis CI 무료플랜 제한으로 강의 수강에 제약이 습니다.
Travis CI 무료플랜 제한으로 Github 연동과 사용에 제약이 있으며 남은 강의 과목에서 Travis CI에 대해 관련있는 부분들이 많습니다.커리큘럼에 따른 강의를 들으며 제약이 상당히 있을것 같습니다만 이를 위해 어떻게 처리하면 좋을지 피드백 부탁드립니다.