[cafeOn 팀프로젝트] 개인 AWS EC2 + RDS 구축 후 MySQL workbench로 over SSH 연결 트러블슈팅
·
2025/[풀스택]SeSAC 웹개발자 7기
팀장이 싸고간 똥(Docker로 배포 못하심+뭔지모를 개인적 이유로 나를 aws팀계정에 접근하지 못하게 함 + DB 맘대로 삭제시킴)으로 우리 팀프로젝트는 각자 개인 배포의 형태로 결정이 되었고,수료한지 거의 한달 만에 나는 다시 이 프로젝트를 배포하고 포트폴리오를 업데이트 하기 위해 오랜만에 작업을 개시하였다. 그래도 그 덕분에 취준생 시절에 한번쯤은 경험해보아야 할1. AWS EC2 or RDS or S3 서비스 구축해보기2. EC2와 RDS 연결하기3. 퍼블릭액세스를 끈 RDS는, EC2를 SSL인증서처럼 사용해서(over SSH) DB접속하기(?)4. EC2를 만들 때 사용한 키 페어인 .ppk 파일을 puttyGen을 이용해 .pem 확장자로 변경해서, workbench에 넣을 수 있게 변환을 ..
cafeon 팀프로젝트 마치며 있던 협업 트러블슈팅
·
2025/[풀스택]SeSAC 웹개발자 7기
✔ 프로젝트 협업 트러블슈팅 문서(1) Issue Summary프로젝트 종료 단계에서 AWS RDS 접근권한이 일방적으로 차단되었고,내가 직접 크롤링·정제·AI 요약·태그추출까지 수행하여 구축한13,000개 카페 데이터 전체가 회수되지 않는 문제가 발생함.팀장 및 일부 팀원은 연락두절 상태였으며,중재 이후 선택된 두 개 테이블(cafes, tags)만 임의로 전달받았고,핵심 테이블(매핑 및 AI 처리 데이터)은 팀 내부에서 임의 삭제된 상태라고 전달받음.(2) Root CauseAWS 계정 구조 설계 오류프로젝트 핵심 데이터가 특정 팀원 개인(AWS Owner 계정)에만 종속된 구조였음.→ 데이터 통제권이 한 사람에게 집중됨.권한 관리 미흡실질적 데이터 생산자는 나였지만, RDS 백업/관리 권한이 없어 ..
✅ Redis란?
·
2025/[풀스택]SeSAC 웹개발자 7기
✅ Redis란?🔹 초고속 메모리 기반 임시 DB (Cache 서버)🔹 MySQL이 “하드디스크 기반”이라면, Redis는 “RAM 기반”이라 100~1000배 빠름🧠 개념 요약MySQLRedis하드디스크에 데이터 저장메모리에 데이터 저장느리지만 영구적빠르지만 휘발성SQL 쿼리Key-Value 구조 (Hash, List 등)SELECT * FROM cafesGET cafes:1234💡 언제 쓰냐?카카오 검색처럼 “자주 요청되는 검색 결과”를 캐시에 저장해두면,다음 검색 시 DB 접근 없이 Redis에서 즉시 꺼냄. 💰 비용 / 설치무료입니다.로컬 개발용으로는 Docker나 WSL로 바로 띄울 수 있어요.docker run --name redis-local -p 6379:6379 -d redisS..
✅B-Tree(Balanced Tree) 란?
·
카테고리 없음
✅ B-Tree는 Binary Tree(이진트리)와 “비슷하지만 더 일반화된 구조”구분Binary TreeB-Tree (Balanced Tree)노드당 자식 수최대 2개여러 개 (예: 50개 이상도 가능)저장 위치메모리디스크 페이지 단위탐색 효율O(log n)O(log₍ₘ₎ n), m=자식수사용 용도알고리즘 교재, 메모리 내 구조데이터베이스, 파일시스템🧩 정리하자면“B-Tree”는 Binary Tree의 확장 버전이에요.DB는 디스크 I/O를 최소화해야 하므로, 한 노드에 여러 키를 묶어둡니다.MySQL(InnoDB)은 B+Tree라는 변형을 실제로 사용합니다.모든 데이터는 리프 노드(leaf)에만 저장리프 노드끼리 링크드리스트로 연결되어 있어 범위 검색이 빠름 (BETWEEN, LIKE 'A%' 등)
✅ DB 인덱싱(Database Indexing) 이란?
·
2025/[풀스택]SeSAC 웹개발자 7기
✅ DB 인덱싱 (Database Indexing)🔹 “데이터베이스의 목차(Book Index)” 역할을 하는 구조예를 들어,cafes 테이블에 카페가 10,000개 있다면WHERE name = '놀숲 강남점' 같은 쿼리를 날릴 때인덱스가 없으면 → 맨 앞에서부터 하나씩 다 찾습니다 (Full Table Scan)인덱스가 있으면 → 목차에서 바로 해당 위치로 점프합니다 (Logarithmic Search)📘 MySQL에서 인덱스 설정 방법 (명령 한 줄)CREATE INDEX idx_cafe_name ON cafes(name);➡ 이름 컬럼 기준으로 인덱스 생성➡ 이 한 줄이면, WHERE name = ?, WHERE name IN (...) 쿼리가 즉시 빨라집니다.➡ 추가 비용: 데이터 INSERT..
✅ (메일링서비스) Gmail SMTP 발송 한도?
·
2025/[풀스택]SeSAC 웹개발자 7기
✅ 1️⃣ Gmail SMTP 발송 한도 요약구분 제한일반 Gmail 계정(@gmail.com)하루 500통Google Workspace(기업용 G Suite)하루 2,000통기간 한정이 아님→ “한 달 500통”이 아니라, “하루 500통”이야SMTP·웹메일 모두 합산직접 보낸 메일 + 코드로 보낸 메일 합쳐서 하루 500건 제한초과 시“535-5.7.1 Daily user sending quota exceeded” 에러 발생, 약 24시간 잠금💡 즉,“500통/하루”는“테스트용 프로젝트”나 “소규모 내부용”에는 괜찮지만,실서비스 유저가 수백 명만 돼도 바로 한계에 부딪힘.✅ 2️⃣ 그럼 어느 정도 규모면 하루 500통을 다 쓰냐?예를 들어 “임시 비밀번호” 같은 이벤트성 메일만 보낸다고 하면 👇상..
✅ DTO란?
·
2025/[풀스택]SeSAC 웹개발자 7기
✅ DTO란?DTO(Data Transfer Object) 는 말 그대로컨트롤러 ↔ 서비스 ↔ 프론트엔드 사이에서 데이터를 “주고받을 목적”으로만 쓰는 객체예요.즉, 데이터 운반용(transfer) 객체입니다.✅ DTO의 역할(1) Entity(=DB 구조) 와 API 요청/응답 데이터 구조를 분리시켜줍니다.Entity는 DB 테이블 구조 그 자체이지만,DTO는 API 요청마다 필요한 필드만 포함하거나, 추가로 계산된 데이터를 담을 수도 있죠.(2) 보안 / 유연성 / 문서화를 동시에 확보합니다.예를 들어,회원가입 시 → password, email, nickname만 필요로그인 시 → email, password만 필요마이페이지 조회 시 → nickname, profileImage, bookmarkCo..
[b1a4 팀프로젝트 TIL] 251001수(6) 배느실
·
2025/[풀스택]SeSAC 웹개발자 7기
251001수(6)프로젝트 팀 명 : b1a4수업 일자 : 2025. 10. 01 수성명 : 김도이나의 프로젝트 수업 점수 : / 100오늘 할 일[ ] User - role 기반 Authorization(인가) 설정[ ] User - 회원가입 성공 후, 이메일 인증[ ] User - 로그아웃 기능[ ] Cafe - CRUD[x] 크롤링 공부[x] 카페 데이터 python 크롤링 시작[ ] User - 탈퇴 기능(soft delete?)[x] 카페 데이터들 DB에 저장[x] 카페 데이터 DB 확인DB 저장 시 경도/위도 값 String → DECIMAL 변환 처리예시:왜 String일까?JSON 응답에서 소수점 정밀도를 그대로 보존하기 위해 문자열로 전달하는 겁니다.만약 float으로 내려주면 자릿수가 ..