Spring Data JPA에서 제공하는 쿼리 메소드 기능 중 하나인 @Query 어노테이션에 대해 알아보자 ! @Query 복잡한 조건을 요구하는 경우에 AND, OR, JOIN 등을 JPA 메소드를 통해서 사용할려면 불편할 때가 많고, 무엇보다 성능 저하 우려가 있기 때문에 직접 쿼리문을 짜는게 효율적이다. 그때 사용하는게 바로 @Query이다. (Named Query 같은 것도 있지만 매개변수가 많아지면 너무 길어져서 지저분 하다....) 특징 JPQL을 사용한다 (객체지향 쿼리문. 테이블 대신 Entity클래스를 사용하고 컬럼 대신 필드를 사용한다) 직접 쿼리문을 작성하기에 복잡한 작업이 가능하다 INSERT, UPDATE, DELETE 과 같이 SELECT가 아닌 DML들은 @Modifying과..
변경감지란(Dirty Checking)? 트랜잭션 Commit시에 영속화 되있는 Entity에서 가지고 있던 최초의 정보와 바뀐 Entity정보를 비교해서 바뀐 부분을 자동으로 UPDATE 해준다고 생각하면 됩니다 ! 처음에는 당연히 이해가 잘 안갈겁니다...코드로 직접 보는게 BEST죠? 전체 코드 보기 : https://github.com/WOOOOJI/jpa_test_code GitHub - WOOOOJI/jpa_test_code: 기본적인 JPA 사용법 기본적인 JPA 사용법. Contribute to WOOOOJI/jpa_test_code development by creating an account on GitHub. github.com 1. Dirty Checking (변경 감지) Dirty..
JPA (Java Presistence API) 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스 모음이다. 대표적으로 Hibernate, Spring JPA 가 있다. 쉽게 말하면 JPA는 객체와 테이블을 자동으로 매핑시켜서, 쿼리문 작성 없이도 DB에 접근을 할 수 있다. 만약 해당 내용이 생소하시다면 다음 글을 먼저 보고 와주세요 !....https://wooj-coding-fordeveloper.tistory.com/74 1. JPA Dependency 등록 gradle 기준으로 다음 코드를 build.gradle에 추가해주셔야 JPA을 사용하실 수 있습니다 :) implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 2..
일단 결론부터. 둘의 제일 큰 차이점은 쿼리문을 직접 쓰냐 안쓰냐 차이다. 그러면 당연히 두개의 장단점이 다를것이다. 자세히 알아보도록 하자 ! 하지만 그전에 ORM, SQL Mapper 에 대해 알고있어야지 두개의 기술에 대해 이해가 갈 것이다. - ORM (Object Relational Mapping) 사실 직역만 해봐도 어떤 기술인지 감이 올 것이다. 객체-관계 매핑 -> 자바 진영에서의 객체 데이터와 RDBMS(관계형 데이터베이스)의 데이터를 자동으로 매핑(연결) 시켜준다는 의미이다. 여기서 객체 데이터는 클래스를 의미하고 RDBMS 데이터는 테이블을 의미한다. 고로 다음과 같은 장단점들이 존재한다. 장점 쿼리문을 직접 작성할 필요가 없다. (자동) 코드를 객체지향적으로 짤 수 있기에 직관적이며..
결론부터 보자면 모두 DI를 위한 어노테이션이며, 동작순서의 차이와 자바 진영에서 지원하는건지 스프링에서 지원하는건지에 대한 차이가 있다. (물론 DI가될 객체를 어떤 기준으로 찾는지 또한 조금씩 다르다) - Sample Code @Autowired // 타입 기준 private Wolf dog; // Wolf 타입으로 연결 @Resource // 이름 기준 private Wolf cat; // Cat 타입으로 연결 @Inject // 타입 기준 private Wolf rabbit; // Wolf 타입으로 연결 @Autowired - Bean 타입을 통해서 주입할 Bean 객체를 찾는다. 만약 타입으로 연결이 안된다면 이름을 통해 찾는다. - Field, Method, Constructor 에 사용할 수..
저는 사실 데이터베이스와 Spring을 같이 쓸때 mybatis밖에 안써봐서.... JPA? 대략 ORM기술의 인터페이스다! 라고만 알고있지 사실은 정확히 어떻게 쓰고 언제 용이한지는 전혀 모르고 있었습니다.... 근데 슬슬 프로젝트 개발도 마무리가 되가고 있는 시점에서 저희 호기심이 참지 못하고, 한번 알아보고 써봤습니다 헿. JPA (Java Presistence API) 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스 모음이라고 합니다 ! 즉 인터페이스라고 하는거 보니 실제로 구현이 되있는건??? 아니죠. 구현된 클래스와 매핑을 해주기 위해서 사용되는 프레임워크라고 합니다 :) 근데 그전에 ORM기술 표준이라고 했는데, ORM이 뭔지 알아야겠죠??? ORM (Object Relational ..
스프링과 스프링부트 정말 뭐가 다른걸까요? 결론부터 말씀드리면 크게 다를건 없습니다 ^^ 일단 단어부터가 애매합니다. Spring & Spring Boot 라고 표현하기 보다는 Spring Framework & Spring Boot 라고 표현을 고치고 자세하게 무엇이 다른지 알아보겠습니다! (복습도 할겸 개념부터 다시 잡아보면서 가지요 !) Spring Framework ? 스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크입니다! 단어가 길어서 그냥 스프링! 이라고 불러서 다들 혼동이 있는거 같아요 허헣 WAS 동적인 웹페이지를 개발하기 위해 여러가지 서비스를 제공하고 있습니다 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크 기반 기술이랍니다. 글..
Spring Boot & Mybatis 연동해보기! 오늘 수업때 배운 내용은 스프링부트에서 마이바티스를 연동하여 DB에 데이터를 CRUD하는거에 대해서 다뤘습니다! 까먹지 않게 제가 직접 한번 더 구현을 해보고 기록하고자 합니다 🙂 사용할 DB는 MySQL입니다 ! 사전준비 : 데이터베이스 모델링 및 구축 테스트이기 때문에…ㅈ..조촐하게 ^^ 1. 프로젝트 생성시 Setting 기본적으로 필요한 디펜던시를 설정해줍니다. Lombok (선택사항) Spring Boot DevTools Spring Web Thymeleaf (선택사항) MySQL Driver (DB연동) Mybatis Framework 2. application.properties 설정 server.port=80 # MySQL Driver s..
Entity….wt….. 엔티티가 뭐냐고요?…사실 저도 처음 들어봤어요 헤헿… 다른 사람의 프로젝트를 보다가 DTO나 VO를 Entity로 선언한걸 보게됬는데 이게 뭔지…수업때는 이런게 없었는데 그래서 궁금해서 찾아봤습니다! Entity란 핵심 비지니스 로직을 담는 비지니스 도메인의 영역의 일부이다. 즉 DTO는 단순히 데이터를 담는게 전부인 반면에, 엔티티는 비지니스 로직을 추가할 수 있다! 라는거죠. (VO란 개념이 비슷한거 같은데?….하지만 VO는 DB와 관련없는 비지니스 로직을 구현하는거죠?) 즉 DTO, VO와 Entity는 데이터를 담는건 동일하지만, 엔티티는 데이터베이스의 테이블과 매핑되는 자바 클래스를 의미합니다. 하지만 이것또한 스프링에서의 개념이고, 실제로 순 엔티티의 개념은 ⇒ 데이터..
JSON ⇒ JavaScript Object Notation 무슨 말이냐고요? 쉽게 말하면 JSON은 자바스크립트 문법이며, 키-값이 쌍을 이루는 형식으로 데이터를 저장하거나 전송할때 사용하는 “표기법” 입니다. 그래서 특정 프로그래밍 방식이나 서버와의 통신 방법같은게 아닌 단순히 데이터 “표기법” 인거죠! JSON을 이해하기 위해서는 “자바스크립트”에 대한 기본적인 이해가 필요합니다. 특징: JSON은 자바스크립트를 확장하여 만들어졌습니다. JSON은 자바스크립트 객체 표기법을 따릅니다. JSON은 사람과 기계가 모두 읽기 편하도록 고안되었습니다. JSON은 프로그래밍 언어와 운영체제에 독립적입니다. 스프링부트랑 뭔 상관이죠?… 위에서 말했듯이 JSON은 데이터를 저장하거나 전송할때의 표기법입니다! 이..
What is ajax??.. ajax는 뭘까요? 이것 역시 줄임말일거 같은 냄새가 풀풀 나는데요 ^^ ajax : Asynchronous Javascript and XML 해석해보자면 비동기식 자바스크립트, XML 이라는 뜻입니다. 그러면 비동기식이 뭐냐고요? 저희는 클라이언트와 서버가 데이터를 주고 받을때 항상 “동기식” 방법을 사용해서 지금까지 주고받았습니다! 무슨말이냐면..! 간단하게 클라이언트가 어떠한 url요청을 하면 해당 url요청에 응하기 위해 페이지가 새로고침을 되는것이다!! 라고 생각하면 매우 간단합니다! 반대로 비동기식은 페이지 새로고침 없이도 사용자의 요청을 실시간으로 처리할 수 있다!!! 라고 생각하면 좋을거 같습니다 🙂 동기(synchronous : 동시에 일어나는) ****요청..
Bean = 콩 죄송합니다… Bean이란 무엇일까요? 하하핳ㅎㅎ 여기서 일단 그냥 bean이라고 하면 Java bean 을 말하는지, Spring bean을 말하는지 되게 헷갈릴 수 있습니다! 두개를 정의를 한 다음에 Spring bean에 대해서 알아보도록 합시다! Java bean : 특정한 정보를 가지고 있는 클래스! 를 표현하는 하나의 규칙입니다. 여기서 특정한 정보라고 해서 와닿지 않을 수 있는데 그냥 예를 들어 ) userid, userpwd, username 등등 이런것들이고, 데이터를 표현하는 목적을 가지고 있습니다. 이 규칙을 지킨 클래스를 Java Bean 이라고 합니다! 규칙 반드시 클래스는 패키지 되어야 함 멤버변수는 property 라고 함. 멤버변수는 private로 지정하고, ..
IOC (Inversion Of Control) 제어의 역전 뭔가 엄청 멋진말 같죠?…..그만큼 어렵겠죠?……… 네 그렇게 쉽게 이해 할 수 있는 아이가 아닙니다 ^^ 그래서 지금 포스팅을 하는거죠 ㅎㅎㅎㅎ (쉬우면 굳이 이렇게 정리를 할 필요가 없겠죠 ㅠ) 제어의 역전? 뭔소리야 그게… 자 한번 쉽게 생각해봅시다. 제어란 : 무언가 통제한다는것이죠? 역전 : 상황이 역전되다 할때 그 역전이죠?? 거꾸로됬다!!! 자 합쳐 봅시다. 💡 “무언가를 통제하는게 역전 되었다.” ⇒ “제어를 하는 권한을 가진 주체가 바꼈다.” 자 그렇다면 주체는 누구를 의미하는걸까요? “라떼는 말이야….” 네 맞아요…옛날 시적에 개발자들은 “의존관계”의 제어를 직접 했습니다! 하지만 지금은 제어권이 “컨테이너”로 넘어가게 되었고..
How to upload Files to Server from Client. 안녕하세요. 이번 수업때 Spring Framework 에서 파일을 업로드 하는 방법을 배웠는데요.. 생각보다 유효성 검사도 신경 써야할게 많았고 순서도 복잡하니, 많은 반복문과 조건문이 괄호를 끼고 개판을 치다 보니 순서를 정리해볼겸 글을 쓰게 되었습니다!… 파일을 업로드 하는 jsp 페이지로 이동시 가져가야할 데이터가 있을까요?? 당연히 세션에 부여되 있는 userid를 가져가야겠죠?? 하지만 세션은 서버단에서 저장이 되있기 때문에 어디서든지 호출이 가능합니다. 그래서 특별히 get, post로 보내줘야할 데이터는 없습니다. 1. FileUpload를 위한 세팅 root-context.xml 파일에서 먼저 multipartR..
Dependency Injection : 의존성 주입 자 단어부터가 벌써 무서워요????? ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ…… 이걸 이해하기 위해선 차근차근 하나씩 계단을 올라가는 느낌으로 정리를 해보겠습니다! 일단 단어가 2개에요!! 의존성, 주입 그렇죠?? 제일 먼저 의존성이라는 단어 먼저 풀이해볼게요! 의존성 : Dependency 자 쉽게 “학생”은 “선생님”에게 의존한다. 틀리지 않은 말이죠? 조금 추상적인 표현이긴 하지만, 간단하게 “학생”이라는 객체는 “선생님”이라는 객체가 있어야지 공부를 할 수 있고, 가르침을 받아서 시험도 보고, 대학교도 가죠??? 자 이해가 아마 처음부터 바로 안갈거에요! 그렇다면 코드를 보면서 얘기를 해보겠습니다! class Student { private Teacher teac..
Interceptor 하다 : 는 가로채다 라는 의미의 영단어 입니다! 한마디로 무언가를 중간에 가로채는것을 인터셉터! 라고 한다는거죠??? 그렇다면 무엇을 가로채는걸까요?? 바로 Client 의 요청으로 서버에 들어온 request 객체를 가로채는것 입니다. Controller에서 Handler 로 도달하기전에 그 순간 요청을 가로챕니다. 여기서 말하는 Handler란? ⇒ 사용자가 요청한 url주소에 따라 실행될 메소드를 의미합니다! 그러면 굳이 왜 요청을 가로채냐고요?? 당연히 Handler로 도달하기전에 추가로 작업해야될 것들을 실행 시킨뒤에 Handler로 가게 만드는 것이죠! Interceptor 는 단순히 하나의 요청만을 가로채는게 아닌 여러개의 요청을 동일한걸로 엮어서 한번에 똑같은 작업을..