JWT란?Json Web Token의 약어이며 Json 포맷으로 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다. 주로 회원 인증이나 정보 전달에 사용된다. 기존에 사용되던 Session에서 jwt로 많이 넘오는 이유는 크게 2가지 측면이 있다. 1. 서버의 부하session에 저장한다는 것은 결국 서버의 저장공간을 사용하게 되므로 많은 이용자가 사용되는 어플일 경우 그만큼의 부하가 생기는 것이며 HTML5부터는 브라우저에 5MB의 저장공간을 쓸 수 있는 스토리지도 생겼기에 이를 이용한 것 2. 서버간 세션 동기화 문제트래픽이 몰리게 될 경우 컴퓨팅 파워를 높여서 해결 하는 방법보단 서버를 늘려서 부하분산을 하는 경우가 더 많다. 이 경우 특정 서버에만 저장된 세션의 정보를 다른 서..
JPA 소개 Oracle, mySql, msSql 등을 쓰지 않는 웹 애플리케이션은 거의 없습니다. 그러다보니 객체를 관계형 데이터베이스에서 관리하는 것이 무엇보다 중요합니다. 관계형 데이터베이스가 계속해서 웹 서비스의 중심이 되면서 모든 코드는 SQL 중심으로 되어갑니다. 이는 관계형 데이터베이스가 SQL만 인식할 수 있기 때문인데, SQL만 가능하니 테이블마다 기본적이 CRUD를 매번 생성해야합니다. 예를 들어 User라는 테이블이 추가되면 기본적으로 아래와 같은 CRUD가 생성됩니다. select * from user insert into user vales(...) update user set .. delete from user 이런 문제말고도 패러다임 불일치 라는 문제도 있습니다. 관계형 데이터..
우선 스프링부트를 사용할 때 이클립스가 아닌 인텔리제이를 사용할 것인데 인텔리제이가 이클립스에 비해 갖는 강점에 대해 알아볼 것이다. - 강력한 추천기능 (Smart Completion) - 훨씬 더 다양한 리팩토링과 디버깅 기능 - 이클립스의 깃에 비해 훨신 높은 자유도 - 프로젝트 시작할 때 인덱싱을 하여 파일을 비롯한 자원들에 대한 빠른 검색 속도 - HTML과 CSS, JS, XML에 대한 강력한 기능 지원 - 자바, 스프링부트 버전업에 맞춘 빠른 업데이트 그레들 프로젝트를 스프링부트 프로젝트로 변경하기 buildscript { //ext는 전역변수 개념, 버전을 전역변수로 고정박아 사용 ext { springBootVersion = '2.1.7.RELEASE' } //repositories는 각..
1. 스프링 배치 특정한 시간에 내가 원하는 일을 자동으로 시키는게 스케줄러의 역할이고 처음에 이것에 대해 먼저 학습을 하여 스프링 배치에 대한 개념에 혼동이 왔다. 둘이 비슷하다고 생각했지만 아예 다른 개념이였다. 배치는 '일괄처리' 라는 의미이다. 그리고 스프링에서 배치 작업 단위를 Job이라고 부른다. 스프링에서는 배치 작업이 원활하게 진행되도록 관련 기능을 제공해준다. 대용량 배치와 트랜잭션 기능을 간단하게 구현할 수 있다. 매일 전 날의 데이터를 집계해야한다고 가정해보자. 이 집계 과정을 어디서 수행하면 될까? 만약 이 작업을 Tomcat + Spring을 통해 집계를 수행한다면 컴퓨터의 CPU, I/O 등의 자원을 모두 사용 해버려 다른 요청을 처리할 수 없게 될 것이다. 보통 데이터를 집계하..
붕어빵과 붕어빵틀 처음 Java를 접하게 될 경우 객체와 클래스에 관해 설명을 위와같이 들어본 사람이 아마 대다수 일 것이다. 하지만 이것은 쉽게 설명하려고 하다보니 생긴 오류다. 개발을 할 때 이러한 부분을 정확하게 선 긋고 확실한 개념으로 일하고 싶기에 이 부분의 오해를 풀어보려한다. 클래스 객체명 = new 클래스(); 일반적으로 위와 같이 클래스로 객체를 생성하는 방식이다. 이를 붕어빵과 붕어빵틀로 바꿔 비유해보겠다. 붕어빵틀 붕어빵 = new 붕어빵틀(); 이 부분이 아직 잘 이해가 안간다면 붕어빵틀을 생산하는 금형기계가 있다고 해보자. 그럼 붕어빵틀이 붕어빵을 찍어내서 클래스라고 한다면 같은 논리로 금형 기계는 붕어빵틀을 찍어내는 클래스가 된다. 이를 코드로 나타내면 다음과 같다. 금형기계 붕..
단위 테스트를 위해 한번에 메서드 하나만을 실행해보는 것이다. 이러한 메서드가 다른 네트워크, 데이터베이스 등등 제어하기 어려운 것들에 의존하고 있다면 어떻게 단위 테스트를 해야할까? 즉, 코드가 해당하는 Flow가 아닌 다른 부분에 많이 얽혀 있다면 단위 테스트를 하기 어려울 것이다. 따라서 이러한 것을 돕기 위해 Mock 이라는 것이 나타났다. Mock이란? 실제 객체를 만들어 사용하기에 시간, 비용 등의 cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어서 사용하는 방법이다. Mock 객체는 언제 필요할까? 테스트 작성을 위한 환경 구축이 어려운 경우 테스트가 특정 경우나 순간에 의존적일 경우 테스트 시간이 오래 걸릴 경우 개인 PC의 성능이나 서버의 성능문제..
DB에는 컬럼명이 보통 스네이크형식 이며 board_no 이렇게 들어간다. 하지만 서버에서 객체의 멤버 변수의 이름은 카멜케이스로 boardNo이렇게 들어간다. 그렇기 때문에 returnType을 VO로 지정했을 경우 명칭이 달라서 데이터를 못받아오는 경우가 생기기 마련이다. 하나의 방법으로 별칭을 지정해서 select board_no as boardNo로 할 수도 있겠지만 너무 번거로운 작업이기 때문에 자동으로 변환해주는 방법을 설정할 것이다. 1. application.yml 설정하기 mybatis: config-location: classpath:mybatis-config.xml //혹시 오류가 난다면 여기 부분 제거 configuration: map-underscore-to-camel-case: ..
1. gradle에 의존성 추가 본 작업은 gradle로 했습니다. 그렇기에 제일 먼저 디펜던시를 추가해 줍니다. dependencies { compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2' compile 'org.springframework.boot:spring-boot-starter-jdbc' compile 'mysql:mysql-connector-java' } 2. MySQL관련 config 설정 src > main > resources에 application.yml의 파일을 생성해줍니다. spring: datasource: url: jdbc:mysql://ip주소:port번호/DB이름?characterEncoding=utf8 ..