FrameWork
-
ORM - 영속성 관리(플러시, 준영속)FrameWork/ORM 2024. 2. 29. 14:38
플러시 플러시(flush())는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 플러시를 실행하면 구체적으로 다음과 같은 일이 일어난다. 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.(등록,수정,삭제,쿼리) 영속성 컨텍스트를 플러시하는 방법은 3가지 em.flush()를 직접 호출한다. 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL쿼리 실행 시 플러시가 자동 호출된다. ▼직접호출 엔티티 매니저의 flush() 메소드를 직접 호출해서 영속성 컨텍스트를 강제로 플러시한다. 테스트나 다른 프레임워크와 JPA를 함께..
-
ORM - 영속성 관리(엔티티 등록,수정,삭제)FrameWork/ORM 2024. 2. 29. 10:58
엔티티 등록,수정,삭제 엔티티 등록 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 등로해보자. @Transactional public void enrollEntity(EntityManager em){ Member memberA= new Member(); memberA.setId("member1"); memberA.setUsername("test1"); memberA.setAge(20); Member memberB= new Member(); memberB.setId("member2"); memberB.setUsername("test1"); memberB.setAge(30); em.persist(memberA); em.persist(memberB); //여기까지 INSERT SQL을 데이터베이스에 보내..
-
ORM - 영속성관리(엔티티 매니저 팩토리와 엔티티 매니저)FrameWork/ORM 2024. 2. 28. 14:55
엔티티 매니저 팩토리와 엔티티 매니저 JPA가 제공하는 기능을 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 매핑한 엔티티를 엔티티 매니저(EntityMnager)를 통해 어떻게 사용하는지 알아보자 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 이름 그대로엔티티를 관리하는 관리자다. 개발자 입장에서는 엔티티 매니저를 엔티티를 저장하는가상의 데이터베이스로생각하면 된다. 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 이름 그대로 에티티 매니저를 만드는 공장인데, 공장을 만드는 비용은 상당히 크다. 따라서 한..
-
ORM - JPA시작(비지니스 로직)FrameWork/ORM 2024. 2. 28. 12:35
JPA시작(비지니스 로직) 비지니스 로직 @Component public class JpaMain { @Transactional public void logic(EntityManager em){ String id = "id1"; Member member= new Member(); member.setId(id); member.setUsername("진영"); member.setAge(2); //등록 em.persist(member); //수정 member.setAge(20); //한건 조회 Member findMember = em.find(Member.class,id); System.out.println("findMember="+findMember.getUsername()+ ", get="+findMemb..
-
Spring Boot API - Spring SecurityFrameWork/Spring&Spring-boot 2024. 2. 21. 16:45
Spring Security spring 기반 애플리케이션 보안(인증, 권한)을 처리하는 프레임워크 https://spring.io/projects/spring-security implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.1.5' RESTful API에서는 어플리케이션의 인증 처리를 위해서는 다양한 방식이 있는데 Oauth, Token, 아이디-비밀번호 등을 통해서 인증을 할 수 있다. 스프링 시큐리티가 적용된 상태에서 security password 없이 전체 user를 조회하는 위와 같은 uri를 호출하면 401 Unauthorized와 같은 오류가 발생하는 것을 확인..
-
Spring Boot API - Swagger, Actuator, HAL ExplorerFrameWork/Spring&Spring-boot 2024. 2. 21. 14:41
Swagger + Spring Boot 3.x implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.2.0' @OpenAPIDefinition( info = @Info(title = "My Resful Service API 명세서", description = "Spring Boot로 개발하는 RESTful API 명세서 입니다.", version = "v1.0.0" ) ) @Configuration @RequiredArgsConstructor public class SwaggerConfig { @Bean public GroupedOpenApi customTestOpenAPI(){ Stri..
-
Spring Boot API - User Service, Exception Handing...FrameWork/Spring&Spring-boot 2024. 2. 19. 12:24
User Service 도메인 도메인 각 회사들이 가지고 있는 도메인을 뜻하는게 아니라 도메인 knowledge라고 해서 비지니스 서비스에서 사용되는 업무 영역, 업무 규칙, 업무 지식을 의미한다. User도메인 사용자 정보를 어떤 형태,어떤 구조로 저장할지 어떤 데이터를 저장할지에 대해 설계를 하고 사용자에 아이디, 이름, 가입 날짜와 같은 것들이 들어 갈 것이다. UserDaoService.java @Component public class UserDaoService { } 스프링 컨텍스트에 Component로 등록 스프링 컨텍스트가 이해할 수 있는 빈의 유형을 등록하는 것이다. Retrieve User resource @RestController public class UserController {..
-
SpringBoot - Bean추가, Configuration, Path VariableFrameWork/Spring&Spring-boot 2024. 2. 19. 09:38
Bean추가 Java 형태의 Bean으로 반환시켜주는 메소드 @RestController public class HelloWorldController { //GET //URI - /hello-world //@RequestMapping(method=RequestMethod.GET, path="/hello-world") @GetMapping(path = "/hello-world") public String helloWorld(){ return "Hello World"; } @GetMapping(path = "/hello-world-bean") public HelloWorldBean helloWordBean(){ return new HelloWorldBean("Hello World"); } } 두번 째 메서드..