소프트웨어 디자인, 설계

아키텍쳐 설계 원리

아키텍쳐 설계 기술합니다. 설계라기 보단 상용적으로 많이 사용하는 툴들과 각 개념별 정의를 공유합니다.


1. OS (Operating System)

정의

운영체제(OS)는 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하는 시스템 소프트웨어입니다. 서버 인프라에서는 운영체제가 클라우드 서버 또는 물리적 서버에서 동작하며, 다양한 서비스를 지원합니다.

주요 툴

  • Linux (Ubuntu, CentOS, Debian 등): 대부분의 서버 환경에서 사용
  • Windows Server: 주로 Windows 기반 시스템에서 사용

셋업 방법

  • Linux: apt-get 또는 yum으로 필요한 패키지 설치
  • Windows Server: GUI 환경에서 설치, 설정

2. Version Control Systems (VCS)

정의

버전 관리 시스템(VCS)은 소프트웨어 개발 시 파일들의 변경 이력을 관리하는 시스템입니다. 이는 팀 협업과 코드 변경 관리에 중요한 역할을 합니다.

주요 툴

  • Git: 분산형 버전 관리 시스템
  • SVN: 중앙 집중형 버전 관리 시스템

셋업 방법

  • Git: git init, git clone으로 저장소 설정, git push, git pull로 코드 관리
  • SVN: svn checkout, svn commit으로 코드 관리

3. VCS Hosting

정의

VCS 호스팅은 코드 저장소를 클라우드에서 관리할 수 있게 해주는 서비스입니다. 주로 팀 협업을 위한 코드 저장소를 호스팅합니다.

주요 툴

  • GitHub: 공개/비공개 Git 저장소 호스팅
  • GitLab: Git 저장소 호스팅 및 CI/CD 통합 제공
  • Bitbucket: Atlassian에서 제공하는 Git 저장소 서비스

셋업 방법
GitHub에서 저장소 생성 후 로컬에서 git remote add origin <repository-url>로 연결

4. Containers

정의
컨테이너는 애플리케이션과 그 종속성들을 하나의 패키지로 묶어 실행할 수 있게 해주는 가상화 기술입니다. 이를 통해 애플리케이션은 환경에 독립적으로 실행됩니다.

주요 툴

  • Docker: 가장 인기 있는 컨테이너화 툴
  • Kubernetes: 컨테이너 오케스트레이션 툴

셋업 방법

  • Docker: docker build, docker run으로 이미지 생성 및 실행
  • Kubernetes: kubectl 명령어로 Pods, Services, Deployments 등을 관리

5. Proxy Servers

정의
프록시 서버는 클라이언트와 서버 사이에 위치해 요청을 중계하거나 차단하는 서버입니다.

종류

  • Forward Proxy: 클라이언트의 요청을 중계하는 프록시 서버
  • Reverse Proxy: 서버의 요청을 클라이언트 대신 처리하는 프록시 서버
  • Caching Server: 자주 요청되는 데이터를 캐싱하여 빠르게 제공하는 서버

주요 툴

  • Nginx: 리버스 프록시, 로드 밸런서, 캐싱 서버로 사용
  • HAProxy: 고성능 리버스 프록시 및 로드 밸런서

셋업 방법

Nginx Reverse Proxy:

server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
}
}

6. Web Servers

정의
웹 서버는 클라이언트로부터 HTTP 요청을 받아들여 웹 페이지를 반환하는 서버입니다.

주요 툴

Nginx: 경량화된 웹 서버 및 리버스 프록시 Apache: 확장성과 모듈화가 뛰어난 웹 서버 Tomcat: 자바 기반 웹 애플리케이션 서버

server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}

Apache: httpd.conf 파일에서 서버 설정

7. Networking & Protocols

정의
네트워킹은 서버들이 서로 통신할 수 있도록 해주는 기술적 연결망입니다. 여러 프로토콜들이 이 통신을 지원합니다.

주요 프로토콜

HTTP/HTTPS: 웹 애플리케이션을 위한 프로토콜
TCP/IP: 전송 계층과 인터넷 계층에서 사용되는 기본 프로토콜
DNS: 도메인 이름을 IP 주소로 변환하는 시스템

셋업 방법

Firewall: ufw 명령어를 사용해 포트 차단
DNS 설정: bind9 또는 Cloud DNS 서비스

8. Cloud Providers

정의
클라우드 서비스 제공자는 서버, 스토리지, 데이터베이스 등을 인터넷을 통해 제공하는 서비스입니다.

주요 툴
AWS (Amazon Web Services): EC2, S3, RDS 등을 제공
Google Cloud: Compute Engine, Cloud Storage, BigQuery
Azure: 가상 머신, Blob Storage, SQL Database

셋업 방법
AWS EC2: EC2 인스턴스를 생성하고, ssh를 통해 연결
Google Cloud: GCP 콘솔에서 VM 인스턴스 생성 후, gcloud CLI로 연결

9. Serverless

정의
서버리스를 사용하면 서버를 직접 관리하지 않고도 애플리케이션을 실행할 수 있습니다. 코드 실행에 필요한 자원을 자동으로 할당해줍니다.

주요 툴
AWS Lambda: 서버리스 컴퓨팅 서비스
Google Cloud Functions: Google의 서버리스 컴퓨팅 서비스
Azure Functions: Microsoft의 서버리스 서비스

셋업 방법
AWS Lambda: AWS Management Console에서 함수 생성 후, API Gateway와 연동

10. Provisioning

정의
서버 및 인프라 리소스를 자동화하여 설정하고 배포하는 작업입니다.

주요 툴
Terraform: 인프라를 코드로 정의하고 관리할 수 있게 해주는 툴
Ansible: 자동화된 서버 설정 및 관리 도구
Chef: 서버 인프라를 코드로 관리

셋업 방법
Terraform: .tf 파일을 작성하여 인프라 정의 후 terraform apply 명령어로 배포 Ansible: Playbook을 작성하여 서버에 설정 적용

11. CI/CD Tools

정의
CI/CD는 Continuous Integration/Continuous Deployment로, 코드의 변경을 자동화하여 빌드, 테스트, 배포하는 프로세스입니다.

주요 툴
Jenkins: 오픈 소스 CI/CD 툴
GitLab CI: GitLab의 내장 CI/CD 툴
CircleCI: 클라우드 기반 CI/CD 서비스

셋업 방법
Jenkins: Jenkinsfile을 작성하여 자동화된 파이프라인 설정
GitLab CI: .gitlab-ci.yml 파일을 작성하여 CI/CD 파이프라인 설정

12. Monitoring

정의
모니터링은 시스템, 애플리케이션, 네트워크 등의 상태를 지속적으로 추적하는 작업입니다.

12.1 Sentry

개념

  • Sentry는 오류 추적 및 모니터링 플랫폼으로, 실시간으로 오류를 감지하고 알림을 보내줍니다.
  • 스택 트레이스, 사용자 정보, 환경 정보 등을 포함한 에러 리포트를 제공합니다.

역할

  • 예외 발생 시 자동으로 캡처
  • 버그 추적 및 성능 모니터링
  • Slack, Discord, 이메일 등 다양한 채널로 알림 연동

Express에서 설정 및 사용 예시

npm install @sentry/node @sentry/tracing
// sentry.ts
import * as Sentry from "@sentry/node";
import { Integrations } from "@sentry/tracing";

export const initSentry = (app: any) => {
  Sentry.init({
    dsn: "<YOUR_SENTRY_DSN>",
    integrations: [
      new Integrations.Express({ app }),
    ],
    tracesSampleRate: 1.0, // 성능 추적 비율
  });

  app.use(Sentry.Handlers.requestHandler());
  app.use(Sentry.Handlers.tracingHandler());
};
// app.ts or server.ts
import express from 'express';
import { initSentry } from './sentry';

const app = express();
initSentry(app);

app.get('/', function mainHandler(req, res) {
  throw new Error("My first Sentry error!");
});

app.use(Sentry.Handlers.errorHandler());

12.2 Winston

개념

  • Winston은 Node.js에서 가장 널리 사용되는 로깅 라이브러리 중 하나입니다.
  • 로그 수준(info, warn, error)에 따라 콘솔 또는 파일로 로깅 가능

역할

  • 로그 관리 및 추적
  • 운영 환경에서 로그 수집 및 분석용으로 사용됨

Express에서 설정 및 사용 예시

npm install winston
// logger.ts
import { createLogger, transports, format } from 'winston';

export const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp(),
    format.printf(({ timestamp, level, message }) => {
      return `[${timestamp}] ${level}: ${message}`;
    })
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'error.log', level: 'error' }),
    new transports.File({ filename: 'combined.log' }),
  ],
});
// app.ts
import express from 'express';
import { logger } from './logger';

const app = express();

app.use((req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
});

app.get('/', (req, res) => {
  logger.info("Main page visited");
  res.send("Hello World");
});

app.use((err, req, res, next) => {
  logger.error(err.stack);
  res.status(500).send('Something broke!');
});

12.3 APM (Application Performance Monitoring)

개념

  • APM은 애플리케이션의 성능과 가용성을 모니터링하는 도구입니다.
  • 대표적인 APM: Elastic APM, New Relic, Datadog

역할

  • API 응답 시간, 트랜잭션 추적
  • 오류 발생 지점, DB 쿼리 속도 등을 시각화하여 제공

Elastic APM Express 셋업 예시

npm install elastic-apm-node
// apm.ts
const apm = require('elastic-apm-node').start({
  serviceName: 'your-service-name',
  serverUrl: 'http://localhost:8200',
});

export default apm;
// app.ts
import express from 'express';
import apm from './apm';

const app = express();

app.get('/', (req, res) => {
  res.send('APM is working');
});

app.listen(3000);

APM은 서비스 시작 시 가장 먼저 초기화해야 합니다 (최상단 import).


정리

도구역할주요 기능
Sentry에러 추적스택 트레이스, 사용자 정보, 알림 연동
Winston로깅로그 레벨별 파일/콘솔 기록
APM성능 모니터링응답 시간, 트랜잭션 분석, DB 지표 등

각 도구는 함께 조합해서 사용할 수 있으며, Sentry + Winston 조합은 에러 추적 + 로깅 분석을 동시에 제공하고, APM까지 도입하면 성능까지 모니터링할 수 있어 현업에서 자주 사용됩니다.

Previous
DB 설계