본문 바로가기

분류 전체보기46

Clean Architecture (2) 지난 Clean Architecture 1편에서는 아키텍처의 사용 이유와 여러 사례들을 통해 어떻게 의존성을 제어하며, 단일 책임 원칙을 지켜나갈 것인지 살펴 보았다. 강사분은 위와 같은 원칙들을 지키며 Clean Architecture 를 구현한 하나의 인스턴스로 Hexagonal Architecture 를 소개하였다. 해당 Hexagonal Architecture 가 꼭 Clean Architecture 의 정답이 아닌 하나의 예시라고 강조하였다. 이제부터 Hexagonal Architecture 이 어떻게 앞서 설명한 원칙들을 지키며 Clean Architecture 의 하나의 인스턴스가 되는지 살펴보도록 해보자 Hexagonal Architecture Hexagonal Architecture 의 .. 2021. 9. 13.
Clean Architecture (1) 최근 DDD 와 같은 Architecture 에 대해 관심을 갖게 되었고, 관련해서 영상 하나를 추천 받아 시청하게 되었다. 영상은 Clean Architecture 에 대해 소개하고 있으며, 어떤 이유에서 Architecture 가 필요한지 설명해주었다. https://www.youtube.com/watch?v=cPH5AiqLQTo 해당 게시글은 위 영상 내용을 토대로 작성되었으며, 좀 더 관심 있으신 분들은 해당 영상을 보시길 적극 권장드린다. 아키텍처란 무엇인가? - Talk about what Architecture actually is 첫 주제는 아키텍처가 무엇이며, 왜 우리들은 아키텍처를 고민하는지에 대해 설명해주고 있었다. 사실 나 역시 아키텍처에 대해 들어보았지만, 무엇이냐는 질문에 정확한.. 2021. 8. 28.
HTTP 메서드 URI 설계 URI (Uniform Resource Identifier) 를 설계하는 데 있어 가장 중요한 부분은 바로 리소스 식별 이다. 그렇다면 리소스란 무엇인가? 가령 회원에 대한 API 설계 시 회원을 등록하고 수정하는게 리소스가 아니다 회원이라는 개념 자체가 바로 리소스인 것이다. 다시 정리하자면, URI 는 리소스만 식별할 수 있도록 설계하며, 해당 리소스를 대상으로 하는 행위와는 분리시켜 설계하여야 한다. 그렇다면 행위는 어떻게 구분을 짓는가? 특정 리소스에 대한 행위는 HTTP 메서드를 통해 구분지을 수 있다. HTTP 메서드 종류 GET POST PUT PATCH DELETE HEAD OPTIONS CONNECT TRACE GET 식별된 리소스 조회 서버에 요청하고자 하는 데이터는 Que.. 2021. 5. 22.
HTTP 기본 현재 HTTP 메시지에 모든 것을 전송 HTML, TEXT 이미지, 음성, 영상, 파일 JSON, XML (API) 거의 모든 형태의 데이터 전송 가능하며, 서버 간에 데이터를 주고 받을 때도 대부분 HTTP 를 사용한다. HTTP 역사 HTTP/0.9 1991 년 - GET 메서드만 지원, HTTP 헤더 없음 HTTP/1.0 1996 년 - 메서드, 헤더 추가 HTTP/1.1 1997년 - 현재 사용하는 대부분의 기능 지원 (가장 많이 사용) HTTP/2 2015년 - 성능 개선 HTTP/3 진행중 - TCP 대신에 UDP 사용 (성능 개선) HTTP/1.1 이 현재 가장 많이 사용되며 대부분의 기능들을 모두 제공하고 있다. HTTP/2 와 HTTP/3 는 성능 개선에 중점을 두고 있다. HTTP 기반.. 2021. 5. 13.
Querydsl 실무 활용편 (2) Spring Data Paging 활용 - Querydsl 페이징 연동 사용자 정의 인터페이스 추가 public interface MemberRepositorySupport { List search(MemberSearchCondition condition); Page searchPageSimple(MemberSearchCondition condition, Pageable pageable); Page searchPageComplex(MemberSearchCondition condition, Pageable pageable); } 사용자 정의 인터페이스에 페이징이 추가된 인터페이스를 정의한다. Simple 의 경우, 앞서 Querydsl 결과 조회에서 배웠던 fetchResult 를 사용하여 페이징 결과를 .. 2021. 5. 3.
Querydsl 실무 활용편 (1) 순수 JPA 와 Querydsl MemberJpaRepository @Repository @RequiredArgsConstructor public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public void save(Member member) { em.persist(member); } public Optional findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } public List findAll() { return em.creat.. 2021. 5. 2.
Querydsl 중급 문법 프로젝션과 결과 반환 - 기본 프로젝션이란 SELECT 대상을 지정하는 것을 의미한다. @DisplayName("프로젝션 대상이 하나인 경우") @Test void simpleProjection() { // given // when List result = queryFactory .select(member.username) .from(member) .fetch(); // then assertThat(result).isNotNull(); result.forEach(name -> System.out.println("name = " + name)); } @DisplayName("Tuple 사용 - 프로젝션 대상이 두 개 이상인 경우") @Test void tupleProjection() { // given /.. 2021. 4. 28.
Querydsl 기본 문법 기본 Q-Type 활용 Q클래스 인스턴스를 사용하는 2가지 방법 QMember member = new QMember("m");// 직접 별칭 주어 새롭게 생성하여 사용 QMember member = QMember.member; // 이미 생성된 인스턴스 사용 새롭게 생성하여 사용하는 경우엔 생성자 안에 별칭을 넣어 사용하면 된다. 그러나, 기본적으로 생성된 인스턴스를 사용하는 것을 권장한다. 실제 사용 시 관련 Q Class 를 static import 하여 사용하는 것을 추천 import static study.querydsl.entity.QMember.*; @DisplayName("QMember static import 하여 사용") @Test void querydsl() { // given: QMe.. 2021. 4. 26.
Querydsl 사용 개요 최신 백엔드 기술로는 주로 Spring Boot 와 Spring Data JPA 사용한다. 그렇지만, 복잡한 쿼리나 동적 쿼리에 대해서 불편함이 존재한다. 이러한 상황 속에서 마지막 퍼즐 조각처럼 사용할 수 있는 기술이 바로 Querydsl 이다. Querydsl 의 경우 다음과 같은 특징을 가진다. 쿼리를 자바 코드로 작성할 수 있도록 해준다. 그리고 이러한 경우 컴파일 시점에 문법적인 오류를 잡아낼 수 있다. 또한, 복잡한 쿼리 즉 동적 쿼리에 대해서 편의성을 제공해준다. 스프링 데이터 JPA + Querydsl 사용은 선택이 아닌 필수 관계형 DB 를 사용하며, 복잡한 핵심 비즈니스 로직을 개발하는데 있어 Querydsl 은 필수적인 기술이다. 이는 단순 반복 문제를 해결해주며, 쿼리를 자바 코드로.. 2021. 4. 25.
오브젝트 - 역할, 책임, 협력 앞서 살펴본 상속, 인터페이스를 통한 코드 재사용 및 다형성을 구현한 것은 객체지향 프로그래밍의 구현 측면일 뿐 핵심은 아니다. 객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력 이다. 객체지향은 요구사항을 충족시키기 위하여 적절한 객체들을 정의하고 각 객체에게 적절한 역할과 책임을 부여하여, 상호간 협력하는 공동체를 구성하는 것이다. 협력 협력은 객체지향 세계에서 기능을 구현할 수 있는 유일한 방법이다. 그리고 객체 간 협력을 위한 유일한 커뮤니케이션 수단은 메시지 전송(message sending)이다. 그리고 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다. 이때 메시지를 수신한 객체는 스스로 처리할 방법을 선택한다. (객체의 자율성) 여기서 자율적인 객체란 자신의 상태를 직접 관리하고.. 2021. 4. 24.