Spring 7

[Project - Howru] (4) 채팅 NLP 기반 사용자 추천 시스템 구현

NLP Tagging Service를 별도의 모듈로 구현했습니다.이 서비스는 MSA 아키텍처에서 “사용자 관심사 분석기” 역할을 담당합니다.fastapi-api/ ├── analysisTag.py # NLP 태깅 서비스 메인 코드 ├── Dockerfile # 컨테이너 실행 환경 ├── requirements.txt # 의존성 패키지 └── fastapi-api.iml # IDE 설정 파일왜 MSA로 분리했는가?확장성: NLP 연산은 자원 소모가 크기 때문에 별도의 서비스로 분리하여 독립적으로 확장 가능독립 배포: Dockerfile 기반으로 채팅 서비스, 알림 서비스와 분리해 배포 가능데이터 분리: MongoDB에 독립 컬렉션을 사용유연성: 새로운 태그/키워..

멋사 부트캠프 2025.08.20

[백엔드 면접 질문 준비] (7) RDB에서 페이징 쿼리의 필요성

페이징 쿼리(Paging Query)란?페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다. 데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다. MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다. 페이징 쿼리를 왜 사용할까?1. 데이터의 물리적 양실제 서비스에서는 수천, 수만, 수십만 개의 데이터가 존재할 수 있습니다.한 번에 모든 데이터 조회시 발생하는 이슈DB에 과부하 발생네트워크 전송량 증가사용자 브라우저에서도 렌더링 부담2. 사용자 경험 측면사용자는 한 번에 모든 상품을 보기 힘듬일반적으로 ..

Interview Question 2025.04.15

[Project] N:M 매핑에서 복합 키(Composite Key)를 사용할 때 주의할 점

복합키(Composite Key) vs 고유 Id JPA에서 N:M 관계를 매핑할 때, 중간 테이블(연결 테이블)에 고유 ID(@Id)를 넣을 것인지, 복합 키(@EmbeddedId)를 사용할 것인지 고민하는 경우가 많다. 처음에는 "그냥 @Id를 넣고 auto_increment 하면 되지 않나?"라고 생각할 수 있지만, 이 방식은 데이터 무결성과 성능 문제를 초래할 수 있다.본 글에서는 복합 키(Composite Key)를 사용할 때의 장점과 @Id 방식이 가지는 문제점을 분석해보겠다. N:M 관계에서 중간 테이블의 역할ProblemSet(문제지)와 Problem(문제)은 N:M 관계이다.따라서 ProblemSetToProblem이라는 중간 테이블이 필요하다.이때, 이 테이블의 고유 식별자(PK)를 어..

EduClass Project 2025.03.05

[Spring] JWT(JSON Web Token) 방식과 주의할 점

JWT 의 필요성과 등장 배경JWT는 클라이언트-서버 간의 인증 정보를 안전하고 간편하게 전달하기 위해 고안되었습니다. 특히, 서버가 상태를 관리하지 않는(stateless) 환경에서 확장성과 성능 면에서 큰 이점을 제공합니다. JWT(Json Web Token) 은 통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용됩니다. JWT는 토큰 자체에 정보가 포함되어 있는 클레임 기반 토큰입니다. 일반적인 애플리케이션에서 JWT는 주로 인증과 인가를 구현하기 위해 사용됩니다.  JWT의 구조JWT는 헤더, 페이로드, 시그니처로 구분됩니다. 헤더에는 토큰의 암호화 알고리즘이나 타입을 가지며, 페이로드에는 데이터(만료일, 사용자 정보 등)을 가집니다. 시그니처는 헤더와 페이로드가 변조되지 않았는지 ..

SPRING 2025.03.05

[Spring] Spring Boot AutoConfiguration(자동 설정)

Spring Boot AutoConfiguration은 개발자가 복잡한 설정을 간소화 하고 애플리케이션을 빠르게 구성할 수 있도록 설계된 기능이다. AutoConfiguration은 애플리케이션 실행 시 필요한 설정을 자동으로 적용해주며, 개발자가 비즈니스 로직에만 집중할 수 있게 해준다. 예를 들어, spring-boot-starter-data-jpa 의존성을 추가하면 DataSource 및 JPA 설정이 자동으로 구성된다. 웹 서버는 spring-boot-starter-web 의존성을 추가하면 내장 Tomcat과 Spring MVC가 자동으로 설정된다. 이는 Spring Framework에서 수작업으로 설정해야 했던 작업들을 간소화 해준다. 1. AutoConfiguration 동작 원리@Enable..

SPRING 2024.12.23

[Spring] Spring Boot 2 vs Spring Boot 3 차이가 무엇일까?

Spring Boot 2와 Spring Boot 3의 차이점을 알아보자. JDK VersionSpring Boot 3에서는 JDK 17미만의 버전을 지원하지 않습니다. JavaEE -> JakartaEESpring Boot 3는 모든 종속성을 위해 Java EE에서 Jakarta EE API로 마이그레이션 되었습니다. Jakarta EE는 엔터프라이즈 급 Java 기반 서버 사이드 애플리케이션을 개발하기 위한 표준을 의미합니다.javax.servlet.* -> jakarta.servlet.*javax.annotation.* -> jakarta.annotation.*javax.transaction.* -> jakarta.transaction.* - Java EE는 엔터프라이즈 애플리케이션 개발을 위한 Ja..

SPRING 2024.12.23

[Spring Boot] 스프링(Spring) vs 스프링 부트(Spring Boot)

1. Spring FrameworkSpring은 Java 애플리케이션 개발을 위한 오픈소스 프레임워크로, 좀 더 가벼운 애플리케이션 개발을 목적으로 설계되었다. Spring 프레임워크를 사용했을 때, 장점은 다음과 같다.유연성 : Spring은 여러 기술과 잘 통합되며, 다양한 아키텍처 패턴을 선택할 수 있다. XML, Java Config, 애노테이션 기반 설정을 모두 지원하여 개발자의 선호에 따라서 유연하게 선택가능하다.DI(Dependency Injection) : 객체 간의 의존성을 외부에서 관리하여 유연하고 테스트 가능한 코드를 작성할 수 있다.AOP(Aspect-Oriented Programming) : 로깅, 트랜잭션 관리 등 공통 관심사를 분리하여 코드의 가독성과 유지보수성을 높인다.다양한..

SPRING 2024.12.23