프로젝트명: 토토리(Totori) — 난독 아동을 위한 음성 인식 기반 동화책 서비스담당: 퀴즈 기능 백엔드(Spring Boot) + AI 서버(FastAPI) 개발기술 스택: Spring Boot 3, JPA, MySQL, Redis, FastAPI, OpenAI GPT-5-mini, Whisper, ElevenLabs TTS, AWS S3, MeCab1. 프로젝트 소개토토리는 난독(Dyslexia) 아동이 동화를 직접 낭독하면서 읽기 능력을 길러주는 음성 인식 기반 학습 서비스이다. 아이가 좋아하는 주제로 GPT가 동화를 만들어주고, 아이는 그 동화를 직접 읽으며, AI가 아이의 음성을 실시간으로 분석해 읽기 오류 패턴을 추출한다.서비스의 핵심 학습 루프는 다음과 같다.1. 동화 생성 (관심사 음성..
01_엔티티 매니저 팩토리와 엔티티 매니저📍 엔티티 매니저 팩토리엔티티 매니저를 생성하는 공장만드는 비용이 크기 때문에 한 개만 만들어서 애플리케이션 전체에서 공유하도록 설계엔티티 매니저를 생성하는 비용은 거의 들지 않음여러 스레드가 동시에 접근해도 안전 → 서로 다른 스레드 간 공유 가능EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 🔍 코드 설명Persistence.createEntityManagerFactory(): META-INF/persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory 생성 📍 엔티티 매니저엔티티를 데이터베이스에 등록/조회/수정/삭제 가능데이터베이스..
01_JPA(Java Persistence API)📍JPA(Java Persistence API)객체와 관계형 데이터베이스의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙JPA를 실제 코드로 작성한 가장 유명한 프레임워크가 HibernateHibernate는 내부적으로 JDBC를 사용한다. src/main/resources/application.ymlspring: jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.MySQL8Dialect🔍 코..
01_Controller, Service, Repository 3단 분리📍 기존 Controller 문제점하나의 Controller에서 3가지 역할을 수행하고 있다. controller/user/UserController@RestControllerpublic class UserController { (중략) @PutMapping("/user") public void updateUser(@RequestBody UserUpdateRequest request) { String readSql = = "SELECT * FROM user WHERE id = ?"; boolean isUserNotExist = jdbcTemplate.query(readSql, (rs..
01_MySQL 명령어📍 DDL(Data Definition Language)CREATE DATABASE데이터베이스 생성하기CREATE DATABASE [데이터베이스 이름]; SHOW데이터베이스 목록 보기테이블 목록 보기SHOW DATABASES;SHOW TABLES; DROP데이터베이스 삭제하기테이블 삭제하기DROP DATABASE [데이터베이스 이름];DROP TABLE [테이블 이름]; USE데이터베이스 안으로 들어가기USE [데이터베이스 이름]; CREATE TABLE테이블 생성하기CREATE TABLE [테이블 이름] ( [필드1 이름] [타입] [부가조건] [필드2 이름] [타입] [부가조건] [필드3 이름] [타입] [부가조건] ... PRIMARY KEY ([..
01_@SpringBootApplication📍 @SpringBootApplication@SpringBootApplication // 스프링을 실행시키기 위해 필요한 다양한 설정들을 모두 자동으로 해줌public class LibraryAppApplication { public static void main(String[] args) { SpringApplication.run(LibraryAppApplication.class, args); // 스프링 애플리케이션을 실행(run) }} 02_네트워크와 API📍 Network데이터를 주고 받는 것(=택배) 📍 IP각 컴퓨터의 고유 주소(=집 주소)256을 넘지 않는 4개의 숫자로 이루어짐ex. 244.66.51.9 📍 D..
01_데이터 조회 과정사용자가 웹 페이지에서 데이터를 조회해 달라고 URL 요청을 보낸다.서버의 controller가 이 요청을 받아 해당 URL에서 찾으려는 데이터 정보를 repository에 전달한다.repository는 정보를 가지고 DB에 데이터 조회를 요청한다.DB는 해당 데이터를 찾아 entity로 반환한다.반환된 entity는 모델을 통해 뷰 템플릿으로 전달된다.최종적으로 결과 뷰 페이지가 사용자 화면에 출력된다. 02_단일 데이터 조회📍 URL 요청받기뷰(View) -> 컨트롤러(Controller) : 사용자가 데이터를 조회해달라고 웹 페이지에서 URL 요청을 보낸다.사용자가 {id}번 게시글을 조회할 때 컨트롤러는 articles/{id}로 URL 요청을 받는다.그리고 이 URL..