묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock 질문입니다.
저는 한쪽에만 lock을 걸으면 어떻게 될까? 라는 생각을 가지고 Thread_1에는 lock을 걸고, Thread_2에는 lock을 걸지 않았습니다. Thread_2에서는 lock을 걸지 않아서 lock의 영향을 받지 않기 때문에 Thread_1에서 작업중인 number에 접근할 수 있고, Thread_1에서도 Thread_2에서 작업중인 number에 접근할 수 있어서 난수가 나올 것이라고 예상했습니다. 하지만 몇번을 돌려봐도 결과는 난수가 아닌 0이 나왔습니다. 그리고 질문들을 살펴보다 보니 새로운 object _obj2를 만들어서 Thread_2에 lock을 했을 때는 난수가 나온다는 것을 알았습니다. 서로 다른 object를 통해 lock을 하면 난수가 나온다는 것은 이해했고 이게 제가 예상했던 결과인데, 한쪽에만 lock을 걸었을 경우에는 왜 0이 나오는지 잘 모르겠습니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
배포에서 에러가 발생합니다.
강의에 나오는 모든 과정을 따라하고 나니, travis ci 는 성공하였는데 elastic beanstalk 에서 다음과 같은 에러가 나오면서 주소로 들어가보면 502 상태입니다.Environment health has transitioned from Info to Severe. ELB processes are not healthy on all instances. Application update completed 65 seconds ago and took 4 minutes. ELB health is failing or not available for all instances. 그래서 올려주신 코드와의 차이를 보니, 지금까지 만든 docker-compose.yml 파일이 강사님의 코드에는 docker-compose-dev.yml이 되어있고, docker-compose.yml 에는 다음과 같은 코드가 들어가있네요. version: "3" services: react: build: context: . dockerfile: Dockerfile ports: - '80:80' volumes: - /usr/src/app/node_modules - ./:/usr/src/app stdin_open: true 여태까지 만든건 개발용인거 같은데 둘중 어떤걸 사용하는게 맞는건가요?그리고 docker-compose.yml은 docker-compose up으로 실행이 가능했는데,docker-compose-dev.yml은 어떻게 실행하나요?
-
해결됨[기초-응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant)
windows2012r2 구성관련
안녕하세요 강의를 잘보고있습니다!windows를 vagrant를 이용해서 구성하려고하니 403오류가 발생하여(opentable/win-2012r2-standard-amd64-nocm) 다음 vagrant box를 가지고 진행하였습니다. (devopsgroup-io/windows_server-2012r2-standard-amd64-nocm) 그랬더니 ip가 제가 할당하지않은 ip가 자동으로 할당되며 방화벽도 해제되지 않는것을 확인하였습니다 오류는 다음과같이 timeout이 발생하였습니다. ==> ansible-node05: Waiting for machine to boot. This may take a few minutes... ansible-node05: SSH address: 127.0.0.1:19215 ansible-node05: SSH username: vagrant Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value. 제가 실수한 부분이있는지 궁금합니다! 감사합니다!
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
네이버 header_parms
안녕하세요! 패턴으로 실습하며 익히기: 네이버 Open API로 크롤링하기 부분 6:40초에서 질의드립니다! naver_open_api = "https://openapi.naver.com/v1/search/shop.json?query=갤럭시노트10" header_params = ("X-Naver-Client-id":client_id, "X-Naver-Client-Secret":client_secret) res = requests.get(naver_open_api, headers=header_params) 위 코드 부분에서 requests.get 파라미터에 naver_open_api 이부분은 그대로 변수를 넣으셨는데, headers=header_params 이부분은 왜 headers에 다시 넣어주는지 궁금합니다! header_params = ("X-Naver-Client-id":client_id, "X-Naver-Client-Secret":client_secret) 여기 변수를 headers로 지정하면 되지 않을까 해서 시도해보았는데 에러가 나오더라구요.. 왜 그럴까요?
-
미해결청소년을 위한 로블록스 개발 첫걸음
제 다리는 에러가..
local bridge = game.Workspace.BridgePart local touchPart = script.Parent function showBridge() bridge.CanCollide = true bridge.Transparency = 0 wait(5) bridge.CanCollide = false bridge.Transparency = 1 end touchPart.Touched:Connect(showBridge) 로 계속 보고 따라 하고 있는데 플레이를 할 때 다리가 터치를 하기 전에 이미 생성이 되어 있네요 ㅜㅜ 뭐가 문제일까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
시퀄라이즈 여러 쿼리 보내기, Promise async await 개념
안녕하세요. 항상 강의 보면서 도움 많이 받고 있습니다. 프론트에서 체크박스로 제품을 열람가능한 유저를 선택해서 DB에서 기존 데이터를 삭제하고 체크한 유저를 다시 추가해주는 식으로 제품열람가능 유저를 업데이트 하려고 하는데요 제품모델과 유저 모델은 Item.associate = (db) => { // 릴레이션(관계) 정의 db.Item.belongsTo(db.User); // 제품 등록한 유저 db.Item.belongsToMany(db.User, { through: 'ItemUsers', as: 'ItemViewUsers'}); // 제품 노출할 유저 }; .................. User.associate = (db) => { // 릴레이션(관계) 정의 db.User.belongsToMany(db.User, { through: 'UsersRelation', as: 'Providers', foreignKey: 'customerId' }); // 판매자-구매자 관계 db.User.belongsToMany(db.User, { through: 'UsersRelation', as: 'Customers', foreignKey: 'providerId' }); // 판매자-구매자 관계 db.User.belongsToMany(db.Item, { through: 'ItemUsers', as: 'UserViewItems' }); // 열람가능한 제품 }; 이런식입니다. 프론트는 Form과 Checkbox로 단일 ItemId와 UserId 배열을 보내주고 백에서 req.body로 받는 데이터는 { id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } } 이런식으로 받습니다. // 제품에 열람가능한 고객 등록 router.post('/add-customer', isLoggedIn, async (req, res, next) => { try { console.log('고객등록 req.body',req.body); console.log(req.user.id) const item = await Item.findOne({ where: { id: req.body.id} }); if (!item) { return res.status(404).send('해당 제품이 존재하지 않습니다.'); } if (item.UserId !== req.user.id) { return res.status(404).send('권한이 없습니다.'); } const itemViewUsers = await item.getItemViewUsers(); //제품 열람가능한 유저 전부 제거 if (itemViewUsers) { await Promise.all( itemViewUsers.map( customer => { console.log('\x1b[36m 유저 제거 시도', customer.id); item.removeItemViewUsers(customer.id); }) ); } // 제품 열람가능한 유저 추가 (체크박스로 체크된) if(req.body.values.customerIds){ await Promise.all( req.body.values.customerIds.map( customerId => { console.log('\x1B[31m 유저 추가 시도', customerId); const user = User.findOne({ where: { id: customerId }}) if (!user){ return res.status(404).send('해당 유저가 존재하지 않습니다.'); } item.addItemViewUsers(customerId); }) ); } res.status(200).json(item); } catch (error) { console.error(error); next(error); // status 500 } }); 유저 tttt가 이미 등록된 상태에서 유저 tttt, ttt3 를 선택해서 등록하면 DB에는 ttt3만 등록된 결과가 나옵니다... 실제 INSERT 문도 하나만 실행되네요. 항상 이런건 아니고 될때도 있습니다. 비동기 부분이 꼬여서 그런것같은데 제가 promise 개념이 약해서 어떤식으로 해결할 수 있을지 궁금합니다. Promise, async, await 부분은 제로초님 강의 꼭 다시 보겠습니다. 백엔드 로그는 이러합니다. 고객등록 req.body { id: '1', values: { customerIds: [ 'tttt', 'ttt3' ] } } tester1 Executing (default): SELECT `id`, `codeName`, `name`, `packageName`, `unit`, `msrp`, `supplyPrice`, `imgSrc`, `createdAt`, `updatedAt`, `UserId` FROM `Items` AS `Item` WHERE `Item`.`id` = '1'; Executing (default): SELECT `User`.`id`, `User`.`password`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `ItemUsers`.`createdAt` AS `ItemUsers.createdAt`, `ItemUsers`.`updatedAt` AS `ItemUsers.updatedAt`, `ItemUsers`.`ItemId` AS `ItemUsers.ItemId`, `ItemUsers`.`UserId` AS `ItemUsers.UserId` FROM `Users` AS `User` INNER JOIN `ItemUsers` AS `ItemUsers` ON `User`.`id` = `ItemUsers`.`UserId` AND `ItemUsers`.`ItemId` = 1; 유저 제거 시도 tttt 유저 추가 시도 tttt 유저 추가 시도 ttt3 Executing (default): DELETE FROM `ItemUsers` WHERE `ItemId` = 1 AND `UserId` IN ('tttt') Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tttt'; Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('tttt'); POST /item/add-customer/ 200 9.485 ms - 236 Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'ttt3'; Executing (default): SELECT `createdAt`, `updatedAt`, `ItemId`, `UserId` FROM `ItemUsers` AS `ItemUsers` WHERE `ItemUsers`.`ItemId` = 1 AND `ItemUsers`.`UserId` IN ('ttt3'); Executing (default): INSERT INTO `ItemUsers` (`createdAt`,`updatedAt`,`ItemId`,`UserId`) VALUES ('2021-12-22 05:56:16','2021-12-22 05:56:16',1,'ttt3'); Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1'; Executing (default): SELECT `User`.`id`, `User`.`company`, `User`.`name`, `User`.`phone`, `User`.`email`, `User`.`role`, `User`.`createdAt`, `User`.`updatedAt`, `Customers`.`id` AS `Customers.id`, `Customers`.`company` AS `Customers.company`, `Customers`.`name` AS `Customers.name`, `Customers->UsersRelation`.`createdAt` AS `Customers.UsersRelation.createdAt`, `Customers->UsersRelation`.`updatedAt` AS `Customers.UsersRelation.updatedAt`, `Customers->UsersRelation`.`customerId` AS `Customers.UsersRelation.customerId`, `Customers->UsersRelation`.`providerId` AS `Customers.UsersRelation.providerId` FROM `Users` AS `User` LEFT OUTER JOIN ( `UsersRelation` AS `Customers->UsersRelation` INNER JOIN `Users` AS `Customers` ON `Customers`.`id` = `Customers->UsersRelation`.`customerId`) ON `User`.`id` = `Customers->UsersRelation`.`providerId` WHERE `User`.`id` = 'tester1'; Executing (default): SELECT `id`, `password`, `company`, `name`, `phone`, `email`, `role`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'tester1'
-
미해결스프링 핵심 원리 - 기본편
싱글톤 방식의 주의점 강의의 질문입니다.
강의를 듣고 스프링 프레임워크에 의하여 생성되든 사용자가 Java 코드를 이용해 생성하든 Singleton 방식으로 구현된 객체는 1개의 객체가 여러 곳에서 재사용하기 때문에 무상태(stateless) 형태로 설계해야 한다는 것을 잘 알게 되었습니다. 강의에서도 예시를 들어주시면서 Class 내 Member 변수가 아닌 Method 내 지역 변수로만 값을 핸들링하며 return 시켜주시며 무상태(stateless)의 적절한 구현방법을 설명해주셨는데요. 한가지 의문이 들었습니다. 만약 Singleton 객체 내부에 선언된 공유 가능한 변수(강의 내에서는 Class의 Member 변수)에 상태값이 남을 수 있다면 함수도 Singleton 형태로 사용되는 것인가요? 만약 객체의 무상태(stateless)만 신경쓰고 개발하다가 아주 짧은 시간 내에 Singleton 객체 내부에 있는 A라는 함수에 동시다발적으로 호출이 몰리게 되면 A 함수 내부에 선언된 지역변수도 공유될 가능성이 존재하는 것인가요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
혹시 [참고] 붙은 환결설정 ppt 교육자료 공유 가능할까요>?
안녕하세요 유익한 강의로 많은 도움 받고 있습니다. 혹시 [참고] 붙은 환경설정 가이드 ppt 파일 공유 가능할지 문의드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
To display the conditions report re-run your application with 'debug' enabled 해결방안
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. run -> edit configuration 으로 들어가서 해봤는데, 잘모르겠어 질문 들립니다... 해결방안 부탁드립니다.
-
미해결반드시 알고 넘어가야 할 웹 기술 기초편
url 인코딩
마지막 예시에서 공백은 url인코딩으로 바뀌지 않아도 되나요?
-
미해결대세는 쿠버네티스 (초급~중급편)
노드 Overcommit상태에서 QoS 대신 Priority를 사용하여 우선순위 선점가능여부 문의드립니다.
Node의 자원이 Overcommit 상태에서도 중요한 Pod들에 대해 우선순위를 가져가고 싶은데 QoS Guaranteed를 사용하려면 노드의 자원을 효율적으로 사용하지 못한다는 단점이있는 것 같습니다. Burstable로 사용하여 자원은 효율적으로 사용하면서 Node의 자원이 Overcommit 상태에서도 중요한 Pod들에 대해 우선순위를 가져가려면 Priorityclass를 생성하여 사용하면 될지 문의드립니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤의 DIP 위반
다른 질문들에서 해답을 찾지 못해 질문을 올립니다. AppConfig의 memberService()에서 return new MemberServiceImpl(memberRepository()); 대신에 return new MemberServiceImpl.getInstance();로 사용하는 것은 클라이언트가 구현체(싱글톤객체)에 의존하게 되므로 DIP가 위배된다 라는 것이 강의의 내용인데요..AppConfig와 같은 구성에 사용되는 클래스는 어쩔 수 없이 구현체에 의존을 해야만 하는 것 아니었나요?실제로 싱글톤 사용 전인return new MemberServiceImpl(memberRepository());방식에서도 MemberServiceImpl이라는 구현체를 의존하고 있었고 이전까지의 내용에서는 이를 두고 DIP를 위반한다고 보지는 않았던 거 같은데 말이죠.오랜만에 공부하려니 쉽지가 않네요.. 답변 부탁드립니다 ㅠ ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ ( 자답 )혹시 아래 내용이 맞는지 확인 부탁드립니다. 싱글톤 반영 전에는 AppConfig에서 return new MemberServiceImpl(memberRepository());를 통해 MemberRepository의 구현체까지 AppConfig 내부에서 모두 결정됨. 즉, 클라이언트 (MemberServiceImpl) 가 MemberRepository의 구현체에 의존하지 않음 -> DIP 충족인 것이고,싱글톤 반영 후 AppConfig에서 return MemberServiceImpl.getInstance()할 경우 클라이언트 (MemberServiceImpl)의 내부 코드에서 다시 MemoryMemberRepository.getInstance() 를 호출해야한다.즉, 클라이언트가 구현체에 의존하게 된다.-> DIP 위반 제가 너무 AppConfig 안에서만 생각해서 인지부조화가 발생한 것 같은데.. 이렇게 받아들이는게 맞을까요?
-
해결됨실전! 스프링 데이터 JPA
findTopN.... 에서 N의 상한점 및 DB에 걸린 SELECT 쿼리 조회 건수 제약이 있을때의 동작 방식이 궁금합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 학습 중 궁금한 내용이 생겨서 질문드립니다. JpaRepository를 구현한 뒤 규칙에 맞게 메서드 쿼리를 작성하는 것으로 간단하게 해당 Entity에 대한 SQL쿼리를 수행하는 메서드를 만들 수 있다고 알고 있습니다. 1. 혹시 findTopN... 형태의 메서드에서 N의 상한점이 있을까요? 예를 들면 findTop1000000... 이런식으로 작성해도 문제가 없는지 궁금합니다. 2. (1번 예시에서 이어서)한번에 100만건을 가져오는 건데 한번의 쿼리로 작성한 대로 100만건을 읽어와서 List형태로 받을 수 있을까요? 아니면 뭔가의 설정이나 기준으로 인해 알아서 N개씩 분할해서 여러번의 쿼리가 호출되는지가 궁금합니다. 3. 1번 예시에서 이어서)DB 자체에 제약을 걸어 SELECT문 조회시 최대K건의 데이터만 조회되도록 설정해놓은 상태에서는 어떻게 동작하는지 궁금합니다. 예를 들면 500건의 데이터만 조회되도록 DB자체에 설정을 걸어놓고 findTop5000.. 식의 쿼리를 쓴다면 SELECT 쿼리가 5000/500 = 10, 즉 10번의 쿼리가 호출되는지, 아니면 메서드 쿼리의 설정이 우선시 되어 5000건을 한 번에 읽어올지 궁금합니다. 위의 예시의 경우, 결국 EntityManager에 의해 SQL이 호출되는 것이기 때문에 DB 자체에 걸린 제약이 우선시되어 findTop5000... 을 호출했지만 한 번의 호출로 인해 500건밖에 가져오지 못할 것 같습니다. 이 경우에 나머지 4500건을 알아서 추가로 호출해올까요?... 감사합니다.
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
지도학습 프로세스 및 데이터 처리 관련 질문
안녕하세요? 강의를 들으면서 공부하다가 조금 개념이 덜 잡혀서 질문드립니다. 머신러닝 지도학습 프로세스: 데이터 전처리 -> 데이터세트분리 -> 모델학습 및 검증평가 -> 예측수행 -> 평가 질문사항 1) 여기서 교차검증은 데이터세트분리 후에 모델학습을 하면서 한다고 생각하면 되는건가요? 아니면 모델학습 후 검증평가 단계에서 한다고 생각하면 되는건가요? 2) p.242(사이킷런 래퍼 XGBoost)에서 평가를 위한 데이터 세트로 테스트 데이터 세트를 사용했다고 써있습니다. 데이터 세트 분리에서 train data set + test data set로 분리되는데, train data set로 모델학습 및 검증평가(교차검증 포함)을 수행하고선 test data set로 예측 수행하고선 그 예측 결과를 평가 하는게 프로세스가 전부하고 생각하는데요. 책의 내용(p.242)을 보면서 제가 무엇을 잘못 생각하고 있는 것 같아서 질문 드립니다.
-
미해결실전! 스프링 데이터 JPA
JpaRepository의 Query Method 파싱 및 동작을 담당하는 클래스 및 인터페이스가 궁금합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 학습 중 다음과 같은 궁금함이 생겨서 질문드립니다. public interface CustomerJpaRepository implements JpaRepository<Customer, Long>{ public Customer findByName(); } 위와 같은 코드를 작성하면 findByName()이라는 메서드 이름을 파싱해서 규칙에 맞게 SQL 쿼리를 생성하고 해당 메서드를 호출 시 SQL 쿼리를 수행하는것으로 이해하고 있습니다. 혹시 저 메서드 명을 파싱해서 실제로 Query객체를 만들어 수행하는 부분의 코드는 어디서 확인할 수 있을까요? 연관된 클래스 또는 실제 동작 부분의 로직이 작성된 코드를 확인해보고 싶습니다. 감사합니다.
-
미해결리눅스 입문 - 개념으로 탄탄히!!
터미널
안녕하세요 터미널하고 명령프로프트(cmd)는 같은 것인가요? 그리고 윈도우용 터미널을 설치를 별도로 할수 있는것 같은데 이것은 기본 터미널에 UI기능이 업데이트 된거라고 생각하면 되나요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
cluster 설정 관련문의
안녕하세요 cm 들어가서 .... cluster1이 이미 존재한다고 하고 cluster 2로 하니... 설정가능한 호스트 탭창이 보이지 않습니다. 어떻게 해야할까요...
-
미해결홍정모의 따라하며 배우는 C언어
int형으로 문자를 받으면 안되나요 ??
%c로 q를 받으면 내부적으로 123이 저장되어 int형 메모리 c에 123이 저장되어 123으로 출력 되는 것이 아닌가요 이부분이 많이 헷갈리네요~~
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
minsdk 변경방법 문의 및 multiDexEnalbed true 입력시 에러 문의
인터넷에 minsdk를 바꾸는 방법이 안나와서 문의드립니다 implementation 'com.google.firebase:firebase-analytics'implementation 'com.google.firebase:firebase-core:16.0.7' 요 두줄을 추가하면 * What went wrong: Execution failed for task ':app:processDebugMainManifest'. > Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [com.google.firebase:firebase-core:20.0.2] C:\Users\dorid\.gradle\caches\transforms-2\files-2.1\e70af6b2db7455dac586f8e3d4851418\jetified-firebase-core-20.0.2\AndroidManifest.xml as the library might be using APIs not available in 16 Suggestion: use a compatible library with a minSdk of at most 16, or increase this project's minSdk version to at least 19, or use tools:overrideLibrary="com.google.firebase.firebase_core" to force usage (may lead to runtime failures) =>요론 minsdk를 변경하라는 에러가 뜹니다 파이어베이스가 가이드가 바뀌었는지 일단 맨 위에 두줄을 implentation안해도 에러는 안나는데 인터넷에 minsdk를 바꾸는 방법이 안나와서 문의드립니다 제가 찾아본건 아래 링크인데 local.properties를 변경해도 계속 똑같은 에러가 났습니다. https://stackoverflow.com/questions/52060516/how-to-change-android-minsdkversion-in-flutter-project 강의 진행에는 문제가 있는지 없는지 아직 모르지만 분명 나중에 minSdk 변경해야될 일이 있을것 같아 문의 드립니다. 추가적으로 multiDexEnalbed true 입력시 에러가 납니다 multiDexEnalbed true 입력시 에러> 위에가 잘 안되서 그런지 아래 그림처럼 verify도 안됩니다 ㅜㅜ
-
해결됨홍정모의 따라하며 배우는 C언어
3분 48초 부근 질문 있습니다.
16.6에서는 다른 파일에 있는 함수를 실행해서 주소를 비교할 때 함수는 선언할 때 default 값이 extern 이기 때문에 앞에 static이 없는 상태로 main.c에서 my_function.c에 있는 함수 print_address를 사용했는데요 이번 강의에서는 DifferentFile.h에 있는 different_func_in_different_file()를 사용할 때 앞에 static을 붙이시고 그것을 main.c에서 #include DifferentFile.h를 한 다음에 different_func_in_different_file()를 사용하고 있습니다. 이때 #include가 지금까지는 거의 복사, 붙여넣기 수준의 예제로 공부하고 있기 때문에 main.c에서 DifferentFile.h안에 사용된 static으로 정의된 함수를 #include DifferentFile.h로 가져온다면 결국은 main.c에서 static인 different_func_in_different_file()를 사용하는 것인데 어떻게 파일 이름이 다르게 나오는지 잘 이해가 가지 않습니다. static인 함수는 BSS에 저장이 되지만 다른 파일에서 불러올 때 그 파일에서만 visible하기 때문에 같은 이름으로 접근이 가능한 메모리가 BSS 메모리 공간에 하나 더 생기는 것으로 배웠고 16.6에서 주소가 다르게 나오는 것으로 확인할 수 있었는데요. 그렇다면 현재 Different_func_in_different_file()는 static으로 정의가 되어있기 때문에 DifferentFile.h에 있는 Different_func_in_different_file()에 접근하는 것이 아니라 main.c에서 #include에 의해서 복사, 붙여넣기 된 static인 different_func_in_different_file()에 접근을 하는 것이므로 DifferentFile.h 파일의 위치를 문자열로 나타내는 것이 아니라 main.c 파일의 위치를 문자열로 나타내야되는 것이 아닌가요? 제가 이해한 바로는 #include의 특성상 헤더파일의 함수가 static이냐 extern이냐에 따라서 함수의 결과값이 다르게 나올 것으로 예상이 되는데 어떤 이유로 static과 extern의 __FILE__의 값이 같게 나오는지 궁금합니다.