JPA란? Java persistence API는 자바의 ORM 기술의 표준이다 ORM란? Object-Relational Mapping ORM(Object-Relational Mapping) 프레임워크는 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 불일치를 해결하기 위한 기술입니다. 즉, 객체와 데이터베이스 간에 매핑 작업을 자동으로 수행해줌으로써, 객체 지향 프로그래밍에서 사용되는 객체와 관계형 데이터베이스의 데이터 모델 사이의 불일치를 해결해줍니다. ORM 프레임워크를 사용하면, 객체를 데이터베이스에 저장할 때 객체를 SQL 쿼리로 변환하는 작업을 개발자가 직접 수행할 필요가 없습니다. 대신 ORM 프레임워크가 객체와 데이터베이스 간의 매핑을 자동으로 수행합니다. 이를 통해 개발자는 객체 ..
@Transactional Spring Framework에서 제공하는 트랜잭션 처리를 위한 애노테이션 -> 데이터베이스 작업을 하나의 트랜잭션으로 묶어서 처리 ex1.회원가입을 처리하는 메소드에 @Transactional이 있다면, -> 회원 정보를 저장하는 데이터베이스 작업이 트랜잭션으로 묶여서 처리 -> 회원 정보 저장 작업 중 어떤 문제가 발생하면, 트랜잭션이 롤백되어 이전 상태로 되돌아 ex2. 은행 계좌 이체를 수행하는 경우 -> 계좌 이체 작업은 출금/입금 두개의 작업으로 되어있음 -> 두 작업이 모두 성공해야만 계좌 이체가 완료 -> 출금 작업과 입금 작업을 하나의 트랜잭션으로 묶어서 실행 트랜잭션이란? 데이터베이스에서 수행되는 작업의 논리적인 단위를 말합니다. 데이터베이스에서 작업을 수행할..
@GeneratedValue(strategy = GenerationType.IDENTITY)란? ForeignKey 설정하기 아래와 같이 테이블이 있을때 코드로 설정하는 방법 Menu.class에 Foreign Key 설정 @ManyToOne @JoinColumn(name = "storeId", referencedColumnName = "storeId", foreignKey = @ForeignKey(name = "fk_menu_store")) private Store store; @ManyToOne @JoinColumn(name = "foodId", referencedColumnName = "id", foreignKey = @ForeignKey(name = "fk_menu_food")) private F..
1.여러개의 Service를 클래스를 만들어도 하나만 @Service를 정할수있다. 2. @Service라고 정했을 경우 테스트 케이스에서 따로 객체를 만들지 않아도 @Service에 속한 @Component가 자동으로 객체를 만들어서 넣어준다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @..
MockMVC란? MockMvc는 Controller테스트 할때 사용합니다. 왜냐하면 Controller에서 컨트롤러의 요청과 응답에 대한 테스트를 해야하는데 MockMvc가 실제 HTTP 요청을 보내지 않고 Application내부에서 요청/응답 처리를 해주기 때문입니다. *초기화 방법 1) @AutoConfigureMockMvc @SpringBootTest class FoodControllerTest { private MockMvc mockMvc; ... mockMvc = MockMvcBuilders.standaloneSetup(new FoodController(foodService)).build(); 2) @AutoConfigureMockMvc @SpringBootTest class FoodCont..
1.왜 JpaRepository를 상속하는가? Spring Data JPA에서 제공하는 다양한 메소드를 사용하여 데이터 액세스 작업을 쉽게 구현하기 위해서 *JpaRepository 인터페이스란? CRUD 작업과 검색 등의 데이터 액세스 작업을 추상화한 인터페이스 2. Repository 인터페이스가 JpaRepository를 상속하는 이유 Spring Data JPA에서 제공하는 다양한 메소드를 사용해, Post 엔티티에 대한 데이터 액세스 작업을 쉽게 구현하기 위해 Repository 인터페이스가 JpaRepository를 상속하면, -> Post 엔티티에 대한 CRUD 작업과 검색 등의 데이터 액세스 작업을 수행할 수 있는 다양한 메소드를 사용 ex. findAll(), findById(), sav..
1.@RequestBody를 했을때 내부 변수에다가 뭐라 적어줘야 하는가? //음식 등록 @PostMapping("/foods") public void saveFood(@RequestBody Food food){ foodService.saveFood(food); } -> @RequestBody 어노테이션은 HTTP 요청 바디에서 전달되는 데이터의 타입을 지정해주는 역할을 한다. Food 객체를 요청 바디에서 전달 food 파라미터로 받아온다 foodService의 uploadFood() 메서드를 호출 food 객체를 전달 2. 등록시 왜 RequestBody를 쓰는가? -> 음식 등록을 위해 HTTP POST 요청을 보낼 때, 요청 바디에 음식 정보를 담아 보내야 하므로 이때, Spring에서는 @Req..
@Controller Spring MVC에서 컨트롤러를 선언하는데 사용됩니다. Spring Framework에서 해당 클래스를 컨트롤러로 인식하고, DispatcherServlet이 요청을 받으면 해당 컨트롤러를 호출한다. 이때, @RequestMapping을 사용하여 요청 URL과 컨트롤러 메서드를 매핑시킨다. 특징 해당 Annotation이 선언된 클래스는 Spring이 관리하는 Bean으로 등록됩니다. @RequestMapping이 선언된 메서드는 요청 URL과 매핑되며, 해당 URL로 요청이 들어오면 해당 메서드가 호출됩니다. 컨트롤러 메서드에서는 비즈니스 로직을 수행하고, 결과를 Model객체에 담아 View에 전달합니다. View는 결과를 사용자에게 출력하는 역할을 수행한다. *비지니스 로직이..
Controller : 번역된 요구사항을 Service에 전달 => Service에서 전달된 값을 다시 클라이언트에 반환 Service : 비지니스 로직을 수행 : 요청을 대응하기 위한 서비스 = 사용자가 요청하는 기능을 수행하는 로직 = User Request를 만족/에 맞는 대응/처리하기 위한 구현 => 사용자에게 요청을 받아서 컨트롤러가 전달해주면, 수 레파지토리 repository는 Service에서 나온 결과값을 데이터베이스나 다른 데이터 소스에서 데이터를 저장, 수정, 삭제, 검색하는 역할 DB의 관리를 처리하는 계층이다. https://velog.io/@hyundong_kk/Spring%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-3%EA%B3%84%EC%B8%B5
Entity: DAO와 DB 테이블 매핑하는 객체 Entity 클래스는 실제 DataBase의 테이블과 1 : 1로 매핑되는 클래스 DB의 테이블내에 존재하는 컬럼만을 속성(필드)으로 가져야 한다. 외부에서 getter 메소드를 이용하지 않도록 필요한 로직 구현 객체의 불변성을 보장해야 하기에 setter 메서드를 지양하고 생성자(constructor) 또는 Builder을 사용 request, response 클래스로 사용 X * request, response 클래스로 사용 X 이유 - SRP 원칙 위배 SRP(Single Responsibility Principle)은 클래스나 모듈은 하나의 책임만 가져야 한다는 원칙입니다. Request나 Response 클래스는 HTTP 요청이나 응답에 대한 정..