📌 DDD설계와 SQL 중심 설계 도메인 주도 설계를 알려면 도메인이 무엇인가를 알아야 하는데, 도메인이란 소프트웨어로 해결하고자 하는 문제 영역을 의미한다. "e-book" 애플리케이션을 예로들면, "e-book" 자체가 도메인이 될 수 있고, 하위 도메인으로 될 수 있는 개념으로는 "책", "회원", "대출", "예약" 등이 있을 것이다. DDD 설계 DDD(Domain Driven Design)라고 부르는 도메인 주도 설계는, 이러한 도메인에 집중해서 설계를 하는 것이다. 어떤 도메인이 있는지 파악하고, 여러 하위 도메인들을 정의할 수 있다. 도메인에 집중해서 개발을 하면 서비스의 비즈니스 로직을 구현할 때 도메인 단위로 구현할 수 있다. e-book애플리케이션에서 "책"라는 도메인은 책목록을 조회..
Spring
데이터를 다룰 때 사용하는 용어라 Entity, DTO, VO를 많이 사용하는데, 각각의 차이에 대해 알고 있으면 좋을 것 같다. 📌 Entity란? 엔티티는 데이터베이스에서 사용하는 용어로 식별이 가능한 객체라는 의미를 가지고 있다. 관계형 데이터베이스의 테이블에서는 기본키를 통하여 식별 가능하도록 객체를 구별하고 있다. 또한 데이터베이스의 테이블과 매칭되는 클래스를 Entity 클래스 라고도 부른다. 아래처럼 스프링 프레임워크는 어노테이션을 통하여 데이터베이스 테이블과 매칭하도록 설정할 수 있는데, 이때 데이터베이스와 매칭되는 역할을 수행한다고 해서 이 클래스를 Entity클래스라고 부른다. @Entity public class Phone { @Id private Long id = 1; private..
📌 HTTP method란? HTTP method는 주어진 리소스에 대해 수행해 주기를 바라는 동작이다. 클라이언트가 HTTP method명시하고 서버에게 요청하면 서버는 해당 HTTP method 동작을 수행한다. 예를 들어 'GET /items' 는 "아이템목록들에 대한 정보를 조회하고 싶으니 정보를 가져와줘"라는 의미를 가지고 있다. 📌 HTTP method의 종류 서버는 필요한 HTTP method의 동작에 대해 구현할 수 있고, 별도로 HTTP method를 확장해서(커스텀해서) 사용할 수 도 있다. 아래는 대표적으로 사용하는 HTTP method의 종류이다. GET 서버에게 리소스 조회를 요청하기 위해 사용된다. POST 입력된 데이터를 서버에 전송하면, 서버는 해당 데이터를 처리한다. PUT..
📌 스프링 빈을 만드는 방법 2가지 스프링 컨테이너가 관리하는 객체를 스프링 빈이라고 한다. 스프링 빈으로 만들고, 스프링 컨테이너가 관리하도록 해보자. 스프링 빈을 만들려면 어떻게 해야 될까? 2가지 방법이 있다. @Component @Configuration + @Bean 1. @Component를 통해 Bean 등록하기 @RestController public class DemoController { @GetMapping(path = "/test") public String demo() { return "test"; } } // @RestController -> @Controller -> @Component 를 포함한다. @Target(ElementType.TYPE) @Retention(Retent..
📌 @Controller와 @RestController의 역할 스프링 환경에서 Controller를 구현해보자. Controller를 구현하기 위해서는 클래스에 @Controller와 @RestController을 붙여 줘야 한다. 두 컨트롤러는 요청이 들어오면 URL, HTTP Method에 맞게 메서들를 실행시켜 주는 역할을 수행한다. 두 어노테이션의 차이점을 보기 위해 어노테이션을 뜯어(?) 보았다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { @AliasFor(annotation = Component.class) String value(..
📌 레이어드 아키텍처 프로젝트를 패키지별로 구성할 때 Client -> Controller -> Service -> Repository -> DB 방식으로 구조화할 수 있다. 각각을 계층별로 분리했다고 하여 레이어드 아키텍처라고 불린다. 이렇게 계층별로 나눈 구조를 사용하는 이유는, 각각의 계층별로 핵식점인 역할을 담당하도록 해서, 자신이 담당한 역할에 집중할 수 있도록 하기 위함이다. 그렇다면 클라이언트와 DB 사이의 3계층에서는 어떠한 기능과 역할을 수행하는지 알아보자. Controller 컨트롤러 계층에 있는 클래스들은 Client(사용자)의 요청을 받고 응답해주는 역할을 수행한다. 사용자가 "나 핸드폰을 구매하고 싶어"라고 요청을 보냈다면, 컨트롤러 계층은 서비스 계층에 구현되어 있는 '핸드폰 구..
📌 DI란? 의존성 주입(Dependency Injection)은 외부에서 두 객체사이의 관계를 맺어준다는 의미이다. 이게 무엇이냐? // 필드 private Phone phone; // 생성자 public Person() { this.phone = new SamsungPhone(); } 위의 코드를 보면 Person클래스는 Phone타입의 필드를 가지고 있다. 이때 Person의 생성자에서 직접 new를 이용해 SamsungPhone()이라는 객체를 생성하고, 필드에 연결해주고 있다. 하지만 이렇게 하지 말고 아래처럼 외부에서(파라미터로) 전달받아 객체를 연결해 주는 것을 의존성 주입이라고 한다. // 필드 private Phone phone; // 생성자 public Person(Phone phone..
API와 REST API가 무엇일까? 이름은 비슷한 거 같은데 어떤 개념이고 어떻게 다르고 각각 어떠한 특징을 가지고 있는지 알아보자. 📌 API란? API는 Application Programming Interface의 약자로 이름에서 알 수 있듯이 두 개의 소프트웨어 프로그램 간에 인터페이스의 역할을 수행한다. 두 개의 프로그램은 정해진 통신 방법을 통해서 메시지를 주고받을 수 있다. 예를 들어 우리는 카카오지도라는 API를 통해서 특정 건물의 위치 정보를 알려달라고 카카오 지도 서버에 메시지를 보낼 수 있다. 반대로 카카오 지도 서버도 API를 통해 요청받은 건물의 위치정보에 대해서 우리에게 메시지를 보내줄 수 있다. 이렇게 서로에게 메세지를 보낼 수 있는 이유는 인터페이스라는 공통 규약이 존재하기..