inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

2023 3회 19:31 자바 오류찾기

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

생성자에거 왜 name 앞에 this. 이 안붙나요? 어떤건 붙고 안붙고 기준이 있나요?

  • python
  • java
  • c
  • 정보처리기사
강범준 댓글 2 좋아요 0 조회수 116

39:32 질문드립니다.

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

재귀함수에서 결과값이 15로 나온 것은 이해를 하였습니다. 단순 노가다식으로 접근하면 크게 어렵지 않을 것 같아요. 근데 입력값이 5가 되는 것이 이해가 되지 않습니다. 초기식에 5를 입력하고 계속 재귀함수로 n값이 낮아지면서 결국엔 n이 0값이 되는데 입력값은 그렇다면 0으로 바뀌는 것이 아닌가요?

  • python
  • java
  • c
  • 정보처리기사
osc6807 댓글 2 좋아요 0 조회수 130

Node로 CI/CD 제작 중 안되는 이유

해결됨

비전공자도 이해할 수 있는 CI/CD 입문·실전

강사님 안녕하세요. nest를 완강하고 개인적으로 Node로 만들어보고 있습니다. 근데 Github Actions 까지 무사히 잘 완료가 되었는데요. 배포가 제대로 되어있는지 확인하려고 하니까 안되고 있습니다. 이렇게 서버가 살아있고 저는 3000번 포트를 사용해서 https://43.202.202.143:3000/ 이라고 작성했는데 접속이 안되더라고요. 제가 Gpt랑 나름 찾아봐서 작성해본 코드는 아래와 같습니다. ============================= name: Deploy To EC2 on: push: branches: - dev jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: Node 설치 uses: actions/setup-node@v4 with: node-version: "20" - name: 의존성(라이브러리) 설치 run: yarn install --frozen-lockfile - name: .env 파일 만들기 run: | echo '${{secrets.ENV}}' > .env # - name: 테스트 코드 실행 # run: npm run test # - name: 빌드 # run: npm run build - name: 압축하기 run: tar -czvf project.tar.gz .env package.json yarn.lock src - name: SCP로 EC2에 빌드된 파일 전송하기 uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} source: project.tar.gz target: /home/ubuntu/Solo-Resume-Project/tobe - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거 username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트 script_stop: true script: | rm -rf /home/ubuntu/Solo-Resume-Project/current mkdir /home/ubuntu/Solo-Resume-Project/current mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz cd /home/ubuntu/Solo-Resume-Project/current tar -xvf project.tar.gz yarn install pm2 kill pm2 start src/app.js --name "backend-server" ============================= 세팅도 전부 다했고요. 근데 pm2 logs를 작성하면 아래와 같이 나옵니다. 제가 env에 서버포트 번호를 넣어놓고 상수값을로 지정한 후에 따로 빼서 사용하는데 그것 때문인가요? 기존의 vs 코드에서는 잘 작동이 됩니다. 처음 혼자서 node로 작성하는거다보니 너무 질문이 많아서 죄송한데 답을 알려주시옵소서!!!

  • aws
  • docker
  • ci/cd
  • github-actions
  • aws-code-deploy
  • infrastructure
  • aws-ec2
송사무엘 댓글 2 좋아요 0 조회수 195

DTO와 인증 서비스 강의 질문있습니다.

미해결

코드로 배우는 React 19 with 스프링부트 API서버

1.DTO와 인증 서비스 13분 38초 화면이 [username user9@aaa.com ,password 1111] postman에서 회원가입하는 화면인건가요? 2.DTO와 인증 서비스 17분 10초 postman 화면도 있는데 이거는 로그인 화면인건가요? 3. 제가 포스트맨에서 username user10@aaa.com ,password 1111으로 넣고 send를 누르면 맨 위 사진과 같이 에러가 나옵니다. 참고로 db 테이블에 username user9@aaa.com ,password 1111 내용이 있습니다. 포스트맨 { "timestamp": "2025-03-02T20:26:21.086+00:00", "status": 404, "error": "Not Found", "trace": "org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/member/login.\r\n\tat org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:586)\r\n\tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService spring boot 실행시 아래와 같이 나옵니다. Principal이 username이 user9@aaa.com로 안나옴. [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]] 코드 첨부합니다. https://drive.google.com/file/d/1VtPVj_uRjPC7fYG3gRCeuFKcs2s4wPZm/view?usp=drive_link

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
zzzzz 댓글 1 좋아요 0 조회수 141

params부분 에러

해결됨

한 입 크기로 잘라먹는 Next.js

fetch 부분에서 다음과 같이 작성하였는데 params.id부분에서 id 부분에 Property 'id' does not exist on type 'Promise<{ id: string | string[]; }>'.ts(2339) 이러한 에러가 발생합니다. const result = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/${params.id}` );

  • react
  • typescript
  • next.js
손성오 댓글 3 좋아요 0 조회수 431

module 'requests' has no attribute 'post'

미해결

Airflow 마스터 클래스

토근 발급하는 과정에서 해당 오류로 다음 진도를 못나가고 있습니다..ㅜㅜ 이전 서울시 공공데이터 실습하는 과정에서 requests 정상 import 및 문제없이 작동하였는데, 이번 실습에선 module 'requests' has no attribute 'post' 오류가 발생하네요. - 오류를 해결하기 위해 requests.py 파일이 있는지 확인 - requests 정상 import 확인 - requests reinstall 진행하였으나 문제 해결이 되지 않았습니다..혹시 놓친 부분이 있는지 도와주세요. 감사합니다! import requests client_id = '' redirect_url = 'https://example.com/oauth' authorize_code = '' token_url = 'https://kauth.kakao.com/oauth/token' data = { 'grant_type': 'authorization_code', 'client_id': client_id, 'redirect_url': redirect_url, 'code': authorize_code } response = requests.post(token_url, data=data) tokens = response.json() print(tokens) 추가로 아래 AI 답변 관련하여 확인 해보았습니다. 그럼에도 놓친 사항이 있을 수 있으니 함께 확인하여 답변해주시면 감사하겠습니다!

  • python
  • 데이터-엔지니어링
  • airflow
edu2 댓글 2 좋아요 0 조회수 129

캐싱 옵션이 적용되질않아요.

미해결

한 입 크기로 잘라먹는 Next.js

어떠한 옵션을 적용해도 콘솔과 같은데 뭐가 잘못되었을까요? 새로고침이나, 로고를 눌러서 인덱스 파일에 가도 똑같은 로그만 나타납니다.

  • react
  • typescript
  • next.js
트릴 댓글 3 좋아요 0 조회수 228

갑자기 다른 클러스터를 a,b를 만들어서 당황스러운데...

미해결

대세는 쿠버네티스 (초급~중급편)

제가 뭔가를 놓친건지 아니면 당연히 해야할걸 못하는건지 모르겠네요... 다른 질문글에선 그냥 VAGRANT 새로운 스크립트 만들어서 50 51 52 하셨던데 그리고 다시 vagrant up해서 사용하면 되는건지 뭔지 전혀 감이 안와서요.... 제가 아직 잘 못해서 수업을 들어도 감을 못잡는건가 싶네요 ㅠㅠ 시크릿도 mount가 되어있을줄알았는데 none이라고 뜨고요 ㅠ

  • docker
  • kubernetes
미자나다 댓글 2 좋아요 1 조회수 115

4.2 React 렌더링 과정 에서 왜 컴포넌트가 두 번씩 호출될까요?

미해결

실무 중심! FE 입문자를 위한 React

/*FunctionalComponent.jsx파일*/ import {useEffect,useState} from 'react'; function FunctionalComponent() { console.log('Function Beginning'); const [value, setValue] = useState(0); useEffect(() => { console.log('Function useEffect[]'); return () => { console.log('Function useEffect return[]'); } },[]); useEffect(() => { console.log('Function useEffect[value]'); return () => { console.log('Function useEffect return[value]'); } },[value]); console.log('Function End'); return ( <div> <h1>!FunctionalComponent</h1> <h1>value: {value}</h1> <button onClick={() => { setValue((state) => state + 1) }} > Increase value </button> </div> ); } export default FunctionalComponent /*App.jsx파일*/ import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' import axios from 'axios'; import FunctionalComponent from './practice/FunctionalComponent' function App() { return ( <FunctionalComponent /> ) } export default App

  • react
  • redux
  • node.js
  • sass
  • swr
최상협 댓글 1 좋아요 0 조회수 202

강사님 혹시 vscode 어떤 테마 쓰시나요..?

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

강사님 테마가 너무 좋은거 같아서 그런데.. 찾아봐도 똑같은게 없네요 ㅠㅠ

  • aws
  • docker
  • github
  • ci/cd
  • travis-ci
  • 데이터-엔지니어링
DevHyun2 댓글 1 좋아요 0 조회수 352

open ai api키 사용하는거 무료인가요?

해결됨

파이썬으로 나만의 블로그 자동화 프로그램 만들기

open ai api키 사용하는거 무료인가요?주시기 바랍니다.

  • python
  • wordpress
  • 웹-크롤링
  • selenium
코드스타크 댓글 2 좋아요 0 조회수 4445

데이터 분리하기 문의드립니다.

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 라이브러리 및 데이터불러오기 20분지점 주어진 데이터 분리하기 train= pd.read _csv("train.csv") test= pd.read _csv("test.csv") 가 주어졌습니다. 이게 어느 단계에서의 작업이며, 데이터를 왜 분리하는지, 어떤 데이터를 분리하는지에 대해 전반적인 설명이 없어서 지금의 학습과정을 이해할 수 없습니다. train과 test가 주어졌다면 타겟레이블을 생성하는 과정이 아닐까 추측해 봤지만, 여기서는 income을 삭제했는데 왜 삭제했는지 이해가 안 갑니다. 설명을 바랍니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
강민균 댓글 2 좋아요 0 조회수 130

react-beatiful-dnd에서 문제가 발생합니다.

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 기능상에 문제가 있는건 아니지만, 계속해서 아래의 에러가 발생합니다. 사용하고 있는 버전의 문제일까요? { "name": "react-todo-app", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "16.2.0", "@testing-library/user-event": "13.5.0", "react": "^19.0.0", "react-beautiful-dnd": "13.1.1", "react-dom": "^19.0.0", "react-scripts": "5.0.1", "web-vitals": "2.1.4" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "autoprefixer": "10.4.20", "postcss": "8.5.3", "tailwindcss": "3.4.17" } } Lists.js import React from 'react'; import List from './List.js' import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; const Lists = React.memo(({todoData, setTodoData}) => { // console.log('Lists Component') const handleEnd = (result) => { if(!result.destination) return; const newTodoData = Array.from(todoData); const [reorderedItem] = newTodoData.splice(result.source.index, 1); newTodoData.splice(result.destination.index, 0, reorderedItem); setTodoData(newTodoData); } return <div> <DragDropContext onDragEnd={handleEnd}> <Droppable droppableId='todo'> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.droppableProps} > {(todoData ?? []).map((data, index) => ( <Draggable key={data.id} draggableId={data.id.toString()} index={index} > {(provided, snapshot) => ( <List key={data.id} id={data.id} title={data.title} completed={data.completed} provided={provided} snapshot={snapshot} todoData={todoData} setTodoData={setTodoData} /> )} </Draggable> ))} {provided.placeholder} </div> )} </Droppable> </DragDropContext> </div>; }) export default Lists; App.js import React, {useState} from 'react' import "./App.css" import Lists from './components/Lists' import Form from './components/Form' export default function App() { // console.log('App Component') const [todoData, setTodoData] = useState([ { id: 1, title: '운동하기', completed: false, }, { id: 2, title: '공부하기', completed: false, } ]) const [value, setValue] = useState("") return ( <div className="flex items-center justify-center w-screen h-screen bg-blue-100" > <div className='full p-6 m-4 bg-white rounded shadow md:w-3/4 md:max-w-lg lg:w-3/4 lg:max-w-lg'> <div className="flex justify-between mb-3"> <h1>할 일 목록</h1> </div> <Lists todoData={todoData} setTodoData={setTodoData} /> <Form value={value} setValue={setValue} setTodoData={setTodoData}/> </div> </div> ) }

  • react
  • redux
  • tdd
  • typescript
  • next.js
  • 소프트웨어-테스트
  • react-beatiful-dnd
  • isdropdisabled
고유림 댓글 1 좋아요 0 조회수 128

useEffect 관련 질문드립니다.

미해결

실무 중심! FE 입문자를 위한 React

useEffect의 dependency array에 배열을 넣는 경우 "Maximum update depth exceeded." error가 발생하게 되는데, 이 경우는 어떻게 해야하나요? 예를 들어 아래와 같은 상황이라고 가정하겠습니다. 화면에는 테이블 1개만 존재한다. 데이터는 unknown[] 형태이다. 다른 조건에 의해 데이터의 갯수가 달라지는 경우에만 다시 렌더링한다. 코드로 예시를 들면 아래와 같습니다. const [items, setItems] = useState<unknown[]>([]); useEffect(() => void, [items]) 답변주시면 감사합니다.

  • react
  • redux
  • node.js
  • sass
  • swr
이준영 댓글 0 좋아요 0 조회수 147

Error: Route "/search" used `searchParams.q`. `searchParams` should be awaited before using its properties.

해결됨

한 입 크기로 잘라먹는 Next.js

안녕하세요 강사님 해당 오류는 최신버전에서 발생하는건가요?! Error: Route "/search" used searchParams.q . searchParams should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at Page (src/app/(with-searchbar)/search/page.tsx:12:32) 10 | return ( 11 | <div> > 12 | Search 페이지 : {searchParams.q} | ^ 13 | <ClientComponent> 14 | <></> 15 | </ClientComponent> import ClientComponent from "@/components/client-component"; export default function Page({ searchParams, }: { searchParams: { q?: string; } }) { return ( <div> Search 페이지 : {searchParams.q} <ClientComponent> <></> </ClientComponent> </div> ) }

  • react
  • typescript
  • next.js
강프로그래머 댓글 2 좋아요 0 조회수 255

#1090번 문제 반례가 궁금합니다.

미해결

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

from copy import deepcopy def init_sort_checker(checkers): tmp_list = [] sorted_sum_list = [] for idx, chk in enumerate(checkers): for i, tgt in enumerate(checkers): if idx == i: #본인으로 가는 값은 제외 continue x_val = abs(chk[0] - tgt[0]) y_val = abs(chk[1] - tgt[1]) # price, [src, tgt] 순 정렬 tmp_list.append([x_val + y_val, [idx, i]]) tmp_list.sort(key=lambda x: x[0]) # price 값 적은 순서대로 정렬 sorted_sum_list.append(deepcopy(tmp_list)) tmp_list = [] return sorted_sum_list def sort_sum_target(sorted_sum_list, k): lowest_price = 1000000*k target_idx = -1 for idx, line in enumerate(sorted_sum_list): cnt = 0 line_price = 0 for price in line: if cnt >= k-1: break line_price = line_price + price[0] cnt += 1 if line_price < lowest_price: lowest_price = line_price target_idx = idx return target_idx def k_tgt_process(k, sorted_tgt, sorted_sum_list): tgt_line = sorted_sum_list[sorted_tgt] tgt_loc = [] for i in range(k-1): tgt_loc.append(tgt_line[i][1]) return tgt_loc def k_sorting_process(tgt_loc, checkers): tgt_list = [] for tgt in tgt_loc: tgt_list.append(tgt[0]) tgt_list.append(tgt[1]) tgt_list = list(set(tgt_list)) x_list = [] y_list = [] tgt_checkers = [] for tgt in tgt_list: x_list.append(checkers[tgt][0]) y_list.append(checkers[tgt][1]) tgt_checkers.append(checkers[tgt]) x_list.sort() y_list.sort() if len(x_list)%2 == 0: #짝수 x_chk_point = [int(len(x_list)/2-1),int(len(x_list)/2)] else: # 홀수 x_chk_point = [int(len(x_list)/2)] if len(y_list)%2 == 0: #짝수 y_chk_point = [int(len(y_list)/2-1),int(len(y_list)/2)] else: # 홀수 y_chk_point = [int(len(y_list)/2)] #모아볼 위치의 case 집합 chk_point_list = [] for x_chk in x_chk_point: for y_chk in y_chk_point: chk_point_list.append([x_chk,y_chk]) # 각 checker 위치에서 좌표로 이동하는데 드는 값 계산 ttl_price_list = [] for chk in chk_point_list: x_tgt = chk[0] y_tgt = chk[1] price_list = [] for checker in tgt_checkers: x = checker[0] y = checker[1] if x_list[x_tgt] > x: x_price = x_list[x_tgt] - x else: x_price = x - x_list[x_tgt] if y_list[y_tgt] > y: y_price = y_list[y_tgt] - y else: y_price = y - y_list[y_tgt] price = x_price + y_price price_list.append(price) price_list.sort() ttl_price_list.append(price_list) return ttl_price_list def TestCases(N): checkers = [list(map(int,input().split())) for _ in range(N)] sorted_sum_list = init_sort_checker(checkers) output_str = '0' for k in range(2, N+1): min_price = 2000000 sorted_tgt = sort_sum_target(sorted_sum_list, k) tgt_loc = k_tgt_process(k, sorted_tgt, sorted_sum_list) ttl_price_list = k_sorting_process(tgt_loc, checkers) for n_list in ttl_price_list: tmp = 0 for idx in range(k): tmp = tmp + n_list[idx] if tmp < min_price: min_price = tmp output_str = output_str + ' ' + str(min_price) tmp_str = list(map(int,output_str.split())) # print(output_str) print(*tmp_str) N = int(input()) TestCases(N) 다음과 같이 코드 작성해봤는데, sample input에 대한 답은 다 도출되지만문제 제출하면 답이 틀리다 나오네요..반례나 코드상의 오류를 도와주실 수 있을까요? [사용해본 input/output] 4 1 1 2 1 4 1 13 1 0 1 3 14 4 13 13 16 14 15 18 15 30 0 4 8 24 5 3 2 6 9 3 16 14 6 17 14 0 10 17 31 47 5 3 2 6 9 6 13 13 6 17 14 0 4 14 24 40 4 15 14 15 16 14 15 16 15 0 2 3 4 2 4 7 4 7 0 0 4 1 101 2 101 200 101 201 101 0 1 199 398

  • python
  • 코딩-테스트
  • 알고리즘
DaBin Han 댓글 1 좋아요 0 조회수 164

사이트 전체 Route 구조 짜기 영상 10분쯤 코드가 똑같은데 연결이 안되요

해결됨

(2025) MBTI 테스트 기반 수익형 웹사이트 만들기 - <코딩 배워 사업하자>

영상 10분쯤 나오는 파트에서 Main.jsx와 App.jsx 코드를 아예 똑같이 썼는데도 사이트에 연결할 수 없다고 뜹니다 어떻게 해야 하나요 vsc에서는 Main이 선언은 되었지만 해당 값이 읽히지는 않았습니다 ts(6133)이라고 뜯니다

  • react
  • aws
  • Google-Analytics
  • cloudflare
  • adsense
  • 수익화
도도한 염소 댓글 2 좋아요 0 조회수 271

12.18 새 일기 쓰기 페이지 제목 수정 관련

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

index.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Emotion Diary</title> </head> <body> <div id="root"></div> <script type="module" src="/src/main.jsx"></script> </body> </html> New.jsx import Header from "../components/Header"; import Button from "../components/Button"; import Editor from "../components/Editor"; import { useNavigate } from "react-router-dom"; import { useContext, useEffect } from "react"; import {DiaryDispatchContext} from "../App"; import usePageTitle from "../hooks/usePageTitle"; const New=()=>{ const{onCreate}=useContext(DiaryDispatchContext); const nav=useNavigate(); usePageTitle(`${useParams.id}번 일기 수정`); const onSubmit=(input)=>{ onCreate( input.createdDate.getTime(), input.emotionId, input.content ); nav('/',{replace: true}); }; return ( <div> <Header title={"write new diary"} leftChild={<Button onClick={()=>nav(-1)} text={"< back"}/>} /> <Editor onSubmit={onSubmit}/> </div> ); }; export default New; usePageTitle.jsx import { useEffect } from "react"; const usePageTitle=(title)=>{ useEffect(()=>{ const $title=document.getElementByTagName("title")[0]; $title.innerText=title; },[title]); }; export default usePageTitle; 이전 과정까지는 문제없었는데 12.18에 있는 새일기 쓰기 페이지에 들어왔을 때 페이지에 아무것도 뜨지 않는 문제가 발생하는데 어떤게 문제일까요

  • javascript
  • react
  • node.js
진성원 댓글 2 좋아요 0 조회수 109

안녕하세요. 레이어 관리 관련해서 질문드리고 싶습니다.

미해결

개발자를 위한 쉬운 도커

TOPIC1. 레이어 관리에서 RUN 지시어 사용 시 && 연산자를 사용하여 레이어의 개수를 5개에서 1개로 줄이고 있는데요. 이미지의 사이즈를 줄이고 빌드 속도를 높이기 위함. 이라고 말씀을 해주셨습니다. 먼저, 질문은 2가지입니다. 레이어의 사이즈가 동일한데, 어떤 관점으로 이미지의 사이즈가 축소되는 것인가? 레이어의 재활용성에 대해서 어떻게 생각하시는지? 레이어의 사이즈를 봤을 때 5개, 1개의 사이즈가 116MB로 동일하니 이미지의 사이즈는 동일한 것으로 보입니다. 1개의 레이어는 5개의 레이어를 별도로 불러와서 빌드하지는 않으니 속도가 빨라질 수는 있을 것 같다는 생각이 들어서 빌드의 속도는 빨라지나 이미지의 사이즈가 줄어든다. 라는 부분이 이해가 되지 않았습니다. 흔한 케이스는 아닐 것 같으나, 5개의 레이어를 분리를 하게 되면 레이어를 재사용 할 수 있는 장점이 있을 것 같다는 생각이 들었습니다. 마치, 깃을 다룰 때 한 개의 커밋에 하나의 기능만 포함하도록 한 느낌처럼요. 적절하게 레이어를 분리하는 시점을 찾는 것이 중요한 것으로 얘기를 해주신걸까? 하는 생각을 해봤습니다.

  • docker
  • 가상화
  • ci/cd
  • docker-compose
  • github-actions
  • docker-volume
  • docker-image
  • container
종운 댓글 2 좋아요 1 조회수 141

안녕하세요 배포 관련 질문이 있습니다.

미해결

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]

파이썬 백엔드 강의를 다 들은 상태인데요 medel controller view static templates server.py 구조로 되어있을텐데요 이를테면 spring에서 war로 만들어서 tomcat에서 실행시키잖아요 그것처럼 flask도 이 강의 flask 부분을 따라하면 기존 강의의 위처럼 되어있는 구조 ( medel controller view static templates server.py ) 에서 flask 식으로 빌드가 가능한건가요? 아직 못 들어봐서 이전 강의 구조 그대로 이어서 배포가 가능한가 싶어서요 spring 은 maven 생성하면 자동으로 properties 나 pom.xml 같은 구조가 기본적으로 갖춰지는데 일반적으로 플라스크는 원래 프로젝트 폴더를 먼저 생성하고 빌드를 위한 구조를 갖추게 하는건가요? 자세한 건 강의보고 따라 하겠지만.. 틀을 잘 모르겠습니다.. --------------------------------------------------------- 조금 더 공부하고 찾아보았는데요 1. 기존 구조에서 pip freeze > requirements.txt 를 하여 requirements.txt 파일이 프로젝트 폴더에 추가되게 한다. 2. wsgi.py 파일을 추가해준다 from server.py import app if name == "__main__": app.run () 3. gunicon 을 사용하여 프로젝트를 돌려준다. 혹시 이렇게 하는 것인가요? 부족한 것이 있을까요 ?

  • 네트워크
  • linux
  • docker
learnlearnlearn 댓글 1 좋아요 0 조회수 159

인기 태그

인프런 TOP Writers

주간 인기글