Spring/Spring 개발 상식

Spring/Spring 개발 상식

즉시 로딩과 지연 로딩(+프록시), Fetch Join, Join

FetchType 연관된 객체를 언제 가져올 것인지를 정한다. 즉시(Eager)와 지연(Lazy)가 있다. FetchType.EAGER : @XXToOne에서 FetchType의 기본 값이다. FetchType.LAZY : @XXToMany에서 FetchType의 기본 값이다. 즉시 로딩 @ManyToOne(fetch =FetchType.EAGER) //@ManyToOne은 기본 fetch가 Eager이므로 () 생략가능 private Product product; FetchType.EAGER 연관관계에 있는 모든 개체를 join하여 가져온다. JPQL : 즉시 가져오므로 연관관계의 객체 수가 N개일때 N+1 조회(select) (EntityManager.find()는 최적화 되므로 N+1 문제 발생 ..

Spring/Spring 개발 상식

JDBC, MyBatis, JPA

JDBC(Java Database Connectivity) Java 애플리케이션과 데이터베이스간의 연결과 데이터베이스 작업을 수행하는데 사용된다. JAVA 표준 API이다. JDBC 드라이버 Java에서 날린 SQL 쿼리에 프로토콜을 적용시킨 후 DB에 쿼리를 날리고, 그 응답을 프로토콜에 맞춰 파싱하여 Java로 전달한다. ✅ DBMS 별로 알맞은 드라이버가 필요하다. Object Mapping => JDBC를 사용하면 개발자는 직접 SQL 쿼리를 작성하고 실행하며, 결과로 얻은 ResultSet을 필요한 객체에 직접 매핑(Object Mapping) 해야한다. JDBC 코드 public class UserDAO { private final DataSource dataSource; public User..

Spring/Spring 개발 상식

@Builder와 @Getter, @Setter

@Builder 생성자처럼 객체를 생성하지만 생성자보다 좀 더 편리하다. Builder 패턴 vs 생성자 //생성자 Person p = new Person("Kim", "Female", 25); //빌더 패턴 Person p = Person.builder() .name("Kim") .gender("Female") .age(25) .build(); ✅ 생성자보다 파라미터를 파악하기 쉽다 (가독성이 뛰어나다). ✅ 생성자는 정해진 파라미터 순서대로 값을 넣어야하지만, 빌더 패턴은 순서와 상관없이 필드 이름으로 값이 설정된다. Builder 사용 방법 직접 Builder를 구현하는 방법도 있으나, Lombok의 @Builder 어노테이션을 사용하면 편리하다. 직접 Builder 구현하는 방법 import ja..

Spring/Spring 개발 상식

DTO 생성 방법

DTO(Data Transfer Object) - 데이터 전송 객체 비지니스 계층과 프레젠테이션 계층간 데이터 교환을 하기 위해 사용하는 객체이다. 비지니스 계층 : 데이터베이스나 외부 시스템과 상호 작용하여 데이터를 검색하거나 수정하는 작업 수행 프레젠테이션 계층 : 웹 클라이언트의 요청 및 응답 처리 DTO는 Domain model의 복사본으로, 다양한 표현 계층의 Logic(표현 방식)을 추가하여 사용된다. 더 자세한 내용은 ⬇️ https://shout-to-my-mae.tistory.com/303 DAO vs DTO vs VO DAO(Data Access Object) 데이터베이스의 data에 접근하여 CRUD 기능을 수행하는 객체 DB와 연결할 Connection까지 설정되어 제공되는 경우(e..

Spring/Spring 개발 상식

DAO vs DTO vs VO

DAO(Data Access Object) 데이터베이스의 data에 접근하여 CRUD 기능을 수행하는 객체 DB와 연결할 Connection까지 설정되어 제공되는 경우(ex) MyBatis) 는 필요 없다. 서비스와 DB를 연결하는 Repostitory package가 DAO의 예시이다. DTO(Data Transfer Object) - 데이터 전송 객체 비지니스 계층과 프레젠테이션 계층간 데이터 교환을 하기 위해 사용하는 객체이다. 비지니스 계층 : 데이터베이스나 외부 시스템과 상호 작용하여 데이터를 검색하거나 수정하는 작업 수행 프레젠테이션 계층 : 웹 클라이언트의 요청 및 응답 처리 DTO는 Domain model의 복사본으로, 다양한 표현 계층 Logic을 추가하여 사용된다. (Model은 Per..

Spring/Spring 개발 상식

Spring Security Test

스프링 시큐리티 테스트 로그인 테스트 코드 @Transactional //테스트 후 rollback @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) class UserRestControllerTest { @Autowired private MockMvc mvc; @Autowired private UserJPARepository userJPARepository; @Autowired PasswordEncoder passwordEncoder; @Autowired private WebApplicationContext context; //Spring Security 테스트 환경 구성 @BeforeEac..

Spring/Spring 개발 상식

DB : 기본키, 외래키, 제약조건

PRIMARY KEY(기본키) 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합(후보키) 중 선정된 key이다. 즉 테이블 튜플(행)들의 식별자이다. 기본키 설정시 NOT NULL과 UNIQUE 제약조건을 갖는다. NOT NULL을 기본적으로 갖지만 명시적으로 알려주기 위해 기본키 선언시 NOT NULL 붙여주기 FOREIGN KEY(외래키) 다른 테이블의 기본키를 참조하는 속성 또는 속성들의 집합이다. + 다른 테이블의 UNIQUE 제약조건을 갖는 속성 외래키로 참조가 가능하다. A가 B를 참조한다고할때, A는 자식테이블, B는 부모테이블이다. 테이블간 연관관계를 설정하며 무결성을 보장한다. DEFAULT NULL 설정하기 외래키 vs 인덱스 외래키는 참조시 무결성을 보장하지만 데이터 추가/삭..

Spring/Spring 개발 상식

Mock test : @AutoConfigureMockMvc, MockMvc, JsonPath

Mock 이란? 모조품이란 뜻으로, 테스트 시 당장 구현하기 어려운 객체를 대신해 가짜로 생성해놓은 객체이다. Mock 테스트 코드 @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) public class ProductRestControllerTest { @Autowired private MockMvc mvc; @Test // 전체 상품 목록 조회 public void findAll_test() throws Exception { // when ResultActions resultActions = mvc.perform( get("/products") ); String responseBody = ..

mint*
'Spring/Spring 개발 상식' 카테고리의 글 목록