목록분류 전체보기 (78)
개발일지

우선 멀티 스테이지 빌드란, 1. 멀티스테이지 빌드Docker에서 이미지를 생성할 때 최종 이미지 크기를 최소화하는 기술이다.여러 단계의 빌드과정을 거치면서 최종 이미지 크기를 최소화한다. 최종 이미지에는 앱 실행에 최소한의 구성만 있으면 되기 때문이다! 이 사진이 개념을 잘 설명하고 있다. 도커는 각 명령어(FROM, COPY, RUN 등)마다 레이어로 실행된다.그리고 FROM 명령어를 기준으로 스테이지가 나누어진다. 스테이지: 하나의 독립된 이미지 환경. 도커파일안에 FROM 명령어가 3개 있다고 가정하면,마지막 FROM 명령어가 포함된 스테이지가 최종 이미지가 된다. 예를들어, #1.빌드 단계FROM eclipse-temurin:21-jdk-alpine AS builderWORKDIR /backCO..

현재 시스템에서는 도커를 사용해 빌드하고 이미지를 생성해, EC2에 배포한다. 앞으로 수없이 배포가 반복될텐데, 이미지 사이즈를 줄이고 빌드시간을 단축하는 것이 시간과 컴퓨팅 자원의 낭비를 줄일 것이다! 환경: java 21, 스프링부트3.4 결과적으로는,도커의 캐싱을 활용해서 시간을 65초->40초로 약 35%개선을 할 수 있었다! 1. 현재 도커파일# 빌드 단계#베이스 이미지 생성. 도커 컨테이너를 특정 초기 이미지를 기반으로 세팅.FROM eclipse-temurin:21-jdk AS builderWORKDIR /backCOPY . .RUN ./gradlew clean build # 실행 단계 FROM eclipse-temurin:21-jreWORKDIR /backCOPY --from=builder..

프로젝트 개발에 도커를 사용하여 배포를 하며, 과정을 좀 더 최적화하고 싶은 생각이 들었다. 실제 서비스를 운영하게 된다면, 도커로 이미지를 빌드하고 배포하는 과정이 수 없이 반복될텐데,이미지 용량을 줄이고 빌드시간을 단축하는 것이 시간과 컴퓨팅 자원의 낭비를 없애줄 것이라 생각한다. 그래서, 도커 최적화를 시작하며 첫 번째로 손대 볼 것은 JDK, JRE 이미지 경량화였다.자바기반 프로젝트를 빌드하고 실행할때 사용하는 JDK와 JRE의 도커 이미지의 용량을 낮출 수 있는 방법을 찾았고, 이 방법을 적용하는게 합리적인지를 따져보고자 한다. 결론부터 말하자면, 이미지 용량을 낮추는데서 오는 장점보다 단점(성능이슈, 호환성 문제)이 크다고 생각한다. 용량의 제한이 중요한(임베디드 시스템 같은) 시스템이 아니..

A. 문제설명https://www.acmicpc.net/problem/14503 로봇 청소기가 작동을 시작한 후 작동을 멈출 때까지 청소하는 칸의 개수를 출력한다. B. 답안dir = {0:[-1,0], 1:[0,1], 2:[1,0], 3:[0,-1]}row, col = map(int,input().split())x, y, d = map(int,input().split())arr = [list(map(int, input().split())) for _ in range(row)]answer = 0while True: # 1.현재 칸 청소 if arr[x][y] == 0: arr[x][y] = 2 answer+=1 #2. 주변 청소 FULL if arr[min(x+1,row-1)][y] ..

A. 문제설명https://www.acmicpc.net/problem/14500 테트로미노가 놓인 칸에 쓰인 수들의 합의 최댓값을 출력한다. B. 답안from collections import dequefrom itertools import combinationsdx, dy = (1,0,-1,0), (0,1,0,-1)row, col = map(int,input().split())arr = [list(map(int, input().split())) for _ in range(row)]answer = 0def dfs(x, y, visited, added, depth): global answer if depth == 4: answer = max(answer, added) return for k..

A. 문제설명https://www.acmicpc.net/problem/23352 가장 긴 경로 중 시작 방과 끝 방에 적힌 숫자의 합이 가장 큰 경우를 구하라. B. 답안from collections import dequedef bfs(q, visited, start, depth): new_q = deque() while q: x,y = q.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if row > nx >= 0 and col > ny >= 0 and arr[nx][ny] !=0 and visited[nx][ny]==0: visited[nx][ny]=1 new_q.append..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/87946 유저가 탐험할 수 있는 최대 던전 수를 return 하라. B. 답안depth = 0def solution(k, dungeons): global l l = len(dungeons) dfs(k, dungeons) return depth def dfs(k, dungeons): global depth depth = max(depth,l-len(dungeons)) for i in range(len(dungeons)): if k >= dungeons[i][0]: dfs(k-dungeons[i][1],..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/42839 종이 조각들이 주어질 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return하라. B. 답안from collections import dequedef solution(numbers): global primes primes = set() answer = 0 arr = [int(i) for i in numbers] dfs(numbers, deque(arr), []) return len(primes)def dfs(numbers, q, num): global primes if q == []: return ..

다음 강의를 참고했습니다.https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 | 김영한 - 인프런김영한 | , 원리를 알아야 핵심이 보인다!김영한의 스프링 MVC 기본편 👨💻 📌 수강 전 확인해주세요! 본 강의는 자바 스프링 완전 정복 시리즈의 네 번째 강의입니다. 우아한형제들 최연소www.inflearn.com 웹 애플리케이션의 기본을 이해해보자. 목차 1. 웹 서버, 웹 애플리케이션 서버(WAS)2. 서블릿3. 동시 요청- 멀티 쓰레드4. HTML, HTTP API, CSR, SSR5. 자바 백엔드 웹 기술 역사 1. 웹 서버, 웹 애플리케이션 서버..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/72412?language=python3 각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return하라. B. 답안from itertools import productdef solution(info, query): answer = [] a= list(product(["cpp","java","python",""],["backend", "frontend",""],["junior","senior",""],["chicken", "pizza",""])) a = [''.join(i) for i in a] d = {i:[] for i in a} for ..