본문 바로가기

전체 글

[Spring] JPA 성능 최적화와 동시성 제어 JPA를 사용하다 보면 연관관계 매핑, 트랜잭션 처리, 동시성 제어 등 다양한 문제에 직면하게 됩니다. 이 글에서는 실제 프로젝트에서 겪을 수 있는 성능 이슈와 동시성 문제를 어떻게 해결할 수 있는지 정리했습니다.1. @OneToMany 컬렉션: List vs Set왜 Set을 고려해야 하는가?Member 엔티티에서 선호 카테고리를 관리할 때, List와 Set 중 무엇을 선택해야 할까요?// List 사용@OneToMany(mappedBy = "member")private List memberPrefers = new ArrayList();// Set 사용@OneToMany(mappedBy = "member")private Set memberPrefers = new HashSet();주요 차이점1. 중복.. 더보기
REST API 설계 RESTful API를 처음 설계할 때 많은 개발자들이 어려움을 겪습니다. 이 글에서는 REST API 설계의 핵심 개념들과 실무에서 자주 마주치는 상황들에 대한 해결책을 소개합니다.1. RESTful API의 핵심 원칙REST API를 설계할 때 가장 중요한 두 가지 원칙이 있습니다.1-1. 플랫폼 독립성클라이언트가 내부 구현에 관계없이 API를 호출할 수 있어야 합니다. iOS, Android, 웹 브라우저 등 어떤 플랫폼에서든 동일한 방식으로 API를 사용할 수 있어야 합니다.1-2. 느슨한 결합클라이언트와 서버가 독립적으로 발전할 수 있어야 합니다. 서버의 내부 구조가 바뀌어도 클라이언트는 영향을 받지 않아야 하며, 그 반대도 마찬가지입니다. 2. 리소스 URI 설계 원칙REST API의 핵심은 .. 더보기
Spring Framework 핵심 개념: 서블릿, Spring MVC, AOP에 대해 Spring Framework를 사용하면서 "왜 이렇게 편한 거지?"라는 생각을 해본 적 있으신가요? 이번 글에서는 Spring의 편리함 뒤에 숨겨진 원리를 파헤쳐보겠습니다. 전통적인 서블릿부터 Spring MVC, 그리고 AOP까지, Spring의 핵심 개념들을 하나씩 살펴보겠습니다.Part 1. 서블릿 vs Spring MVC전통적인 서블릿 개발의 불편함서블릿은 Java로 웹 애플리케이션을 만들 때 HTTP 요청을 처리하는 기본 기술입니다. 하지만 직접 사용하면 상당히 불편합니다.@WebServlet("/user")public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletReques.. 더보기
데이터베이스 고급 개념: 페이지네이션, 트랜잭션, 인덱스 실무에서 데이터베이스를 다루다 보면 단순 CRUD를 넘어 성능 최적화와 데이터 일관성이 중요해집니다. 이번 글에서는 커서 기반 페이지네이션, 트랜잭션, 그리고 인덱스 전략을 알아보겠습니다.Part 1: Cursor 기반 페이지네이션1-1. 문제 상황미션 앱에서 사용자의 진행 중/완료된 미션 목록을 보여줘야 합니다. 수천 개의 미션이 있을 때, 어떻게 효율적으로 보여줄까요?1-2. Offset vs Cursor- Offset 방식 (전통적)SELECT * FROM missionsORDER BY created_at DESCLIMIT 10 OFFSET 100;- 문제점OFFSET 100이면 앞의 100개를 읽고 버림데이터가 추가/삭제되면 중복/누락 발생페이지가 뒤로 갈수록 느려짐- Cursor 방식 (권장)-.. 더보기
데이터베이스 정규화와 중복 요청 방지 실무 프로젝트를 진행하다 보면 데이터베이스 설계는 필수입니다. 하지만 처음에는 "일단 동작하게만" 만들다가 나중에 데이터 중복과 성능 문제로 골머리를 앓게 됩니다. 이번 글에서는 데이터베이스 정규화 과정과 실무에서 자주 발생하는 중복 요청 문제 해결법을 알아보겠습니다.0. 시작하기 전에이 글은 지역별 가게 방문 미션 앱을 예시로 합니다:회원이 지역의 가게를 방문하는 미션 수행미션 완료 시 포인트 획득리뷰 작성 기능Part 1: 데이터베이스 정규화왜 정규화가 필요할까요?데이터베이스를 처음 설계할 때는 모든 정보를 한 테이블에 때려박고 싶은 유혹이 있습니다. 하지만 이렇게 하면..."홍길동"이 10개 미션을 수행하면? → 홍길동의 이름, 이메일이 10번 중복 저장됩니다!1-1. 비정규형: 모든 걸 한 곳에-.. 더보기
[UMC 동아리] UMC 9기 합격 후기 이번 UMC 동아리 Spring 파트로 지원 했는데 최종 합격을 했다. 먼저 UMC에 대해 소개를 0. UMC 동아리란 ?University MakeUs Challenge (UMC)는 앱&웹 서비스 런칭에 도전하는 대학생 IT 연합동아리이다. 도전 평등 자신감을 추구하며 총 22개 학교가 참여한다. 프로젝트는 432개, 스터디는 765개를 지금까지 진행했고 Android, Design, iOS, Node, PM, Spring, Web로 총 7개 파트로 나누어져있다. 또한 연합 OT, 학교 OT, Core Day, 연합 네트워킹 데이, 너디너리 해커톤, PM 데이, UMC 해커톤, 학교별 해커톤, UMC 데모데이, 너디너리 데모데이등 다양한 활동을 동아리에 참여하여 진행할 수 있다. 1. 지원 이유사실 나.. 더보기
[Spring] REST API란 ? 1. REST API란? REST API는 웹 서비스 간의 통신을 위한 아키텍처 스타일입니다. REST(Representational State Transfer)의 원칙을 따르며 리소스를 중심으로 설계됩니다. 1-1. REST(Representational State Transfer)의 개념REST 아키텍처의 주요 원칙클라이언트-서버 구조: 관심사의 분리를 통해 확장성을 개선합니다.무상태성: 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다.캐시 가능성: 응답은 캐시 가능 여부를 명시해야 합니다.계층화 시스템: 클라이언트는 서버와 직접 연결되었는지 중간 서버와 연결되었는지 알 수 없습니다.인터페이스 일관성: 일관된 인터페이스로 전체 시스템 아키텍처를 단순화합니다.2. REST API의 .. 더보기
[Spring JPA] JPA란 ? 현재 진행중인 프로젝트에서 JPA를 사용하면서 느낌 점들과 추가적으로 더 학습한 내용을 정리해보려고 합니다.JPA가 무엇인지 설명하기 전에 ORM이 뭔지 먼저 설명을 해보겠습니다. 0. ORM이란? ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑해주는 기술입니다. 개발자가 직접 SQL을 작성하지 않고도 객체를 통해 데이터베이스를 조작할 수 있게 해줍니다.예를 들어서 자바의 User 클래스가 있다면 데이터베이스의 users 테이블과 자동으로 매핑됩니다.User 객체를 생성하면 → users 테이블에 새로운 행이 추가됨User 객체의 속성을 변경하면 → users 테이블의 해당 데이터가 수정됨 User 객체를 삭제하면 → users 테이블의 해당 행이 삭제됨 1. .. 더보기