본문 바로가기

Java/spring

(13)
[Spring/JPA] LazyLoading으로 인한 ByteBuddyInterceptor 문제해결(@EntityGraph, JPQL, DTO로 필요한 데이터만 로드) 들어가며✍️ 본 글은 LazyLoading으로 인한 ByteBuddyInterceptor 문제해결 과정을 담고 있습니다.아래 코드와 @EntityGraph(attributePaths = "member") 설정은 Hibernate Lazy 로딩 문제를 해결하였습니다.  ✏️ 데이터 모델 요약✅ 테이블 관계 요약admin_responses ↔ member_questions: 1:1 관계 (OneToOne): admin_responses.questions_sequence_id는 member_questions.questions_sequence_id를 참조합니다.member_questions ↔ members: N:1 관계 (ManyToOne): member_questions.member_id는 members.m..
[Java/스프링] JPA를 이용한 Todo API 개발 과정 (dependencies: Spring Boot DevTools, Lombok, Spring Web, MySQL Driver, Spring Data JPA) 들어가며🎯 JPA를 연습하기 위해 CRUD 기능을 구현할 수 있는 Todo API를 만들어 보았습니다.본 프로젝트는 다음과 같은 순서로 진행하였습니다.프로젝트 생성application.propertices 설정Entity 및 DB 생성DTO 생성Service 생성 및 DTO 사용Controller 생성 및 DTO로 데이터 송수신 기능 요구사항Todo 목록 조회사용자는 Todo 목록을 조회할 수 있습니다.각 Todo 항목에는 id, title, description, completed 필드가 포함됩니다.GET / todos 를 통해 모든 Todo 항목을 가져옵니다. - getTodos()GET / todos / {id} 를 통해 id에 해당하는 Todo 항목을 가져옵니다. - getTodoById()To..
[Java/스프링] 주요 어노테이션 정리 (@빈 등록, 요청 및 응답, 트랜잭션 및 AOP, Spring Boot) 들어가며ℹ️ 어노테이션: Annotation, 메타데이터를 코드에 추가하는 방식으로 주로 코드에 대한 부가적인 정보를 제공합니다.메타데이터 제공: 어노테이션을 기반으로 컴파일러나 프레임워크가 동작을 수행합니다. (@Override)정보 전달: 컴파일러가 경고를 무시하거나, 특정 코드를 자동으로 생성하도록 도와줍니다. (@SuppressWarnings)런타임 시 동작: 일부 어노테이션은 런타임에서 리플렉션이라는 메커니즘을 통해 동적으로 처리됩니다. (@Retention)가독성 및 유지보수성: 코드에 명시적으로 특정 동작이나 설정을 표시하여 코드의 가독성과 유지보수성을 향상시킵니다. (@Deprecated)💡스프링 주요 어노테이션: Spring 프레임워크에서 자주 사용하는 주요 어노테이션은 애플리케이션의 ..
[Java/스프링 입문] AOP - AOP가 필요한 상황, 적용(공통 관심 사항, 핵심 관심 사항, @Aspect, @Around, joinPoint.proceed, @Bean, 프록시) 들어가며🎯 AOP: Aspect-oriented programming, 관점 지향 프로그래밍- Aspect: 흩어진 기능을 모을 때 사용하는 것- Concern: 서로 다른 클래스라고 하더라도 비슷한 기능을 하는 부분각 Concern 별로 Aspect를 만들어주고, 어느 클래스에서 사용하는지 입력해 주는 방식입니다. 우측 그림이 Aspect로 모듈화 한 것을 보여주는 것입니다. 각 모듈에는 Advice와 Pointcut이 있습니다.- Advice: 해야할 일, 기능- Pointcut: 어디에 적용해야 하는지 나타내는 것 (ex: 클래스 A의 w 메서드)- Target: 각 클래스, 즉 적용이 되는 대상 (ex: 클래스 A, B, C) 1. AOP가 필요한 상황1) 언제 왜 쓰는지?모든 메소드의 호출 시..
[Java/스프링 입문] 스프링 DB 접근 기술(3) - JPA, 스프링 데이터 JPA(persist, @Transactional, @Id, @GeneratedValue, JpaRepository) 들어가며🏗 JPA: 기존의 반복 코드 및 기본적인 SQL도 JPA가 직접 만들어서 실행해 줍니다.SQL과 데이터 중심의 설계 → 객체 중심의 설계로 패러다임을 전환할 수 있습니다. 개발 생산성을 크게 높일 수 있습니다.🚀 스프링 데이터 JPA: 위의 JPA 기술을 스프링에 한 번 감싸서 제공하는 기술입니다.(이는 JPA를 편리하게 사용하도록 도와주는 기술, 반드시 JPA에 대해 먼저 공부할 것)1. JPAℹ️ ORM: Object Relational MappingObject 즉 Java의 클래스(객체)와 RDM의 테이블을 연결한다는 의미입니다.이 두 개념을 서로 연결(Mapping)하여 마치 하나인 것처럼 관리하기 위한 방법론입니다.=> SQL문 작성없이 Java 코드만으로 DB에 데이터를 저장할 수..
[Java/스프링 입문] 스프링 DB 접근 기술(2) - 스프링 통합 테스트, 스프링 JdbcTemplate(@SpringBootTest, @Transaction, SimpleJdbcInsert) 들어가며🧪 스프링 통합 테스트: 스프링 컨테이너와 DB까지 통합한 테스트를 수행합니다. (단위테스트⭐⭐⭐)🛠 스프링 JdbcTemplate: 순수 JDBC와 동일한 환경설정을 하면 됩니다. 스프링 Jdbc Template과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해 주지만, SQL은 직접 작성해야 합니다.1. 스프링 통합 테스트1) @SpringBootTest, @Transactionpackage hello.hello_spring.service;import hello.hello_spring.domain.Member;import hello.hello_spring.repository.MemberRepository;import org.junit.jupiter.api...
[Java/스프링 입문] 스프링 DB 접근 기술(1) - H2 데이터베이스, 순수 JDBC(다형성, IoC컨테이너, DI, SOLID 중 OCP) 들어가며 🗄️ H2 데이터베이스: 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면을 제공합니다.🔌 순수 JDBC: 고대 개발자의 삶을 돌아보고, 객체지향적인 설계가 좋은 이유에 대해서 알아봅시다. 1. H2 데이터베이스1) 다운로드 및 설치https://www.h2database.com/html/main.html위 주소에서 원하는 버전의 H2 데이터베이스를 다운로드 합니다. (버전은 스프링 부트 버전에 맞춥니다.)아래와 같이 실행파일을 눌러 실행합니다. 2) 데이터베이스 생성데이터베이스 파일 생성 방법은 다음과 같습니다.최초 한번: jdbc:h2:~/test내장 모드로 데이터베이스에 접속합니다.데이터베이스가 애플리케이션 프로세스 내에서 실행되기에, 애플리케이션이 실행되는 동안에만 데이터베이스에 ..
[Java/스프링 입문] 회원 관리 예제 - 웹 MVC 개발, 홈 화면 추가/등록/조회(@Controller, @GetMapping, @PostMapping) 들어가며👨‍🔧 회원 웹 기능: 홈 화면 추가, 등록, 조회(@Controller, @GetMapping, @PostMapping)1. 홈 화면 추가ℹ️ 정적 콘텐츠 동작원리1. 웹 브라우저: localhost:8080 요청이 옵니다.2. 내장 톰캣 서버: 스프링 컨테이너에 관련 컨트롤러가 있는지 확인합니다. (@Controller)3. 내장 톰캣 서버: 관련 컨트롤러가 없다면, 정적 콘텐츠 파일을 찾습니다. (static 폴더 내 파일, index.html)4. 웹 브라우저: static에 있는 index.html을 렌더링합니다. 1) @Controller, home.html// HomeController.javapackage hello.hello_spring.controller;import org...

반응형