묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
짝남
짝남이 저를 쳐다보길래 저도 쳐다봤는데 쳐다보니까 고개를 돌려요. 그리고 저도 다시 고개를 돌리니까 저를 또 쳐다봐요 무슨 의미일까요?ㅠㅠ
-
미해결Practical Testing: 실용적인 테스트 가이드
@Transactional을 붙였을 때"만" Stock 감소 검증에 성공합니다
각 테스트 케이스들을 검증하고, 이에 대해 값을 비워주기 위해 두 가지 방식을 소개해주셨습니다.1) tearDown()을 사용해서 after each로 모두 날려주는 방식과2) 클래스 레벨에서 테스트 클래스에 @Transactional을 붙이는 방식 강의와 동일하게 "001" : 1000 : 2개, "002" : 3000 : 2개, "003" : 5000 가정 하에, "001", "001", "002", "003" 순으로 주문했다 하였습니다. 하지만, 문제는1)을 사용하였을 때는 아래와 같은 에러가 발생하구요, 2)을 사용했을 때는 테스트 케이스가 정상 검증 됩니다.[Extracted: productNumbeㅏr, quantity] Expecting actual: [("001", 2), ("002", 2)] to contain exactly in any order: [("001", 0), ("002", 1)] elements not found: [("001", 0), ("002", 1)] and elements not expected: [("001", 2), ("002", 2)] 올려주신 깃허브 코드 5-7 또한 참고해보았으며, 코드 복붙까지 시도했는데 AfterEach 방식에서만 검증 실패가 등장하네요// 보여주신 디버깅 방식 참조하여 디버깅도 해보았는데, 제 눈에는,,, 이상이 없었습니다... 미천한 디버깅 실력에 부끄러움만 앞서지만, 왜 트랜잭션 어노테이션에서만 검증 성공인지 의아합니다.혹시 답변 가능하시다면 부탁드립니다,,! 코드 첨부합니다.OrderServicepackage sample.cafekiosk.api.service.order; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import sample.cafekiosk.api.controller.order.OrderCreateRequest; import sample.cafekiosk.domain.order.Order; import sample.cafekiosk.domain.product.Product; import sample.cafekiosk.domain.product.ProductRepository; import sample.cafekiosk.domain.product.ProductType; import sample.cafekiosk.domain.stock.Stock; import sample.cafekiosk.domain.stock.StockRepository; import java.time.LocalDateTime; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class OrderService { // Product를 가져와야 하므로 의존 private final ProductRepository productRepository; private final OrderRepository orderRepository; private final StockRepository stockRepository; public OrderResponse createOrder(OrderCreateRequest request, LocalDateTime registeredDateTime) { List<String> productNumbers = request.getProductNumbers(); List<Product> products = findProductsBy(productNumbers); deductStockQuantities(products); Order order = Order.create(products, registeredDateTime); Order savedOrder = orderRepository.save(order); return OrderResponse.of(savedOrder); } private void deductStockQuantities(List<Product> products) { List<String> stockProductNumbers = extractStockProductNumbers(products); Map<String, Stock> stockMap = createStockMapBy(stockProductNumbers); Map<String, Long> productCountingMap = createCountingMapBy(stockProductNumbers); for (String stockProductNumber : new HashSet<>(stockProductNumbers)) { Stock stock = stockMap.get(stockProductNumber); int quantity = productCountingMap.get(stockProductNumber).intValue(); if (stock.isQuantityLessThan(quantity)) { throw new IllegalArgumentException("재고가 부족한 상품이 있습니다."); } stock.deductQuantity(quantity); } } private List<Product> findProductsBy(List<String> productNumbers) { List<Product> products = productRepository.findAllByProductNumberIn(productNumbers); Map<String, Product> productMap = products.stream() .collect(Collectors.toMap(Product::getProductNumber, p -> p)); return productNumbers.stream() .map(productMap::get) .collect(Collectors.toList()); } private static List<String> extractStockProductNumbers(List<Product> products) { return products.stream() .filter(product -> ProductType.containsStockType(product.getType())) .map(Product::getProductNumber) .collect(Collectors.toList()); } private Map<String, Stock> createStockMapBy(List<String> stockProductNumbers) { List<Stock> stocks = stockRepository.findAllByProductNumberIn(stockProductNumbers); return stocks.stream() .collect(Collectors.toMap(Stock::getProductNumber, s -> s)); } private static Map<String, Long> createCountingMapBy(List<String> stockProductNumbers) { return stockProductNumbers.stream() .collect(Collectors.groupingBy(p -> p, Collectors.counting())); } } OrderServiceTestpackage sample.cafekiosk.api.service.order; import jakarta.transaction.Transactional; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.web.bind.annotation.RestController; import sample.cafekiosk.api.controller.order.OrderCreateRequest; import sample.cafekiosk.domain.product.Product; import sample.cafekiosk.domain.product.ProductRepository; import sample.cafekiosk.domain.product.ProductSellingStatus; import sample.cafekiosk.domain.product.ProductType; import sample.cafekiosk.domain.stock.Stock; import sample.cafekiosk.domain.stock.StockRepository; import java.time.LocalDateTime; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import static org.junit.jupiter.api.Assertions.*; import static sample.cafekiosk.domain.product.ProductSellingStatus.SELLING; import static sample.cafekiosk.domain.product.ProductType.*; @ActiveProfiles("test") @SpringBootTest //@Transactional class OrderServiceTest { @Autowired private OrderService orderService; @Autowired private ProductRepository productRepository; @Autowired private OrderProductRepository orderProductRepository; @Autowired private OrderRepository orderRepository; @Autowired private StockRepository stockRepository; @AfterEach void tearDown() { orderProductRepository.deleteAllInBatch(); productRepository.deleteAllInBatch(); orderRepository.deleteAllInBatch(); stockRepository.deleteAllInBatch(); } @DisplayName("재고와 관련된 상품이 포함되어 있는 주문번호 리스트를 받아 주문을 생성한다.") @Test void createOrderWithStock() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); Product product1 = createProduct(BOTTLE, "001", 1000); Product product2 = createProduct(BAKERY, "002", 3000); Product product3 = createProduct(HANDMADE, "003", 5000); productRepository.saveAll(List.of(product1, product2, product3)); Stock stock1 = Stock.create("001", 2); Stock stock2 = Stock.create("002", 2); stockRepository.saveAll(List.of(stock1, stock2)); OrderCreateRequest request = OrderCreateRequest.builder() .productNumbers(List.of("001", "001", "002", "003")) .build(); // when OrderResponse orderResponse = orderService.createOrder(request, registeredDateTime); // then assertThat(orderResponse.getId()).isNotNull(); assertThat(orderResponse) .extracting("registeredDateTime", "totalPrice") .contains(registeredDateTime, 10000); assertThat(orderResponse.getProducts()).hasSize(4) .extracting("productNumber", "price") .containsExactlyInAnyOrder( tuple("001", 1000), tuple("001", 1000), tuple("002", 3000), tuple("003", 5000) ); List<Stock> stocks = stockRepository.findAll(); assertThat(stocks).hasSize(2) .extracting("productNumber", "quantity") .containsExactlyInAnyOrder( tuple("001", 0), tuple("002", 1) ); } @DisplayName("주문 번호리스트를 받아 주문을 생성한다.") @Test void createOrder() { // GIVEN LocalDateTime n = LocalDateTime.now(); Product product1 = createProduct(HANDMADE, "001", 1000); Product product2 = createProduct(HANDMADE, "002", 2000); Product product3 = createProduct(HANDMADE, "003", 3000); productRepository.saveAll(List.of(product1, product2, product3)); OrderCreateRequest request = OrderCreateRequest.builder() .productNumbers(List.of("001","002")) .build(); // WHEN OrderResponse orderResponse = orderService.createOrder(request,n ); // THEN assertThat(orderResponse.getId()).isNotNull(); assertThat(orderResponse) .extracting("registeredDateTime","totalPrice") .containsExactlyInAnyOrder(n,3000); assertThat(orderResponse.getProducts()).hasSize(2) .extracting("productNumber", "price") .containsExactlyInAnyOrder( tuple("001", 1000), tuple("002", 2000) ); } @DisplayName("중복되는 상품번호 리스트로 주문을 생성할 수 있다.") @Test void createOrderWiuthDuplicatedProductNumbers() { // GIVEN LocalDateTime n = LocalDateTime.now(); Product product1 = createProduct(HANDMADE, "001", 1000); Product product2 = createProduct(HANDMADE, "002", 2000); Product product3 = createProduct(HANDMADE, "003", 3000); productRepository.saveAll(List.of(product1, product2, product3)); OrderCreateRequest request = OrderCreateRequest.builder() .productNumbers(List.of("001","001")) .build(); // WHEN OrderResponse orderResponse = orderService.createOrder(request,n ); // THEN assertThat(orderResponse.getId()).isNotNull(); assertThat(orderResponse) .extracting("registeredDateTime","totalPrice") .containsExactlyInAnyOrder(n,2000); assertThat(orderResponse.getProducts()).hasSize(2) .extracting("productNumber", "price") .containsExactlyInAnyOrder( tuple("001", 1000), tuple("001", 1000) ); } private Product createProduct(ProductType type, String productNumber,int price) { return Product.builder() .productNumber(productNumber) .type(type) .sellingStatus(SELLING) .name("아메리카노") .price(price) .build(); } }Stockpackage sample.cafekiosk.domain.stock; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import sample.cafekiosk.domain.BaseEntity; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Stock extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; private String productNumber; private int quantity; @Builder public Stock(String productNumber, int quantity) { this.productNumber = productNumber; this.quantity = quantity; } public static Stock create(String s, int i) { return Stock.builder().productNumber(s).quantity(i).build(); } public boolean isQuantityLessThan(int quantity) { return this.quantity < quantity; } public void deductQuantity(int quantity) { if(this.quantity < quantity){ throw new IllegalArgumentException("주문 수량이 재고보다 많습니다."); } this.quantity-=quantity; } }
-
미해결지금 당장 NodeJS 백엔드 개발 [사주 만세력]
저 구매했는데 대체 깃허브 소스코드는 어떻게 받는다는건가요?
깃허브 소스코드 어디있어요??
-
미해결확률과 통계 기초
Hypergeometric 기댓값 풀이 중 질문있습니다.
29분50초 부분입니다.dependent Bernoulli(p)라고 생각하고 linearity 이용하는 거면E[X1]= b/(b+r) 이지만, E[X2] 부터는 b/(b+r)이 아니지 않나요? dependent라면 이런 부분을 고려해야 한다고 생각하는데어째서 E[X]가 independent처럼 nb/(b+r)으로 나오는지 궁금합니다.
-
미해결지금 당장 NodeJS 백엔드 개발 [사주 만세력]
이거 소스코드 어디서 다운 받아요?
소스코드 대체 어디서 다운 받나요??
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
synchronized 사용
RDB 사용시 좋아요나 조회수 같은 자주 변경되는 데이터에 Pessimistic Lock을 걸면 락을 자주 걸어 성능 저하가 발생할 수 있고 Optimistic Lock의 경우도 롤백되는 경우가 많아져 성능 저하가 발생할 수 있습니다.이때 데이터가 엄청 많지는 않아 Redis가 아닌 로컬 캐시를 사용해서 해결해보려 한다면 synchronized 키워드를 사용해서 애플리케이션에서 동시성 문제를 해결하고 일정 시간에 한번씩 RDB와 동기화 하는 방식을 생각해보았는데 이렇게 하는 경우도 있나요?
-
해결됨코딩테스트 [ ALL IN ONE ]
two_sum 딕셔너리 문제 코드관련 질문이 있습니다.
class Solution(object): def twoSum(self, nums=[3,3], target=6): ans = [] dict = {} for i,v in enumerate(nums): if target-v in dict: ans.append(prev) ans.append(i) return ans dict[v] = i prev = i이렇게하면, for문 안에서 리스트를 append하는거니까 총 O(n) 하는거아닌가요? 왜 예시 테스트케이스는 통과를 했는데 리트코드에서 submit을 누르면 나머지 테스트케이스는 통과하지 못하는거죠 ㅜㅜ
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
두가지 궁금한점이 있습니다!
강의를 보다 두가지 궁금한점이 있습니다!!해시알고리즘종류, salt값 그리고 암호화된 패스워드된 값을/etc/shadow가 아닌 /etc/passwd 에 넣더라도 똑같이 적용 되는건가요?? /etc/passwd 에서 www-data 계정의uid 값과 gid값을 root권한과 동일한 0으로 변경하고 로그인 쉘을 nologin 이 아닌 /bin/bash로 변경하여 /etc/passwd 파일 변조는 안되는건가요?? 시도해봤는데 강의 진행중 오류가 나타나서 안되는 방법인가 싶어 여쭈어 봅니다 ㅠㅠ추가적으로 pwconv 를 이용하여 shadow 파일 정책으로 변경하면 변경한 passwd 파일의 값이 shadow에 변경되어 저장되나요?ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 질문이 있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 내용 1분~3분에서 말씀하신 내용이 이해가 가질 않습니다. a->d로 간다 했을 때 {a, b, c}의 최소값을 찾아서 d로 가면 된다고 하셨는데 제가 저 말뜻을 제대로 이해했는지는 모르겠지만 제가 생각했을 때는 저 셋을 가는 경로에서 최솟값은 아니어도 d로 갔을 때 최솟값이 되는 경로도 존재할 거라고 생각이 들어서 {a, b, c}경로의 최솟값에서 d로 가면 그게 또 최소 경로?가 된다는 건 이해를 잘 못하겠습니다. 코드를 따라 쳐보면서 코드 자체 만으로도 이해를 해보려 했는데 tfs함수 부분에서 ret을 저렇게 메모이제이션 처리를 하면 무슨 이득이 있는지 모르겠습니다. 제 생각에는 경로가 a b c d 라고 했을 때 (경로가 모두 0이 아니라고 했을 때)a b c da b d ca c b da c d ba d b ca d c b이런식으로 탐색을 할 거라고 생각이 드는데 결국 완전탐색 느낌으로 탐색을 한 게 아닌가? 라는 생각이 듭니다. if (ret != -1) return ret;이 부분이 메모이제이션을 써서 얻을 이득일텐데 저게 a b c d를 돌면서 작동을 하지 않을 거라고 생각이 드는데... 왜 저 코드가 필요한지 잘 모르겠습니다. 막상 실제로 저 부분 빼고 제출하니까 시간초과가 나기는 하는데 제 머리로는 도저히 이해가 안갑니다.
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
private, protected, publlic 멤버변수와 private, protected, publlic 멤버메소드에 대해서 자세한 설명 부탁드립니다.
안녕하세요파이썬에서 private, protected, publlic 멤버변수와 private, protected, publlic 멤버메소드에 대해서 자세한 설명 부탁드립니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
중소,스타트업에서는 코딩테스트 안 보는 곳도 있나요?
중소, 스트타업 채용공고 찾아봤는데 코딩테스트를 보는 곳도 있고 아닌 곳도 있는 거 같아서 무조건 보는 건 아닌가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
section23. 04-06 Mongoose 활용편 질문입니다.
안녕하세요.MongoDB compass로 mongodb://localhost:27017로 접속시, 네임레졸루션으로 설정한 mydocker가 데이터베이스가 보이지 않습니다.어떻게 하면 MongoDB compass에서 mydocker를 볼 수 있게 할 수 있는지 알려주시면 감사하겠습니다. <네임레졸루션으로 설정한 mydocker>mongoose .connect("mongodb://my-database:27017/mydocker") .then(() => console.log("Connected!")) .catch(() => console.log("Connection Failed")); app.listen(4000, () => { console.log("Back-end API is Open Now"); }); CLI로 MongoDB id "ce236b58a149"로 접속하여 확인하여 보면 mydocker가 확이, Postman으로 확인하여도 POST GET가 잘 됩니다만, MongoDB compass로 접속이 되지 않습니다.<CLI로 mydocker 데이터베이스 확인>hyunminyu@HYUNMINnoAir class % docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ce236b58a149 mongo:5 "docker-entrypoint.s…" 12 seconds ago Up 11 seconds 0.0.0.0:27017->27017/tcp backend-my-database-1 e3f0f648c4c3 backend-my-backend "docker-entrypoint.s…" 21 minutes ago Up 11 seconds 0.0.0.0:4000->4000/tcp backend-my-backend-1 hyunminyu@HYUNMINnoAir class % docker exec -it ce236b58a149 /bin/bash root@ce236b58a149:/# mongo MongoDB shell version v5.0.21 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("181ced5f-7b45-4fd5-bb08-c90762778e68") } MongoDB server version: 5.0.21 ================ Warning: the "mongo" shell has been superseded by "mongosh", which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in an upcoming release. For installation instructions, see https://docs.mongodb.com/mongodb-shell/install/ ================ --- The server generated these startup warnings when booting: 2023-09-22T15:44:38.346+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2023-09-22T15:44:39.191+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted --- > show databases admin 0.000GB config 0.000GB local 0.000GB mydocker 0.000GB > use mydocker switched to db mydocker > show collections boards한가지 의심스러운 점이 있습니다.docker-compose.yaml에서 아래의 27017:27017 포트포워딩을 주석처리하여 docker up을해도, MongoDB compass로 mongodb://localhost:27017로 접속이 되는점이 혹시 문제 원인과 관련이 있지 않을까 생각이 듭니다. ports: - 27017:27017 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
강의10-8 관련 질문입니다.
products.service.ts// 2-2) 상품태그 등록 const tagNames = productTags.map((el) => el.replace('#', '')); const prevTags = await this.productsTagsService.findByNames({ tagNames }); const temp = []; tagNames.forEach((el) => { const isExists = prevTags.find((prevEl) => el === prevEl.name); if (!isExists) temp.push({ name: el }); }); const newTags = await this.productsTagsService.bulkInsert({ names: temp }); const tags = [...prevTags, ...newTags.identifiers]; productsTags.service.tsconst newTags = await this.productsTagsService.bulkInsert({ names: temp }); const tags = [...prevTags, ...newTags.identifiers]; products.service.ts 에서const tags = [...prevTags, ...newTags.identifiers];의 결과로 주석으로 {id: "전자제품ID", {id: "컴퓨터ID}, {id: "영등포ID"}}이렇게 적어주셨는데 ...newTags.identifiers는 결과가 저렇게 id로 들어가는게 이해되는데 ...prevTags는 왜 id로 들어가는지 이해가 잘 안됩니다..prevTags는 키가 id랑 name 두개 있는 객체인데 왜 저렇게 들어가는걸까요 ?? spread 연산자를 사용해서일까요 주석의 예시대로라면{id: "전자제품ID", name: "전자제품"}, {id: "컴퓨터ID"}, {id: "영등포ID"}}이런식으로 들어가야 하는거 아닌가요??감사합니다
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
조합 구하는 DFS 질문
numbers = [2, 1, 3, 4, 1] def dfs(L, s): global tmp if L == 2: num_list.append(tmp) tmp = list() return else: for i in range(s, len(numbers)): tmp.append(i) dfs(L+1, i+1) tmp = list() num_list = list() dfs(0, 0) print(num_list)인덱스를 [[0, 1], [0,2], [0,3], [0,4], [1, 2], [1,3], [1,4], [2, 3], [2,4], [3, 4]] 뽑고 싶은데[[0, 1], [2], [3], [4], [1, 2], [3], [4], [2, 3], [4], [3, 4]] 이렇게 나옵니다.6번 라인 tmp = list() > tmp.pop() 으로 수정하면 될 것 같은데 결과값은 안나오네요.어떤 부분을 실수했는지 감은 오는데 코드로 구현하는 법은 모르겠네요.도움부탁드립니다.
-
해결됨SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법
강의 연장 가능할까요?
안녕하세요.업무에 도움이 되고자 강의 수강 신청을 하였는데,프로젝트 준비로 바빠 강의를 미처 다 듣지 못했습니다.. 수강 기한 연장 요청 드리겠습니다. 좋은 강의 감사드립니다 :)
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
c++ 강의 듣고있는데 혹시 강의자료가 있을까요?
강의 자료가 없다면 참고하면서 볼 서적이 있는지도 궁금합니다사실 fundemental c++ 프로그래밍 원리 라는 책을 제가 주문했습니다만은앞의 어셈블리어 파트는 이럴만한 레퍼런스가 없어서 복습할 때 뭘 보면서 해야 할지 모르겠네요
-
미해결Vue.js - Django 연동 웹 프로그래밍 (실전편)
filemanager webpack plugin
// webpack.config.js: const FileManagerPlugin = require('filemanager-webpack-plugin'); export default { // ...rest of the config plugins: [ new FileManagerPlugin({ events: { onEnd: { copy: [ { source: '/path/fromfile.txt', destination: '/path/tofile.txt' }, { source: '/path/**/*.js', destination: '/path' }, ], move: [ { source: '/path/from', destination: '/path/to' }, { source: '/path/fromfile.txt', destination: '/path/tofile.txt' }, ], delete: ['/path/to/file.txt', '/path/to/directory/'], mkdir: ['/path/to/directory/', '/another/directory/'], archive: [ { source: '/path/from', destination: '/path/to.zip' }, { source: '/path/**/*.js', destination: '/path/to.zip' }, { source: '/path/fromfile.txt', destination: '/path/to.zip' }, { source: '/path/fromfile.txt', destination: '/path/to.zip', format: 'tar' }, { source: '/path/fromfile.txt', destination: '/path/to.tar.gz', format: 'tar', options: { gzip: true, gzipOptions: { level: 1, }, globOptions: { // https://github.com/Yqnn/node-readdir-glob#options dot: true, }, }, }, ], }, }, }), ], };https://github.com/gregnb/filemanager-webpack-plugin다른 분 답변에서 알려주신 깃허브 링크에서 copy 해온 코드인데요, 현재는 또 다른 코드로 업데이트? 가 된 것 같습니다.강사님께서 강의에서 진행하신 코드와 다른 부분이 많아서, 정확히 어떻게 코드를 넣어야할지 모르겠어서요 ㅠㅠ그리고 정확히 이 filemanager webpack plugin 과 웹팩이 저희 vue-django 프로젝트에서 어떤 역할을 하는 것인지 감이 잘 안옵니다 ㅠㅠ 간략히 설명 부탁드려도 될까요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
실전문제풀이2 19번
D에 EC2 Auto Scaling 그룹을 사용한다고 했는데,auto scaling 그룹은 한번 설정해두면 끝이 아니라 자체 인프라 관리가 계속해서 필요한 것인가요?그리고 D의 앞에 Amazon RDS가 문제조건의 짧은 지연 시간에 부합하지 않는 점도 틀린걸까요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
개정 버전은 언제 업로드 예정이실까요?
우선 수업 재미나게 잘 듣고 있습니다.공지에서 개정 버전을 새로 업로드 하신다는 글을 봤는데 언제 업로드 예정인지 궁금합니다.
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
궁금한점
예를 들면 네이버에 접속을 하면 "네이버 증권", "네이버 웹툰"등등 여러 카테고리가 나오지 않습니까 그런데 이 모든 페이지를 html로 구현하려니 모든 버튼에 a태그와 그에 맞는 html웹페이지를 연동시켜야 하더라고요... 혹시 이렇게 않고 java script를 이용하여 구현하는 방법이 따로 있을까요?