Post
-
Spring
[토비의 스프링부트 - 이해와 원리] 독립 실행형 서블릿 애플리케이션
* Containerless @SpringBootApplication public class StudyApplication { public static void main(String[] args) { SpringApplication.run(StudyApplication.class, args); } } main 메소드만 실행 시켰더니 웹 컨테이너가 작동 Containerless 목적 : Spring Controller에 존재하는 Bean 관련해서만 작업하고, Servlet Container에 있는 배포, 구성 등의 작업을 SpringBoot에 위임 빈 Servlet Container 띄우기 package com.yoon.tobyspring.study; import org.springframework.boo..
-
Spring
[토비의 스프링부트 - 이해와 원리] 스프링 부트 시작하기
JDK 공개 JDK Eclipse Termurin Microsoft OpenJDK Amazon Corretto Azul JDK Oracle JDK IDE IntelliJ IDEA STS : https://spring.io/tools Visual Studio Code (권장 X) HelloController 작성 @RestController public class HelloController { @GetMapping("/hello") public String hello(String name) { return "hello " + name; } } 요청 URL ex : http://localhost:8080/hello?name=hongsi HTTP 요청/응답 확인 도구 웹 브라우저 개발자 도구 [Network..
-
DB
[PostgreSQL] ERROR: new row for relation "table" violates check constraint "column_check"
에러 발생 상황 1. 게시글 테이블의 visible column은 default가 null 값으로, null이면 게시글이 보이고 'HIDE', 'DELETE' 타입이면 각각 숨김, 삭제가 되도록 구현된 상태 2. visible column에 null 값을 default로 하지 않기로 결정해 'VISIBLE' 타입을 추가하기로 결정 3. code단에서 enum 타입에 'VISIBLE' 추가 @Getter public enum Visible { HIDE, DELETE, VISIBLE; } 4. 추가 후 테스트 결과 에러 발생 ERROR: new row for relation "board" violates check constraint "board_visible_check" 에러 해결 * PostgreSQL에..
-
Spring
[토비의 스프링부트 - 이해와 원리] 스프링 부트 살펴보기
[인프런] 토비의 스트링 스프링 부트 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립 실행형 애플리케이션을 복잡한 고민 없이 빠르게 작성할 수 있게 도와주는 여러가지 도구의 모음 스프링 부트로 독립 실행형 스프링 애플리케이션을 개발하는 것 스프링 != 스프링 부트 스프링 부트의 핵심 목표 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공 빠르고 고민 없이 개발할 수 있게 해준다 = 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공한다 비기능적인 기술(보안, 메트릭, 상태 체크, 외부 설정 방식 등)을 제공 코드 생성이나 XML 설정을 필요로 하지 않음 컨테이너리스 개발 (Containerless) 스프링 부트는 컨테이너리스 웹 애플리케이션 아키텍처를 스프링이 지원해줬으면 한다는 한 개발자..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 객체지향쿼리언어2 - 중급문법
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) JPQL - 경로 표현식 점을 찍어 객체 그래프를 탐색하는 것 m.username : 상태 필드 m.team : 단일 값 연관 필드 m.orders : 컬렉션 값 연관 필드 상태 필드 (state field) 단순히 값을 저장하기 위한 필드 경로 탐색의 끝, 탐색 X 연관 필드 (association field) 단일 값 연관 필드 @ManyToOne, @OneToOne, 대상이 엔티티 묵시적 내부 조인 (INNER JOIN) 발생, 탐색 O 실무에서는 묵시적 내부 조인이 발생하도록 쿼리를 짜면 안됨 !! 컬렉션 값 연관 필드 @OneToMany, @ManyToMany, 대상이 컬렉션 묵시적 내부 조인 (INNER JOIN) 발생, 탐색 X FR..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 객체지향쿼리언어1 - 기본문법
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 객체지향 쿼리 언어 소개 jpa는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL Native SQL JDBC API 직접 사용, Mybatis, SpringJdbcTemplate 함께 사용 JPQL 소개 JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 WHERE, GROUP BY 등 JPA는 SQL을 추상화환 JPQL이라는 객체 지향 쿼리 언어를 제공 SELECT, FROM, WHERE, GROUP B..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 값 타입
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 기본값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 e.g) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (변경이 불가하기 때문에 Side effect 없이 사용 가능) 자바 기본 타입(int, double 등) 자바 기본 타입은 절대 공유되지 않고 항상 값을 복사함 래퍼 클래스(Integer, Long) 클래스는 reference를 끌고 가기 때문에 공유 가능한 객체이지만 변경은 안됨 String Str..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 프록시와 연관관계 관리
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회가 아닌 가짜(프록시) 엔티티 객체 조회 Member member = new Member(); member.setName("test1"); em.persist(member); em.flush(); em.clear(); // findMember = Proxy 클래스 Member findMember = em.getReference(Member.class, member.getId()); // member.getId()는 이미 알고 있는 값이므로 DB 조회하지 않음 System..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 고급 매핑
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없음 객체의 상속 구조를 DB의 슈퍼타입 서브타입 관계로 매핑 상속관계 매핑 방법 슈퍼타입-서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = "DTYPE") DiscriminatorVal..
-
JPA
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 다양한 연관관계 매핑
인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 연관관계 매핑 시 고려사항 3가지 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany (실무에선 사용하지 말기) 단방향, 양방향 테이블 외래키 하나로 양쪽 조인 가능 방향의 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 (단방향 2개) 연관관계의 주인 (양방향) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2개 둘 중 테이블의 외래키를 관리할 곳을 정해야 함 연관관계의 주인 = 외래키를 관리하는 참조 주인이 아닌 쪽은 단순 조회만 가능 1. 다대일 [N:1] 다대일 단방향 가장 많이 사용하는 연관관계 다대일..