Hibernate JPA 인터페이스를 구현하는 실제 구현체는 매우 여러 종류가 있는데 가장 많이 사용하는 것이 Hibernate 이다. Hibernate 는 ORM 으로 객체로 DB 와 매핑해주는 것이다. 이때 우리가 배웠던 String 타입으로 sql 문을 쓰고 DB 에다가 날려 정보를 가져오는것을 Hibernate 을 통해 객체로 매핑하여 가져오는것이다. 즉, Hibernate 내부적으로 쿼리를 날려 그 데이터를 객체로 변환시켜주는 것이다. 이해를 위한 코드 public class DB_Connect { private static DB_Connect db; private final String jdbc = "com.mysql.jdbc.Driver"; private final String url = "..
JPA 의 구조 JPA 는 기본적으로 데이터베이스에 있는 테이블들을 객체로 가져오는 ORM 이다. ORM 이란? 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 하지만 좀더 깊게 공부해보고 1차캐시 2차캐시 라는것을 알게 되었다. JPA의 1차캐시, 2차캐시 먼저 1차캐시에 대한 설명을 하자면, 1차캐시는 영속성 컨텍스트 에서 엔티티를 자동으로 관리하게 된다. 영속성 컨텍스트가 엔티티를 메모리에 보관하는 공간으로 같은 객체가 있다면 동일성이 보장 된다. 좀 더 찾아보니 우리가 별도의 설정을 안해도 EntityManager 인터페이스에서 관리를 하고 있다. 2차캐시에 대한 설명이다. 1차 캐시와는 다르게 우리가 별도로 설정을 해줘여 된다. ( 캐시 전략, 수명, 공유 범위 등..
제네릭이란 ? 언어에서 타입 안전성을 보장하기 위한 기능입니다 즉, Object 로 가져와도 되지만 타입 안정성을 보장하기위해 만든것이 제네릭인것 같다. 제네릭 쓰는 방법 public class Generic { private T t; public T get() { return this.t; } public void set(T t) { this.t = t; } public static void main(String[] args) { Generic stringGeneric = new Generic(); stringGeneric.set("Hello World"); String tValueTurnOutWithString = stringGeneric.get(); System.out.println(tValueTu..
@Component 란? 스프링 프레임워크에서 컴포넌트 스캐닝을 통해 빈으로 등록되는 클래스에 적용되는 어노테이션이다. 즉 @SpringBootApplication 에서 @ComponentScan 를 하기 때문에 자동적으로 Ioc 컨테이너에 등록 된다. 자세한 내용은 아래에 설명 하겠다. @ComponentScan 해당 Bean 들을 전부 Ioc 컨테이너에 등록시켜준다. Spring boot 에서는 어떻게 할까? @SpringBootApplication 에 들어가게 되면 위와 같이 @ComponentScan 이 포함되어 있다. 즉 Spring 에서는 xml 파일을 통해 bean 을 등록했다면, 여기에는 @SpringBootApplication 에서 @ComponentScan 어노테이션을 통해 하위 패키지..
fork 란? 다른 사람의 저장소에 접근하여 코드를 가져와 수정 한 뒤 자신의 저장소에 올리고 다른 사람의 저장소에 Pull request 를 하면 된다. fork 방법 다른사람을 팀장으로 칭하겠습니다. 팀장의 저장소의 주소에 접근하여 fork 를 누른다. 그 다음. 자신의 저장소에 저장된것을 git clone 을 통해 소스코드를 가져 온뒤 코드 수정한후 commit 하고 push 를 누르게 되고 자신 저장소에서 contribute 를 누르게 된다. 그러면 팀장님쪽에 pull request 에 추가가 되고 팀장님은 그걸 확인하고 merge 를 해주면 끝이다. 만약, 팀장님 쪽에서 업데이트된 코드를 가져오고 싶다면 Sync fork 를 누르고 git pull 을 하면 된다.
무엇을 하다가? RestfulAPI 프로젝트 공부하다가 파일을 받아와서 서버에 있는 로컬 src/resource 쪽에 저장할려고 하였다. 그래서 절대경로를 작성해도 되지만, Spring 프로젝트가 만약에 다른 곳에서도 실행된다면 즉, 협업 또는 AWS 에 올린다면 절대 경로를 찾지 못하니 오류가 나올것 같아서 알아서 찾아와 주는것에 대해 찾아보고 하였다. 에러 발생지점 File currentClassFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); Path currentPath = currentClassFile.toPath(); Path srcPath = currentPath.getParent()..
Request 와 Response 는 무엇일까? Request 는 요청 / Response 는 응답 이다. 즉 Clinet 에서 서버로 Request 요청을 보내게 되면 서버에서는 Response 응답을 해줘야 한다. ( 서버가 정상 작동을 한다는 가정하에 ) 다만, 만약 React 와 Spring이 포함이 된다면, 중간 React 서버에서 Client 에 request 를 받고 Spring 서버에 request 날려 Response 응답을 받고 component ( html ) 파일을 생성하여 Client 에게 전달된다. 이때 request 에는 많은 정보가 담겨서 들어오게 된다. 물론 react 쪽에서 데이터를 포함시켜 보낼수 있다. 이때 Json 방식을 쓸수 있고 여러가지 방법이 존재한다. 또한 우..
UserDetailsService, AuthenticationProvider UserDetailsService, AuthenticationProvider 이것들은 무엇일까? 아래의 사진을 보자. 위에 사진처럼 AuthenticationProvider 걸치고 UserDetailsService 에서 검사한 후 다시 AuthenticationProvider 에 걸쳐서 response 하게 된다. 이때 내가 원하는 방식되로 검사하고 권한설정을 하여 인증 단게를 할수 있다. 코드 @Service @RequiredArgsConstructor @Slf4j public class LoginService implements UserDetailsService, AuthenticationProvider { private f..
PrintWriter 란? 바로 출력만 할수 있도록 도와주는 클래스이다. 우리가 많이 쓰던 System.out 이 PrintWriter 클래스에서 나온것이다. Response 응답할때 Request 를 받고 Response 에 응답할때 우리는 Json 방식으로 Response 할수 있다. 이때 Response 셋팅을 바꾸고 그 데이터를 전송할때 PrintWriter 로 할수 있다. 코드 response.setStatus(HttpServletResponse.SC_OK); response.setContentType(MediaType.APPLICATION_JSON_VALUE); String json = "{\"msg\": \"유저계정이 맞지 않습니다.\"}"; // JSON 응답 전송 PrintWriter w..