OAuth2 로그인 소셜 로그인 사용을 통하여 서비스 개발 집중 기존 1.5 버전에서 2.0 버전으로 바뀌면서 enum 대체 CommonOAuth2Provider enum 기능 구글, 깃허브, 페이스북 옥타등 기본 설정값 제공 - 다른 소셜 로그인은 추가 필요 구글 로그인 https://console.cloud.google.com/ 이동 프로젝트 생성 프로젝트 생성 - API 및 서비스 - 사용자 인증 정보 - 사용자 인증 정보 만들기 - OAuth 클라이언트 ID - 동의 화면 구성 OAuth 클라이언트 ID 만들기 클라이언트 ID와 보안 비밀번호가 발급된다. 리다리렉트 URI : {도메인}/login/oauth2/code/google 로 등록하자 위에 사진 오타 properties 등록 spring...
목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향 : 단방향, 양방향 다중성 : 다대일, 일대다, 일대일, 다대다 연관관계의 주인 : 객체 양방향 연관관계는 관리 주인이 필요 연관관계가 필요한 이유 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. 예제 시나리오 회원과 팀 존재할 때, 회원은 하나의 팀에만 소속 = 하나의 팀에는 여러 회원 소속 회원과 팀은 다대일 관계를 갖는다. 테이블 중심 설계시 문제점 다음과 같이 설계했을 때 발생하는 문제점에 대해 알아보자. 회원 테이블 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long..
엔티티 매핑 종류 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne,@JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 엔티티라고 부른다. 즉, 테이블과 매핑할 클래스는 반드시 @Entity를 적용해야 한다. 기본 생성자 필수 (파라미터가 없는 public 또는 protected) final 클래스, enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final 키워드를 사용할 수 없다. @Table 기본 값은 클래스 이름을 그대로 사용한다. 유니크 제약 조건 추가 : @Table(uniqueConstraints = ..
영속성 컨텍스트 "엔티티를 영구 저장하는 환경"이라는 뜻 (DB의 저장이라기보다, 영속성 컨텍스트에 저장한다는 의미) EntityManager.persist(entity); - 엔티티 매니저를 통해 영속성 컨텍스트에 접근 JPA 에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 엔티티의 생명주기 비영속 (new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 // 객체만 생성한 상태 (비영속) Member member = new Member(); member.set~ 영속(managed) - 영속성 컨텍스트에 관리되는 상태 - DB에 저장되는게 아니다. 저장은 commit EntityManager em =..
Hello JPA - 어플리케이션 개발 H2 데이터베이스 설치 (https://sasca37.tistory.com/13?category=1218302) 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.apache.maven.plugins maven-compiler-plugin 11 11 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 javax.xml.bind jaxb-api 2.3.0 pom.xml 설정 resources - META-INF - pesistence.xml 생성 데이터베이스 방언 JPA는 특정 DB에 종속 X 가변 문자 : MySQL : VARCHAR, Oracle은 VARCH..
요구사항 분석 디자이너 : 요구사항에 맞도록 디자인하고, 디자인 결과물을 웹 퍼블리셔에게 넘겨준다. 웹 퍼블리셔 : 디자이너에서 받은 디자인을 기반으로 HTML, CSS를 만들어 개발자에게 제공한다. 백엔드 : 디자이너, 웹 퍼블리셔를 통해서 HTML 화면이 나오기 전까지 시스템을 설계하고, 핵심 비즈니스 모델을 개발한다. 이후 HTML이 나오면 이 HTML을 뷰 템플릿으로 변환해서 동적으로 화면을 그리고, 또 웹 화면의 흐름을 제어한다. 상품 관리 상품 도메인 @Getter @Setter public class Item { private Long id; private String itemName; private Integer price; //null 가능성 o private Integer quantit..
Welcome 페이지 스프링 부트에 Jar 를 사용하면 /resources/static/index.hml 위치에 index.html 파일을 두면 Welcome 페이지로 처리해준다. 로깅 스프링 부트 라이브러리는 스프링 부트 로깅 라이브러리를 포함한다. SLF4J (Logback, Log4J, Log4J2 통합) - 인터페이스 Logback - 구현체 (대부분 사용) @Slf4j // 애노테이션 설정으로 편리하게 사용 @RestController // 디폴트의 뷰 반환이 아닌 문자 반환설정 (http 바디에 담아서 전송) public class LogTestController { // private final Logger log = LoggerFactory.getLogger(getClass()); //해당..
스프링 MVC 구조 Dispatcher Servlet 스프링 MVC의 프론트 컨트롤러 (스프링 MVC에서 가장 중요 ) 부모 클래스에서 HttpServlet을 상속 받아 서블릿으로 동작한다. DispatcherServlet - FrameworkServlet - HttpServletBean - HttpServlet 스프링 부트는 DispacherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/" )에 대해서 매핑한다. 자세한 경로가 우선순위가 높다. 핸들러 매핑, 핸들러 어댑터, 뷰 리졸버만 DispacherServlet에 등록하면 커스텀 컨트롤러를 만들 수 있다. 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 service() 메서드가 호출 (서블릿 방..