카테고리 없음

AndroidStudio 앱개발 서버 구축 종류

연나연 2025. 12. 24. 11:38

앱 개발 서버 구축의 필요성과 종류

1. 서버가 왜 필요한가?

[안드로이드 앱] ←→ [서버] ←→ [데이터베이스]
  (클라이언트)         (중개자)        (PostgreSQL)

2 서버의 역할

🔒 보안

  • DB 정보 숨기기: 앱에 DB 비밀번호 노출 방지
  • 인증/권한 관리: 로그인, 토큰 검증
  • 데이터 검증: 악의적인 요청 차단
❌ 나쁜 방식: 앱에서 DB 직접 연결
[앱] → [PostgreSQL]
문제: 앱 디컴파일 시 DB 비밀번호 노출!

✅ 좋은 방식: 서버를 통한 연결
[앱] → [서버] → [PostgreSQL]
앱은 서버 주소만 알고, DB 정보는 서버만 앎

💼 비즈니스 로직 처리

  • 복잡한 계산은 서버에서
  • 여러 테이블 조인, 집계 연산
  • 트랜잭션 관리
// ❌ 앱에서 처리 (비효율적)
val users = db.getAllUsers()
// 10만 명 val filtered = users.filter { it.age > 20 && it.city == "Seoul" }
// ✅ 서버에서 처리 (효율적)
// 서버: SELECT * FROM users WHERE age > 20 AND city = 'Seoul'
// 앱: 결과만 받음

🔄 데이터 동기화

  • 여러 사용자가 같은 데이터 공유
  • 실시간 업데이트
  • 버전 관리

📊 분석 및 모니터링

  • 사용자 행동 분석
  • 에러 로그 수집
  • 서버 성능 모니터링

2. 서버 구축 방식의 종류

2.1 통신 프로토콜별 분류

🌐 HTTP/HTTPS (REST API) - 가장 대중적 ⭐⭐⭐⭐⭐

특징:

  • 웹 표준 프로토콜
  • 요청-응답 방식
  • JSON 형식으로 데이터 교환
  • Stateless (상태 유지 안 함)

장점:

  • 개발이 쉬움
  • 라이브러리 풍부 (Retrofit, OkHttp)
  • 디버깅 용이
  • 방화벽 통과 쉬움
  • 문서화 쉬움 (Swagger)

단점:

  • 실시간 통신에는 부적합
  • 오버헤드가 큼 (헤더가 큼)
  • 양방향 통신 불가
// Retrofit 사용
interface ApiService {
    @POST("/login")
    suspend fun login(@Body request: LoginRequest): Response<LoginResponse>
    
    @GET("/users")
    suspend fun getUsers(): Response<List<User>>
}

// 사용
val response = apiService.login(LoginRequest("user", "pass"))
if (response.isSuccessful) {
    // 로그인 성공
}

 

🔌 Socket (TCP/UDP) - 회사에서 사용하는 방식 ⭐⭐⭐

특징:

  • 저수준 네트워크 통신
  • 연결 유지형 (Connection-oriented)
  • 바이너리 또는 커스텀 프로토콜
  • 양방향 통신 가능

장점:

  • 빠른 속도
  • 실시간 통신 가능
  • 프로토콜 자유도 높음
  • 오버헤드 작음
  • 산업용/IoT에 적합

단점:

  • 개발이 복잡함
  • 디버깅 어려움
  • 방화벽 문제 가능
  • 프로토콜 직접 설계 필요
// C# 서버
// 1. 헤더 10바이트 받기
[STX][CMD][LEN][LEN][LEN][LEN][NUL][NUL][NUL][ETX]

// 2. 바디 받기
[실제 데이터...]

// 3. DB 처리 후 응답

 

특징:

  • 정확한 바이트 단위 제어
  • 헤더에 메타데이터 포함
  • STX/ETX로 패킷 구분
  • 커스텀 프로토콜

사용 사례:

  • 공장 자동화 (PLC 통신)
  • 금융 시스템 (빠른 거래)
  • 게임 서버 (실시간 동기화)
  • IoT 기기 제어
  • 산업용 모니터링 시스템 ← 회사 프로젝트

대중성: ★★★☆☆ (특수 목적용)

 

⚡ WebSocket - 실시간 양방향 통신 ⭐⭐⭐⭐

특징:

  • HTTP로 시작해서 WebSocket으로 업그레이드
  • 연결 유지형
  • 양방향 실시간 통신
  • 텍스트/바이너리 지원

장점:

  • 실시간 통신에 최적
  • 서버에서 클라이언트로 푸시 가능
  • HTTP보다 오버헤드 작음
  • 브라우저 지원 좋음

단점:

  • 연결 유지로 서버 부하
  • 구현이 REST보다 복잡
// OkHttp WebSocket
val client = OkHttpClient()
val request = Request.Builder().url("ws://example.com/chat").build()
val ws = client.newWebSocket(request, object : WebSocketListener() {
    override fun onMessage(webSocket: WebSocket, text: String) {
        // 메시지 받음
        println("받은 메시지: $text")
    }
})

// 메시지 보내기
ws.send("Hello Server!")

 

사용 사례:

  • 채팅 앱 (카카오톡, 슬랙)
  • 실시간 알림
  • 협업 도구 (구글 독스)
  • 주식 시세
  • 게임

대중성: ★★★★☆ (실시간 앱에서 필수)

 

2.2 서버 구축 방식별 분류

1️⃣ 직접 서버 구축 (Traditional Server)

  - 서버 프로그램 직접 개발

  - c# (.NET) : <-회사방식

  - Node.js : (Express.js)

  - Python : (Flask, FastAPI)

  - JAVA : (Spring Boot) 

 

 

2️⃣ BaaS (Backend as a Service) - Firebase 같은 것

ex) Firebase

- 특징 1) 서버 코드 작성 불필요

          2) 클라우드 기반

          3) sdk 제공

주요 BaaS:

  • Firebase (Google) - 가장 인기
  • AWS Amplify (Amazon)
  • Supabase (오픈소스 Firebase 대안)
  • Back4App (Parse 기반)

3️⃣ 클라우드 서비스 (IaaS/PaaS)

IaaS (Infrastructure as a Service):

  • AWS EC2, Google Compute Engine
  • 가상 서버 빌려서 직접 설정

PaaS (Platform as a Service):

  • Heroku, AWS Elastic Beanstalk
  • 코드만 올리면 자동 배포

4.1 프로젝트 유형별 추천

프로젝트 유형추천 방식이유
학교 과제 REST API (Node.js) 빠르고 쉬움
스타트업 MVP Firebase 서버 관리 불필요
채팅 앱 WebSocket 실시간 필요
전자상거래 REST API (Java Spring) 안정적, 트랜잭션
게임 Socket or WebSocket 실시간, 저지연
산업용/IoT TCP Socket (C#/C++) 안정성, 제어
금융 앱 REST API + gRPC 보안, 성능

 

나는 socket으로 개발하여야 하는 상황이올시다.