백엔드 썸네일형 리스트형 스프링 부트 배너 멋있게 바꾸기 면접 준비 하다가 알아낸 스프링 부트 배너 바꾸기! 부트 배너는 스프링 애플리케이션 실행시 가장 처음 로그에 출력되는 위의 문자열을 말한다. banner 파일의 위치는 src/main/resources/banner.txt를 생성해주면 된다. 아무것도 없으면 위의 배너가 default 로 나온다. 한번 설정해보자! 로그 좀 이쁘게 설정하는거 없나 하고 좀 찾아보다가 재밌는 사이트를 발견했다. https://devops.datenkollektiv.de/banner.txt/index.html Spring Boot banner.txt generator devops.datenkollektiv.de 단어를 입력하면 이렇게 까리하게 만들어준다. 엄청 많은 종류가 있는데 impossible이나 isometric 시리즈.. 더보기 자바 Executor 보호되어 있는 글입니다. 더보기 자바 Stream과 Optional Stream 데이터를 담고 있는 것은 컬렉션. 스트림은 이러한 컬렉션에 들어있는 데이터들을 가지고 연산을 실행하는 것. 컬렉션에 담겨있는 데이터값이 변경되는 것은 아니다. 중개 operation과 종료 operation로 나뉜다. 중개 operation은 LAZY 하다. 중개 operation은 LAZY 하기 때문에 종료operation이 들어와야 스트림의 연산이 끝난다. 그래서 여러개의 중개 연산과 하나의 종료 연산으로 구성되어있다. List names = new ArrayList(); names.add("hello"); names.add("man"); names.add("iii"); names.add("aaa"); names.add("bbb"); // 중개 연산. 연산이 끝나지 않았으므로 리턴값은 스.. 더보기 자바8의 인터페이스 1. Default 메소드 등장배경 아래의 인터페이스가 있다. public interface StaticAndDefault { void printName(); } 해당 인터페이스를 구현한 구현체 클래스가 1000개 있다고 가정해보자. 만약 해당 인터페이스에 함수가 하나 추가되어야하는 상황이라면? 그리고 추가될 함수는 어떤 구현체든지 동일한 로직이라면? 복붙을 1000번 해야하는 상황이 오게된다. 사용방법 public interface StaticAndDefault { void hello(); default void hi() { System.out.println("hi"); } } default 키워드를 붙인 함수를 인터페이스에 넣어주면 해당 인터페이스의 모든 구현체는 default 키워드가 붙은 함수들을.. 더보기 타임리프의 템플릿, 레이아웃 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com 강의를 수강하며 공부한 것을 정리한 글입니다. 템플릿과 레이아웃 웹 페이지 상의 공통되는 영역들을 일일이 복붙으로 개발하는 것은 비효율적이다. 중복이 발생하기도 하고 변경사항이 생기면 하나하나 찾아다니며 수정해야하기 때문이다. 타임리프에서는 이를 해결하기 위해 템플릿, 레이아.. 더보기 타임리프 정리2 보호되어 있는 글입니다. 더보기 타임리프 사용법 정리 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있 www.inflearn.com 타임리프 기초 사용법 text 이스케이프 컨트롤러로부터 넘어온 데이터의 값에 같은 문자를 다른 문자로 치환해준다. 이를 escape라고 한다. text는 이스케이프 처리를 해주지만 utext는 이스.. 더보기 스프링 데이터 JPA, 쿼리 dsl 쿼리 dsl을 적용하기 위해서는 스프링 데이터 JPA의 인터페이스에 사용자 정의 리포지토리를 상속해야한다. public interface MemberRepo extends JpaRepository, MemberCustom { } public interface MemberCustom { List search(MemberSearchDTO condition); List searchPageSimple(MemberSearchDTO condition, Pageable pageable); List searchPageComplex(MemberSearchDTO condition, Pageable pageable); } public class MemberCustomImpl implements MemberCustom { /.. 더보기 QueryDSL - 동적 쿼리 BooleanBuilder @Test public void dynamic1() { List members = searchMember(null, 15); for (Member member1 : members) { System.out.println("member1.getUsername() = " + member1.getUsername()); } } private List searchMember(String username, Integer age){ BooleanBuilder builder = new BooleanBuilder(); if (username != null) builder.and(member.username.eq(username)); if (age != null) builder.and(member.. 더보기 QueryDSL 프로젝션, DTO 사용 프로젝션 특정 필드만 조회할 경우 해당 필드의 타입 리스트가 반환값이 된다. 만약 조회하는 필드가 두개 이상이라면 이렇게 튜플이 된다. 튜플은 쿼리dsl에서 제공해주는 것이다. 그러므로 레포지토리 계층에서만 사용할 수 있도록 해야한다. DTO를 사용한 프로젝션 튜플을 레포지토리 계층에서만 사용하기 위해서는 서비스 계층으로 값을 반환할때 DTO를 사용해야 한다. JPA에서 공부했던 JPQL 쿼리를 DTO로 조회할 때를 잠깐 복습해보면 @Test public void projectionWithDTO() { List resultList = em.createQuery("select new study.QueryDSL.dto.MemberDTO(m.username, m.age) from Member m", Membe.. 더보기 이전 1 2 3 4 5 다음