이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

@NoArgsConstructor

: 파라미터가 없는 기본 생성자 생성

 

OPTION

 - AccessLevel.PROTECTED

: 기본 생성자의 접근 제어 = PROTECTED

: 같은 pkg 또는 자식 class를 제외한 외부 클래스에서는 해당 객체의 인스턴스를 생성할 수 없음

 - (default) AccessLevel.PUBLIC

: 기본 생성자의 접근 제어 = PUBLIC

: 모든 위치에서 접근 가능

 

@Entity를 통해서 기본생성자를 만들 수 있지만 @NoArgsConstructor를 통한 접근 제한을 지정함으로써 무분별한 기본 생성자의 생성을 막을 수 있음

= 모든 필드에 대한 값이 반드시 제공되어야만 클래스의 인스턴스를 생성할 수 있도록 제어

1
2
3
4
5
6
7
8
9
10
11
public class ExampleClass {
    private String field1;
    private int field2;
 
    @NoArgsConstructor(AccessLevel.PROTECTED)
    public ExampleClass(String field1, int field2) {
        this.field1 = field1;
        this.field2 = field2;
    }
}
 
 
cs

ExampleClass에 대한 @NoArgsConstructor를 선언함으로써 불완전한 객체 생성을 방지

1
2
3
ExampleClass example = new ExampleClass();
// 기본 생성자가 없으므로 Error 발생
 
 
cs

 

⭐ 요약

 * Class + @NoArgsConstructor: 기본 생성자 생성

 * Constructor + @NoArgsConstructot: 해당 생성자 이외의 생성자는 생성되지 않음

 

 

cf. @Entity 선언 시, 생성자가 필요한 이유

: JPA에서 Entity Proxy를 만들기 위해서는 반드시 기본 생성자 하나를 생성해야 함

: Entity Proxy는 JPA의 지연 로딩(lazy loading) 기능을 구현하는 데 사용

1. 엔티티 클래스를 상속받아 프록시 클래스 생성
2. JPA는 리플렉션을 사용하여 프록시 객체를 생성
3. 프록시 객체는 엔티티의 실제 데이터를 지연해서 로딩

 

* JPA Reflection: 엔티티 클래스의 메타데이터를 조사하여 객체와 데이터베이스 간의 매핑을 구성

 

 

 

참고 자료

 

자주 사용되는 lombok, 주의 사항 | devk0ng's blog

@Getter, @Setter : 말그대로 getter, setter method를 생성해주는 놈이야! AccessLevel을 명시해줌으로써 접근제한자를 지정 해 줄 수 있어. 123456789public Class Sample { @Getter private String attr1; @Getter(AccessLevel.PRIVATE)

devk0ng.github.io

 

@NoargsConstructor(AccessLevel.PROTECTED) 와 @Builder

@NoargsConstructor(AccessLevel.PROTECTED) 와 @Builder를 함께 사용할때 주의할 점에 대해서 서술합니다. "왜" 안되는지와 "왜" 이렇게 해결 할 수 있는지에 대해 집중하여 서술합니다. 1. 왜 NoargsConstructor(Access

cobbybb.tistory.com

 

'Java > JPA' 카테고리의 다른 글

[SpringBoot_JPA_1] @PathVariable  (0) 2023.06.03
[SpringBoot_JPA_1] TypedQuery  (0) 2023.06.02
[SpringBoot_JPA_1] @Transactional  (0) 2023.05.29
[SpringBoot_JPA_1] Dirty Checking & Merge  (1) 2023.05.28
[SpringBoot_JPA_1] StringUtils.hasText()  (0) 2023.05.27

🌿 기본 환경: IDE: STS4, Language: Java

 

 

발생 Error

 🚨 Github에서 project clone 후, project import 시, No projects are found to import 발생

 

 

발생 원인

import - General - Existing Projects into Workspace 시, .classpath가 없을 경우 인식되지 않음

 

 

해결 방법

import - General - Projects from Folder or Archieve로 project import

 + project import 후, Gradle Project 미인식 문제는 이 글로!

 

 

 

참고 자료

 

자바이클립스 import 에러 : No projects are found to import

.classpath같은 파일이 없으면 import 인식을 못한다고 어디서 봤다. 아무튼 이런 경우에는 File > Open Projects from File System에서 폴더를 가져오면 된다.

humahumahuma.tistory.com

 

Spring 프로젝트 불러오기, 내보내기 (Import, Export)

Import (불러오기) Package Explorer에 마우스 오른쪽 클릭 후 Import... 클릭 General,Git,Maven등 여러 종류를 import할 수 있지만 다운로드된 프로젝트를 불러오기 위해 General에서 Existing Projects into Workspace를

hoonys91.tistory.com

 

🌿 기본 환경: IDE: STS4, Language: Java

 

 

발생 Error

🚨 SpringBoot에서 Project import 후, application.java 파일 import 구문에 다음과 같은 Error 발생

1
2
import org.springframework.boot.SpringApplication;
 
 
cs

 

 

발생 원인

Gradle Project로 인식되지 않음

 

 

해결 방법

configure → add gradle nature 실행

 

cf. Maven Project

1. C:\Users\사용자이름\.m2 파일 제거
2. 프로젝트 우클릭 - Maven - update project
(* 프로젝트 우클릭 - Maven이 없을 경우: 프로젝트 우클릭 - Configure - Convert to maven project)

 

 

참고 자료

 

JAVA SPRING 환경 구축 설치 하자마자 에러( import org.springframework cannot be resolved )

구글링을 해보니 gradle이 안 가져와져서 뜨는 문제이고 해당 프로젝트 우클릭후 configure -> add gradle nature 실행 또는 maven일 경우 - C:\Users\사용자이름\.m2 파일 제거 프로젝트 우클릭 - Maven - update proj

xorms0707.tistory.com

 

🌿 기본 환경: IDE: STS4, Language: Java

 

 

발생 Error

🚨 SpringBoot에서 Application.java 파일을 SpringBoot App Run을 실행 후,

http://localhost:8080/으로 접속할 경우, 맨 처음 화면이 Whitelabel Error Page가 반환됨

 

 

발생 원인

localhost:8080 으로 연결 시, 기본값인 index.html이 없음

 

 

해결 방법

src/main/webapp에 index.html 파일 생성

 

 

 

참고 자료

 

스프링부트 Whitelabel Error Page 에러 해결방법

프로제트 서버를 실행 한 후 localhost:8080 으로 접속을 해보면 Whitelabel Error Page 에러가 발생하는 경우가 있는데 전체 에러 메시지는 아래와 같다 Whitelabel Error Page This application has no explicit mapping for

wakestand.tistory.com

 

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

@Transactional

: 선언적 Transaction, 해당 범위 내 메서드가 트랜잭션이 되도록 보장

: 클래스, 메소드에 @Transactional이 선언되면 해당 클래스에 트랜잭션이 적용된 프록시 객체 생성

→ 프록시 객체는 @Transactional이 포함된 메서드가 호출될 경우, 트랜잭션을 시작하고 Commit or Rollback을 수행

* CheckedException or 예외가 없을 때는 Commit

  UncheckedException이 발생하면 Rollback

 

즉, @Transactional를 선언함으로써 연산의 원자성이 보장되어, 연산이 도중에 실패할 경우 변경사항이 Commit되지 않음

 

 

@Transactional 우선 순위

Class Method > Class > Interface Method > Interface

 

 

@Transactional 주의 사항

1. Public Method에서만 사용 가능

2. @Transactional이 적용되지 않은 Public Method에서 @Transactional이 적용된 Public Method를 호출할 경우, 트랜잭션이 동작 X

 

 

 

참고 자료

 

@Transactional - Incheol's TECH BLOG

스프링에서 트랜잭션 처리는 보통 @Transactional 어노테이션을 많이 사용하게 된다. @Transactional은 클래스 또는 메소드에 사용할 수 있으며 @Transactional이 포함된 메소드가 호출될 경우, 프록시 객체

incheol-jung.gitbook.io

 

 

[Spring] @Transactional의 이해

스프링에서 트랜잭션 처리를 위해 선언적 트랜잭션을 사용한다. 선언전 트랜잭션이란 설정 파일 or 어노테이션 방식으로 간편하게 트랜잭션에 관한 행위를 정의하는 것이다. (물론, 프로그래밍

imiyoungman.tistory.com