문제 발생
- Ajax를 이용하여 JSON 형태로 데이터를 전송
- @RequestBody와 클래스를 이용하여 자동으로 매핑이 될 수 있도록 DTO 클래스 생성
- DTO 클래스와 Ajax에서 전송하는 데이터를 일치시켜 멤버 변수 : Key값을 동일하게 맞췄음에도 불구하고 null 데이터만 수신
문제 원인
- Eclipse는 Lombok을 바로 지원하지 않기 때문에 추가적인 설정이 필요
문제 해결
- pom.xml에 lombok dependency 추가
- Maven Dependencies에서 lombok을 찾아 경로 확인
- 해당 경로로 찾아가서 lombok.jar 파일 실행
- update/install 클릭 후 install Successful → Quit Installer 클릭
- 이클립스 재시작 후 Lombok 설정한 클래스의 Outline 확인
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- Lombok dependency만 추가하면 @Setter, @Getter 같은 어노테이션 인식은 문제가 되지 않음
- 하지만, 오히려 오류가 발생하지 않기 때문에 별도로 Lombok을 설치해주어야한다는 것을 몰라서 문제를 해결하는데 훨씬 더 오래 걸린 것 같음
- 만약, lombok.jar를 설치하지 않았다면 outline에는 멤버 필드만 표시되었던 것으로 기억함
해당 문제에 대해서 ChatGPT에게 질문
- Eclipse는기본적으로 Lombok을 바로 지원하지 않고,
- IntelliJ IDEA는 Maven 또는 Gradle 의존성만 추가해도 Lombok을 자동으로 인식하도록 설계가 되어 있다고 함
Eclipse에서 Lombok이 바로 동작하지 않는 이유
- Eclipse는 기본적으로 Annotation Processing(어노테이션 처리) 기능이 비활성화되어 있음
- 또한, Lombok 처럼 어노테이션 기반으로 코드를 생성하는 라이브러리를 자동으로 인식하지 않기 때문에 Lombok을 사용하기 위해서는 명시적으로 Eclipse에게 알려주어야 함
→ 명시적으로 알려주는 것이 위의 해결 방법(jar 파일 실행하여 설치)
Lombok 이외의 어노테이션 기반으로 코드를 생성하는 라이브러리는 일일이 jar 파일을 설치?
대답은 No
Lombok은 특별한 방식으로 Eclipse와 통합
- Lombok은 컴파일 타임에 어노테이션을 처리하여 코드를 자동으로 생성
- 이를 위해 Eclipse의 컴파일러와 직접 통합되어야하기 때문에 추가 설정이 필요
- 반면, 다른 대부분의 어노테이션 기반 라이브러리(Hibernate Validator, Spring Boot Annotations)는 컴파일러와 통합되지 않고 런타임에 동작
다른 라이브러리는 보통 추가 설정 없이 동작
- 대부분의 어노테이션 기반 라이브러리는 Maven/Gradle 의존성만 추가하면 Eclipse에서도 자동으로 동작
- 다음의 라이브러리들은 Eclipse의 Annotation Processing 활성화만 되어 있으면 추가 설치 없이 작동
- Spring Boot : @Controller, @Service, @Autowired 등은 Eclipse에서 바로 인식
- JPA/Hibernate : @Entity, @Column, @GeneratedValue 등도 별도 설정 없이 Eclipse에서 처리
- Validation API : @NotNull, @Size, @Pattern 같은 어노테이션도 추가 설정 없이 사용 가능
Lombok처럼 추가 설정이 필요한 경우
다음과 같은 라이브러리들은 Lombok처럼 별도의 설정이나 플러그인이 필요할 수 있음
- MapStruct : JavaBean 간의 매핑을 자동 생성하는 라이브러리로, Lombok과 마찬가지로 컴파일러 플러그인 설정이 필요
- Immutables : 불변 객체를 생성하는 라이브러리로, Lombok처럼 Eclipse 설정이 필요할 수 있음
Annotation Processing 활성화
- 어노테이션 기반 라이브러리를 사용할 때 추가적인 문제가 발생하지 않게 하기 위해 다음의 설정을 미리 해두는 것을 권장
- 프로젝트 우 클릭 → Properties → 검색창 'ann' 입력 → Java Compiler → Annotation Processing 3개 항목 체크
'Various Error' 카테고리의 다른 글
[Java/Stream API] toList() is undefined 에러 (0) | 2024.12.17 |
---|---|
[STS/SpringBoot/Mybatis] Invalid value type for attribute 'factoryBeanObjectType': java.lang.String (0) | 2024.12.16 |
[STS] JSP 파일 인식 불가 (0) | 2024.12.10 |
[STS] Invalid project description (0) | 2024.12.10 |
[eGovFramework] pom.xml의 ExceptionInInitializerError (0) | 2024.12.03 |