JPA로 데이터베이스를 다뤄보자 현재 운영을 진행하면서 MyBatis를 이용해 데이터베이스 쿼리를 작성한다. *즉, 실제 개발하는 시간보다 SQL을 다루는 시간이 더 많게 느껴진다는 것이다. * 해당 문제는 객체지향 프로그래밍의 걸림돌이 된다.. 객체 모델링 보다는 테이블 모델링에 집중하게 되고... 이를 해결하기 위해 즉, 관계형 데이터베이스를 이용해서 객체지향 프로그래밍을 할 수 있는 JPA(자바 표준 ORM)이 나타나게 된다. 참고 ibatis와 mybatis는 ORM이 아니고, SQL Mapper이다. ORM은 객체를 매핑하는 것이고, SQL Mapper는 쿼리를 매핑한다는 것에 차이가 있다. JPA란, 현대 웹 애플리케이션에서는 관계형 데이터베이스가 필수적이다. Oracle, MySQL, MSS..
스프링 부트와 테스트 코드 테스트 코드란, TDD와 단위 테스트는 서로 다른 이야기이다. TDD는 테스트가 주도하는 개발. 즉, 테스트 코드를 먼저 작성하는 것을 말한다. Red : 항상 실패하는 테스트를 먼저 작성 Green : 테스트가 통과하는 프로덕션 코드를 작성 Refactor : 테스트가 통과하면 프로덕션 코드를 리팩토링 단위 테스트는 TDD의 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 말한다. 단위 테스트는 테스트 코드를 꼭 먼저 작성해야하는 것도 아니고, 리팩토링도 포함되지 않는다. 즉, 순수하게 테스트 코드만 작성하는 것을 말한다. 단위 테스트 코드는 왜 작성하지? 장점을 살펴보자 개발단계 초기에 문제를 발견할 수 있다. 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이..
스프링 부트의 애노테이션 Main Application @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 가능하다. 해당 애노테이션이 있는 부분부터 설정을 읽어가기 때문에, 해당 애노테이션이 있는 클래스는 항상 프로젝트의 최상단에 위치해야한다. SpringApplication.run() run()으로 인해 Spring Boot의 내장 WAS를 실행한다. 이를 통해서 톰캣을 설치할 필요가 없고, 스프링..
gradle 기반 Spring boot 프로젝트 생성 build.gradle 설정 buildscript { ext { springBootVersion = '2.1.7.RELEASE' } //ext{}는 build.gradle에서 사용하는 전역변수를 설정하겠다라는 의미 //의미 : springBootVersion을 2.1.7.RELEASE로 하겠다. repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } //spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.7.RELE..
Validation 추상화 애플리케이션에서 사용하는 객체들을 검증하는 인터페이스다. Bean Validation 1.0과 1.1을 지원한다. Validator 인터페이스 사용하기 두 가지 메소드를 구현해야한다. boolean supports(class clazz) : 어떤 타입의 객체를 검증할 때 사용할 것인지 결정한다. void validate(Object obj, Error e) : 실제 검증 로직을 이 안에서 구현한다. 구현할 때 ValidationUtils를 사용하면 편리하다. 소스를 통해 validator를 만들어 보자 //Event public class Event { Integer id; String title; public Integer getId() { return id; } public..
Resource 추상화 java.net.URL을 추상화 한 것이다. 추상화한 이유 java.net.URL은 classpath 기준으로 리소스를 읽어오는 기능이 부재되어 있다. ServletContext를 기준으로 상대 경로를 읽어오는 기능이 부재되어 있다. URL은 기본적으로 프로토콜 http, https, ftp, file, jar를 지원해준다. 이런 부분들을 통합해서 하나의 추상화로 만든것이다. 구현체 ClassPathResource : classpath 접두어를 사용하면 해당 classpath 기준으로 리소스를 찾는다. FileSystemResource : filesystem 기준으로 리소스를 찾는다. ServletContextResource : 사실상 가장 많이 사용. 웹 애플리케이션 루트에서 상..
- Total
- Today
- Yesterday
- effectivejava
- junit
- springboot
- flatMap
- 자바8
- 이펙티브 자바
- package-private
- 김영한
- Spring
- 인프런
- 이펙티브자바
- java8
- 팩토리 메소드 패턴
- 스프링부트
- 연관관계
- 빈 순환 참조
- try catch finally
- JPA
- java
- mustache
- 빌더 패턴
- ifPresent
- @Lazy
- 점층적 생성 패턴
- try with resources
- jdk버전
- 정적팩터리메서드
- Effective Java
- 생성자
- 복사 팩토리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |