[Spring] Querydsl
·
Java/Spring
Queryds이란 무엇인가? 백엔드 기술은 주로 스프링 부트, 스프링 데이터 JPA를 조합해서 사용합니다. 하지만, 이러한 기술들로도 해결하지 못한 문제들이 있습니다. 바로 복잡한 쿼리, 동적 쿼리와 같은 문제들을 해결할 수 없습니다. 이러한 문제들을 손쉽게 해결할 수 있는 기술이 Querydsl입니다. Querydsl은 HQL(Hibernate Query Language) 쿼리를 안전하게 생성 및 관리해 주는 프레임워크입니다. 또한 쿼리를 자바 언어의 한계를 넘어서 자바 코드로 작성함과 더불어, 문법 오류를 컴파일 시점에 시점에 잡아줍니다. 문법이 SQL과 유사하기에 쉽게 학습할 수 있고, 복잡한 쿼리도 손쉽게 작성할 수 있게 됩니다. JPQL과의 차이를 통해 장점을 설명드리겠습니다. @Test pub..
[Java] 객체지향 사실과 오해 1- 협력하는 객체들의 공동체
·
Java/Java Concept
"객체지향이란 무엇인가?"라는 질문에 뭐라고 답할 것인가? "실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"입니다. 객체지향 프로그래밍이란 실제로 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업이기 때문에, 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화입니다. 이러한 관점을 잘못됐고, 정작 실세계의 모방이라는 개념이 저도 납득이 잘 가지 않았습니다. 왜냐하면 예시를 들어 붕어빵을 제조하는 과정을 객체지향에 빗대어 설명하는데, 저희가 애플리케이션을 개발할 때 붕어빵을 만들진 않기 때문입니다. 그냥 객체지향을 쉽게 이해하기 위한 방안입니다. 또한 객체지향의 목표는 실세계의 모방이 아닌, 실세계의 창조입니다. 시대가 계속 바뀌면서, ..
[Spring] OSIV[Open Session In View]를 적절히 사용하여 성능 최적화
·
Java/Spring
OSIV란 무엇인가? 하이버네이트에서 Open Session In View라고 불렀고, 향후 JPA가 생기고 나서는 Open EntityManager In View라고 불렀습니다. 관례상 OSIV라고 합니다. OSIV는 하이버네이트를 뷰까지 열어두는 기능입니다. spring.jpa.open-in-view : true(기본 값) 다음과 같이 애플리케이션을 시작 시점에 warn로그를 뿌립니다. 이제 그 이유에 대해서 알아보겠습니다. OSIV 전략은 최초 데이터베이스 연결 시작 시점부터 API 응답이 끝나기 전 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지하게 됩니다. 그래서 View 템플릿이나 API 컨트롤러에서 지연로딩이 가능해왔습니다. (지연 로딩(LAZY)가 가능하려면 영속성 컨텍스트가 살아 있어야..
[Spring] 변경 감지(Dirty checking)와 병합(merge)
·
Java/Spring
JPA에서 변경 감지와 병합 두 가지 요소를 알기 전에 준영속 엔티티를 알고 있어야 합니다. 준영속 엔티티에 대해 설명드리겠습니다. 준영속 엔티티란 영속성 컨텍스트가 더 이상 관리하지 않은 엔티티입니다. @PostMapping("items/{itemId}/edit") public String updateItem(@PathVariable String itemId, @ModelAttribute("form") BookForm form) { Book book = new Book(); book.setId(form.getId()); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuanti..
[Spring] 애브리타임 게시판 부가기능 추가(댓글, 쪽지, 좋아요, 즐겨찾기, 페이징처리)
·
Java/Spring
기능 추가한 패키지는 다음과 같습니다. (기존 틀에서 벗어나진 않지만, Spring Security와 도메인 추가, 이미지 처리, 페이징 처리 등 다양한 기능들을 추가하였습니다) 우선 시큐리티 부분부터 차근차근 설명드리겠습니다. SecurityConfig.class @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private f..
[Spring] Spring Security + JWT를 이용한 토큰 발급 및 회원가입, 로그인 로직 구현
·
Java/Spring
JWT란 무엇인가 ? RFC 7519 웹 표준으로 지정되어 있고, JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Json Web Token이다. 헤비 하지 않고, 아주 간편하고 쉽게 적용할 수 있어서 사이드 프로젝트를 진행할 때 매우 유용한 방식이다. 몇 가지 고려사항만 잘 대응하면, 대규모 프로젝트에도 충분히 이용 가능한 방식이다. JWT 구성요소 Header : Signature를 해싱하기 위한 알고리즘 정보들이 담겨있음. Payload : 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용들을 담고 있다. Signature : 토큰이 유효성 검증을 위한 문자열, 이 토큰이 유효한 토큰인지 확인 가능. JWT 장점 - 중앙의 인증서버, 데이터 스토어에 대한 의존성 ..
[Spring] Rest vs RestAPI
·
Java/Spring
Rest란 무엇인가? Representational State Transfer라는 용어의 약자이다. 자원을 URI로 표시하고 현재 자원에 대한 상태를 주고 받는 것이다. 클라이언트는 HTTP URI를 통해서 자원을 구별하고, URI를 통해 서버에 요청을 보낸다. 클라이언트와 서버간의 통신 방식 중 하나이다. REST의 구성 요소 : 자원(Resource), 행위 : HTTP METHOD(GET, POST, UPDATE, DELETE) 표현으로 이루어져있다. 표현(verb) 다음과 같이 클라이언트는 서버측에 요청을 보낼때, HTTP URI를 통해 자원을 구별한다. @PostMapping("/users/{userId}/boards") 그러면 Restful은 무엇일까? Rest와 동일하지만, 기존 Rest보다..
[Spring] MVC Pattern
·
Java/Spring
MVC Pattern이 무엇이고 왜 생겨났을까?? MVC 패턴은 간략하게 설명하면, 유지보수가 편해지는 코드 구성 방식이다. 사용하는 이유는 도메인이나, 각종 구성요소들의 재사용을 할 수 있음(중복 코딩 방지)과 더불어 확장성이 매우 증가하였다. 더불어 Model, View, Controller로 요소를 나누었고, 이를 구분하기에 각 요소들이 스스로의 기능에 집중할 수 있고 분업화할 수 있다.. 어떠한 어플리케이션이 있을 때, MVC 패턴을 사용하지 않고 구현하였다면 전반적인 코드를 싹 다 고쳐야 한다. 하지만, MVC 패턴으로 구현하였으면 잘못된 컴포넌트의 기능만 찾아 이를 리팩토링하면 손쉽게 해결할 수 있다. 이를 통해 유지 보수가 편해질 수 있게 된다. MVC 패턴 동작 과정 1. 클라이언트가 필요..
[Java] HashMap, HashSet 개념정리
·
Java/Java Concept
HashMap은 Map의 종류 중 하나인데, key값과 value 쌍으로 이루어진 데이터를 저장한다. Map과 HashMap의 차이는 map은 red-blcak-tree 알고리즘을 사용하고, Hashmap은 Hashtable을 이용해 key-value를 유지한다. key값은 중복이 불가능하지만, value값은 중복이 가능하다. 선언방법 HashMap 변수이름 = new Hashmap(); HashMap 메서드 정리 1. put(key, value) => key, value값 저장, 중복된 key에 대한 value는 마지막에 저장된 value값으로 update 2. putAll(Object) => 인자로 전달된 Map에 대한 모든 데이터를 저장한다. 3. get(Object key) => key에 해당하는..
[Spring] Bean Scope, MVC Framework, SpringApplication(Spring Boot)
·
Java/Spring
Spring Bean이란? Spring에서 POJO(plain, old java object)를 "Bean"이라고 부른다 Beans는 애플리케이션의 핵심을 이루는 객체이며, Spring IoC 컨테이션에 의해 인스턴스화, 관리, 생성 된다. 컨테이너에 공급하는 XML파일에 의해 생성된다. 애플리케이션의 객체가 지정되면 getBean()메서드를 통해 가져올 수 있다. Bean Scope 이 중에 request, session, globalsession은 Spring Mvc Web Application에서만 적용된다. default값은 singleton이다. MVC Framework Spring MVC Framework의 구성요소 DispatcherServlet : 제일 앞단에서 HTTP Request를 처..