전체 글 82

인증, 인가, JWT (Json Web Token)

인증(Authentication) 사용자가 누구인지 확인하는 과정. 시스템이 사용자의 신원을 확인하려 할 때 필요하다. (ex) 로그인 과정에서의 사용자의 아이디와 비밀번호를 검사하는 것) 사용자가 아이디와 비밀번호를 입력하면 시스템은 해당 정보가 올바른지 확인한다. 올바르면 사용자가 누구인지 알 수 있다. 인가(Authorization) 이미 인증된 사용자가 특정 자원 또는 기능에 접근할 권한이 있는지 확인하는 과정. 모든 사용자가 모든 기능이나 정보에 접근할 수 있다면, 보안 위험이 된다. (ex) 일반 사용자가 관리자 페이지에 접근하는 것을 원하지 않을 것이다.) 사용자가 특정 기능 또는 페이지에 접근하려고 할 때, 시스템은 해당 사용자에게 그 기능을 사용할 권한이 있는지 확인한다. 회원가입과 로그..

[JAVA] 다형성, 동적 바인딩 예시

- 다형성이란 특징이 있기에 부모타입의 변수에 자식객체를 선언할 수 있다. - draw() 메서드 내에서 draw()를 호출할 때 Java는 어떤 메서드를 호출해야할 지 결정하는 과정에서 현재 객체의 타입을 기반으로 메서드를 결정한다. 이것은 컴파일 시간이 아닌 런타임에서 발생하고, 동적 바인딩이라고 한다. Parent c = new Child(); 변수 c는 Parent 타입의 참조 변수이지만 실제로는 Child 객체를 참조하고 있다. c.paint();를 호출할 때, Child 클래스의 paint()가 실행된다. 이 메서드 내 super.draw()가 호출되면, Parent클래스의 draw()가 호출된다. Child 클래스의 paint() 내에서 draw()를 호출할 때, Java는 c가 현재 참조하..

필터, 인터셉터, AOP 개념, 사용법

스프링 시큐리티를 공부하면서 필터와 인터셉터에 대해 정확히 알고 가야할 것 같다.. 필터(Filter) 서블릿에서 요청과 응답을 조작할 수 있는 객체. 서블릿 필터는 서블릿 컨테이너(ex)Tomcat)수준에서 동작한다. 주로 인코딩, 로깅, 보안 등의 작업을 처리한다. javax.servlet.Filter 인터페이스를 구현하여 사용한다. @WebFilter(urlPatterns = "/api/*") public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletExce..

[Spring] @RequiredArgsConstructor, @NoArgsConstructor, @AllArgsConstructor + @Data 어노테이션 정확히 알기

Lombok을 프로젝트의 의존성으로 추가하면, 해당 라이브러리에서 제공하는 어노테이션을 사용할 수 있게 된다. 이를 통해 많은 boilerplate 코드( 반복되는 코드)를 줄일 수 있다. @RequiredArgsConstructor, @NoArgsConstructor, @AllArgsConstructor는 예시를 들어 알아보았다. 아래와 같은 HotelRequestDto 클래스가 있다고 가정해보자. @Getter public class HotelRequestDto { private String name; private String type; private String address; private String contact; private String email; private int star; pri..

[JPA] dirty checking 더티체킹 간단 이해

JPA의 더티 체킹은 엔터티의 상태 변화를 감지하고, 이 변화를 데이터베이스에 자동으로 반영하는 기능이다. 따라서, JPA를 사용하면 엔터티의 데이터를 변경한 후 별도로 update 메서드를 호출할 필요가 없다. JPA의 영속성 컨텍스트가 관리하는 엔터티에 대해 변경이 감지되면, 해당 트랜잭션이 커밋될 때 변경 사항을 데이터베이스에 반영하는 것이다. 예시로 EntityManager를 사용한 순수JPA와 JpaRepository 인터페이스를 사용한 Spring Data JPA 이렇게 2가지를 기준으로 비교해보았다. EntityManager를 사용한 순수JPA 아래 코드를 보면 findById로 단건 조회를 한다. 단건조회 한 값은 Hotel 엔터티에 담는다. requestDto의 값을 단건조회 시에 담았던..

[JAVA] Logging Framework / Slf4j

[INDEX] System.out.print 와 로깅 프레임워크(log) 차이점 로깅 프레임워크 개념 / 기능 로깅 프레임워크 종류 SLF4J (Simple Logging Facade for Java) 로그 레벨 (자주 사용되는 5가지) System.out.print 와 로깅 프레임워크(log) 차이점 6가지 1. 성능 System.out.print는 동기적으로 동작하며 출력 스트림에 바로 메시지를 쓰게 된다. 이로인해 성능 저하가 발생할 수 있다. 로깅 프레임워크는 대개 비동기적 방식으로 동작하여 성능 저하를 최소화한다. 2. 출력 대상 제어 System.out.print는 표준 출력 스트림에만 메시지를 출력한다. 로깅 프레임워크를 사용하면 메시지를 파일, 데이터베이스, 원격 서버 등 다양한 대상에 출..

[DB] 이상현상, 정규화, 정규화 단계, 반정규화

[Index] 이상현상 정규화, 정규화 단계 반정규화 정규화 종류 이상현상 삽입 이상 (Insertion Anomaly) 새로운 데이터를 추가하기 위해 불필요한 데이터도 함께 삽입해야하는 상황. ex) 특정 학생이 수강하는 과목 정보를 저장하는 테이블에서, 아직 수강한 과목이 없는 새 학생의 정보를 추가하려면 과목 정봉가 없는 상태로도 데이터를 추가해야하는 문제가 발생 삭제 이상 (Deletion Anomaly) 어떤 데이터를 삭제할 때, 의도하지 않은 다른 중요한 데이터까지 함께 삭제되는 상황. ex) 학생과 그 학생이 수강하는 과목 정보를 동일한 테이블에 저장하고 있을 때, 특정 과목을 수강한 마지막 학생의 정보를 삭제하면 그 과목에 대한 정보까지 모두 삭제되는 문제가 발생. 갱신 이상 (Update..

EntityManager(순수 JPA) vs JpaRepository(Spring Data JPA)

EntityManager를 사용해서 간단히 만들어보면서 JpaRepository 상속받아서 만드는 것이랑 어떤 점이 다른지 궁금해져서 알아보았다. EntityManager와 JpaRepository를 사용하는 두 가지 일단 두가지 접근 방법은 데이터 엑세스에 있어서 다르게 동작한다. 이 두 방법의 차이점은 순수 JPA와 Spring Data JPA의 차이점을 대표하는 것이기도 하다. EntityManager (순수 JPA) 직접적인 제어 : EntityManager는 JPA의 핵심 클래스로, Entity의 생명주기를 관리한다. 이를 통해 Entity를 영구 저장소에 저장하거나 검색하는 등의 작업을 수행할 수 있다. 유연성 : EntityManager를 사용하면 JPA를 더 세밀하게 제어할 수 있다. 복잡..

[SpringBoot] application.properties 무엇인가

[Index] application.properties 개념 application.properties 역할 application.propertires 예시 application.yml 개념 (properties와 차이점) application.properties 개념 스프링 부트 어플리케이션의 환경 관련 설정을 담고 있는 속성 파일. 스프링 프레임워크에서 제공하는 다양한 구성 옵션뿐만 아니라 개발자가 정의한 사용자 지정 속성도 포함될 수 있다. Key-Value 형식의 프로퍼티 파일 application.properties 역할 데이터베이스 연결 : 데이터베이스 연결 정보, 드라이버 클래스, JPA 설정 등을 정의한다. 서버 설정 : 포트 번호, 컨텍스트 경로, SSL 설정 등의 서버 관련 설정을 정의한..

[SQL] DDL DML DCL 개념

SQL Structured Query Language 관계형 데이터베이스에서 데이터를 조작하고 질의하기 위한 표준 프로그래밍 언어 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서 지원되며, 데이터베이스 간의 데이터 조작 및 구조 정의의 표준화를 목표로 개발되었다. (각 RDBMS 제품마다 특별한 확장 기능이나 문법의 차이는 있다.) 선언적 언어. "어떻게"가 아닌 "무엇을"에 중점을 둔 프로그래밍 언어. 원하는 결과에 대한 명세만 제공하면 시스템이 그 명세에 따라 작동하는 방식. 사용자는 특정 작업을 수행하는 방법을 자세히 지시하는 대신 원하는 결과의 기능이나 특성만을 정의. 사용자가 원하는 결과를 얻기 위해 수행해야 할 구체적인 단계와 연산을 지정해야하는 절차적 언어와 반대. SQL은 선언적 ..

[Java] Optional 클래스

Optional : 선택적인 객체를 편리하기 처리하기 위해 만든 클래스. null을 직접 다루는 대신에 사용할 수 있는 wrapper 클래스. 즉, 객체가 null일 가능성이 있을 때, Optional로 감싸서 NullPointerException 같은 런타임 예외 없이 안전하게 코드를 작성할 수 있다. Optional은 주로 "결과가 있을 수도, 없을 수도 있는" 단건 조회에서 사용됩니다. public final class Optional extends Object { } 클래스에 final이 붙어있으니 해당 클래스를 더 이상 상속할 수 없다. Optional을 사용하는 것이 항상 좋은 것은 아니다. Optional의 주 목적은 메서드가 반환할 결과값이 "없을 수도 있음"을 API설계에서 명시적으로 나..

[Java] Generic(제네릭) 개념과 예시

실수를 방지하기 위한 제네릭. T: 구체적인 하나의 타입 (클래스, 인터페이스, 메서드에서 일반적으로 사용) ?: 알 수 없는 모든 타입 (일반적으로 메서드 매개변수에서 사용) ? extends T: T의 하위 타입 (일반적으로 메서드 매개변수에서 사용) ? super T: T의 상위 타입 (일반적으로 메서드 매개변수에서 사용) 제네릭은 타입 형 변환에서 발생할 수 있는 문제점을 "사전"에 없애기 위해 만들어졌다. "사전"이라고 하는 것은 실행 시에 예외가 발생하는 것을 처리하는 것이 아니라, 컴파일할 때 점검할 수 있도록 한 것을 말한다. 제네릭을 사용하지 않을 때는 아래와 같이 형 변환을 해야만 했다. (Object 클래스는 모든 클래스의 부모 클래스이기 때문에) 이렇게 될 경우 dto2의 인스턴스 ..

@Transactional 무엇인가

@Transactional이란? 이 어노테이션은 Spring Framework에서 트랜잭션 관리를 쉽게 도와주는 도구이다. 메서드나 클래스에 적용하면 해당 메서드 또는 클래스에서 실행되는 데이터베이스 작업이 하나의 트랜잭션으로 관리된다. transaction이란? 데이터베이스에서 일련의 작업을 묶어 하나의 단위로 처리하는 것이다. 트랜잭션은 여러 개의 연산을 포함할 수 있는데, 이 모든 연산이 성공해야 트랜잭션도 성공한 것으로 간주된다. 만약 하나라도 실패한다면 전체 트랜잭션을 취소(롤백)한다. 게시판을 예시 1) 게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다. 2) 그러면 글 올리기가 처리되고 자동으로 다시 게시판에 돌아오게 된다. 3) 게시판에서 자신의 글이 포함된 업데이트된 게시글들을 볼..

[build.gradle] dependencies { implementation, testImplementation, runtimeOnly, compileOnly, annotationProcessor } 개념

아래의 키워드들은 implementation, testImplementation, runtimeOnly, compileOnly, annotationProcessor 각각 프로젝트의 빌드 및 배포 단계에서 어떤 의존성이 필요한 지를 선언하는 방법이다. 각 키워드들을 알아보기 전에 컴파일 타임과 런 타임에 대해서 알아보았다. 컴파일 (Compile Time) 무엇인가: 소스 코드를 기계가 이해할 수 있는 바이너리 코드(예: .class, .exe, .o 등)로 변환하는 과정. 목적: 코드에 문법적 오류가 없는지 확인하고, 모든 변수와 함수, 클래스 등이 올바르게 참조되고 있는지 검사. 언제 발생하는가: 개발자가 코드를 작성한 후, 컴파일 명령을 실행했을 때 발생. 예시: Java에서 javac 명령어를 사용..

ResponseEntity 사용이유, 개념, 예시

ResponseEntity 사용이유 @RestController는 별도의 View를 제공하지 않은 채 데이터를 전달한다. 따라서, 전달 과정에서 예외가 발생할 수 있다. 이 예외에 대해 좀 더 세밀한 제어가 필요한 경우 ResponseEntity 클래스를 사용한다. 이 클래스 타입을 반환값으로 사용하여 HTTP 응답을 세밀하게 제어하는 것이다. 덧붙이자면, 기본적인 SpringMVC의 컨트롤러 메서드에서는 단순히 객체나 데이터만을 반환하면, Spring이 이를 HTTP 응답으로 자동 변환해주지만, 이 경우에는 HTTP 상태 코드가 항상 200 OK로 설정되고 헤더 설정이나 다른 HTTP 응답 관련 세밀한 제어가 어렵기 때문에 ResponseEntity를 사용하는 것이다. ResponseEntity를 사용..

HTTP 개념, 특성, 구조 - 기본적인 정리

일단 HTTP를 쓰지 않으면 브라우저에서 통신을 할 수가 없다. HTTP란? HyperText Transfer Protocol. 웹에서 데이터를 전송하는 프로토콜. 클라이언트-서버 모델을 기반으로 하며, 클라이언트는 주로 웹 브라우저이고 서버는 웹 서버이다. 클라이언트와 서버 간에 데이터를 어떻게 주고받을 것인지에 대한 규칙을 정의한다. HTML 문서를 교환하기 위해 만들어진 프로토콜(통신규약). 웹의 여러자원(HTML문서, 이미지, 비디오 등)을 URL이라는 주소를 통해 식별한다. HTTP를 사용하여 클라이언트는 여러한 자원을 요청(request)할 수 있고 서버는 해당 자원을 응답(response)으로 돌려준다. HTTP특성 - 무상태 프로토콜 Stateless : 무상태 상태 비저장 프로토콜. 클라..

[JAVA] 자바는 다중상속을 지원하지 않는다?

자바에서는 ① 일반클래스와 추상클래스가 다른 일반 클래스와 추상클래스와의 다중상속이 불가능하다. (단일상속만 가능) ② 하나의 인터페이스가 다른 인터페이스들과의 다중상속은 가능하다. 그리고 ③ 일반클래스, 추상클래스가 인터페이스를 구현할 때는 다중구현이 가능하다. ( 이때 일반클래스의 경우에는 단일 구현, 다중 구현일 때 모두 인터페이스에 있는 추상메서드들을 모두 오버라이드해야한다. 추상클래스의 경우에는 필요한 추상메서드들만 오버라이드하여 사용하면 된다. ) ** cf) ②, ③이 가능한 이유는 인터페이스는 구체적인 구현이나 상태(필드)를 포함하지 않기 때문에, 여러 인터페이스를 상속받거나 여러 인터페이스를 구현하는 것은 문제가 되지 않는다. 키워드로 다시 정리하자면, [ 다중상속 ] 다중상속은 한 클래..

트랜잭션 무엇인가

데이터베이스 작업의 일련의 연산들을 하나의 논리적인 작업 단위로 묶은 것을 말한다. 트랜잭션의 핵심은 "모든 것이 성공적으로 처리되거나 아무 것도 처리되지 않아야 한다"는 원칙이다. 데이터베이스 작업을 안전하고 신뢰성 있게 처리하기 위한 매커니즘이다. 이러한 특성 덕분에 여러 사용자나 애플리케이션에 데이터베이스에 동시 접근하더라도, 데이터의 일관성과 정확성이 유지된다. 트랜잭션의 특성은 ACID라는 4가지 속성으로 요약된다. 원자성(Atomicity) 트랜잭션의 모든 연산이 성공적으로 수행되거나 아니면 하나도 수행되지 않아야 한다. ex) 은행 계좌 이체 작업을 생각해보면, 돈을 보내는 계좌에서 차감하는 작업과 받는 계좌에 입금하는 작업이 모두 성공하거나, 둘 다 실패해야한다. 일관성(Consistenc..

[JAVA] extends(상속), implements(구현) 쉽게 정리

나만의 언어로 정리해 본 상속과 구현. 이제 정확히 이해하고 프로젝트에 접목시킬 수 있게 될 것이다. 1) 하나의 클래스가 하나의 인터페이스를 implements(구현)할 때는 인터페이스에 있는 추상메서드를 꼭 오버라이드해야 한다. (또한, 하나의 클래스가 여러 개의 인터페이스를 구현하는 것 즉, 다중 구현도 가능하다.) 2) 하나의 클래스가 하나의 인터페이스를 extends(상속)받는 것은 이 세상에서 존재하지 않는다. 3) 하나의 클래스가 하나의 클래스를 extends(상속)받을 때는 메서드 전부를 오버라이드를 하지 않아도 되고, 필요한 메서드만 오버라이드해서 사용할 수 있다. 4) 하나의 클래스가 하나의 클래스를 implements(구현)하는 것은 존재하지 않는다. 5) 하나의 인터페이스가 하나의 ..

프로젝트 패키지 구조 (기능 / 계층)

mapper와 jpa 혼용 프로젝트로 진행하려고 하는데 그러려면 나부터 헷갈리지 않게 명확히 구분할 필요를 느꼈다. 패키지부터 다시 정리하려는데 찾아보니 레이어 우선과 모듈 우선이 있었다. 모듈우선 (기능) 기능별로 패키지를 분리. ex) product, order, user 와 같이 패키지를 분리. 장점 도메인 중심의 설계 : 도메인 주도 설계 (DDD)와 같은 접근법과 잘 어울린다. 독립적인 개발 : 각 모듈은 상대적으로 독립적이므로 병렬 개발이 용이하다. 높은 재사용성 : 특정 기능이나 서비스를 다른 프로젝트나 모듈에서 재사용하기 쉽다. 단점 순환 참조 위험 : 모듈 간의 잘못된 의존 관계 설정으로 인해 순환 참조의 위험이 있다. 관리 복잡성 : 큰 프로젝트에서는 모듈의 수가 많아져 관리가 복잡해질..

웹 용어 정리

웹 서비스(Web Service) 웹 기반의 인터페이스를 통해 다른 컴퓨터나 디바이스들이 통신하거나 상호 작용할 수 있도록 만들어진 서비스. 일반적으로 API형태로 제공되며, XML이나 JSON형식으로 데이터를 주고 받는다. ex) 날찌 정보 제공 웹 서비스 (특정 위치의 현재 날씨나 예보 정보를 제공하는 API), Google Maps API (웹 사이트나 어플리케이션에 지도 기능을 추가하기 위한 서비스), 결제 시스템 API (온라인 결제를 처리하는 웹 서비스) 웹 시스템(Web System) 웹 기반의 응용 프로그램이나 시스템 전체를 의미한다. 사용자와의 상호작용을 중심으로 구축된 웹 사이트나 웹 어플리케이션을 포함할 수 있으며, 백엔드 시스템과 데이터베이스도 포함될 수 있다.ex) 온라인 쇼핑몰,..

Docker? 가상화? 리눅스? 클라우드 서비스? 커널? 이해

우리는 개발을 마친 후 다양한 사용자들이 사용할 수 있게 해야한다. 그게 우리가 이 어플리케이션을 만든 목적이다. 근데 어플리케이션이 어디엔가 공유가 되어야 모두가 사용할 수 있을 것이다. 그건 어떻게 해야하는 걸까? ==> 간단한 흐름은 아래와 같다. 1. 어플리케이션과 그 종속성을 Docker컨테이너로 패키징한다. ( 어플리케이션 : 우리가 작성한 코드, 예를 들면 웹 서버, API, 데이터 처리 로직 등의 구현된 코드 종속성 : 그 구현된 코드 실행에 필요한 외부 라이브러리, 프레임워크, 또는 다른 어플리케이션에 필요한 모듈.(ex) Java로 개발된 웹 어플리케이션의 경우 Spring 프레임워크, JPA 또는 외부 라이브러리 등을 그 종속성에 포함할 수 있다.) Docker 컨테이너로 패키징 : ..

MyBatis 파라미터 바인딩 방법 2가지

1. #{ } 사용 prepared statement를 사용하여 값을 바인딩하며 SQL Injection의 위험을 줄인다. 그러나, 'LIKE' 절의 와일드카드와 함께 사용하면 예상대로 작동하지 않을 수 있다. 2. ${ } 사용 문자열 치환을 사용하여 값이 직접 SQL문에 삽입된다. 따라서 SQL Injection의 위험이 있다. 그러나, 이 경우 'LIKE'절의 와일드카드와 함께 잘 작동한다. 예제 어떠한 값을 조회하는 sql이 있다. 조건으로 와일드카드가 값 내부에 포함된다면 MyBatis는 해당 위치의 바인딩 파라미터인 #{ } 를 올바르게 인식하지 못한다. Parameter index out of range (1 > number of parameters, which is 0). 이러한 오류가 발..

[Spring] 의존성 주입(DI) 개념, 설정, 사용법

[Index] ▷ 의존성 주입 (DI)란? ▷ 의존성 주입을 위한 설정 (DI 컨테이너에 Spring Bean(객체)을 등록하기 위한 설정) ▷ 의존성 주입 사용 방법 (DI를 통해 만들어진 객체를 다른 클래스에서 사용하는 방법) ▷ 사용 방법 중 어떤 방법이 가장 권장되는 방법이고, 그 이유는 무엇일까? 의존성 주입 (DI)란? 우리는 스프링프레임워크나 스프링부트 프로젝트를 하게되면 스프링의 특성을 사용하게 된다. 그 중 중요한 특성인 DI에 대해 설명하려한다. DI (Dependency Injection) : 의존성 주입. (필요한, 원하는 객체 알아서 주입해줘.) [의존성 주입에 대한 예시] A클래스 내에서 B클래스 사용이 필요하게 될 때, 우리는 'A클래스가 B클래스를 의존한다' 라고 표현한다. ..

[HTTP Method] 8가지 개념

REST API를 공부하며 Client는 Server에게 URI로 요청할 때, 어떠한 용도(ex) 조회/생성/수정/삭제)로 쓰기 위한 건지를 나타내준다는 것을 알게 되었다. 따라서, 자원(Resource)에 대한 다양한 행동을 HTTP Method로 정의한다는 것이다. HTTP Method의 종류와 간단하게 개념을 살펴보았다. 각 Method는 특정한 의도에 따라 사용되며, 이는 RESTful 서비스의 설계와 구현에서 중요한 원칙 중 하나이다. GET 자원을 조회하는 데 사용된다. URI에 포함된 정보를 기반으로 자원을 가져온다. 안전하며 멱등성을 갖는다. * 멱등성이란? 한 번 이상 같은 요청을 해도 동일한 결과가 나오는 성질 POST 새로운 자원을 생성하거나 데이터를 제출할 때 사용된다. 서버의 상태..

[REST API] 개념, 특징, URI 규칙 이해하기

▶ REST API 개념 ▶ REST 구성 요소 ▶ REST 특징 ▶ REST API URI 설계 규칙 ▶ REST API, RESTful 차이점 REST API 개념 REpresentational State Transfer 직독직해하면 표현적인 상태 전송인데... 인터넷을 통한 웹 API를 위한 표준 가운데 하나. (사실상 웹 API의 표준이라 할 수 있다.) 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다. 리소스와 HTTP메서드를 중심으로 웹 서비스를 설계하는 웹 기반의 아키텍처 스타일. 아키텍처 스타일이라는 건 시스템 구축을 위한 지침과 원칙의 집합이라는 말. 시스템의 전체 구조와 그 구조의 원칙을 정의한다. 웹 시스템을 설계할 때 어떻게 리소스를 표현하고, 어떤 메서드로..

MVC 패턴 쉽게 이해하기

Index ▷ 순수자바로 만든 MVC 패턴 ▷ 스프링 MVC 패턴 (thymleaf, jsp 등과 같이 HTML템플릿 사용의 경우) ▷ 스프링 MVC 패턴 (백엔드와 프런트가 아예 나뉘어 있는 경우) 어려워했던 이 흐름을 타파하고자 직접 그림을 그려보았다. 순수자바로 만든 MVC 패턴 스프링 MVC 패턴 (Thymleaf, JSP와 같이 HTML 템플릿을 사용하는 경우) 스프링 MVC 패턴 (백엔드와 프런트가 나뉘어 있는) * 개인 공부 중 기록해봅니다.

Controller ▷ Service ▷ Repository 단계 이해하기

[index] ▷ Cotroller ▷ Service ▷ Repository ▷ 사용 예제 DDD(Domain-Driven Design)를 사용하면서 일반적으로 만나게 되는 아키텍처의 주요 구성 요소인 Controller, Service, Repository의 역할을 공부할 것이다. cf) 기본적으로 MVC패턴에서의 Model 부분은 도메인 로직과 데이터 액세스를 다룬다. 도메인 로직은 Service로 나타내고 데이터 액세스는 Repository로 나타낸다. Controller 단어 그대로 제어하는 것. DDD에서 제어를 담당하는 역할에 대한 클래스 명칭이다. Client와 View와 Model 사이에서 데이터의 흐름에 대해 제어해주어, Controller를 제외한 Client, View, Model이 ..

Entity, Domain, DTO, VO, DAO, Repository 정리

[Index] ▷ 내가 아는 방식 ▷ Entity ▷ Domain ▷ DTO ▷ VO ▷ DAO ▷ Repository ▷ Entity, Domain, DTO, VO, Repository 비교 내가 아는 방식 RequestDto, ResponseDto, ModelDto 이렇게 설정해놓고 아주 간단한 crud api만 만드는 작업을 해봤다. RequestDto는 클라이언트로부터 받은 json형태의 값을 자바로 저장해 놓는 공간. ResponseDto는 DB 조회로 부터 받은 값을 저장해 놓는 공간. ModelDto는 Mapper 인터페이스와 sql.xml과의 소통을 위해 쓰는 공간. RequestDto 즉, 클라이언트로부터 받은 값을 놓는 공간에 잇는 값들을 ModelDto로 넣어주고, 그 ModelDto..