2025/04 6

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..