목록백앤드 개발일지/스프링부트 (28)
늘
JPA만 사용하다가 오랜만에 JDBC를 공부해보려고 한다. 어느 정도 JDBC의 작동원리를 알아야 나중에 JPA를 더 깊이 공부할 때도 도움이 될 것 같다고 생각되기 때문이다. 기본적인 사용법을 알아두면 나중에 쓰일 수(?)도 있으니... JDBC는 JPA와 다르게 db에 날리는 쿼리를 직접 작성해야하는 단점이 있다. 대신 복잡한 쿼리를 작성할때는 직접 쿼리를 작성하므로 jpa보다 좋다. JDBC package com.example.demo.controller; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.State..
Servlet (서블릿) 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말함 Controller 스프링 서버 개발자 입장에서는 시작점과 끝점으로 보이지만, 사실 스프링이 사용자의 요청 (Request)과 응답 (Response)을 처리해 주고 있습니다. 그럼 controller를 사용하지 않은 코드와 controller를 사용한 코드는 무엇이 다른지 코드로 확인해 보겠다. /* Servelte 코드 */ @WebServlet(urlPatterns = "/api/products/*", loadOnStartup = 1) public class AllInOneServlet extends HttpServlet { // 신규 상품 등록 @Override protected void ..
OneToOne에서 새로운 이슈를 맞이했다... 쿼리가 두번 나가는 즉, eager로 로딩이 된다. 바로 OneToOne으로 Lazy 로딩을 사용하려면 따로 설정을 해야한다. 또한 OneToOne관계는 fk를 어디에 두느냐에 따라 성격이 달라져서 잘 생각해보고 정해야한다. 결론부터 말하자면 3가지 처리가 필요하다. nullable이 허용되지 않는 @OneToOne 관계. (ex: Plan과 PlanResult) 양방향이 아닌, 단방향 @OneToOne 관계. (parent -> child) @PrimaryKeyJoin은 허용되지 않음. optional 을 false 로 해두는 값은 CascadeType.PERSIST 와 같이 동작 안한다라고 한다.(null일 수 없다) 위의 사진은 주 테이블에 fk를 둔..
스프링 프레임워크란? - 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다. - 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다 특징 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다. 제어 반전(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다. 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다. 관점 지향 프로그래밍(AOP : Aspect-Oriented Pro..
화창한 오후..시험도 끝나고 오랜만에 블로그도 정리할겸 확인해보는데 정작 JPA대한 정리가 없었다!!..그래서 오늘은 JPA에 대해서 공부해왔던 내용을 정리해보려고 한다 JPA(Java Persistence Api) JPA가 나온 배경을 보자면, 기존의 MyBatis와 같은 SQL매퍼를 이용한 데이터베이스의 작성은 객체지향과는 거리가 멀다. 그래서 객체 모델링보다는 테이블 모델링에 집중하는 모습을 해결하기 위해서 JPA라는 자바 표준 ORM기술이 나오게 되었다.(* ORM은 객체를 매핑하는 것이고, MyBatis와 같은 SQL Mapper는 쿼리를 매핑하는 것) 관계형 DB는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술이고, 객체지향 프로그래밍은 메시지를 기반으로 기능과 속성을 관리하는 기술이다. --..
저번에 jwt토큰 방식에 대해서 설명을 드리고 이번에는 스프링의 전통 기반인 session 인증 방식에서 간단하게 적용해 보려고 해요. 이번 포스트는 세션 방식으로 웹페이지 로그인, 회원가입을 구현하면서 느낀 점을 적어보려고 합니다...! 이번 포스트도 이용한 프레임워크는 springboot + gradle + h2 + springsecurity입니다. package board.configuration; import board.Service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springfra..
Jwt와 Session방식의 차이에 대해서 공부했다. 우선 우리가 사용하는 스프링 부트는 Session기반으로 작동되어 있다고 한다. 그래서 평소 자연스럽게 이용했던 세션을 통한 인증 관리가 아닌 이번에는 JWT를 이용하여 회원 인증과 권한을 관리해보려고 한다..! 그전에 잠깐 Session&Cookie 기반 인증방식과 Token(jwt) 기반 인증 방식의 차이를 간단하게 설명해 보겠다. Session & Cookie 유저가 로그인하고 세션이 서버 메모리 상에 저장된다. (서버 단에서 메모리 차지가 클 수 있다.) session Id를 기준으로 정보를 전달한다. 브라우저에 쿠키로 session Id를 저장 -> 쿠키로 보내진다. JWT(Json Web Token) 방식 Header, Payload, Si..
상속 논리 모델을 DB 물리 모델로 구현하는데에는 크게 3가지가 있다고 한다. 1. 조인 전략 2. 단일 테이블 3. 구현 클래스 각각 테이블 전략(3번은 잘 안쓴다고 한다..그래서 제외!) 1. 조인 전략 우선 상속 전략을 InheritanceType.JOINED로 설정해준다 그러면 오른쪽 그림처럼 엔티티간에 각각의 DB 테이블이 생성할 수 있다. 가장 정규화된 방법이라고 한다. 2. 단일 테이블 서비스 규모가 크지 않고, 굳이 조인 전략을 선택해서 복잡하게 갈 필요가 없다고 판단 될 때에 이용한다. 한 테이블에 다 저장하고, DTYPE으로 구분하는 단일 테이블 전략을 선택할 수 있다. 개인적으로 작은 프로젝트를 해보면서 단일 테이블 전략에 매력을 느꼈었다. (한눈에 보기 좋아서..) 그런데 규모가 커..