본문 바로가기

Development/Spring

의존성 주입(DI) 방법 정리 의존성 주입(Dependency Injection, DI)은 클라이언트가 의존할 대상을 외부에서 지정해 주는 것을 말한다. 이를 통해 클라이언트의 코드 변경 없이 다형성을 구현할 수 있다. 의존성을 주입하기 위해서는 먼저 용도에 따라 클래스에 @Controller, @Service, @Repository, @Component, @Configuration과 같은 Bean을 등록하기 위한 annotation을 부여해야 한다. IoC(DI) Conatainer는 해당 annotation이 부여된 객체들을 관리하며 클라이언트 대신 생성하고, @Autowired가 명시된 클라이언트의 field, constructor, method에 주입한다. @Repository public class MenuRepository.. 더보기
REST API의 URI 설계 기본 규칙 일반 규칙 1. URI의 마지막에는 /를 포함하지 않는다. ex) http://localhost:8080/items (O) http://localhost:8080/items/ (X) 2. _ 대신 -를 사용한다. ex) http://localhost:8080/company-name (O) http://localhost:8080/company_name (X) 3. 행위가 아닌 목적(리소스)을 지칭해야 한다. 리소스를 URI에 mapping하여 식별한다. 행위는 HTTP method를 통해 표현(representations)한다. 단, HTML FORM을 통한 컨트롤 URI를 사용할 때는 예외로 한다. ex) http://localhost:8080/members/8 (O) ex) http://localhos.. 더보기
REST API 특징 정리(https://restfulapi.net 참고) API(Application Programming Interface)는 소프트웨어 간 데이터를 전송해 주는 인터페이스로서, 서버의 구조와 프로세스에 대한 이해가 없는 클라이언트 사용자도 서버를 이용할 수 있도록 중개 역할을 해 준다. API는 관심사를 분류하는 리소스와 행위를 담당하는 HTTP method를 모두 포함하고 있다. REST(REpresentational State Transfer) API는 REST 구조를 따르는 인터페이스로 화면의 출력구조를 포함하지 않고, 화면을 구현하는 데 사용될 데이터만 전달하는 API를 뜻한다. 이하의 내용은 https://restfulapi.net/ 의 내용을 참고(사실상 사용)하여 작성했다. 해석 과정에서 의역이 많이 들어갔기 때문에 원문과 많이 달라질 수 있다.. 더보기
spring framework에서 사용하는 주요 annotation 정리 annotation은 외부 소프트웨어에 처리 내용을 전달하는 방법이다. 기본적인 annotation으로는 다음과 같은 것들이 있다(대부분 Lombok 필요). @SpringBootApplication spring boot 프로젝트를 사용할 때 spring boot 애플리케이션의 실행 클래스임을 지정하는 annotation이다. 실행 클래스이므로 main method가 필요하다. @Data class에 부여해, 모든 field에 대해 Getter와 Setter 메소드를 자동 생성해 준다. Getter와 Setter 외에도 여러 가지를 자동으로 생성하기 때문에, 도메인 등 핵심이 되는 객체에는 사용하기 적합하지 않다. @Getter class에 부여해, 모든 field에 대해 Getter 메소드를 자동 생성.. 더보기
HTTP method의 개념과 종류 정리 개념 HTTP(HyperText Transfer Protocol) method는 요청과 응답 과정에서 resource(자원)를 전달해 주는 URI와 함께 행위를 전달하는 역할을 한다. 클라이언트 / 서버, 서버 / 서버 간 전송에서 이용한다. HTTP 메시지를 통해 HTML파일, 텍스트파일, 영상파일 등 대부분 형태의 데이터를 전송 가능하다. HTTP 메소드는 @RequestMapping, @메소드명Mapping 등을 통해 handler method와 URL 주소를 매핑한다. 클라이언트가 특정 URL을 입력하면 HTTP 메소드를 통해 해당 URL에 매핑된 handler method가 호출되어 요청을 전달하고, 응답을 되돌려 줄 view의 이름을 지정한다. 응답을 view에서 html파일 등의 방식으로 시.. 더보기
DDD 기반의 AOP에서 비즈니스 로직이 가지는 의미 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)에서 중심적 관심사(Primary Concerns)는 횡단적 관심사(Crosscutting Concerns)와 대비되는 개념으로, 중심적 관심사는 해당 소프트웨어의 존재 목적으로서 소프트웨어를 통해 해결하고자 하는 현실세계의 문제를 뜻한다. DDD(Domain Driven Design, 도메인 주도 설계)를 통해 중심적 관심사를 도메인(영역) 별로 분류하고, 각각의 도메인을 해결하기 위한 의사결정을 수행하는 로직이 비즈니스 로직이다. 반면 중심적 관심사의 원활한 처리와 가공을 위한 횡단적 관심사의 반복적인 처리는 최소화하기 위해, annotation(외부 소프트웨어에 처리 내용을 지시하는 명령)을 활용하여 최대한 spring.. 더보기
DDD에서 Controller, Service, Repository의 역할 Layered Architecture는 애플리케이션의 컴포넌트(component, 구성요소)들을 계층(layer) 별로 나눈 구조이다. 일반적으로 presentation layer(Controller 컴포넌트가 속함), business(service) layer(Service 컴포넌트가 속함), data access layer(Repository 컴포넌트가 속함)의 세 개의 계층으로 나뉜다. 설계에 따라 네 개의 계층으로 나뉘기도 하고, Service와 Repository 컴포넌트가 함께 domain layer에 속하기도 한다. 이렇게 계층별로 나뉘는 구조의 대표적인 특징은 다음과 같다. 각 계층은 자신의 바로 하위 계층의 의존성을 주입받는다. 상위 계층에서 하위 계층으로만 접근이 가능하고, 역으로는 접.. 더보기
DDD(Domain Driven Design)에서 Entity, DTO, VO 비교 Entity Entity는 주로 데이터베이스의 테이블과 매핑되는 객체다. 값이 쉽게 변경되면 객체의 일관성이 유지되지 않으며 다른 객체들에도 영향을 끼치게 되므로, Setter가 아닌 생성자를 사용하는 것이 바람직하며 데이터 전송용으로는 적합하지 않다. Entity는 Business layer에 속하지는 않지만, 도메인에 관계되는 일부 복잡한 로직은 DDD의 Rich Model 개념에 의거하여 Entity에서 구현할 수도 있다. 이는 Entity가 스스로의 상태를 관리하기 위함이다. 하지만 이것이 주 목적은 될 수 없으며, 기본적으로는 데이터베이스의 조작을 수행하기 위한 매개체로서 기능한다. Entity 객체는 식별성을 가지고 있으므로, 반드시 식별자(ID)를 포함해야 한다. @Entity @Getter.. 더보기