영속성 컨텍스트(entityManager) 영속성 컨텍스트는 데이터를 대신 관리해주는 JPA의 기능이라고 볼 수 있을 것 같습니다. 객체가 관리대상(영속상태)이 된다면 트랜잭션이 끝나고 insert나 update같은 기능을 대신 처리하게 해줍니다. //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 위 상태처럼 그냥 객체(member)를 생성하고 어떤 처리도 되지 않은 상태를 비영속이라 합니다. 여기서 영속 상태를 만들어주기 위해서는 아래와 같이 하면 됩니다. EntityManager em = emf.createEntityManager(); em.getTransaction().b..
@Query Spring Data JPA에서는 기본적으로 JpaRepository를 통해서 제공되는 findById 같은 메서드도 있고 메서드 네이밍만을 통해서 쿼리를 실행할 수 있도록 기능을 제공, 하지만 이 방법만으로 만들 수 없는 쿼리가 있다면 쿼리를 직접 작성해야하며 그 때 커스텀 Repository의 메서드에 붙이는 어노테이션이 @Query입니다. 기본적으로 JPQL로 작성할 수 있고, nativeQuery=true 옵션으로 네이티브 쿼리도 사용 가능합니다. @Modifying @Query로 작성된 변경, 삭제 쿼리 메서드를 사용할 때 필요합니다. 주로 벌크 연산 시 사용됩니다. JPA Entity LifeCycle을 무시하고 쿼리가 실행되기 때문에 해당 어노테이션을 사용할 때는 영속성 콘텍스트..
@Autowired란? 의존성을 주입 할 때 사용하는 어노테이션으로 의존 객체의 타입에 해당하는 bean을 찾아주는 역할을 한다. 사용 가능한 위치 생성자(스프링 4.3부터 생략 가능) Setter 필드 생성자에 @Autowired (스프링 4.3부터 생략가능) @Service public class TestService { TestRepository testRepository; @Autowired public TestService(TestRepository testRepository) { this.testRepository = testRepository; } } public class TestRepository { .... } 위 코드에서 TestRepository의 의존성 주입이 작동할까? 당연히 작..
의존성 추가하기 implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' 스웨거의 경우 springDoc라는 라이브러리가 1개 더 있고, 2.x 와 3.x 버전의 차이가 있다. SwaggerConfig.java 추가 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors..
Stream거의 모든 자바 애플리케이션은 컬렉션을 만들고 활용한다. 하지만 컬렉션으로 모든 문제가 해결되는 것은 아니다. 예를 들어 리스트에서 고가의 트랜잭션(거래)만 필터링한 다음에 통화로 결과를 그룹화해야 한다고 가정하자. 다음 코드처럼 많은 기본 코드를 구현해야한다.Map transactionsByCurrencies = new HashMap(); for(Transaction transaction : transactions){ if(transaction.getPrice() > 1000) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); i..
자바는 1996년 자바 개발 키트(JDK 1.0)가 발표된 이후로 많은 사람들이 적극적으로 활용했다. 그래서 java7(2011)까지 많은 변화가 생겼고 가장 큰 변혁이 있었다는 java8(2014)이 탄생하였다. java9 에서도 중요한 변화가 있었지만 java8 만큼 획기적이거나 생산성이 바뀌는 것은 아니었다. java10 에서는 형 추론과 관련해 약간의 변화만 일어났다. 이런 크고 작은 변화 덕분에 프로그램을 더 쉽게 구현할 수 있게 되었다. 예를들어 다음은 사과 목록을 무게순으로 정렬하는 고전적 코드다. Collections.sort(inventory, new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight()..
저번에 만들었던 컨트롤러에 자체 회원 가입을 JWT방식으로 구현해 보겠습니다. 이전 링크 : https://smujihoon.tistory.com/240 1. 의존성 추가 compile('io.jsonwebtoken:jjwt:0.9.1') 2. JwtTokenProvider 라는 jwt관련 메소드를 정의할 클래스 생성 @RequiredArgsConstructor @Component public class JwtTokenProvider { private String secretKey = "webfirewood"; // 토큰 유효시간 30분 private long tokenValidTime = 30 * 60 * 1000L; private final UserDetailsService userDetailsSer..
1. 구글 계정 만들기 먼저 OAuth 동의 화면에서 이름 짓고 밑에 3개 잘 등록되었는지만 확인하고 생성 제일 상단처럼 프로젝트 이름을 짓고 왼쪽 햄버거 버튼으로 사용자 인증 정보로 넘어오면 오른쪽 네모칸 처럼 클릭 승인된 리디렉션 URI 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트할 URL입니다. 스프링 부트 security 2.0 부터는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL을 지원하고 있습니다. 사용자가 별도로 리다이렉트할 URL을 지원하는 컨트롤러를 만들 필요가 없습니다. 시큐리티에서 구현됨 현재는 개발 상태이므로 위와 같이 적었고 포트는 알아서 맞춰서 사용하세요(기본 8080) 만들기 버튼으로 생성된 OAu..