개념 스터디

    스프링부트 구조 Controller, Service, DAO, Repository, DTO, Entity

    스프링부트의 구조와 요청 흐름은 이러하다. 위 사진처럼 회사나 개발 그룹 규정에 따라 서비스와 DAO 사이에서 엔티티로 데이터를 전달하는 것을, 아래 사진처럼 DTO로 전달하기도 한다 💡 Controller 컨트롤러는 클라이언트로부터 요청을 받고 해당 요청에 대해 서비스 레이어에 구현된 적절한 메소드를 호출해서 결괏값을 받는다. 클라이언트로부터 들어오는 HTTP 요청을 받아서 처리하고, 그에 따른 결과를 HTTP 응답으로 반환하는 역할을 한다. @RestController @RequestMapping("/product") public class ProductController { private final ProductService productService; @Autowired public Product..

    엔티티 매니저? 영속성 컨텍스트?

    💡 엔티티 매니저 팩토리 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장이다. 공장을 만드는 비용이 크기 때문에 애플리케이션 전체에 1개만 만들어서 공유하도록 설계되어 있다. 다음은 엔티티 매니저 팩토리를 생성하는 코드다. EntityManagerFactory = Persistence.createEntityManagerFactory("jpabook"); 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 다른 스레드 간에 공유해도 된다 💡 엔티티 매니저 엔티티 매니저는 엔티티를 관리하는 관리자로 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 다음은 엔티티 매니저를 생성하는 코드다. EntityManager em = emf.createEntity..

    JPA? ORM? 하이버네이트?

    💡 ORM 등장 배경 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 이로 인해 객체 모델과 관계형 모델 간에 불일치가 존재한다. 객체 모델과 관계형 모델 간의 불일치 사이에서 개발자는 SQL문을 사용하여 두 모델 간의 차이를 메웠지만 객체 모델링을 SQL로 풀어내는데 너무 많은 코드와 노력이 필요하다. 이러한 문제를 해결하기 위해 ORM이 등장하였다. 💡 ORM이란 ORM은 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제와 제약사항을 개발자 대신 해결해준다. 💡 JPA JPA는 Java Persistence API의 약자로 자바 ORM 기술에 대..

    MVC

    💡MVC 패턴이란 MVC는 소프트웨어를 Model, View, Controller라는 3가지 구성 요소로 구분한 개발 방법론으로 사용자 인터페이스, 데이터 및 논리 제어를 구현하기 위해 사용되는 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두며 이를 통해 더 나은 업무의 분리와 향상된 관리를 제공한다. MVC 웹 프레임워크를 사용하는 대표적인 프레임워크는 스프링, 장고 등이 있다. 💡Model Model은 소프트웨어나 애플리케이션에서 정보 및 데이터 부분을 의미한다. 이는 Controller에게 받은 데이터를 가공하는 역할을 수행한다고 볼 수 있다. 💡View View는 입력값이나 체크박스 등과 같은 사용자 인터페이스 요소를 나타낸다. 이는 Controller에게 받은 Mode..

    REST API

    💡REST란? REST는 Representational State Transfer의 약자로 자원에 이름을 규정하여 행당 자원의 상태를 주고받는 것을 의미한다. 즉 REST란 HTTP URI를 통해 자원에 이름을 규정하고 HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다 CRUD Operaion Create : 데이터 생성(POST) Read : 데이터 조회(GET) Update : 데이터 수정(PUT, PATCH) Delete : 데이터 삭제(DELETE) 💡REST의 특징 유니폼 인터페이스 어떤 프로그래밍 언어인지 상관없이 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호..

    레이어드 아키텍처

    💡레이어드 아키텍처 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다. 레이어드 아키텍처는 어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다. 💡프레젠테이션 계층 애플리케이션의 최상단 계층으로, 클라이언트의 요청을 해석하고 응답하는 접점 역할 UI나 API를 제공 프레젠테이션 계층은 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행한다 상황에 따라 유저 인터페이스(UI) 계층이라고도 한다 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할 💡비즈니스 계층 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행한다..

    관점 지향 프로그래밍(Aspect Oriented Programming, AOP)

    💡관점 지향 프로그래밍 등장 배경 프로그래밍을 하다보면 공통적인 기능이 많이 발생하는데 이러한 공통 기능을 모든 모듈에 적용하기 위해선 상속을 이용한다. 하지만 Java에서는 다중 상속이 불가능하며 상속만으로 공통 기능을 부여하기에는 한계가 있다. 예를 들어, 객체마다 핵심 기능을 수행하기 위한 로직과 함께 로깅, 트랜잭션 등의 코드가 있는데 로깅과 트랜잭션 코드는 객체마다 동일한 기능을 수행할 확률이 높고 동일한 코드가 각각의 객체에 포함될 수 있다. 💡 이러한 문제를 해결하기 위해 AOP를 사용한다. AOP는 관점을 기준으로 개발하는 방식을 의미하며 여기서 관점이란 어떤 기능을 구현할 때 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다 💡 핵심 기능은 비스니스 로직..

    제어 역전(Inversion of Control, IoC)과 의존성 주입(Dependency Injection, DI)

    💡제어 역전(IoC) 스프링 프레임워크 없이 개발할 때는 객체의 생성, 설정, 초기화, 메소드 호출, 소멸 등 객체의 생명 주기 관리를 개발자가 직접 관리하지만 스프링 프레임워크를 사용하면 객체의 생명 주기를 스프링 컨테이너, IoC 컨테이너에 위임할 수 있다. 이렇듯 객체의 관리를 개발자가 직접 하지 않고 컨테이너에 맡겨서 외부로 제어권을 위임한 것을 제어 역전이라고 부른다 객체의 생명 주기를 프레임워크에 위임하면 외부 라이브러리가 프로그래머가 작성한 코드를 호출하고 흐름을 제어할 수 있게 된다. 이렇게 되면 개발자는 비즈니스 로직을 작성하는 데에 더 집중 할 수 있다. 💡의존성 주입(DI) 의존성 주입이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 ..

    [개념스터디] 4주차

    ORM 당근 마켓 ERD 예시 비밀번호: 510000 본 ERD 쿼리는 직접 만들었으며, 불완전한 쿼리라 오류 및 수정 사항이 존재합니다. 또한 실제 당근 마켓 쿼리와는 무관합니다! One-to-One 두 엔티티가 1대 1로 대응하는 관계 당근 마켓을 예로 들면, 적절한 예시는 아니지만 거래 완료된 물건이 접시나 인형처럼 여러 개가 아닌, 탁자나 선풍기처럼 1개라는 조건으로 1명의 소유자는 1개의 물건을 갖고, 1개의 물건은 1명의 소유자를 갖으므로 One-to-One 관계를 갖습니다. One-to-Many 두 엔티티가 1대 N으로 대응하는 관계 당근 마켓을 예로 들면, 한 명의 유저는 여러 상품을 업로드하여 판매할 수 있고, 한 개의 상품은 1명의 유저로 인해 판매되므로 One-to-Many 관계를 갖..

    [개념 스터디] 3주차

    타입스크립트 TypeScript = Type + JavaScript 타입스크립트는 자바스크립트에 타입을 부여한 언어로 자바스크립트의 확장된 언어라고 볼 수 있다. 특징 타입스크립트는 동적인 자바스크립트를 정적으로 바꿔준다 타입스크립트는 컴파일 이후에 자바스크립트가 된다 타입의 반환값을 명확하게 제시해준다 컴파일 단계에서 오류를 포착할 수 있다 정적 타입으로 지정되기 때문에 개발자의 의도를 명확하게 나타내어 가독성을 높인다 오류를 쉽게 포착할 수 있기 때문에 디버깅이 편하다 function sum(a: string, b: string) { return a + b; } sum("Type","Script); //TypeScript TypeScript를 이용하여 a와 b에 string 타입을 지정해준 코드. 만..