전체 글

전체 글

    스프링 부트 - 핵심 원리와 활용 - 섹션3. 스프링 부트와 내장 톰캣

    웹 애플리케이션 서비스를 줄여서 WAS라고 부르는데, 서버를 실행하기 위해선 웹 애플리케이션 서버 설치하고, 여기에 빌드해서 나온 파일 WAR를 올리고 실행해줘야 해서 여기에 불편함을 느끼는 사람이 많았다. 그래서 어차피 톰캣도 자바로 만들었으니 그냥 라이브러리처럼 내장하면 되는거 아닌가? 해서 진짜 안에다가 넣었다. 이제 main 메소드만 실행해도 톰캣 서버가 알아서 실행된다. 따로 설치할 필요가 없음. 이제 스프링도 연동해보자. 컨테이너 만들고 이 컨테이너를 디스패처 서블릿 만들어서 연결하고, 이 디스패처 서블릿을 톰캣에 연결한다. 이걸 실제로 운영하려고 웹 서버에 올리려고 한다. 그럼 앞서 해봤던 빌드해서 나온 걸 서버에 올리면 될거다. 빌드는 gradle에서 설정하여 만들자. 물론 jar를 실행하..

    스프링 부트 - 핵심 원리와 활용 - 섹션2. 웹 서버와 서블릿 컨테이너

    예전엔 스프링 실행하려면 서버를 만들고 빌드해서 나온 war 파일을 이 서버 위에 올려서 실행하는 거였다. 근데 부트가 나오면서 서버가 안으로 들어가 빌드해서 나온 jar 파일을 실행하기만 하면 즉, 그냥 main() 실행하면 알아서 안에 서버가 실행되고 빌드한 코드가 실행된다. 이렇게 자동으로 부트가 해주는 원리를 이해하기 위해 부트 없이 쌩으로 해보는거다. 톰캣을 다운받고 정말 boot가 아닌 종속성이 아무것도 없는 형태의 프로젝트를 실행한다. plugins로 war가 있어서 파일을 빌드한 뒤 나온 war를 톰캣에다가 줄거다. hello world를 보기위한 최소한의 코드만 작성해보자. 이제 빌드해서 war파일을 만든다. 그럼 플러그인에 war가 있기 때문에 war가 빌드 결과로 나온다. 압축을 풀 ..

    스프링 부트 - 핵심 원리와 활용 - 섹션1. 스프링 부트 소개

    섹션 0 섹션1 소개 스프링 프레임워크는 좋으나 점점 살이 붙으며 설정 자체가 어려워지게된다. 그래서 이걸 도와주는 스프링 부트가 2014년부터 생겨서 거의 필수가 됨.

    실전! Querydsl - 섹션6. 실무 활용 - 스프링 데이터 JPA와 Querydsl

    이제 순수 JPA대신 스프링 데이터 JPA와 querydsl를 같이 사용해본다. 커스텀해서 사용하려면 인터페이스다보니 좀 복잡하게 해야 한다. 주의할 점은 꼭 커스텀하고자 하는 인터페이스 이름 + Impl을 할 것. 스프링 규칙임. 페이징도 해보자. 간단하게 기본으로 주어지는거 사용하는것도 있고 직접 좀 해주는것도 있다. 기본으로 해주는거 Pageable로 해서 가져오면 count용 쿼리 한번 더 날리는거 생각하자. 복잡하게 total을 직접 정의하는 이유는, 기본으로 주어진 걸 쓰면 단순 total count 계산할 때도 join같은걸 하기 때문에 직접 정의하여 안하도록 최적화 하는거임. 아니면 첫 페이지가 끝이거나 마지막 페이지일 경우 총 total이 필요 없기 때문에 count를 날릴 필요가 없다...

    실전! Querydsl - 섹션5. 실무 활용 - 순수 JPA와 Querydsl

    이제 실제로 해볼거다 되는거 봤으니 이제 querydsl로 바꿔보자 JPAQueryFactory 생성하는거는 클래스 안에서 생성하거나 외부에서 생성하고 bean에 등록해서 주입받아 사용하거나 하면 된다. 선택의 문제임. 근데 외부에서 주입하는거면 하나의 인스턴스만 가지고 있는거일 텐데 멀티쓰레딩의 문제는 없냐? 없다. 트랜잭션 단위마다 실제로 생기는게 아니라 프록시가 생겨서~~~ 어쨌든 고민 안해도 된다. 자세한건 나중에 배우는 듯. 이제 동적쿼리를 해보자. 우선 builder 사용하기. 이제 함수 만들어 사용해보기 단 둘 다 동적쿼리일 때의 주의점은 where에다가 조건을 걸었으므로 모든 조건이 null이면 where가 없으니 그냥 from에 있는거 모두 불러온다. 그래서 느려질 수 있으므로 따로 조치..

    실전! Querydsl - 섹션4. 중급 문법

    이제 프로젝션 대상이 여러개인걸 해볼거다. select해서 받는거 여러개. 3개 이상부터 자주 쓰인다. 3개 이상부턴 보통 dto로 만들어서 처리하는 듯. jpql로 하면 저렇게 좀 길어지지만 querydsl로 하면 깔끔해진다. 근데 이것도 querydsl이 불러오는 방법이 3가지가 있는데, bean, fields, construct다. bean는 비어있는 생성자 사용, fields는 생성자 없이 그냥 필드 변수 바로 뿌려주고 (private로 되어 있어도 라이브러리가 뚫음), construct는 매개변수 있는 생성자 사용한다. 서브쿼리에서도 가능. 값이 비어있다면 as를 사용하자. 사실 저렇게 할 필요 없는 궁극의 방법이 있는데, @QueryProjection 어노테이션을 사용하는 것. 이걸 사용하려면..

    실전! Querydsl - 섹션3. 기본 문법

    기본 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before() { queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, t..

    실전! Querydsl - 섹션2. 예제 도메인 모델

    예제 도메인 전에 querydsl 설치는 현재 사용하는 spring boot 버전 검색해서 하면 그나마 잘 나온다.. 종속성 보면 qclass 만들어주는 apt 라이브러리와 실제 select등 함수 도와주는 jpa 라이브러리가 있다. 설정 파일에 querydsl 관련 설정 해준건 플러그인 때문에 그렇다. sql문도 추적하기 위헤 p6spy를 깐다.. 이제 섹션2 예제 도메인 모델

    실전! 스프링 데이터 JPA - 섹션7. 나머지 기능들

    나머지 기능들인 이유는 잘 안써서. 가끔 유용하게 쓰는 정도 - Specifications (명세) - Query By Example - Projections - 네이티브 쿼리 Specifications은 JPA Creteria인데 사용 금지. QueryDSL을 써라. query by example은 새로 생긴 data-jpa의 기능임. 객체를 넘겨줘서 찾는다. join을 하고싶으면 join을 하는 걸 같이 넣어줘야 한다. 또 null이 될 수 없는 기본 타입은 0이 되기 때문에 이건 무시하라고 조건을 내보내야 함. Projections 프로젝션 엔티티의 특정 속성만 불러오고 싶다면? 원래는 일단 객체 전체를 sql문으로 가져와서 그것을 가져오는 형식으로 했지만 원하는 속성 부분만 sql문 써서 가져오게..

    실전! 스프링 데이터 JPA - 섹션6. 스프링 데이터 JPA 분석

    JpaRepository를 사용하면 안의 실제 구현물은 어떤지 보는 시간 이런 findById니 findOne... 인 어쩌구 하는것들도 직접 EntityManager를 가져와 구현했듯이 다 똑같은 것들이다. 재밌는건 jpa에서 카운트 같은걸 자체 지원하지 않기 때문에 나름내로 알아서 sql문으로 구현한 모습 어노테이션이 @Repository와 @Transactional 두가지가 있는데 각각의 의미는 다음과 같다. @Repository는 안에 @Component가 있기 때문에 스프링한테 이걸 bean에다가 넣으라는 의미도 있지만, repository는 각각의 db들이 서로 실제 명령어들도 다르고 에러도 다르게 뜰 텐데 @Repository가 이걸 받아 일정한 에러로 변환시켜준다. @Transactiona..