Spring
-
jMeter로 동시성 테스트하기Spring 2024. 2. 22. 01:55
사용자가 게시판을 생성할 때, 개수의 제한을 5개로 제한하고 짧은 시간 내에 많은 수의 게시판을 생성하려고 시도할 때 DB에 어떻게 저장되는지 동시성 테스트를 해봤습니다. public void createBoard(BoardDto boardDto) { Long userId = jwtUtil.getUserId(); if(getBoardUserSize(userId) > 5) { throw new IllegalArgumentException("보드 생성 제한 5개가 넘습니다."); } User user = findUser(userId); Board board = new Board(boardDto, userId); BoardUser boardUser = new BoardUser(board, user); boar..
-
지연 로딩, 즉시 로딩Spring 2024. 2. 22. 01:55
엔티티 간의 연관 관계 지연 로딩과 즉시 로딩을 하기 전에 먼저 엔티티 간의 연관 관계를 알 필요가 있습니다. 관계형 데이터베이스에서는 테이블 간 foreign key로 연관 관계를 맺어 JOIN을 통해 테이블을 조회합니다. Teacher 테이블과 Lecture 테이블이 있다고 했을 때, 하나의 교수는 여러 개의 강의를 할 수 있습니다. 즉, Teacher와 Lecture는 1 : M 인 연관 관계라고 할 수 있습니다. 이를 JPA에서는 @ManyToOne, @JoinColumn 애너테이션을 통해 나타냅니다. @Entity public class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Colum..
-
JWTSpring 2024. 2. 22. 01:55
JWT JWT는 JSON 포맷을 사용하여 사용자의 대한 속성을 저장하는 Web Token 입니다. 보통 Cookie를 사용하여 JWT를 저장합니다. Web Token 웹 애플리케이션에서 사용자 인증 및 권한 부여를 위한 표준화된 방법 중 하나입니다. 특히, 웹 토큰은 클라이언트와 서버 간의 인증 정보를 안전하게 전송하기 위한 메커니즘으로 사용됩니다. JWT의 구조 JWT는 누구나 복호화가 가능합니다. https://jwt.io/ 에서 가능하며 JWT 토큰에 대한 정보를 입력하면, 복호화해서 볼 수 있습니다. Header Header는 토큰의 종류, 어떤 알고리즘으로 sign 할지 적혀 있습니다. Payload Payload에는 정보가 담겨있습니다. 권한이나, 사용자 유저에 대한 정보 등 필요한 데이터를 ..
-
Entity, DTOSpring 2024. 2. 22. 01:54
Entity Entity 클래스는 실제 DB 테이블과 매핑 되는 클래스로, 실제 테이블의 존재하는 컬럼들로 필드를 가지는 객체입니다. 즉 DB테이블의 컬럼과 Entity클래스의 필드와 1:1로 매핑됩니다. Entity는 DB의 영속성의 목적으로 사용되는 객체이며, 때문에 Response와 Request의 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다. Entity 클래스에서는 setter의 사용을 지양해야 합니다 setter로의 접근으로 인한 객체의 일관성, 안정성을 보장하기 힘들어지기 때문에 Entity에서는 setter 대신 생성자 혹은 빌더를 사용하게 됩니다. @Builder @Getter @Entity @NoArgsConstructor public class User { @Id @Genera..
-
JPA, ORM, 영속성Spring 2024. 2. 22. 01:54
ORM, Object-Relational Mapping ORM을 사용하기 전에는 DB의 테이블을 만들고 SQL을 작성하고, JDBC를 사용해서 직접 실행하고, 결과를 객체로 만들어야하는 불편함이 있고, 데이터에 새로운 컬럼을 추가하게 된다면, SQL문을 또 수정해야하는 등 여러 불편함이 많습니다. ORM은 객체와 DB의 데이터를 자동으로 매핑해주며, SQL쿼리가 아닌, 메서드로 데이터를 조작할 수 있게 해줍니다. 객체간 관계를 바탕으로 SQL을 자동으로 생성해줍니다. JPA, Java Persistence API JPA는 Java ORM 기술의 대표적인 표준 명세로, Java에서 제공하는 API입니다. JPA는 애플리케이션과 JDBC 사이에서 동작되고 있으며, JPA를 사용하면 DB 연결 과정을 직접 개..
-
BeanSpring 2024. 2. 22. 01:53
Spring에서는 Spring Container, Ioc Container라는 개념을 사용합니다. Container는 인스턴스의 생명 주기를 관리하며, 생성된 인스터스들에거 추가적인 기능을 제공하도록 하는 것입니다. 즉, Container는 개발자가 작성한 코드의 처리 과정을 위임받은 독립적인 존재이며, 적절한 설정만 되어있다면 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤합니다. Spring Container는 Spring Framework의 핵심부에 위치하며, 종속 객체 주입을 이용하여 Application을 구성하는 Componenet들을 관리합니다. 이 때, Spring Container에서 생성되는 객체를 Bean이라고 합니다. Bean Bean은 Spring IoC Con..
-
DI, IoCSpring 2024. 2. 22. 01:53
DI, Dependency Injection 의존성 주입이란 의미로, 객체를 직접 생성하는 것이 아닌 외부에서 주입하는 것을 의미합니다. class Sample{ private Apple apple = new Apple(); } 일반적으로 의존성에 대한 제어권은 객체 자신이 갖습니다. class Sample{ private Apple apple; public Sample(Apple apple){ this.apple = apple; } } class SampleTest{ Apple apple = new Apple(); Sample sample = new Sample(apple); } 하지만, DI는 자신이 아닌, 다른 클래스에서 객체를 생성한 뒤 클래스의 생성자나 setter 등을 이용해 주입시켜줍니다. ..
-
Spring 3 Layer ArchitectureSpring 2024. 2. 22. 01:51
3Layer Architecture Spring은 Controller, Service, Repository 3개로 분리하고 각 계층에 따라 역할을 분리하여 개발을 진행하도록 했습니다. 각 Layer에 따라 관심을 갖고 있는 부분이 다르며, 상위 Layer에서 하위 Layer로만 컨트롤을 할 수 있습니다. 즉, Conroller -> Service로 조작이 가능하지만, Service -> Controller로의 조작은 불가능합니다. Presentation Layer, Controller 역할 클라이언트의 요청을 받습니다. 요청에 대한 로직 처리는 Service에게 전담하며, Request 데이터가 있다면 Service에 같이 전달합니다. Service에서 처리 완료된 결과를 클라이언트에게 응답합니다. 클라..