서버 템플릿 엔진과 머스테치 소개 이번에는 머스테치(Mustache)를 통해 화면 영역을 개발하는 방법을 배워보자. 템플릿 엔진이란 무엇인가? 웹 개발에 있어 템플릿 엔진이란, 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 이야기한다. 예전 스프링이나 서블릿을 사용했다면, JSP, Freemaker 등이 떠오를테고 요즘은 리액트, 뷰 등이 떠오를 것이다. 이것들 모두 결과적으로는 지정된 템플릿과 데이터 를 이용하여 HTML을 생성하는 템플릿 엔진이다. 다만 약간의 다른 점이 있는데, 서버 템플릿 엔진 : JSP, Freemaker 클라이언트 템플릿 엔진 : 리액트, 뷰 만약 아래와 같은 코드가 주어진다면 결과는 어떻게 되는 지 생각해보자. $(document).ready(fu..
프록시 패턴이란, 프록시는 대리한다 라는 개념으로 리얼 서브젝트를 참조하고 있다. 서브젝트는 인터페이스로서 프록시와 리얼 서브젝트가 공유하고 있고, 클라이언트는 서브젝트 인터페이스 타입으로 프록시를 사용한다. 클라이언트는 프록시를 거쳐 리얼 서브젝트를 사용하기 때문에 프록시는 리얼 서브젝트에 대한 접근을 관리하거나 부가기능을 제공하고 리턴값을 변경할 수도 있다. 리얼 서브젝트는 자신이 해야할 일만 하면서(SRP) 프록시를 이용해 부가적인 기능(접근제한, AOP, 로깅, 트랜잭션)을 제공할 수 있다. 부가적인 기능마저 리얼 서브젝트에서 제공해주면 매우 복잡해지고 객체지향적 개념에서도 벗어나게 된다. 프록시 패턴을 소스로 확인해보자 //BookService public interface BookService..
의존성 주입해주는 커스텀 애노테이션을 만들자 커스텀 애노테이션을 만들자 @Retention(RetentionPolicy.RUNTIME) public @interface Inject { } 커스텀 애노테이션을 사용해보자 public class BookService { @Inject BookRepository bookRepository; } public class BookRepository { } BookService에서 @Inject를 통해 의존성이 주입되기를 원하고 있다. 먼저 리플렉션을 사용하여 객체가 생성되는 지 확인해보자. public class ContainerServiceTest { @Test public void getObject_BookRepository() { BookRepository b..
Class 인스턴스에 있는 사용자 정의 클래스를 생성해보자 //Book public class Book { public static String A = "A"; private String B = "B"; public Book(){} public Book(String b) { B = b; } public void c() { System.out.println("C"); } public int sum(int left, int right) { return left + right; } } 사용자 정의 클래스의 위치를 활용하여 클래스를 생성해보자. public static void main( String[] args ) throws ClassNotFoundException, NoSuchMethodException,..
Java의 중요 애노테이션 @Retention : 해당 애노테이션을 언제까지 유지할 것인가? source, class, runtime @Inherited : 해당 애노테이션을 하위 클래스까지 전달한다. @Target : 어디에 사용할 수 있는가? type, field, method ... 리플렉션을 사용하여 애노테이션들의 정보를 살펴보자 //custom annotation 1 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { String value() default "mesung"; int number() default 100; ..

사용자가 정의한 클래스들은 프로그램 실행 시, 클래스 로더 에 의해 사용자 정의 클래스 타입의 Class 인스턴스들이 힙 영역에 올라간다. 힙 영역에 올라가 있는 사용자 정의 클래스 타입의 Class 인스턴스를 꺼내보자 (3가지 방법) //Book => 사용자가 정의한 클래스 public class App { public static void main( String[] args ) throws ClassNotFoundException { //1. Book.class로 Class 인스턴스에 접근 Class bookClass = Book.class; //2. 사용자 애플리케이션에 생성된 인스턴스를 사용하여 Class 인스턴스에 접근 Book book = new Book(); Class aClass1 = Cl..

Java 프로그램의 실행 과정 Java 프로그램을 실행하면 JVM은 OS로 부터 메모리를 할당받는다. 작성한 .java 파일은 컴파일러에 의해 .class(바이트 코드) 파일로 변환된다. 클래스 로더에 의해서 .class(바이트 코드가 포함된) 파일을 찾아 JVM에 올려놓는다.(런타임) 실행엔진에 의해 .class(바이트 코드가 포함된) 파일을 한줄 씩 실행하게 된다. 클래스 로더 클래스 로더는 위 그림처럼 로딩 - 링크 - 초기화 순으로 진행된다. 로딩 Bootstrap(최상위 부모)
JPA Auditing으로 생성시간/수정시간 자동화하기 보통 Entity는 해당 데이터의 생성시간과 수정시간을 포함하고 있다. 이런 정보는 추후 유지보수에 있어 굉장히 중요한 정보이기 때문이다. 이렇다 보니 DB에 삽입 및 갱신할 때는 날짜 데이터를 등록/수정하는 코드가 항상 들어가게 된다. //Ex. 생성일 추가 public void savePosts() { ... posts.setCreateDate(new LocalDate()); postsRepository.save(posts); ... } 하지만 이런 코드가 모든 테이블과 서비스 메소드에 구현해야하 한다면 중복이 발생하고 코드가 지저분해진다는 점이 발생하게 된다. 이런 문제를 해결하고자 나타난 것이 JPA Auditing이다. LocalDate 사..
- Total
- Today
- Yesterday
- ifPresent
- 이펙티브자바
- flatMap
- 생성자
- 빈 순환 참조
- 빌더 패턴
- try with resources
- 김영한
- java
- 자바8
- junit
- java8
- 복사 팩토리
- JPA
- @Lazy
- springboot
- 정적팩터리메서드
- Effective Java
- 점층적 생성 패턴
- effectivejava
- jdk버전
- 스프링부트
- 연관관계
- 인프런
- 이펙티브 자바
- 팩토리 메소드 패턴
- mustache
- try catch finally
- package-private
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |