전체 글 11

[JPA] JPA의 N + 1 문제 정리

N + 1 문제연관 관계에서 발생하는 이슈연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상.현상 재현FetchType 정리예시로, 선생님과 학생의 관계를 표현해보려한다.하나의 선생님은 여러 명의 학생을 담당한다.한 명의 학생은 한 명의 선생님에게 소속된다.@Entity@Data@NoArgsConstructorpublic class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @OneToMany(mappedBy = "teac..

공부 2025.03.27

[JPA] FetchType 정리

FetchTypeJPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’A와 B라는 엔티티가 존재한다고 했을때, 테이블 간의 관계에서 A엔티티를 조회하였을 경우 B엔티티를 함께 조회할 것인지 아니면 필요에 따라 조회할 것인지 결정하는 데 사용됨.지연 로딩의 관계에서는 A엔티티를 조회할 때 B엔티티는 조회하지 않고 B엔티티 데이터가 실제로 사용될 때 해당 데이터를 조회함.FetchType.EAGER (즉시로딩)엔티티를 조회하는 방법을 정의하는 전략 중 하나.테이블 간의 관계에서 A라는 엔티티를 조회할 때 연관된 B라는 엔티티도 함께 조회하는 방식한번의 쿼리로 필요한 모든 데이터를 가져올 수 있으나 필요하지 않은 데이터까지 조회되어 성능 이슈 발생 가능.연관된 엔티티를 실제로 사용할 때 조..

공부 2025.03.27

JDBC, JPQL, QueryDSL etc

JDBCJava Database Connectivity데이터베이스와의 연결과 쿼리 수행을 제공하는 Java의 API대표기능 3가지db와 같은 데이터 소스와 연결db에 쿼리 전송요청에 따른 db쿼리 결과 처리주로 쓰이는 JDBC API 클래스와 인터페이스java.sql.ConnectionConnection객체: Java 프로그램이 외부 데이터베이스 시스템과 연결될 때 사용됨.db와의 연결을 설정하고 유지하며, SQL 쿼리를 실행하거나 트랜잭션을 관리db연결 생성 및 종료, 커밋/롤백 등 트랜잭션 관리, Statement/PreparedStatement 등 객체 생성 기능 제공setAutoCommit(true) → default롤백처리가 필요하다면 false로 설정하고, 명시적으로 rollback() 또는 ..

공부 2025.03.27

[오브젝트 - 코드로 이해하는 객체지향 설계] 2장. 객체지향 프로그래밍

객체지향 프로그래밍을 향해협력, 객체, 클래스진정한 객체지향 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에 얻을 수 있다.어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라.클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정해야함.객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.객체를 협력하는 공동체의 일원으로 바라보는 것은 설계를 유연하고 확장 가능하게 만든다.도메인의 구조를 따르는 프로그램 구조도메인: 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야public class Screening { private Movie mo..

개발서적 2025.03.21

[오브젝트 - 코드로 이해하는 객체지향 설계] 1장. 객체, 설계

소프트웨어 모듈이 가져야 하는 세 가지 기능(모듈: 크기와 상관 없이 클래스나 패키지, 라이브러리와 같이 프로그램을 구성하는 임의의 요소)첫 번째 목적: 실행 중에 제대로 동작하는 것모듈의 존재 이유두 번째 목적: 변경을 위해 존재하는 것대부분의 모듈은 생명주기 동안 변경되기 때문에 간단한 작업만으로도 변경이 가능해야 함.세 번째 목적: 코드를 읽는 사람과 의사소통 하는 것특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 함.즉, 모든 모듈은 제대로 실행돼야 하고, 변경이 용이해야 하며, 이해하기 쉬워야 한다.변경에 취약한 코드의존성(dependency)의존성이 변경과 관련돼 있다.의존성은 변경에 대한 영향을 암시한다.어떤 객체가 변경될 때 그 객체에게 의존하는 다른 객체도 함께 변경될 수 있다는..

개발서적 2025.03.18

[회고] SSAFY 특화 프로젝트 - Stock Of Galaxy

🥇 SSAFY 2학기 두 번째 프로젝트(특화 프로젝트) 최우수상 수상두번째 프로젝트를 마치고 회고하는 글로 경험한 것과 느낀점을 자유롭게 정리하였습니다 :)우리팀 개발 원칙이자 제 개발 철학인 '일단 바보멍청이 방식으로 개발을 끝내자' 를 알고계시면 글 읽는데 도움이 되실 것 같습니다 ..(일단 기능이 굴러가게 개발을 빠르게 완료한 뒤에, 최적화 작업을 위한 고민을 해보고 이를 작업해보자! 입니다 ㅎㅎ) 나도 참 .....ㅋㅋㅋㅋㅋ 프로젝트 끝난지 3달 반이 지나가는데, 수료하고 리팩토링할 수 있는 부분들 생각해보면서 프로젝트 회고를 간단히라도 남겨놔야겠다 생각이 들어서 더 잊혀지기전에 조금이나마 적어보려합니다 ~공통프로젝트때도 여러 기술 많이 사용했고, 얻은 게 많았었는데 특화프로젝트때도 !! 얻은 ..

개발관련 2025.01.28

[개발일지] SSAFY 특화 프로젝트 - 3주차(2024.09.07 - 2024.09.14)

들어가기 전1주차부터 시작했어야 됐는데, 그 전주에 공통 프로젝트 본선 발표 준비한다고 정신도 없었고 .... 쉴 틈도 없이 바로 특화 프로젝트가 시작되었다.이래저래 기획하고 설계하다보니 시간이 훌쩍 흘렀고, 이제 공채기간이랑 겹쳐서 자소서도 적어야되고, 코테 준비도 해야되는데 시간도 부족하고 정신없이 바쁘다.본선발표 진행하고 저번주까지 약간의 번아웃이 와서 멍때리는 시간이 길었던 것 같은데, 명지 밖으로 벗어나 리프레시도 하고 금요일 퇴근하고 바닷가 바람도 쐬러가고 스스로 무기력함에서 벗어나려고 많은 노력을 했다.되돌아보면 편입준비할때도 그렇고 재수, 반수할때도 압박감 많은 상황속에서도 잘 해내 왔으니까, 이번에도 잘 해낼거라 생각한다 -!!! 이번 프로젝트에서는 backend api 설계, big ..

개발관련 2024.09.08

[회고] SSAFY 공통 프로젝트 - Street Coding Fighter

🥈 SSAFY 2학기 첫 프로젝트 (공통 프로젝트) 우수상 수상첫 프로젝트를 마치고 회고하는 글로 경험한 것과 느낀점을 자유롭게 정리하였습니다 :)해당 프로젝트는 2024년 7월 8일 - 2024년 8월 16일 총 6주동안 진행되었습니다.프로젝트 설명프로그래밍을 게임처럼 즐기는, 실시간 참여형 학습 플랫폼 'Street Coding Fighter(스코파)'아래는 프로젝트 개요입니다.2017년 교육 과정 개정으로 인해 현재 고등학생들은 프로그래밍 교육을 의무적으로 받고 있습니다. 또한, 2025년부터는 초등학생과 중학생도 프로그래밍을 의무적으로 배우게 됩니다.저희는 경남 양산의 한 고등학교 학생들을 만나 이야기를 들어보았습니다.인터뷰 결과 학생들은 코딩이 중요하다는 것을 알지만, 학교 수업이 이론 중심으..

개발관련 2024.08.31

Message Broker - Kafka와 RabbitMQ

Message Broker (RabbitMQ)보내는 쪾은 프로듀서, 받는 쪾은 컨슈머로 불린다.프로듀서는 전달할 것이 있을 때마다 택배함에 데이터를 넣기만 하면 된다.컨슈머는 필요할 때마다 데이터 골라서 가져가면 된다.지정된 시점까지 데이터를 보관한다. -> 데이터 유실 걱정할 필요 없음.프로듀서와 컨슈머의 수가 많아지더라도 모든 전달이 Message Broker를 통해 이뤄지기 때문에 설계가 수월해진다.보내는 쪽과 받는 쪽의 소통을 유연하게 만들고, 데이터의 유실을 방지하며, 수평적 확장이 용이하도록 만들어준다.안전한 메시지 전달, 노드 간의 독립성, 확장성을 필요로 하는 서비스들에 매우 유용하게 활용된다.요청에 대한 즉각적 응답에는 적합하지 않다.Event Broker (Kafka)RabbitMQMe..

개발관련 2024.07.30

[JAVA] 자바 가상 머신 (JVM) 이란?

시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공한다.JVM은 다른 프로그램을 실행시키는 것이 목적이다.갖춘 기능으로는 크게 2가지로 말할 수 있다.1. 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것2. 프로그램 메모리를 관리하고 최적화하는 것JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양이다.JVM은 보통 어떤 기기상에서 실행되고 있는 프로세스, 특히 자바 앱에 대한 리소스를 대표하고 통제하는 서버를 지칭한다.자바 애플리케이션을 클래스 로더를 통해 읽어들이고, 자바 API와 함께 실행하는 역할. JAVA와 OS 사이에서 중개자 역할을 수행하여 OS에 구애받지 않고 재사용을 가능하게 해준다.JVM에..

언어 2024.07.24