안녕하세요, 오늘은 기술면접 준비내용과 최종프로젝트 진행상황을 정리해보았습니다.
AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.
AWS S3를 사용하는 이유
- 확장성: S3는 거의 무한한 확장성을 제공해 대규모 데이터 저장이 가능합니다.
- 내구성: 99.999999999%의 내구성을 제공하여 데이터 손실 위험이 거의 없습니다.
- 비용 효율성: 사용량에 따른 비용 구조로 효율적인 비용 관리가 가능합니다.
- 접근성: 전 세계 어디서나 데이터에 접근할 수 있어 편리합니다.
- 보안: 다양한 보안 기능과 규정 준수 옵션으로 데이터 보호가 가능합니다.
AWS EC2를 사용하는 이유
- 유연성: 다양한 인스턴스 유형과 크기를 선택해 맞춤형 컴퓨팅 환경을 구축할 수 있습니다.
- 확장성: 필요에 따라 쉽게 인스턴스를 확장하거나 축소할 수 있습니다.
- 통합: 다른 AWS 서비스와 원활하게 통합되어 종합적인 클라우드 솔루션을 제공합니다.
- 관리 용이성: 관리형 서비스로 인프라 유지 보수 부담이 적습니다.
- 비용 관리: 사용한 만큼만 지불하는 비용 구조로 경제적입니다.
AWS S3 사용 경험
- 백업 및 복구: 중요한 데이터를 정기적으로 S3에 백업하여 손쉽게 복구 가능했습니다.
- 정적 웹사이트 호스팅: S3 버킷을 사용해 정적 웹사이트를 간편하게 호스팅했습니다.
- 로그 저장: 애플리케이션 로그를 S3에 저장해 분석 및 모니터링에 활용했습니다.
- 데이터 아카이빙: 오래된 데이터를 저렴하게 보관하는 데 사용했습니다.
- 멀티파트 업로드: 대용량 파일을 빠르고 안정적으로 업로드했습니다.
AWS EC2 사용 경험
- 웹 서버 호스팅: EC2 인스턴스에서 웹 서버를 설정해 애플리케이션을 배포했습니다.
- 자동 스케일링: 트래픽 증가 시 자동 스케일링을 설정해 가용성을 높였습니다.
- 개발 및 테스트 환경: 다양한 환경을 신속하게 구성해 개발과 테스트를 진행했습니다.
- 데이터베이스 서버 운영: RDBMS를 EC2에 설치해 데이터베이스 서버를 운영했습니다.
- VPN 설정: EC2를 통해 보안이 필요한 애플리케이션에 VPN을 설정해 사용했습니다.
정렬 알고리즘에 대해서 아는대로 설명해주세요.
정렬 알고리즘은 데이터를 특정 순서(오름차순이나 내림차순 등)로 정렬하는 알고리즘을 말합니다. 주요 알고리즘으로는 다음이 있습니다:
- 버블 정렬: 인접한 요소를 비교하고 교환하여 정렬하는 방식으로, 구현이 간단하지만 시간 복잡도가 O(n^2)로 비효율적입니다.
- 선택 정렬: 가장 작은 요소를 선택해 순서대로 정렬하는 방식으로, 시간 복잡도는 O(n^2)입니다.
- 삽입 정렬: 요소를 순서대로 정렬된 부분에 삽입하는 방식으로, 거의 정렬된 데이터에 효율적이며 시간 복잡도는 O(n^2)입니다.
- 병합 정렬: 리스트를 분할하고 병합하여 정렬하는 재귀적 알고리즘으로, 시간 복잡도는 O(n log n)입니다.
- 퀵 정렬: 피벗을 기준으로 분할 정렬하는 방식으로, 평균 시간 복잡도는 O(n log n)지만 최악의 경우 O(n^2)입니다.
- 힙 정렬: 힙 자료 구조를 이용한 정렬 방식으로, 시간 복잡도는 O(n log n)입니다.
최종프로젝트
어드민 챌린지 단건조회 API 명세서 추가
어드민 service User loginUser 로 매개변수명 수정하여 대상 명확하게 표시
어드민 전체조회(유저,인증요청,챌린지) 페이지네이션 로직 수정
rds 사용중인데 과금문제가 있다는 이슈발생
박성원 튜터님 rds는 비용이 ec2의 10배 / rds가 제공하는 기능은 우리 프로젝트에 오버스펙 비추
ec2에 mysql 설치해서 사용하는걸 추천
그러나 동시성제어 등의 db 관련 기술을 구현하고 공부하겠다면 rds 추천
ec2 3개로 구현 백 / 프론트 / db 이게 가장 기본되는 형태
레디스와 mysql 성능 비교 / 포인트 랭킹순으로 전체리스트 조회
db 100개 100ms 1000ms
db 500개 834ms 1680ms
- Local에서 Docker File로 Docker Image를 만든다.
- Docker Image를 Docker Hub에 Push 한다.
- EC2에서 docker image를 pull 받고 실행한다.
도커 로그인
도커 복사한거 붙여넣기
이미지를 알아서 받음
./gradlew clean build
history
docker images
docker build -t challenger .
docker run -d -network my_network -p 8080:8080 fe6d0ac003e8
docker ps
ec2 도커컴포즈 먼저 이거저거 / 도커 네트워크 / 도커 네임