카테고리 없음

[유레카 / 백엔드] TIL - 18 (AWS)

coding-quokka101 2026. 1. 13. 20:46

 

AWS Went Down. The World Felt It. Here’s Why ❘ by TheMindShift ❘ CodeToDeploy ❘ Medium


📌 들어가며

안녕하세요! 멀티캠퍼스 유레카 3기 백엔드 과정을 수강 중인 개발자 지망생입니다.

요즘 **AWS(Amazon Web Services)**를 독학으로 공부하고 있어요! 부트캠프에서 Spring Boot로 프로젝트를 열심히 만들고 있는데, 문득 이런 생각이 들더라고요.

"내가 만든 프로젝트, 친구들한테 보여주고 싶은데... localhost:8080은 내 컴퓨터에서만 되잖아? 😭"

그래서 인터넷을 뒤지기 시작했어요. "Spring Boot 배포", "서버 운영 방법" 같은 키워드로 검색하다 보니 AWS라는 단어가 계속 나오더라고요.

처음 AWS 콘솔에 들어갔을 때의 충격은 아직도 생생해요.

"EC2, S3, RDS, Lambda, VPC, CloudFront, Route53... 이게 다 뭐야? 😱 내가 NASA 들어온 건가?"

수백 개의 서비스가 눈앞에 펼쳐졌고, 솔직히 겁났어요. "이거 혼자 공부할 수 있을까?" 하지만 여기저기 블로그 글 읽고, 유튜브 보고, 공식 문서 뒤지다 보니 깨달았습니다.

"아! 처음엔 딱 3가지만 알면 되는구나! EC2, S3, RDS!"

그래서 주말 내내 혼자 삽질하면서 AWS의 3대 핵심 서비스를 완벽하게 정복해봤습니다! 😊


🎯 Today I Learned

✅ AWS가 무엇이고 왜 필요한가?
✅ EC2 (Elastic Compute Cloud) - 클라우드 컴퓨터
✅ S3 (Simple Storage Service) - 클라우드 저장소
✅ RDS (Relational Database Service) - 클라우드 데이터베이스
✅ 세 서비스가 어떻게 함께 동작하는가?
✅ 프리티어로 무료로 시작하는 법
✅ 실전 배포 시나리오

🤔 AWS, 왜 배워야 할까?

내 컴퓨터로 서비스하면 안 되나?

처음에 저도 이렇게 생각했어요.

"Spring Boot로 만든 프로젝트, 
 그냥 내 노트북 켜놓고 서비스하면 안 돼?"

문제점:

24시간 켜놔야 함: 자면 서비스 중단 ❌ 전기세 폭탄: 한 달 내내 켜두면... ❌ 트래픽 폭증: 사용자 100명만 들어와도 내 노트북 뻗음 ❌ IP 주소 변경: 인터넷 재연결하면 주소 바뀜 ❌ 보안 취약: 내 집 IP가 공개됨

AWS를 쓰면:

무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어

24시간 운영: 아마존 데이터센터에서 항상 켜져있음 ✅ 저렴한 비용: 프리티어로 1년 무료 ✅ 무한 확장: 사용자 1명이든 1만명이든 대응 가능 ✅ 고정 IP 제공: Elastic IP로 주소 고정 ✅ 보안 강화: AWS가 관리하는 안전한 환경

클라우드 컴퓨팅이란?

전통적인 방식:
컴퓨터 구매 → 설치 → 운영 → 유지보수 → 업그레이드
💰 초기 비용: 수백만원
💰 전기세: 월 10만원
💰 관리 인력: 필요

클라우드 방식:
AWS 가입 → 클릭 몇 번 → 바로 사용 → 쓴만큼만 과금
💰 초기 비용: 0원
💰 월 비용: 1만원 미만 (프리티어면 0원!)
💰 관리: AWS가 다 해줌

클라우드의 핵심 개념:

  • 온디맨드(On-Demand): 필요할 때 바로 생성
  • 종량제(Pay-as-you-go): 쓴만큼만 결제
  • 확장성(Scalability): 자동으로 크기 조절
  • 고가용성(High Availability): 거의 안 꺼짐

💻 1. EC2 - 클라우드 속 내 컴퓨터

EC2가 뭐야?

EC2 = Elastic Compute Cloud
     ↓
"클라우드에 있는 가상 컴퓨터"

쉽게 말하면, 아마존 데이터센터에 있는 컴퓨터를 빌려 쓰는 것이에요!

 

EC2를 왜 써야 할까?

비유로 이해하기:

상황: 게임방을 운영한다고 가정

일반 방식 (내 서버):
- 컴퓨터 30대 구매: 3,000만원
- 매장 임대료: 월 300만원
- 전기세: 월 50만원
- 손님이 없어도 고정 비용 발생 😭

EC2 방식 (클라우드):
- 컴퓨터 대여: 시간당 100원
- 매장 불필요
- 손님 없으면 비용 0원
- 손님 많으면 자동으로 컴퓨터 추가 ✅

EC2의 핵심 개념

1. 인스턴스 (Instance)

인스턴스 = 가상 컴퓨터 한 대

예시:
- t2.micro: 작은 컴퓨터 (프리티어 무료)
  CPU: 1개
  RAM: 1GB
  → 개인 프로젝트, 학습용

- t2.medium: 중간 컴퓨터
  CPU: 2개
  RAM: 4GB
  → 소규모 서비스

- c5.4xlarge: 큰 컴퓨터
  CPU: 16개
  RAM: 32GB
  → 대규모 서비스

2. AMI (Amazon Machine Image)

AMI = 운영체제 + 기본 설정

예시:
- Amazon Linux 2
- Ubuntu 20.04
- Windows Server 2019

설치된 상태로 제공되서 편함!

3. 보안 그룹 (Security Group)

보안 그룹 = 방화벽

예시:
포트 22 (SSH): 내 IP에서만 접속 허용
포트 80 (HTTP): 모든 IP에서 접속 허용
포트 3306 (MySQL): 차단

→ 해킹 방지!

EC2 실전 활용

Spring Boot 애플리케이션 배포:

# 1. EC2 인스턴스 생성
# AWS 콘솔에서 클릭 몇 번으로 완료

# 2. SSH로 접속
ssh -i "내키.pem" ubuntu@ec2-13-125-123-456.ap-northeast-2.compute.amazonaws.com

# 3. Java 설치
sudo apt update
sudo apt install openjdk-17-jdk

# 4. 프로젝트 업로드
scp -i "내키.pem" myproject.jar ubuntu@...:/home/ubuntu/

# 5. 실행
java -jar myproject.jar

# 완성! 🎉
# 이제 전 세계 어디서든 접속 가능!

실제 프로젝트 구조:

EC2 인스턴스
├── Spring Boot (포트 8080)
│   ├── REST API
│   ├── 비즈니스 로직
│   └── HTML/CSS/JS 서빙
├── Nginx (포트 80)
│   └── 리버스 프록시
└── MySQL (포트 3306)
    └── 데이터베이스

EC2의 장점

유연성: 언제든 크기 조절 가능 ✅ 빠른 시작: 몇 분 안에 서버 생성 ✅ 전 세계 배포: 서울, 도쿄, 미국 등 선택 ✅ 백업 쉬움: 스냅샷으로 즉시 백업 ✅ 고정 IP: Elastic IP로 IP 고정

EC2 프리티어

무료로 제공:
- t2.micro 인스턴스
- 월 750시간 (= 31일)
- 1년 동안 무료
- 30GB 스토리지

→ 개인 프로젝트 충분!

📦 2. S3 - 클라우드 저장소

[AWS] S3 Bucket 생성하기 & S3 퍼블릭 ACL 설정하기 — minji's engineering note

S3가 뭐야?

S3 = Simple Storage Service
     ↓
"클라우드에 있는 무한대 USB"

비유:

일반 USB: 64GB, 256GB 같이 용량 제한
S3: 무한대! (페타바이트까지 가능)

일반 USB: 물리적으로 가지고 다녀야 함
S3: URL만 있으면 전 세계 어디서든 접근

 

 

S3를 왜 써야 할까?

문제 상황:

// Spring Boot 프로젝트
@PostMapping("/upload")
public String uploadImage(@RequestParam("file") MultipartFile file) {
    // 문제: 이미지를 어디에 저장?
    
    // ❌ 나쁜 방법: EC2 서버에 저장
    file.transferTo(new File("/home/ubuntu/images/" + file.getOriginalFilename()));
    // 문제점:
    // 1. EC2 스토리지 30GB 금방 참
    // 2. 서버 재시작하면 파일 사라질 수도
    // 3. 여러 서버 쓰면 파일 동기화 문제
    
    // ✅ 좋은 방법: S3에 저장
    s3Client.putObject("my-bucket", file.getOriginalFilename(), file.getBytes());
    // 장점:
    // 1. 용량 무제한
    // 2. 파일 절대 안 사라짐
    // 3. 여러 서버에서 동일하게 접근 가능
}

S3의 핵심 개념

1. 버킷 (Bucket)

버킷 = 최상위 폴더

예시:
- my-project-images
  └── profiles/
      ├── user1.jpg
      └── user2.png
  └── posts/
      └── post123.jpg

버킷 이름 규칙:
- 전 세계에서 고유해야 함
- 소문자만 가능
- 3~63자

2. 객체 (Object)

객체 = 파일

구성:
- Key: 파일 경로 (예: "profiles/user1.jpg")
- Value: 파일 데이터
- Metadata: 파일 정보 (크기, 타입 등)

3. URL 접근

S3에 업로드하면 URL 생성:

https://my-bucket.s3.ap-northeast-2.amazonaws.com/profiles/user1.jpg

이 URL로 어디서든 다운로드 가능!

S3 실전 활용

프로필 이미지 업로드 시스템:

@Service
@RequiredArgsConstructor
public class ImageService {
    
    private final AmazonS3 s3Client;
    
    @Value("${cloud.aws.s3.bucket}")
    private String bucket;
    
    public String uploadProfileImage(MultipartFile file, Long userId) {
        try {
            // 파일명 생성 (중복 방지)
            String fileName = "profiles/" + userId + "_" + 
                            System.currentTimeMillis() + "_" + 
                            file.getOriginalFilename();
            
            // S3에 업로드
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentLength(file.getSize());
            metadata.setContentType(file.getContentType());
            
            s3Client.putObject(
                bucket, 
                fileName, 
                file.getInputStream(), 
                metadata
            );
            
            // URL 반환
            return s3Client.getUrl(bucket, fileName).toString();
            
        } catch (IOException e) {
            throw new RuntimeException("파일 업로드 실패", e);
        }
    }
    
    public void deleteProfileImage(String fileUrl) {
        // URL에서 파일명 추출
        String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
        
        // S3에서 삭제
        s3Client.deleteObject(bucket, "profiles/" + fileName);
    }
}

실제 사용 예:

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
    
    private final ImageService imageService;
    private final UserService userService;
    
    @PostMapping("/{id}/profile-image")
    public ResponseEntity<String> uploadProfileImage(
            @PathVariable Long id,
            @RequestParam("file") MultipartFile file) {
        
        // 1. S3에 업로드
        String imageUrl = imageService.uploadProfileImage(file, id);
        
        // 2. DB에 URL 저장
        userService.updateProfileImage(id, imageUrl);
        
        return ResponseEntity.ok(imageUrl);
    }
}

S3의 장점

무제한 용량: 걱정 없이 업로드 ✅ 내구성 99.999999999%: 파일 절대 안 사라짐 ✅ CDN 연동: CloudFront로 빠른 다운로드 ✅ 정적 웹 호스팅: HTML/CSS/JS 직접 서빙 가능 ✅ 버전 관리: 파일 수정 이력 관리

S3 vs EC2 스토리지

비교 EC2 스토리지 S3

용량 30GB (프리티어) 5GB (프리티어)
확장 추가 구매 필요 무제한 자동 확장
용도 OS, 애플리케이션 이미지, 동영상, 파일
속도 빠름 (로컬) 조금 느림 (네트워크)
백업 수동 자동 (99.999999999%)
비용 비쌈 저렴

 

S3 프리티어

무료로 제공:
- 5GB 스토리지
- PUT 요청 2,000회
- GET 요청 20,000회
- 15GB 데이터 전송
- 1년 동안 무료

→ 개인 프로젝트 충분!

🗄️ 3. RDS - 클라우드 데이터베이스

RDS가 뭐야?

RDS = Relational Database Service
      ↓
"클라우드에서 관리해주는 데이터베이스"

왜 EC2에 MySQL 안 깔고 RDS를 써야 할까?

https://shin-91.github.io/mariaDB/

 

EC2에 직접 MySQL 설치하면:

문제점:

1. 설치/설정 복잡
   sudo apt install mysql-server
   sudo mysql_secure_installation
   vim /etc/mysql/mysql.conf.d/mysqld.cnf
   → 귀찮음 😭

2. 백업 직접 해야 함
   mysqldump -u root -p mydb > backup.sql
   → 까먹으면 데이터 날아감 😱

3. 장애 발생 시 직접 복구
   → 새벽에 전화 와서 서버 살려야 함 😨

4. 성능 최적화 직접
   → DB 전문가 아니면 힘듦 😵

5. 보안 패치 직접
   → 해킹당할 위험 ⚠️

RDS를 쓰면:

장점:

1. 클릭 몇 번으로 DB 생성
   → 5분이면 완성! ✅

2. 자동 백업
   → 매일 새벽 자동으로 백업 ✅

3. 장애 시 자동 복구
   → Multi-AZ로 자동 전환 ✅

4. 성능 자동 최적화
   → AWS가 알아서 튜닝 ✅

5. 보안 패치 자동
   → AWS가 알아서 업데이트 ✅

 

RDS의 핵심 개념

1. DB 엔진

지원하는 데이터베이스:

- MySQL (가장 많이 씀)
- PostgreSQL
- MariaDB
- Oracle
- SQL Server
- Aurora (AWS 자체 DB, 제일 빠름)

2. DB 인스턴스

인스턴스 = 데이터베이스 서버

예시:
- db.t3.micro (프리티어 무료)
  CPU: 2개
  RAM: 1GB
  Storage: 20GB
  → 개인 프로젝트

- db.t3.medium
  CPU: 2개
  RAM: 4GB
  Storage: 100GB
  → 소규모 서비스

3. 자동 백업

설정 가능:
- 백업 보관 기간: 1~35일
- 백업 시간: 새벽 3시 (서비스 한가한 시간)
- 스냅샷: 언제든 수동 백업 가능

→ 데이터 절대 안 날아감!

RDS 실전 활용

Spring Boot 연동:

# application.yml
spring:
  datasource:
    # RDS 엔드포인트
    url: jdbc:mysql://mydb.abc123.ap-northeast-2.rds.amazonaws.com:3306/myproject
    username: admin
    password: mypassword
    driver-class-name: com.mysql.cj.jdbc.Driver
    
  jpa:
    hibernate:
      ddl-auto: validate  # 운영에서는 validate!
    show-sql: true
    properties:
      hibernate:
        format_sql: true

보안 그룹 설정:

RDS 보안 그룹:

인바운드 규칙:
- 포트 3306 (MySQL)
- 소스: EC2 보안 그룹만 허용
  → EC2에서만 접근 가능
  → 외부 해킹 차단!

아웃바운드 규칙:
- 모두 허용

DB 초기 설정:

-- 1. RDS에 접속 (로컬 PC에서)
mysql -h mydb.abc123.ap-northeast-2.rds.amazonaws.com -u admin -p

-- 2. 데이터베이스 생성
CREATE DATABASE myproject CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 3. 사용자 생성 (선택)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'apppass';
GRANT ALL PRIVILEGES ON myproject.* TO 'appuser'@'%';
FLUSH PRIVILEGES;

-- 4. 테이블 생성은 Spring Boot가 자동으로!

RDS의 고급 기능

1. Multi-AZ (다중 가용 영역)

설정하면:
- 서울 리전의 2개 가용 영역에 DB 복사본
- 주 DB 장애 시 자동으로 보조 DB로 전환
- 다운타임 거의 0

예시:
주 DB (서울-A)  ───복제───>  보조 DB (서울-B)
   ⬇ 장애 발생!
보조 DB가 주 DB로 자동 승격 (30초 이내)

2. Read Replica (읽기 전용 복제본)

용도:
- 읽기 성능 향상
- 주 DB에서 쓰기만
- 복제본에서 읽기만

예시:
주 DB (쓰기) ───복제───> 복제본 1 (읽기)
                      └──> 복제본 2 (읽기)
                      └──> 복제본 3 (읽기)

→ 사용자 많아져도 빠름!

3. 자동 스케일링

스토리지 자동 확장:
- 저장 공간 부족하면 자동으로 늘어남
- 최대 크기 설정 가능
- 서비스 중단 없이 확장

→ 용량 걱정 끝!

EC2 MySQL vs RDS 비교

https://www.youtube.com/watch?v=gmlSoEDZuyE

비교 EC2 MySQL RDS

설정 수동 설치/설정 클릭 몇 번
백업 직접 스크립트 작성 자동
복구 수동 복구 자동
패치 직접 업데이트 자동
모니터링 직접 구축 기본 제공
비용 저렴 조금 비쌈
관리 어려움 쉬움

 

RDS 프리티어

무료로 제공:
- db.t3.micro 인스턴스 (또는 db.t2.micro)
- 월 750시간 (= 31일)
- 20GB 스토리지
- 20GB 백업 스토리지
- 1년 동안 무료

→ 개인 프로젝트 충분!

🔗 3대 서비스 통합: 실전 아키텍처

전체 구조

흐름:
1. 사용자 요청 → EC2
2. EC2 ←→ RDS (데이터 읽기/쓰기)
3. EC2 ←→ S3 (파일 업로드/다운로드)
4. EC2 → 사용자 응답

 

실제 프로젝트 시나리오

시나리오: Instagram 같은 SNS 만들기

// 1. 게시글 작성
@PostMapping("/posts")
public ResponseEntity<PostDto> createPost(
        @RequestParam("image") MultipartFile image,
        @RequestParam("content") String content,
        @AuthenticationPrincipal User user) {
    
    // EC2에서 실행 중
    
    // 1단계: S3에 이미지 업로드
    String imageUrl = s3Service.uploadImage(image);
    
    // 2단계: RDS에 게시글 저장
    Post post = Post.builder()
            .userId(user.getId())
            .content(content)
            .imageUrl(imageUrl)
            .build();
    
    postRepository.save(post);  // → RDS
    
    return ResponseEntity.ok(PostDto.from(post));
}

// 2. 피드 조회
@GetMapping("/feed")
public ResponseEntity<List<PostDto>> getFeed(
        @AuthenticationPrincipal User user) {
    
    // EC2에서 실행 중
    
    // 1단계: RDS에서 게시글 목록 조회
    List<Post> posts = postRepository
            .findByUserIdIn(user.getFollowingIds())
            .limit(20);
    
    // 2단계: S3 이미지 URL은 이미 DB에 저장되어 있음
    // 그냥 반환하면 브라우저가 S3에서 이미지 다운로드
    
    return ResponseEntity.ok(
        posts.stream()
             .map(PostDto::from)
             .collect(Collectors.toList())
    );
}

프론트엔드 (React):

function PostCard({ post }) {
  return (
    <div className="post">
      {/* S3에서 이미지 직접 로드 */}
      <img 
        src={post.imageUrl} 
        alt="post" 
      />
      
      <p>{post.content}</p>
      
      <div>
        <button onClick={() => likePost(post.id)}>
          좋아요 {post.likeCount}
        </button>
      </div>
    </div>
  );
}

// 좋아요 버튼 클릭 → EC2 → RDS 업데이트
async function likePost(postId) {
  await fetch(`/api/posts/${postId}/like`, {
    method: 'POST'
  });
}

비용 계산 (프리티어 활용)

월 비용 (프리티어 1년간):

EC2:
- t2.micro: 0원 (750시간 무료)

S3:
- 5GB: 0원
- 추가 10GB: 약 300원

RDS:
- db.t3.micro: 0원 (750시간 무료)
- 20GB: 0원

합계: 약 300원/월

프리티어 끝나면:
- EC2: 약 10,000원/월
- S3: 약 1,000원/월
- RDS: 약 15,000원/월
합계: 약 26,000원/월

→ PC방 하루 이용료보다 싸음!

💡 오늘 나는 무엇을 잘했는가 (성취)

1. miniproject2를 AWS에 배포 성공!

로컬에서만 돌아가던 프로젝트를 드디어 인터넷에 올렸어요!

Before (로컬):

http://localhost:8080
→ 내 컴퓨터에서만 접속 가능

After (AWS):

http://ec2-13-125-123-456.ap-northeast-2.compute.amazonaws.com
→ 전 세계 어디서든 접속 가능!

친구들한테 링크 보내줬더니 "오! 진짜 되네!" 하면서 신기해하더라고요 😆

2. S3로 이미지 업로드 시스템 구축

예전엔 이미지를 서버에 직접 저장했는데, S3를 쓰니까 훨씬 안정적이에요!

개선 사항:

Before:
- EC2 30GB 용량 금방 참
- 서버 재시작하면 이미지 날아갈 뻔

After:
- S3 무제한 용량
- 이미지 절대 안 사라짐
- URL로 바로 접근 가능

3. RDS로 DB 관리 자동화

MySQL 백업을 까먹어서 데이터 날린 적이 있었는데, RDS는 자동 백업이라 안심!

매일 새벽 3시 자동 백업
→ 7일치 백업 보관
→ 실수로 데이터 삭제해도 복구 가능!

🔧 어떤 문제를 겪었고, 어떻게 개선할까 (개선점)

문제 1: EC2 SSH 접속이 안 됨

처음에 EC2 만들고 SSH로 접속하려는데 안 되더라고요 😭

$ ssh -i mykey.pem ubuntu@ec2-13-125-123-456...
Permission denied (publickey)

원인:

  • .pem 파일 권한이 너무 열려있음

해결:

# 권한 변경
chmod 400 mykey.pem

# 다시 접속 → 성공! ✅
ssh -i mykey.pem ubuntu@...

문제 2: S3 업로드 시 403 Forbidden 에러

이미지를 S3에 업로드하려는데 권한 오류가 계속 났어요.

AmazonS3Exception: Access Denied (403)

원인:

  • IAM 권한 설정을 안 함

해결:

// IAM 정책 추가
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

문제 3: RDS 접속이 안 됨

로컬 PC에서 RDS에 접속하려는데 타임아웃 에러...

$ mysql -h mydb.abc123...rds.amazonaws.com -u admin -p
ERROR 2003: Can't connect to MySQL server

원인:

  • 보안 그룹에서 내 IP 허용 안 함

해결:

RDS 보안 그룹 → 인바운드 규칙 편집
- 유형: MySQL/Aurora
- 포트: 3306
- 소스: 내 IP

→ 접속 성공! ✅

개선 계획

✅ Docker로 배포 자동화
   → 매번 수동 배포하는 거 귀찮음

✅ CloudWatch로 모니터링
   → 서버 상태 실시간 확인

✅ Auto Scaling 설정
   → 트래픽 많으면 자동으로 서버 추가

✅ CloudFront CDN 연동
   → 이미지 로딩 속도 향상

📚 오늘 배운 것 (학습)

1. 클라우드는 '임대 서비스'다

옛날:
서버 = 집 사는 것
→ 초기 비용 크고, 유지보수 힘듦

지금:
클라우드 = 월세 사는 것
→ 초기 비용 0, 쓴만큼만 결제

이 개념을 이해하니까 AWS가 왜 혁명적인지 알겠더라고요!

2. 역할 분담이 중요하다

EC2: 계산하는 일 (CPU)
S3: 파일 저장하는 일 (Storage)
RDS: 데이터 관리하는 일 (Database)

하나의 서버에 다 때려 넣지 말고
각자 잘하는 일만 시키자!

3. 프리티어 활용이 꿀팁

1년 무료 = 26만원 절약!

→ 학생들한테 최고
→ 개인 프로젝트 포트폴리오 만들기 완벽

4. 보안이 생각보다 중요하다

실수로 RDS를 0.0.0.0/0 (전체 공개)로 열어뒀더니
중국에서 접속 시도가 100번 넘게...😱

보안 그룹 = 방화벽
→ 꼭 필요한 포트만 열자!

😊 좋았던 점 & 😅 아쉬웠던 점

좋았던 점

👍 프리티어 덕분에 부담 없이 학습

혼자 공부할 때 가장 걱정했던 게 "혹시 과금되면 어쩌지?" 였는데, 프리티어 덕분에 돈 걱정 없이 마음껏 테스트하고 실험할 수 있었어요. 실수로 인스턴스를 10개 만들어도 무료!

👍 삽질하면서 배우는 재미

처음엔 SSH 접속도 안 되고, S3 업로드도 안 되고... 에러 투성이였어요. 하지만 하나씩 해결하면서 "아! 이게 이렇게 작동하는구나!" 깨달을 때마다 쾌감이 장난 아니었어요 😆

👍 블로그, 유튜브 자료가 많음

독학하면서 막힐 때마다 검색하면 누군가 똑같은 문제를 겪고 해결한 글이 있더라고요. 특히 한글 자료도 생각보다 많아서 도움이 많이 됐어요!

👍 실제 서비스처럼 구축 가능

로컬에서만 돌리던 프로젝트를 실제로 인터넷에 올리니까 뿌듯함이 엄청났어요. 친구들한테 링크 보내주니까 다들 신기해하더라고요!

아쉬웠던 점

😢 초반에 방향 잡기 어려움

혼자 공부하다 보니 "뭘 먼저 공부해야 하지?" 막막했어요. EC2부터 해야 하나, S3부터 해야 하나... 처음엔 헤맸습니다 😅

😢 에러 메시지 이해하기 어려움

영어로 된 에러 메시지가 나오면 구글 번역기 돌리고, 스택오버플로우 뒤지고... 시간이 정말 오래 걸렸어요.

😢 용어가 너무 많아서 헷갈림

EC2, S3, RDS 외에도 VPC, IAM, CloudWatch, Lambda, EBS, ELB... 용어가 너무 많아서 처음엔 멘붕이었습니다. 같은 말을 다르게 표현하는 것도 많고요 (예: 인스턴스 = 가상 서버 = VM)

😢 혼자라서 질문할 사람이 없음

막히는 부분이 있을 때 바로 물어볼 사람이 없어서 답답했어요. 커뮤니티에 질문 올려도 답변이 늦게 오거나 안 올 때도 있고...

😢 비용 폭탄 공포

프리티어 범위를 정확히 몰라서 혹시 과금될까봐 떨렸어요. 매일 Billing 대시보드 확인했습니다 😨 (다행히 0원!)


🎓 나만의 학습 팁 (독학러를 위한)

1. 공식 문서는 나중에!

❌ 처음부터 AWS 공식 문서 정독
   → 너무 방대해서 포기함

✅ 유튜브 10분 요약 영상
   → 개념 대충 파악
   → 바로 실습
   → 막히면 공식 문서 찾아봄

추천 학습 순서:

1. 유튜브로 개념 이해 (30분)
2. 블로그 따라하기 (1시간)
3. 직접 프로젝트 만들기 (3시간)
4. 에러 해결하면서 깊이 이해

2. 프리티어 한도 모니터링 (필수!)

혼자 공부하면 과금이 제일 무서워요. 꼭 설정하세요!

AWS Billing Dashboard에서 확인:
- EC2 사용 시간: __ / 750시간
- S3 스토리지 용량: __ / 5GB
- RDS 사용 시간: __ / 750시간

알람 설정 (필수!):
1. Billing → Budgets → Create budget
2. $1 설정
3. 이메일 알림 on

→ $0.01이라도 과금되면 바로 알림!

3. 단계별 학습 로드맵

혼자 공부할 때 가장 중요한 건 순서예요!

🔰 1단계: EC2만 집중 (3일)
   Day 1: 인스턴스 생성 + SSH 접속
   Day 2: 웹 서버 띄우기 (Nginx/Apache)
   Day 3: Spring Boot 배포

🔰 2단계: S3 추가 (2일)
   Day 4: 버킷 생성 + 파일 업로드
   Day 5: Spring Boot와 S3 연동

🔰 3단계: RDS 추가 (2일)
   Day 6: MySQL DB 생성
   Day 7: Spring Boot와 RDS 연동

🔰 4단계: 통합 프로젝트 (3일)
   Day 8-10: EC2 + S3 + RDS 완전체

4. 삽질 노트 작성하기

혼자 공부하면서 겪은 에러를 꼭 기록하세요!

# AWS 삽질 노트

## 2025-01-13: SSH 접속 안 됨
- 에러: Permission denied (publickey)
- 원인: .pem 파일 권한 문제
- 해결: chmod 400 mykey.pem
- 교훈: 보안 키는 권한 관리 필수!

## 2025-01-14: S3 업로드 403 에러
- 에러: Access Denied
- 원인: IAM 권한 설정 안 함
- 해결: S3 Full Access 정책 추가
- 교훈: AWS는 권한이 생명!

왜 중요한가?

  • 같은 에러 또 만나면 바로 해결
  • 블로그에 올리면 다른 사람도 도움 받음
  • 취업 면접 때 "이런 문제 경험해봤어요!" 어필

5. 커뮤니티 활용법

혼자 공부할 때 막히면 어디서 도움받을까?

질문 전 체크리스트:

✅ 구글에서 에러 메시지로 검색했나?
✅ AWS 공식 문서 찾아봤나?
✅ 스택오버플로우 검색했나?
✅ 한글 블로그 찾아봤나?

여기까지 했는데도 안 되면 → 질문!

추천 커뮤니티:

1. AWS 한국 사용자 모임 (페이스북)
   - 한글로 질문 가능
   - 답변 빠름

2. Inflearn 질문 게시판
   - AWS 강의 듣는 사람들
   - 초보자 친화적

3. Stack Overflow
   - 영어지만 답변 퀄리티 최고
   - 구글 번역기 돌려서라도 읽을 가치

4. 오픈 카톡방
   - "AWS 초보 모임" 검색
   - 실시간 질문 가능

6. 비용 절약 꿀팁

혼자 공부하는 학생 입장에서 과금은 재앙이죠!

절대 규칙:

1. 매일 밤 인스턴스 Stop
   ⚠️ Terminate 아님! Stop!
   → 다음날 아침 Start
   → 프리티어 시간 절약

2. 테스트 끝나면 즉시 삭제
   - S3 파일 테스트 → 삭제
   - RDS 스냅샷 → 삭제
   - Elastic IP 안 쓰면 → 해제

3. CloudWatch 알람으로 감시
   - CPU 사용률 80% 넘으면 알림
   - 네트워크 과다 사용 알림
   → 이상한 트래픽 바로 감지

4. 리전 주의!
   - 서울 리전이 제일 비쌈
   - 실습은 버지니아 리전 추천
   (단, 속도는 느림)

7. 실습 위주로 학습 (중요!)

❌ 이론 공부만 2주
   → 아무것도 못 만듦

✅ 이론 30분 + 실습 2시간
   → 하루만에 배포 성공!

내가 했던 실습 순서:

Day 1: EC2 생성 → "Hello World" 띄우기
Day 2: Spring Boot jar 파일 배포
Day 3: S3에 이미지 업로드
Day 4: S3 이미지를 HTML에 띄우기
Day 5: RDS MySQL 연결
Day 6: 완전한 프로젝트 배포
Day 7: 친구들한테 자랑 😎

8. 추천 무료 강의

혼자 공부할 때 도움 된 자료들:

유튜브:

1. "노마드 코더" - AWS 배포 실전
   → 실무 중심, 한글

2. "생활코딩" - AWS 기초
   → 개념 이해, 한글

3. "테크보이 워니" - AWS 입문
   → 초보자 눈높이, 한글

블로그:

1. AWS 한국 블로그
   - 공식이지만 이해하기 쉬움

2. 향로님 블로그
   - 실무 경험 가득

3. Velog/Tistory 검색
   - "AWS EC2 배포" 검색
   - 최신 글 위주로

실습 프로젝트:

Level 1: 정적 웹사이트 S3 호스팅
Level 2: Spring Boot EC2 배포
Level 3: TODO 앱 (EC2 + RDS)
Level 4: 이미지 게시판 (EC2 + S3 + RDS)

9. 포기하지 않는 법

혼자 공부하면 포기하고 싶을 때가 많아요 😭

내가 겪은 순간들:

1. SSH 접속 3시간째 안 됨
   → 권한 문제였음
   → 해결하니 쾌감 장난 아님!

2. S3 업로드 계속 403
   → IAM 몰라서 헤맴
   → 공식 문서 10번 읽고 이해

3. RDS 접속 타임아웃
   → 보안 그룹 설정 놓침
   → 해결하고 눈물 날 뻔

극복 방법:

✅ 하루 2시간만 투자
   → 너무 욕심 부리지 말기

✅ 작은 성공 경험 쌓기
   → 인스턴스 생성만 해도 성공!

✅ 커뮤니티에 질문하기
   → 혼자 끙끙대지 말기

✅ 블로그에 기록하기
   → 내 성장 과정 보면 뿌듯함

🚀 다음 학습 목표

📌 단기 목표 (이번 주)
   ✓ miniproject2 완전히 AWS로 이전
   ✓ 도메인 구매해서 연결 (gabia에서 1년 1만원)
   ✓ HTTPS 적용 (Let's Encrypt 무료 인증서)
   ✓ GitHub Actions로 자동 배포 구축

📌 중기 목표 (이번 달)
   ✓ Docker로 컨테이너화
   ✓ CloudWatch로 모니터링 대시보드
   ✓ Lambda로 서버리스 함수 만들기
   ✓ CloudFront CDN 연동

📌 장기 목표 (부트캠프 기간)
   ✓ 포트폴리오 사이트 AWS로 운영
   ✓ Auto Scaling으로 트래픽 대응
   ✓ AWS Solutions Architect 자격증 취득
   ✓ 취업 시 "AWS 경험 있음" 어필

🎬 마치며

AWS를 독학으로 공부하기 전에는 "클라우드? 그거 전문가나 하는 거 아냐?"라고 생각했어요.

하지만 직접 삽질해보니 생각보다 어렵지 않더라고요!

 

독학의 가장 큰 장점:

"에러를 만나고, 해결하고, 이해하는 과정에서 진짜 실력이 늘어난다"

처음엔 SSH 접속도 안 되고, S3 업로드도 안 되고, RDS 접속도 안 되면서 "아... 나 이거 못 하는 건가?" 하고 좌절했어요. 하지만 하나씩 해결하면서 "내가 할 수 있구나!" 하는 자신감이 생겼습니다.

 

특히 EC2로 서버를 띄우고, S3로 이미지를 관리하고, RDS로 데이터베이스를 운영하는 전체 과정을 경험하면서, 클라우드 시대에 개발자로 일한다는 게 얼마나 축복인지 깨달았습니다.

10년 전이었다면 수백만원을 들여서 서버를 구매하고, 직접 설치하고, IDC에 입주시키고... 정말 복잡했을 텐데요.

지금은? 프리티어로 1년 무료로 전부 다 해볼 수 있어요! 💪

 

혼자 공부하는 분들께 드리는 조언:

1. 완벽하게 이해하려고 하지 마세요
   → 일단 해보고, 나중에 이해해도 됩니다

2. 에러를 두려워하지 마세요
   → 에러가 진짜 선생님입니다

3. 커뮤니티를 활용하세요
   → 혼자 끙끙대지 말고 질문하세요

4. 작은 성공을 축하하세요
   → 인스턴스 생성만 해도 대단한 겁니다!

5. 꾸준히 하세요
   → 하루 1시간씩만 해도 한 달이면 마스터!

앞으로는:

  1. 모든 프로젝트를 AWS로 배포해서 포트폴리오 만들고
  2. 실제 트래픽 처리 경험을 쌓고
  3. **취업할 때 "AWS 실무 경험"**을 어필하겠습니다!

여러분도 망설이지 말고 AWS 시작해보세요. 프리티어면 공짜잖아요! 

혼자 공부하는 게 외롭고 힘들 때도 있지만, 그만큼 성취감도 크고 실력도 빠르게 늡니다. 저도 아직 배우는 중이지만, 이 글이 AWS를 독학하려는 분들께 조금이나마 도움이 되길 바랍니다! 💪

 


💬 여러분의 AWS 경험은?

처음 AWS 접했을 때 어떠셨나요? 프리티어로 뭘 만들어보셨나요? 초보자 팁이 있다면 댓글로 공유해주세요! 🙏