리눅스 한 학기 살기 - 2주차
들어가며
지난 주에 작성한 글의 연장선 상에 있는 글이다.
리눅스 한 학기 살기 - 1주차
들어가며대학교 마지막 학기에 재학 중이다. 3학점만 들어도 졸업이 가능했으나, 또 무슨 심보가 발동 됐는지 결국 18학점 꽉 채워버렸다 (나란 인간 정말...) 매번 게임과 관련된 수업만 듣다 이
kugora.ng
이번 주차에 본격적으로 우분투를 적극적으로 사용해보고자 이것저것 설치해봤다. 42경산 과제 수행을 위해 curl, make, vim, git을 설치했고 사용해보지 못했지만, Anthropic 사의 claude-code를 사용해보고 싶어 npm도 설치해봤다.
이 중에서 다른 패키지에 비해 상대적으로 이해도가 적은 curl과 make에 대한 보고서를 이번 주차에 작성해보고자 한다.
curl 이해하기
curl이란 무엇인가?
curl
은 "Client for URLs"의 약자로, 다양한 프로토콜을 사용하여 데이터를 전송하거나 받기 위한 명령줄 도구이다. 1996년에 다니엘 스텐버그(Daniel Stenberg)라는 스웨덴 개발자가 IRC 사용자들을 위해 환율 정보를 자동으로 가져오는 것을 목표로 처음 개발했다. 초기에는 'httpget', 그리고 'urlget'이라는 이름으로 불리다가 현재의 'curl'이라는 이름을 갖게 되었다.
curl의 핵심은 libcurl
이라는 무료 클라이언트 측 URL 전송 라이브러리에 기반한다. 이 라이브러리는 HTTP/1 (HTTP/2 및 HTTP/3 지원 포함), HTTPS, FTP, FTPS, SMTP, POP3 등 광범위한 프로토콜을 지원하며, 쿠키, 프록시, 사용자 인증과 같은 다양한 기능도 제공한다.
curl의 기본 동작 원리
curl의 동작은 URL을 목표로 HTTP 요청을 보내고 응답 데이터를 받아오는 과정으로 요약된다. 사용자가 명령줄에 입력한 URL과 옵션에 따라 GET, POST 등의 HTTP 메소드로 서버에 요청을 보내고, 그에 대한 응답(Response)(예: HTML 페이지 내용이나 API 응답 데이터)을 터미널 출력이나 파일로 전달한다.
기본적으로 curl은 클라이언트-서버 모델에 따라 작동한다.
- 사용자가 URL과 함께 curl 명령어를 입력
- curl은 해당 URL의 서버에 HTTP 요청을 전송
- 서버는 요청을 처리한 후 응답을 curl에 반환
- curl은 이 응답을 터미널에 출력하거나 파일로 저장
예를 들어, curl http://example.com
을 실행하면 example.com 웹사이트의 HTML 내용이 터미널에 출력된다.
curl의 주요 기능과 옵션
curl은 200개가 넘는 다양한 옵션을 제공한다. 가장 자주 사용되는 옵션들은 다음과 같다.
기본 옵션
옵션 | 짧은 형식 | 설명 | 예시 |
---|---|---|---|
--help |
-h |
curl 명령어의 사용법 및 모든 옵션을 보여준다. | curl --help |
--version |
-V |
curl의 버전 정보를 보여준다. | curl --version |
--output |
-o |
다운로드한 내용을 지정된 파일 이름으로 저장한다. | curl -o example.html https://www.example.com |
--remote-name |
-O |
다운로드한 내용을 URL에 명시된 파일 이름으로 저장한다. | curl -O https://www.example.com/image.jpg |
요청 관련 옵션
옵션 | 짧은 형식 | 설명 | 예시 |
---|---|---|---|
--request |
-X |
사용할 HTTP 메소드를 지정한다 (GET, POST, PUT, DELETE 등). | curl -X POST https://api.example.com/users |
--data |
-d |
POST 또는 PUT 요청 시 서버에 전송할 데이터를 지정한다. | curl -X POST -d "name=John&age=30" https://api.example.com/users |
--header |
-H |
HTTP 요청 헤더를 추가한다. | curl -H "Content-Type: application/json" https://api.example.com/data |
--user |
-u |
서버에 접속하기 위한 사용자 이름과 비밀번호를 지정한다. | curl -u username:password ftp://example.com |
디버깅 및 출력 옵션
옵션 | 짧은 형식 | 설명 | 예시 |
---|---|---|---|
--verbose |
-v |
통신 과정을 상세하게 보여준다. | curl -v https://www.example.com |
--head |
-I |
서버로부터 HTTP 헤더 정보만 가져온다. | curl -I https://www.example.com |
--location |
-L |
서버의 응답이 리디렉션인 경우, 자동으로 따라간다. | curl -L http://shorturl.com/abcd |
--insecure |
-k |
SSL 인증서 검증을 건너뛴다. (주의해서 사용해야 한다.) | curl -k https://self-signed.example.com |
curl의 실무 활용 사례
API 호출 및 테스트
REST API 엔드포인트와 상호작용하는 데 curl은 매우 유용하다.
# GET 요청 예시
curl https://jsonplaceholder.typicode.com/posts/1
# POST 요청 예시
curl -X POST \
-H "Content-Type: application/json" \
-d '{"title":"새로운 게시물", "body":"내용입니다", "userId":1}' \
https://jsonplaceholder.typicode.com/posts
파일 다운로드
웹 서버나 FTP 서버로부터 파일을 다운로드한다.
# 파일 다운로드 (원래 이름으로 저장)
curl -O https://example.com/file.zip
# 파일 다운로드 (사용자 지정 이름으로 저장)
curl -o my_file.zip https://example.com/file.zip
# 중단된 다운로드 이어받기
curl -C - -O https://example.com/largefile.zip
인증 및 보안
인증이 필요한 서비스에 접근한다.
# 기본 인증
curl -u username:password https://api.example.com/secure
# 토큰 기반 인증 (Bearer 토큰)
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
https://api.example.com/secure
자동화 스크립트에서의 활용
쉘 스크립트나 배치 파일 내에서 웹 요청을 자동화하는 용도로 curl을 많이 사용한다. 예를 들어 크론(cron) 작업으로 정기적으로 특정 웹페이지를 가져와 변경 여부를 모니터링하거나, CI/CD 파이프라인 스크립트에서 배포 후 Webhook API를 호출하는 단계 등에 curl 명령을 넣어 자동화할 수 있다.
curl의 고급 활용 기법
curl과 jq를 활용한 API 응답 처리
curl과 jq(JSON 프로세서)를 함께 사용하면 API 응답을 더 효과적으로 처리할 수 있다.
# GitHub API에서 저장소 정보를 가져와 특정 필드만 추출
curl -s https://api.github.com/repos/flutter/flutter | jq '{name: .name, stars: .stargazers_count, forks: .forks_count}'
복수 URL 병렬 처리
xargs와 함께 사용하여 여러 URL을 병렬로 처리할 수 있다.
# urls.txt 파일에 있는 모든 URL을 10개씩 병렬로 처리
cat urls.txt | xargs -P 10 -n 1 curl -O
성능 측정
curl의 -w 옵션을 사용하여 요청 성능을 측정할 수 있다:.
# 요청 시간 측정
curl -s -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null https://www.example.com
make 이해하기
make란 무엇인가?
make
는 소스 코드로부터 실행 가능한 프로그램이나 라이브러리를 자동으로 빌드하는 데 사용되는 빌드 자동화 도구이다. 특히 Unix 및 Unix 계열 운영체제에서 오랫동안 널리 사용되어 왔으며, 소프트웨어 개발 과정에서 필수적인 도구로 자리매김했다.
make의 가장 큰 장점은 효율성이다. make는 Makefile에 정의된 의존성 관계를 파악하여, 소스 코드 파일이 변경되었을 경우 해당 파일과 그에 의존하는 파일들만 다시 컴파일한다. 이는 전체 프로젝트를 매번 다시 빌드하는 것에 비해 훨씬 빠르고 효율적인 작업 방식을 제공한다.
Makefile의 구조와 문법
Makefile은 make 도구가 프로젝트를 어떻게 빌드해야 하는지에 대한 지침을 담고 있는 텍스트 파일이다. 일반적으로 프로젝트의 소스 코드와 같은 디렉토리에 위치하며, 이름은 Makefile 또는 makefile로 지정된다.
기본 구조
Makefile은 일련의 규칙 (rules)으로 구성된다. 각 규칙은 하나 이상의 타겟 (target), 0개 이상의 의존성 (dependencies), 그리고 타겟을 생성하기 위한 명령어 (commands 또는 recipe)로 이루어진다. 기본적인 Makefile의 구조는 다음과 같다.
타겟: 의존성
명령어
- 타겟 (Target): 생성하거나 업데이트해야 하는 파일 또는 수행해야 하는 동작의 이름을 나타낸다.
- 의존성 (Dependencies): 타겟을 생성하기 위해 필요한 파일들의 목록이다.
- 명령어 (Commands): 타겟을 생성하기 위해 실행되는 쉘 명령어이다. 각 명령어는 반드시 탭 (Tab) 문자로 들여쓰기 되어야 한다.
변수 사용
Makefile에서는 변수를 사용하여 코드를 더 깔끔하고 유지보수하기 쉽게 만들 수 있다.
# 변수 정의
CC = gcc
CFLAGS = -Wall -g
OBJS = main.o helper.o
TARGET = program
# 변수 사용
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
자동 변수
Makefile에서는 다음과 같은 자동 변수를 사용할 수 있다.
$@
: 현재 타겟의 이름$<
: 현재 타겟의 첫 번째 의존성$^
: 현재 타겟의 모든 의존성 (중복 제거)$?
: 현재 타겟보다 더 최근에 수정된 의존성들
패턴 규칙
Makefile에서는 패턴 규칙을 사용하여 여러 파일에 대해 동일한 명령을 적용할 수 있다.
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
이 규칙은 모든 .c
파일을 해당하는 .o
파일로 컴파일한다.
make의 주요 기능과 옵션
make 명령은 다양한 옵션을 제공하며, 그 중 실무에서 자주 쓰이는 것들은 다음과 같다:
옵션 | 설명 | 예시 |
---|---|---|
-f <파일> |
기본 Makefile 대신 다른 파일을 사용한다. | make -f MyBuild.mk |
-j <숫자> |
병렬로 실행할 작업의 개수를 지정한다. | make -j4 |
-B |
모든 타겟을 무조건 다시 빌드한다. | make -B |
-n |
실제로 명령을 실행하지 않고 어떤 명령이 실행될지만 보여준다. | make -n |
-C <디렉토리> |
지정된 디렉토리로 이동한 후 make를 실행한다. | make -C src |
make의 실무 활용 사례
복잡한 C/C++ 프로젝트 빌드
# 변수 정의
CC = gcc
CFLAGS = -Wall -g
LIBS = -lm
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin
TARGET = $(BIN_DIR)/program
# 소스 파일과 오브젝트 파일 목록
SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
# 기본 타겟
all: $(TARGET)
# 디렉토리 생성
$(BIN_DIR) $(OBJ_DIR):
mkdir -p $@
# 실행 파일 빌드
$(TARGET): $(OBJ) | $(BIN_DIR)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
# 오브젝트 파일 빌드
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CC) $(CFLAGS) -c -o $@ $<
# 정리
clean:
rm -rf $(OBJ_DIR) $(BIN_DIR)
# phony 타겟 (실제 파일이 아닌 작업을 위한 타겟)
.PHONY: all clean
이 Makefile은 소스 디렉토리의 모든 C 파일을 컴파일하고, 최종 실행 파일을 생성한다.
테스트 자동화
# 테스트 관련 타겟
test: $(TARGET)
./$(TARGET) --test
# 커버리지 보고서 생성
coverage: CFLAGS += --coverage
coverage: clean test
gcov $(SRC)
.PHONY: test coverage
이 규칙들은 프로그램을 테스트하고 코드 커버리지 보고서를 생성한다.
문서 생성
# 문서 생성
docs:
doxygen Doxyfile
# 문서 정리
clean-docs:
rm -rf docs/html docs/latex
.PHONY: docs clean-docs
이 규칙들은 Doxygen을 사용하여 소스 코드의 문서를 생성하고 정리한다.
make의 고급 활용 기법
조건부 규칙
Makefile에서 조건문을 사용하여 환경에 따라 다른 동작을 수행할 수 있다.
# 개발/프로덕션 환경에 따른 조건부 빌드
ENV ?= development
ifeq ($(ENV), production)
CFLAGS += -O3 -DNDEBUG
else
CFLAGS += -g -DDEBUG
endif
build:
$(CC) $(CFLAGS) -o $(TARGET) $(SOURCES)
매크로 정의
복잡한 작업을 매크로로 정의하여 재사용할 수 있다.
# 디렉토리 생성 매크로
define make-dir
mkdir -p $(1)
@echo "Directory $(1) created."
endef
setup:
$(call make-dir,build)
$(call make-dir,logs)
$(call make-dir,data)
파일 생성을 위한 템플릿
Makefile에서 템플릿을 사용하여 파일을 동적으로 생성할 수 있다.
define CONFIG_TEMPLATE
{
"appName": "$(APP_NAME)",
"environment": "$(ENV)",
"apiUrl": "$(API_URL)",
"version": "$(VERSION)"
}
endef
export CONFIG_TEMPLATE
config.json:
@echo "$$CONFIG_TEMPLATE" > config.json
웹 개발에서의 활용
웹 개발에서의 일반적인 활용 방법
프론트엔드 개발에서의 curl 활용
프론트엔드 개발에서 curl은 다음과 같은 목적으로 활용된다.
- 백엔드 API 테스트: 개발 중인 웹 애플리케이션의 백엔드 API를 테스트하기 위해 curl을 사용한다. 이는 프론트엔드를 구현하기 전에 API의 동작을 확인하는 데 매우 유용하다.
# JSON API 테스트
curl -X GET \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
https://api.example.com/users
- CDN에서 라이브러리 다운로드: 프로젝트에 필요한 JavaScript 라이브러리나 CSS 프레임워크를 CDN에서 다운로드한다.
# Bootstrap 다운로드
curl -O https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css
- 웹훅 테스트: GitHub나 Slack 등의 웹훅 기능을 테스트할 때 curl을 사용하여 페이로드를 전송한다.
# Webhook 테스트
curl -X POST \
-H "Content-Type: application/json" \
-d '{"text":"Hello from curl!"}' \
https://hooks.slack.com/services/YOUR/WEBHOOK/URL
백엔드 개발에서의 make 활용
백엔드 개발에서 make는 다양한 개발 작업을 자동화하는 데 활용된다.
- 개발 환경 설정: 프로젝트의 개발 환경을 일관되게 설정하기 위한 Makefile이다.
# 개발 환경 설정 Makefile
setup:
npm install
cp .env.example .env
mkdir -p logs uploads
# 개발 서버 실행
dev:
npm run dev
# 테스트 실행
test:
npm test
# 린트 체크
lint:
npm run lint
# 데이터베이스 마이그레이션
migrate:
npx prisma migrate dev
.PHONY: setup dev test lint migrate
- 마이크로서비스 관리: 여러 마이크로서비스로 구성된 백엔드 시스템을 관리하기 위한 Makefile이다.
# 마이크로서비스 관리 Makefile
SERVICES = auth user payment notification
all: $(SERVICES)
$(SERVICES):
@echo "Starting $@ service..."
cd services/$@ && npm start &
stop:
@echo "Stopping all services..."
pkill -f "node.*services" || true
logs:
tail -f services/*/logs/app.log
.PHONY: all $(SERVICES) stop logs
CI/CD 파이프라인에서의 활용
CI/CD 파이프라인에서 curl과 make는 다음과 같이 활용된다.
- 배포 알림: curl을 사용하여 배포 완료 후 Slack이나 Discord에 알림을 보낸다.
# Slack에 배포 알림 보내기
curl -X POST \
-H "Content-Type: application/json" \
-d '{"text":"애플리케이션이 성공적으로 배포되었습니다."}' \
$SLACK_WEBHOOK_URL
- 빌드 자동화: make를 사용하여 복잡한 빌드 과정을 자동화한다.
# CI/CD 빌드 Makefile
ci: install test build
install:
npm ci
test:
npm test
build:
npm run build
deploy:
aws s3 sync ./dist s3://my-bucket/
.PHONY: ci install test build deploy
최신 개발 환경에서의 활용
Docker 환경에서의 활용
Docker와 함께 curl과 make를 사용하는 방법이다.
# Docker 환경 관리 Makefile
IMAGE_NAME = myapp
CONTAINER_NAME = myapp-container
build:
docker build -t $(IMAGE_NAME) .
run:
docker run -d --name $(CONTAINER_NAME) -p 8080:8080 $(IMAGE_NAME)
stop:
docker stop $(CONTAINER_NAME)
docker rm $(CONTAINER_NAME)
push:
docker push $(IMAGE_NAME)
health-check:
curl -f http://localhost:8080/health || (make stop && exit 1)
.PHONY: build run stop push health-check
클라우드 서비스와의 통합
AWS CLI와 curl, make를 함께 사용하는 예이다.
# AWS 서비스 관리 Makefile
S3_BUCKET = my-bucket
LAMBDA_FUNCTION = my-function
API_URL = https://api.example.com
deploy-static:
aws s3 sync ./dist s3://$(S3_BUCKET)/ --delete
invoke-lambda:
aws lambda invoke --function-name $(LAMBDA_FUNCTION) --payload '{"key":"value"}' response.json
test-api:
curl -s $(API_URL)/health | grep "ok" || echo "API health check failed"
cleanup:
aws s3 rm s3://$(S3_BUCKET) --recursive
aws cloudformation delete-stack --stack-name my-stack
.PHONY: deploy-static invoke-lambda test-api cleanup
팀 개발 환경에서의 표준화
팀 개발 환경에서 curl과 make를 사용하여 작업을 표준화하는 방법이다.
# 팀 개발 환경 Makefile
include .env # 환경 변수 로드
help:
@echo "사용 가능한 명령어:"
@echo " make setup - 개발 환경 설정"
@echo " make start - 개발 서버 시작"
@echo " make test - 테스트 실행"
@echo " make lint - 코드 스타일 검사"
@echo " make build - 프로덕션 빌드"
@echo " make deploy - 배포"
setup:
npm install
curl -s $(CONFIG_URL) -o config.json
./scripts/setup-db.sh
start:
npm start
test:
npm test
lint:
npm run lint
build:
npm run build
deploy:
./scripts/deploy.sh
.PHONY: help setup start test lint build deploy
이 Makefile은 팀 전체가 일관된 방식으로 개발 환경을 설정하고, 테스트, 빌드, 배포 등의 작업을 수행할 수 있도록 한다.
Dart와 Flutter 개발에서의 활용 방법
Dart 개발에서의 curl 활용
Dart 개발에서 curl은 다음과 같은 용도로 활용된다.
- Pub 패키지 정보 조회: Dart 패키지 관리자인 Pub의 패키지 정보를 curl을 통해 조회할 수 있다.
# Pub 패키지 정보 조회
curl https://pub.dev/api/packages/http
- Dart REST API 테스트: Dart로 작성된 백엔드 API를 테스트한다.
# Dart 백엔드 API 테스트
curl -X POST \
-H "Content-Type: application/json" \
-d '{"query":"getUsers"}' \
http://localhost:8080/graphql
- Dart SDK 다운로드: 특정 버전의 Dart SDK를 자동으로 다운로드한다.
# Dart SDK 다운로드
curl -O https://storage.googleapis.com/dart-archive/channels/stable/release/2.19.6/sdk/dartsdk-linux-x64-release.zip
Flutter 개발에서의 make 활용
Flutter 개발에서 make는 다음과 같은 용도로 활용된다.
- Flutter 프로젝트 빌드 자동화: 다양한 플랫폼(Android, iOS, Web)을 위한 빌드 과정을 자동화한다.
# Flutter 프로젝트 Makefile
FLUTTER = flutter
APP_NAME = my_flutter_app
ANDROID_DIR = build/app/outputs/flutter-apk
IOS_DIR = build/ios/iphoneos
WEB_DIR = build/web
.PHONY: all clean android ios web run-android run-ios run-web
all: android ios web
clean:
$(FLUTTER) clean
android:
$(FLUTTER) build apk --release
@echo "Android APK built at $(ANDROID_DIR)/app-release.apk"
ios:
$(FLUTTER) build ios --release --no-codesign
@echo "iOS app built at $(IOS_DIR)"
web:
$(FLUTTER) build web --release
@echo "Web app built at $(WEB_DIR)"
run-android:
$(FLUTTER) run -d android
run-ios:
$(FLUTTER) run -d ios
run-web:
$(FLUTTER) run -d chrome
- Flutter 테스트 자동화: 단위 테스트, 위젯 테스트, 통합 테스트를 자동화한다.
# Flutter 테스트 Makefile
test: test-unit test-widget test-integration
test-unit:
flutter test test/unit/
test-widget:
flutter test test/widget/
test-integration:
flutter test test/integration/
coverage:
flutter test --coverage
lcov --remove coverage/lcov.info '**/*.g.dart' -o coverage/lcov.info
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html
.PHONY: test test-unit test-widget test-integration coverage
- Flutter 환경 관리: 다양한 Flutter 채널(stable, beta, dev) 간 전환과 의존성 관리를 자동화한다.
# Flutter 환경 관리 Makefile
FLUTTER_CHANNEL ?= stable
setup:
flutter channel $(FLUTTER_CHANNEL)
flutter upgrade
flutter pub get
format:
flutter format lib/ test/
lint:
flutter analyze
gen-code:
flutter pub run build_runner build --delete-conflicting-outputs
gen-code-watch:
flutter pub run build_runner watch --delete-conflicting-outputs
.PHONY: setup format lint gen-code gen-code-watch
Flutter CI/CD 파이프라인에서의 curl과 make 통합
Flutter 프로젝트의 CI/CD 파이프라인에서 curl과 make를 함께 활용하는 방법이다.
# Flutter CI/CD Makefile
APP_NAME = my_flutter_app
# FIREBASE_PROJECT_ID = your-project-number (e.g., 123456789012)
FIREBASE_PROJECT_ID = 123456789012
# FIREBASE_TOKEN = $(shell cat .firebase-token)
FIREBASE_TOKEN ?= $(shell cat .firebase-token)
# FIREBASE_APP_ID = your-app-id (e.g., 1:123456789012:android:abcdef1234567890)
FIREBASE_APP_ID ?= 1:123456789012:android:abcdef1234567890
ci: setup test build deploy notify
setup:
flutter clean
flutter pub get
test:
flutter test
build:
flutter build apk --release
deploy: build/app/outputs/flutter-apk/app-release.apk # APK 파일이 존재해야 함을 명시 (선택적)
curl -X POST \
-H "Authorization: Bearer $(FIREBASE_TOKEN)" \
-H "Content-Type: application/octet-stream" \
--data-binary @$< \
"https://firebaseappdistribution.googleapis.com/v1/projects/$(FIREBASE_PROJECT_ID)/apps/$(FIREBASE_APP_ID)/releases:upload"
notify:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"text":"Flutter 앱이 성공적으로 배포되었습니다."}' \
$(SLACK_WEBHOOK_URL)
.PHONY: ci setup test build deploy notify
이 Makefile은 Flutter 앱을 빌드하고, Firebase App Distribution을 통해 배포한 후, Slack에 알림을 보내는 전체 CI/CD 프로세스를 자동화한다.
마치며
curl
과 make
는 각각 다른 목적을 가진 도구이지만, 개발자의 작업을 단순화하고 자동화하는 데 있어 매우 중요한 역할을 하고 있었다. curl은 인터넷을 통한 데이터 통신을 쉽게 만들어주며, make는 복잡한 빌드 프로세스를 자동화한다.
웹 개발 환경에서는 이 두 도구가 프론트엔드와 백엔드 개발 전반에 걸쳐 다양하게 활용되고 있다고 생각한다. 특히 Dart와 Flutter 개발에서도, curl은 API 테스트와 패키지 관리에, make는 빌드 및 테스트 자동화에 효과적으로 사용되고 있는 것을 볼 수 있다. 기본 개념을 이해하고 간단한 예제부터 시작하여 학습하니 이러한 도구들이 조금은 더 친숙하게 느껴졌다.
이상으로 2주차에 해당하는 글을 마무리한다. 다음 주차에는 1주차에 시도했다 실패했던 화면 공유에 대한 재도전을 하고, 그에 대한 기록을 포스팅 해보도록 하겠다.
참고 자료
- curl 공식 웹사이트: https://curl.se/
- curl 문서: https://curl.se/docs/
- GNU Make 공식 문서: https://www.gnu.org/software/make/manual/make.html
- GNU Make 사용 안내서: https://www.gnu.org/software/make/manual/html_node/index.html
- Makefiles 튜토리얼: https://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
- Flutter 공식 문서: https://flutter.dev/docs
- Dart 공식 문서: https://dart.dev/guides
- jq 매뉴얼: https://stedolan.github.io/jq/manual/