
우선 스프링부트를 사용할 때 이클립스가 아닌 인텔리제이를 사용할 것인데 인텔리제이가 이클립스에 비해 갖는 강점에 대해 알아볼 것이다. - 강력한 추천기능 (Smart Completion) - 훨씬 더 다양한 리팩토링과 디버깅 기능 - 이클립스의 깃에 비해 훨신 높은 자유도 - 프로젝트 시작할 때 인덱싱을 하여 파일을 비롯한 자원들에 대한 빠른 검색 속도 - HTML과 CSS, JS, XML에 대한 강력한 기능 지원 - 자바, 스프링부트 버전업에 맞춘 빠른 업데이트 그레들 프로젝트를 스프링부트 프로젝트로 변경하기 buildscript { //ext는 전역변수 개념, 버전을 전역변수로 고정박아 사용 ext { springBootVersion = '2.1.7.RELEASE' } //repositories는 각..

1. 스프링 배치 특정한 시간에 내가 원하는 일을 자동으로 시키는게 스케줄러의 역할이고 처음에 이것에 대해 먼저 학습을 하여 스프링 배치에 대한 개념에 혼동이 왔다. 둘이 비슷하다고 생각했지만 아예 다른 개념이였다. 배치는 '일괄처리' 라는 의미이다. 그리고 스프링에서 배치 작업 단위를 Job이라고 부른다. 스프링에서는 배치 작업이 원활하게 진행되도록 관련 기능을 제공해준다. 대용량 배치와 트랜잭션 기능을 간단하게 구현할 수 있다. 매일 전 날의 데이터를 집계해야한다고 가정해보자. 이 집계 과정을 어디서 수행하면 될까? 만약 이 작업을 Tomcat + Spring을 통해 집계를 수행한다면 컴퓨터의 CPU, I/O 등의 자원을 모두 사용 해버려 다른 요청을 처리할 수 없게 될 것이다. 보통 데이터를 집계하..
단위 테스트를 위해 한번에 메서드 하나만을 실행해보는 것이다. 이러한 메서드가 다른 네트워크, 데이터베이스 등등 제어하기 어려운 것들에 의존하고 있다면 어떻게 단위 테스트를 해야할까? 즉, 코드가 해당하는 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 ..

스프링 환경에서는 특별한 설정을 하지않으면 싱글톤 레지스트리로 생성된다. 왜냐하면 매번 인스턴스를 생성할 경우에 초당 100건의 요청이 있을 때 시간 단위로만 놓고봐도 엄청난 양의 인스턴스가 생겨 과부하가 걸리기 마련이기 때문이다. 하지만 자바의 기본적인 싱글톤 패턴의 구현 방식은 여러 가지 단점이 있기 때문에, 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하는데 그것이 싱글톤 레지스트리다. 싱글톤 레지스트리의 장점 스태틱 메소드와 private 생성자를 사용해야 하는 비정상적인 클래스가 아니라 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 점이다. 덕분에 싱글톤 방식으로 사용될 애플리케이션 클래스라도 public 생성자를 가질 수 있다. 싱글톤으로 만들어지기 때문에 주의할 점 ..

DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트다. 사용자 정보를 저장할 때는 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 먼저 사용자 정보를 저장할 User 클래스를 만든다. 자바빈은 디폴트 생성자가 있어야한다. 파라미터가 없는 디폴트 생성자는 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 그리고 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 메소드와 get으로 시작하는 접근자 메소드를 이용해 수정 또는 조회할 수 있다. 사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 만들어보자. 사용자 정보를 관리하는 DAO이므로 UserDao라는 이름으로 ..

의존성 주입(DI) 또는 인젝션(injection) 어떤 클래스가 필요로 하는 컴포넌트를 외부에서 생성한 후, 내부에서 사용 가능하게 만들어 주는 과정 DI의 개요 의존성 주입이라고도 하며, IoC라고 하는 소프트웨어 디자인 패턴 중 하나다. 이때 IoC는 인스턴스를 제어하는 주도권이 역전된다는 의미로 사용되는데, 컴포넌트를 구성하는 인스턴스의 생성과 의존 관계의 연결 처리를 해당 소스코드가 아닌 DI컨테이너에서 대신 해주기 때문에 제어가 역전됐다고 보는 것이다. 따라서 지금까지 인스턴스를 애플리케이션에서 직접 생성해서 쓰는 방법 대신 DI 컨테이너가 만들어주는 인슽너스를 가져오는 방법을 사용할 수 있다. 이때 취득한 인스턴스가 의존하는 또 다른 인스턴스 역시 DI 컨테이너에서 관리되기 때문에 연쇄적으로..