Dockfile 설정에서 NODE_ENV 환경변수가 미치는 영향
·
Study
며칠 전, GitHub Actions에서 도커 빌드가 계속 실패하는 문제를 만났다.“뭐야, 어제까지 잘되던 게 왜 갑자기 안 돼?” 로그를 보니 다음과 같은 익숙한 문장이 떠 있었다.Error: buildx failed with: ERROR: failed to solve: process "/bin/sh -c npm install" did not complete successfully: exit code: 127“아, 또 npm install 문제야?”이미 수십 번은 봤던 에러라 대충 해결법도 알고 있었다.“캐시 문제인가?” “base image가 바뀐 건가?”이런저런 가설을 세워보며 평소처럼 Dockerfile을 뜯어봤다. 그런데 뭔가 이상했다.어제는 분명 잘되던 코드인데, 내가 수정한 부분은 ENV N..
Ad Ops 서비스의 미래 전략: 새로운 시장 기회를 찾는 방법
·
Career
디지털 광고 시장이 빠르게 변화함에 따라, Ad Ops(애드 옵스) 서비스를 제공하는 기업들도 새로운 비즈니스 모델을 고민해야 할 시점에 도달했다. 최근 MMP(Mobile Measurement Partner) 및 CRM(Customer Relationship Management) 업체들이 광고 운영(Ad Ops)까지 확장하는 움직임을 보이면서, 기존 Ad Ops 기업의 경쟁력이 약화될 가능성이 제기되고 있다.이러한 환경 변화 속에서, Ad Ops 기업이 지속적으로 성장하고 경쟁력을 유지하기 위해서는 단순한 광고 운영 지원을 넘어, 더 높은 부가가치를 제공할 수 있는 방향으로 비즈니스 모델을 재편해야 한다. 본 글에서는 Ad Ops 기업이 고려해야 할 3가지 전략을 제시해본다.1. 광고 운영을 넘어 데이..
k진수에서 소수개수 구하기
·
Study
프로그래머스 카카오 Lv2 문제풀이 나의 풀이 // 소수 판별 함수 const isPrime = (arg) => { if (arg 6 * 6 = 36). 그렇다면 6이 아닌 어느 두개의 숫자를 곱하여 36을 만들기 위해서는 한쪽이 6보다 작고 반대쪽은 6보다 커야 한다. 식으로 ..
[python] csv, error
·
Study
import csv # csv 쓰기 dataList = [ ['종목', '매입가', '수량', '목표가'], ['삼성전자', 85000, 10, 90000], ['NAVER', 380000, 5, 400000], ] file = open('./myvenv/Chapter10/mystock.csv', 'w', encoding='utf-8-sig') writer = csv.writer(file) for data in dataList: writer.writerow(data) file.close() # csv 읽기 file = open('./myvenv/Chapter10/mystock.csv', 'r', encoding='utf-8-sig') reader = list(csv.reader(file)) # csv r..
[python] Class
·
Study
# 클래스: 객체를 만들기 위한 설계도 # 객체: 설계도로부터 만들어낸 제품 class Monster: total = 0 # 생성자: 인스턴스 생성시 가장 먼저 호출되는 메서드 def __init__(self, num): self.age = num # 클래스 변수: 생성된 인스턴스가 모두 공유할 수 있는 데이터 # (예시 변수 total 은 인스턴스가 생성될 때마다 데이터가 1씩 증가하게끔 설정) Monster.total += 1 # 메서드 1 def say(self): print("i'm monster") # 메서드 2 def clac(self, arg): self.age -= arg return self.age ghost = Monster(500) ghost.say() # __dir__: 해당 객체에..
시간 복잡도
·
Study
알고리즘의 스피드는 "완료까지 걸리는 절차의 수" 로 측정할 수 있고, 이를 시간복잡도라고 한다. 절차(= 연산)는 데이터의 할당, 비교, 증감, 계산, 반환(return)을 모두 포함한다. 알고리즘에 입력된 데이터를 N 이라 했을 때 계산식을 정의하고, 최고차항만을 남겨 시간복잡도를 파악하는 표기법을 빅오표기법이라 한다. (최고차항만을 남기지만 앞서 붙어있는 상수에 대해서는 고려하지 않는다) const foo = (arr: [], N: number) => { // cnt 데이터 할당 + 1 const cnt = 0; // i 데이터 할당 + 1 for (let i = 0; i N * ..
boj 1406 javascript
·
Study
원본 배열의 인덱스를 활용하여 수정하는 방식은 주어진 배열의 길이 만큼의 추가 연산이 들어가기 때문에 요소를 추가할 때 unshift, splice를 활용하면 O(N)이 추가된다. 시간 복잡도를 최소화하기 위하여 2개의 배열과 push, pop O(1) 메서드를 활용해 함수를 만들었다. const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const left = input[0].split(''); const right = []; for (let i = 0; i < parseInt(input[1]); i++) { const command = input[i + 2].split(' '..
boj 13300 javascript
·
Study
최대한 배열 회귀 횟수를 줄이는 방법을 생각했다. 일단 각 학년, 성별의 개수를 모을 배열을 미리 선언해놓고 주어진 학생 데이터를 확인하면서 미리 선언된 배열에 나눠서 1 씩 할당한다. 그 이후에 완성된 배열 요소를 각각 방별 최대인원으로 나누고 올림처리한 뒤에 모두 더해주면 최소 방의 개수를 알 수 있다. const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const max = Number(input[0].split(' ')[1]); const rooms = Array(13).fill(0); for(let i = 1; i < input.length; i++) { const s..