전체 글 45

🌐 클라우드 네이티브 관점에서 바라본 인프라 & DevOps 핵심 요약2

✅ Cloud Native란?Cloud Native는 클라우드 컴퓨팅 환경에 최적화된 애플리케이션을 설계, 개발, 배포, 운영하는 접근 방식이다.최신 기업은 고객의 요구에 빠르게 대응할 수 있는 확장성, 탄력성, 장애 격리성을 갖춘 앱을 추구하며, Cloud Native는 이를 실현하기 위한 핵심 전략이다.Cloud Native의 핵심 요소Microservices 기반: 단일 블록(monolith)이 아닌 기능별로 나뉜 소규모 서비스들의 조합컨테이너 기반: Docker, Kubernetes를 활용해 경량화된 가상 환경 구성DevOps 문화: 개발과 운영의 협업을 통한 지속적인 개선자동화된 배포 파이프라인: CI/CD 시스템으로 신속한 배포 실현✅ Cloud Native의 장점1. 효율성 증가DevOps,..

🌐 클라우드 네이티브 관점에서 바라본 인프라 & DevOps 핵심 요약

✅ API란 무엇인가?**API (Application Programming Interface)**는 애플리케이션 간 상호작용을 가능하게 하는 인터페이스다.서버와 클라이언트 간, 또는 서로 다른 서비스 간의 데이터를 주고받기 위해 사용된다.예: 프론트엔드에서 백엔드로 주문 내역을 요청할 때 API를 통해 통신한다. ✅ API란 무엇인가?**API (Application Programming Interface)**는 애플리케이션 간 상호작용을 가능하게 하는 인터페이스다.서버와 클라이언트 간, 또는 서로 다른 서비스 간의 데이터를 주고받기 위해 사용된다.예: 프론트엔드에서 백엔드로 주문 내역을 요청할 때 API를 통해 통신한다. ✅ 실습 시 강점이 되는 포인트💡 Apache Kafka데이터 스트리밍 처리에..

record vs @Data, @RestController vs @Controller, @RequiredArgsConstructor, Stream, JDBC, 테스트 코드까지 실무 예제로 정리

✅ @Data vs record: DTO 작성 방식 비교Lombok의 @Data@Datapublic class MemberDto { private Long id; private String email; private String nickname; private LocalDate birthday;} @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 등을 한 번에 생성해주는 Lombok 애노테이션입니다.가변(mutable) 객체를 만들 수 있음. Java 14+의 recordrecord는 Java 14 이상에서 사용할 수 있는 간단한 DTO 정의 방식입니다. 모든 필드는 final로 선언되며, 불변성을 자..

대용량 처리를 위한 MySQL 이해 | MySQL

https://db-engines.com/en/ranking DB-Engines RankingPopularity ranking of database management systems.db-engines.com웹 백엔드 개발을 하다 보면 대부분의 데이터는 관계형 데이터베이스에 저장하게 된다.그중에서도 MySQL은 가장 많이 사용되는 오픈소스 관계형 DB다.그래서 이번 글에서는 내가 강의를 들으면서 정리한 MySQL의 핵심 구조와 작동 방식을 쉽고 간단하게 풀어보려고 한다. 1. 왜 MySQL인가?가장 인기 있는 오픈소스 관계형 데이터베이스 (DB-Engines 기준 상위권)접근성과 학습 비용이 낮고, 무료로 사용할 수 있음SQL 표준을 비교적 잘 따르기 때문에 다른 DB와도 큰 차이가 없다. 2. 웹의 ..

대용량 처리를 위한 MySQL 이해 | 실습 환경 구축, 대용량 시스템에 대한 이해

✅ 대용량 데이터를 안정적으로 다루기 위한 기본 질문"어떻게 하면 많은 양의 데이터를 안정적으로 삽입하고, 갱신하고, 조회할 수 있을까?"이 질문에 답하기 위해 우리가 고려해야 할 키워드는 다음과 같다:정규화: 데이터 중복을 줄이고, 관계를 명확하게 설계한다.인덱스: 자주 조회되는 컬럼에 인덱스를 걸면 검색 속도가 훨씬 빨라진다.트랜잭션: 데이터 변경 작업이 중간에 실패하더라도 전체 작업의 일관성을 유지하게 해준다.동시성 제어: 여러 사용자가 동시에 같은 데이터를 수정할 때 충돌 없이 처리할 수 있도록 한다.🧪 실습 환경 구축macOS 환경에서 MySQL을 사용하는 경우, Homebrew로 간단히 설정 가능하다. # mysql 실행brew services start mysql# mysql 상태 확인br..

FastAPI 기반 챗봇 프로젝트에서 로그인 인증 및 RDB 파트 구현기

이번 프로젝트에서는 FastAPI 기반의 챗봇 서비스에서 로그인 인증 처리와 RDB 연동을 맡아 구현하였다. 사용자 요청 흐름의 핵심이 되는 부분이었기 때문에, 명확한 데이터 흐름과 보안 설계가 중요했다. ⚙️ 왜 FastAPI를 선택했는가?이 프로젝트에서는 FastAPI 프레임워크를 채택하였다. 여러 선택지가 있었지만, FastAPI를 사용한 이유는 다음과 같다:비동기 처리 최적화FastAPI는 Python의 asyncio 기반으로 동작하여, I/O 처리에 강점을 가진다.챗봇처럼 빠르게 응답을 주고받아야 하는 서비스에서는 API 응답 속도가 매우 중요하다.비동기 요청과 DB 쿼리를 동시에 처리할 수 있어 병렬성 측면에서도 유리하다.Pydantic을 통한 데이터 검증요청/응답 스키마를 명확하게 정의할 수..

토이 프로젝트 3 | Fast API를 활용한 OpenAI 챗봇 개발 (RDB 파트)

💡 AI 챗봇 프로젝트 정리 – FastAPI와 함께한 나의 RDB 파트 개발기최근 우리 팀에서는 쇼핑몰 서비스에 AI 챗봇을 연동하는 프로젝트를 진행하고 있다.사용자가 자연어로 질문하면, 챗봇이 의도를 파악하고, RAG 방식으로 RDB에서 데이터를 조회해 LLM에 전달하여 자연스러운 응답을 생성하는 구조다.🧠 프로젝트 흐름사용자 질문 → 의도 분류 → RDB 쿼리 수행 → LLM 응답 구성 → 사용자에게 자연어 응답FastAPI: 비동기 API 서버MySQL: 쇼핑몰 서비스의 주요 데이터 저장databases + aiomysql: 비동기 DB 연결LangChain / GPT 기반 LLM: 응답 생성Spring Boot: 로그인 인증 및 JWT 토큰 발급🔧 내가 맡은 역할나는 팀에서 RDB 파트를 ..

Spring DI (의존성 주입, Dependency Injection)

변경에 유리한 코드1 - 다형성, factory method 변경에 유리한 코드2 - Map과 외부파일수정사항이 있을 때, 코드는 변경하지 않고 파일만 변경하는 것은 굉장한 이점이다. 코드를 변경하게 되면, 결국 코드에 대한 테스트를 해봐야하기 때문에.프로그램의 변경을 어떻게 최소화할 지 고민해보는 것이 중요하다.  프로그램을 변경시키지 않기 위해 변경포인트를 최대한 분리시키는게 중요하다. 분리는 (1) 변하는 것, 변하지 않는 것의 분리           (2) 관심사의 분리           (3) 중복코드의 분리 (AOP)  더보기Main1.javapackage com.fastcampus.ch3.diCopy1;import java.io.FileReader;import java.io.IOExcepti..

토이 프로젝트 1 | 상품의 분류를 나눈 카테고리를 셀프조인으로 짜기

셀프 조인(Self Join)을 사용하는 이유Self Join은 같은 테이블을 두 번 이상 사용하여 자기 자신과 조인하는 방식이다.특히, 계층적인 관계(Hierarchical Relationship)를 표현할 때 유용하다.이제, 왜 Self Join을 사용하는지 구체적으로 알아보자.   1. 계층적 데이터 표현 (Hierarchical Data)쇼핑몰의 카테고리, 회사 조직도, 댓글 대댓글처럼 상위-하위 관계를 표현할 때 사용한다.📌 예제: 쇼핑몰 카테고리SELECT c1.id AS category_id, c1.name AS category_name, c2.id AS parent_id, c2.name AS parent_name FROM category c1 LEFT JOIN category c2 ON ..

Spring MVC | redirect와 forward

redirect와 foward 처리 과정 비교Redirect클라이언트가 /ch2/write/jsp를 요청했다. write.jsp가 302번으로 응답을 했다. 상태 코드 300번대는 리다이렉트(다른 URL로 재요청)를 의미한다. 상태코드가 300번대인 리다이렉트는 응답 헤더만 있고 바디는 없다.>> 어디로 요청해야할지 location을 헤더 정보에 준다.  브라우저가 자동으로 이 location에서 알려준대로 새로운 요청을 한다.1번 요청은 클라이언트가 요청한 것이고, 3번 요청은 브라우저가 자동으로 요청한 것이다. 1번 요청이 GET/POST 상관없이 리다이엑트에서 자동으로 요청되는 3번은 GET으로 요청된다.   Forward클라이언트가 write.jsp한테 요청을 한다.write.jsp가 자기가 처리..