Framework 9

JPAQueryFactory의 fetch() 와 fetchOne() 비교

fetch() 와 fetchOne() 비교기능 fetch() fetchOne()반환 타입List단일 객체 (결과 없으면 null)결과 없음빈 리스트 반환null 반환결과 2개 이상모든 결과 반환NonUniqueResultException 발생용도여러 결과가 예상되는 경우 또는 결과가 없을 수 있는 경우단건 조회가 확실한 경우 (예: Primary Key로 조회)주의사항 NonUniqueResultException 발생 가능성 고려

@Transactional 과 Rollback규칙 (feat. Checked Exception , Unchecked Exception)

@Transactional 어노테이션과 롤백 규칙 Spring의 @Transactional 어노테이션은 AOP(Aspect-Oriented Programming)를 사용하여 트랜잭션을 관리한다. @Transactional이 적용된 메서드에서 예외가 발생하면, Spring은 해당 예외가 롤백을 유발해야 하는지 확인하는데 기본적으로 Spring은 Unchecked Exception (RuntimeException 또는 Error)이 발생했을 때만 롤백한다. Checked Exception에 대해서는 롤백을 수행하지 않는데, 이는 Checked Exception이 비즈니스 로직에서 복구 가능한 예외로 간주되기 때문. 즉, 개발자가 Checked Exception을 처리하기 위한 별도의 로직을 구현했을 것으로..

[Spring]@RequiredArgsConstructor

@RequiredArgsConstructor란? Lombok 라이브러리에서 제공하는 기능으로, 클래스의 생성자를 자동으로 생성해주는 어노테이션이다. 일반적으로 Spring에서는 @Autowired를 이용하여 의존성을 주입할 때, 해당 클래스의 생성자를 이용한다.이때 @RequiredArgsConstructor를 사용하면 Lombok이 컴파일 시간에 해당 클래스의 생성자를 자동으로 생성해준다. 따라서, @Autowired와 @RequiredArgsConstructor는 모두 Spring에서 의존성 주입을 처리하는데 사용되지만, @RequiredArgsConstructor를 사용하면 코드가 더 간결해지고, 더 안전하게 의존성을 주입이 가능하다.  예시@Controller@RequestMapping("/bas..

[Spring] @Autowired란?

@Autowired란?Spring에서 @Autowired는 의존성 주입(Dependency Injection)을 간편하게 수행할 수 있도록 도와주는 어노테이션이다. 의존성 주입은 객체 지향 프로그래밍에 있어서 중요한 개념으로, 클래스간의 의존 관계를 외부에서 설정하고, 이를 통해 느슨한 결합(Loose Coupling)을 유지하는 것을 목적으로 한다. (즉, 코드의 유연성과 재사용성을 높일 수 있다.) 사용 예시@Controller@RequestMapping("/basic/items")public class BasicItemController { private ItemRepository itemRepository; @Autowired //생성자가 1개일 경우 @Autowired 생략 가능 ..

[Spring] MultiValueMap란?

SpringBoot 강의를 듣는 중 MultiValueMap이라는 인터페이스를 만났다. MultiValueMap 인터페이스는 자바 API문서에서는 찾아볼 수 없고, 스프링 API문서에서 찾을 수 있다. 자바에 내장된 인터페이스가 아니라 스프링에서 제공하는 인터페이스라는 것을 알 수 있었다. 위의 MultiValueMap인터페이스를 보면 Map 인터페이스를 상속 받을 때 Value값을 List로 받는것을 확인할 수 있다. 즉, 하나의 Key와 하나 이상의 Value로 이루어진 리스트를 받는다는 말이다. // Java의 기존 Map Map basicMap = new HashMap(); // 스프링의 MultiValueMap MultiValueMap multiValueMap = new LinkedMultiVa..

[Spring Boot / Error] java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either.

Mapping 의 "경로"와 "변수명"이 같다면 name을 생략 가능하지만, 스프링 부트 3.2 파라미터 이름 인식 문제로 예외가 발생한다. //GetMapping 경로의 {userId}, {orderId}와 @PathVariable의 변수명이 같다면 name 생략 가능 @GetMapping("/mapping/users/{userId}/orders/{orderId}") public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) { log.info("mappingPath userId={}, orderId={}", userId, orderId); return "ok"; } java.lang.IllegalArgumentE..

Di / IoC

Spring공부의 가장 기본으로 배우는 것이 Di / IoC이다 Di란 Dependency injection으로 직역하면 의존성 주입이라는 의미, IoC란 Inversion of Controll으로 제어의 역전이다. 하지만 처음 듣는 용어인 나에게는 무슨 말인지 정확히 이해가 되지 않아서 구글링과 유튜브를 폭풍 검색하다가 유튜브 채널인 뉴렉처에서 강의를 듣고 바로 이해가 되었다 유튜브 채널 뉴렉처 : (https://www.youtube.com/channel/UC5-ixpj8DioZqmrasj6Ihpw) 뉴렉처 채널에서 설명한 바로는 Dependency(의존성)을 하나의 '부품'이라고 생각하고 Injection(주입)을 '조립'이라고 생각하고 .. 부품을 담은 Containner안에서 작은부품(depen..

Tomcat 설치 및 Eclipes설정

Tomcat 설치와 Eclipes 설정에 대해 알아보겠습니다 우선 Eclipse를 열고 새로운 Workspace를 만듭니다 이제 Tomcat 홈페이지에 들어가서 Tomcat8버전을 설치하시면 됩니다 압축은 잠시후에 풀도록하고 다음으로 넘어갑니다 Tomcat 설치후 명령프롬프트 실행 후 echo %java_home% 입력 위의 사진과 설명대로 tomcat 압축파일을 C드라이브에 풀어줍니다 이제 환경변수설정을 확인합니다 먼저 내PC에서 속성 클릭후 위와 같이 변수이름과 변수값을 입력후 '확인' 시스템변수도 확인해야 한다. 명령프롬프트를 다시 실행하여 변수설정이 잘 되었는지 확인 이제 C드라이브에 풀었던 Tomcat파일에 들어갑니다 server파일을 우클릭 후 EditPlus로 실행 69번째 줄에서 위의 사진..

Framework 2021.05.26