728x90

개발 304

Project (5-1) - 상품 등록 및 수정 (1)

- 상품 등록하기 - ItemImg.java @Entity @Table(name = "item_img") @Getter @Setter public class ItemImg extends BaseEntity{ @Id @Column(name = "item_img_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String imgName; private String oriImgName; private String imgUrl; private String repImgYn; @ManyToOne(fetch = FetchType.LAZY) // 상품 엔티티와 다대일 단방향 관계로 매핑한다. // 지연 로딩을 설정하여 매핑된 상..

Project - (4) 연관관계 매핑

- ERD - 구성할 ERD는 위와 같다. - 연관 관계 매핑 종류 1. 일대일 : @OneToOne 2. 일대다 : @OneToMany 3. 다대일 : @ManyToOne 4. 다대다 : @ManyToMany - 일대일 단방향 매핑 - Cart.java @Entity @Table(name = "cart") @Getter @Setter @ToString public class Cart{ @Id @Column(name = "cart_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToOne //회원 엔티티와 일대일로 매핑한다. @JoinColumn(name = "member_id") //매핑할 외래키를 지정한다. name ..

Project (3) - 스프링 시큐리티

- security dependency 추가 org.springframework.boot spring-boot-starter-security 1. 스프링 시큐리티를 추가하게되면 모든 요청은 인증을 필요로 한다. - 스프링 시큐리티는 기본적으로 1.Loing 2. Logout 기능을 제공한다. - 스프링 시큐리티 설정 - SecurityConfig @Configuration @EnableWebSecurity //SpringSecurityFilterChain이 자동으로 포함된다. //WebSecurityConfigurerAdapter를 상속받아서 메소드 오버라이딩을 통해 보안 설정을 커스터마이징할 수 있다. public class SecurityConfig { @Autowired MemberService m..

Project (2) - Thymeleaf

- @RequestParam - Controller 코드 @Controller @RequestMapping(value = "/thymeleaf") //클라이언트의 요청에 대해서 어떤 컨트롤러가 처리할지 매핑하는 어노테이션이다. //url에 "/thymeleaf" 경로로 오는 요청을 Controller가 처리하도록 한다. public class ThymeleafExController { @GetMapping(value = "/ex01") public String thymeleafExample01(@RequestParam(value = "asd") int a, Model model) { model.addAttribute("data", "타임리프 예제 입니다."); model.addAttribute("a", ..

Project - (1) Spring Data JPA

- Maven Setting - 여러가지의 프로젝트를 동시에 진행하면 메이븐의 의존성이 서로 꼬일 수 있으므로 프로젝트별로 다른 폴더를 Local repository를 지정하기를 권장한다. - application.properties 설정 - server.port = 80 : 애플리케이션 실행할 포트 설정 - application.name = spring-demo : 설정해둔 애플리케이션의 값을 읽어와서 자바 코드에서 사용해야 하면 @Value 어노테이션을 통해서 읽어올 수 있다. - JPA 사용 시 장점 1. 특정 데이터베이스에 종속되지 않음 2. 객체지향적 프로그래밍 3. 생산성 향상 - JPA 사용 시 단점 1. 복잡한 쿼리 처리 2. 성능 저하 위험 3. 학습 시간 - ORM : Object Re..

JPA - 기본 동작 방식, 아키텍처

- JPA 사용 시 장점 1. 특정 데이터베이스에 종속되지 않음 2. 객체지향적 프로그래밍 3. 생산성 향상 - JPA 사용 시 단점 1. 복잡한 쿼리 처리 2. 성능 저하 위험 3. 학습 시간 - ORM : Object Relational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말한다. - 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치하기 때문에 이를 해결하기 위해 나온 기술이 ORM이다. - 객체는 객체지향적으로, 데이터베이스는 데이터베이스 대로 설계를 한다. ORM은 중간에서 2개를 매핑하는 역할을 한다. - JPA 동작 방식 1. 엔티티 1.1. 데이터베이스의 테이블에 대응하는 클래스 1.2. @Entity가 붙은 클래스는 JPA에서 관리하며 엔티티라고 한다. ..

Querydsl - 중급 문법 (3) 수정, 삭제 벌크 연산 / SQL function 호출

- 쿼리 한번으로 대량 데이터 수정 - 수정, 삭제의 벌크 연산의 경우 영속성 컨텍스트를 통하는 것이 아닌 DB에 직접 쿼리를 날리는 것이기 때문에, 영속성 컨텍스트의 데이터와 불일치하는 상황이 발생한다. - 영속성 컨텍스트와 DB의 데이터를 일치시켜주지 않을 경우 데이터 일치성에 있어서 큰 문제가 발생 할 수 있다. @Test public void bulkUpdate() { queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); - 위와 같이 코드를 작성하여 실행하게 되면 where문의 조건에 맞게 DB의 데이터들은 변경되지만 영속성 컨텍스트의 값은 해당 조건과 무관하게 변경되지 않는다...

Querydsl - 중급 문법 (2) 동적 쿼리

- 동적 쿼리 1. BooleanBuilder 사용 2. where 다중 파라미터 사용 1. BooleanBuilder @Test public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; // Integer ageParam = 10; Integer ageParam = null; List result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameParam, Integer ageParam) { BooleanBuilder builder = new Bo..

Querydsl - 중급 문법 (1) (프로젝션)

- 프로젝션과 결과 반환 - 기본 - 프로젝션 : select 대상 지정 - 프로젝션 대상이 하나 List result = queryFactory .select(member.username) .from(member) .fetch(); - 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. - 프로젝션 대상이 둘 이상이면 Tuple이나 DTO로 조회해야 한다. - 튜플 조회 - 프로젝션 대상이 둘 이상일 때 사용한다. @Test public void Tuple() { List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username..

728x90