Backend
이번 포스팅에서는 Spring Boot에서 JWT를 이용한 인증과 인가를 다루기 이전, 사용자를 회원가입시키는 API 로직을 작성하고, 비밀번호를 해시처리하는 작업을 우선적으로 진행해보도록 하겠다. JWT 토큰 인증 방식에 대해서는 아래의 포스팅을 참고하면 좋을 것 같다. https://sjh9708.tistory.com/46 [Web] 인증과 인가 - JWT 토큰 인증 앞 포스팅에서 세션 방식의 인증과, 성능 개선을 위한 방법들에 대해서 다루어 보았었는데 이번에는 언급했던 토큰 인증 방식에 대해서 알아보려고 한다. 토큰 인증 세션 인증 방식과 달리 인증 sjh9708.tistory.com Spring Security란? 스프링 프레임워크 기반의 애플리케이션에서 보안과 인증을 처리하기 위한 모듈. Spr..
이전 포스팅에서 Spring Boot 프로젝트를 Dockerfile을 작성하여 빌드하고, 컨테이너상에서 실행시키는 것. 그리고 Dockerhub에 배포해 보는 것까지를 해 보았다. https://sjh9708.tistory.com/81 [Docker] Spring Boot App을 Dockerlizing하기 : 1. 이미지와 컨테이너, 그리고 Dockerfile 작성하기 이미지 컨테이너 실행에 필요한 모든 파일과 설정 등을 포함하는 템플릿이다. 컨테이너를 실행하기 위한 환경설정, 작업 디렉터리, 환경변수, 실행할 명령어 등을 정의한 패키지 파일이라고 볼 sjh9708.tistory.com 이제 여러개의 컨테이너들을 한 번에 실행시키고 상호연결시킬 수 있도록 하는 docker-compose에 대해서 알아보..
이미지 컨테이너 실행에 필요한 모든 파일과 설정 등을 포함하는 템플릿이다. 컨테이너를 실행하기 위한 환경설정, 작업 디렉터리, 환경변수, 실행할 명령어 등을 정의한 패키지 파일이라고 볼 수 있다. 여러 개의 레이어(layer)로 구성된다. 각 레이어는 이전 레이어의 변경 사항을 적용하여 구성된다. Docker 이미지의 변화가 있다면, 컨테이너를 실행시키기 위해 모든 내용을 전부 다시 빌드하는 것이 아니라, 변경이 필요한 부분만을 다시 빌드하게 된다. 레이어 기반의 구조는 이미지 크기를 최소화하고 이미지 간에 공통된 레이어를 공유하여 효율적인 디스크 공간 사용을 가능하게 한다. 이미지는 Dockerfile이라는 텍스트 파일에 정의된다. Dockerfile은 어떻게 이미지를 빌드할지에 대한 명령과 설정을 포..
이번 포스팅에서는 API 문서 생성을 위해서 Swagger를 연동하는 방법을 알아보도록 하겠다. API 문서의 필요성 서비스의 개발은 기본적으로 팀단위로 이루어진다. 그리고 거의 대부분의 프로젝트들은 서버 백엔드 개발자들이 만들어둔 API를 사용하여 웹파트의 프론트엔드 개발자, 모바일이면 안드로이드, IOS 개발자, 그리고 그 외의 응용 프로그램 개발자들까지 서버의 비즈니스 로직과 데이터베이스의 접근을 위해서 API를 사용한다. 그런데 백엔드 개발자들이 일일이 API 사용법을 알려주기에는 비용적 측면에서 수지타산이 맞지 않다. 그래서 백엔드 개발자들은 API 개발과 함께 체계적인 문서를 다른 팀원들에게 제공해주어야 할 필요성이 있다. 가장 잘 알려진 문서화 도구들은 REST API 개발시에는 Swagge..
지금까지 포스팅에서는 H2 데이터베이스를 연결하여 사용했었는데, 이번에는 RDBMS의 종류인 MariaDB와 연결해보는 작업을 해보도록 하자. MariaDB 준비하기 ▶ docker-compose.yaml version: "3.7" services: wisefee-database: platform: linux/x86_64 #Mac M1칩 사용 제외하고는 주석처리 image: mariadb:10.11.2 environment: MYSQL_DATABASE: "wisefee-database" MYSQL_ROOT_PASSWORD: "1111" ports: - 3306:3306 volumes: - ./local-mariadb:/var/lib/mysql 필자는 MariaDB를 로컬에서 설치하지 않고 docker를..
이번 포스팅에서는 JPA 트랜잭션의 동시성을 제어하는 방법에 대해서 알아보겠다. 우선 작성한 상품 주문 로직에 대해서 살펴보겠다. 상품 주문 로직 작성 ▶ OrderService.java @Transactional public Long order(Long id, Long itemId, int count){ //엔티티 조회 Member member = memberRepository.findOne(id); Item item = itemRepository.findOne(itemId); //배송정보 생성 Delivery delivery = new Delivery(); delivery.setAddress(member.getA..
영속성 컨텍스트 JPA에서 영속성 컨텍스트는 엔티티를 관리하는 논리적인 개념 영속성 컨텍스트는 어플리케이션과 DB사이에서 객체를 보관하는 가상의 DB같은 역할을 한다 엔티티를 메모리에 저장하고, 엔티티의 생명주기를 관리하며, 엔티티와 데이터베이스 간의 작업을 캐시해서 처리하는 작업을 수행한다. 1. 엔티티의 생명주기 관리 새로운 엔티티를 생성할 때 EntityManager를 사용하여 영속성 컨텍스트에 저장 영속 상태의 엔티티는 영속성 컨텍스트에 의해 관리되며, 변경 사항이 있으면 자동으로 감지하여 데이터베이스에 반영된다. 엔티티를 삭제하면 영속성 컨텍스트에서 제거된다. 의도적으로 영속성 컨텍스트에서 엔티티를 비영속 상태로 만들 수 있음 2. 엔티티와 데이터베이스 간의 작업을 캐시 엔티티를 조회할 때, 영..
Repository Repository는 데이터베이스와의 상호 작용을 담당하는 모듈 계층이라고 하였다. Repository 구조 작성 @Repository @RequiredArgsConstructor public class ItemRepository { private final EntityManager em; } 어노테이션으로 Spring Boot에 Repository임을 명시해준다. 엔티티와 상호작용 하기 위해서 EntityManager를 의존성 주입받는다. Select @Repository @RequiredArgsConstructor public class ItemRepository { private final EntityManager em; public Item findOne(Long id){ re..
Repository Repository는 데이터베이스와의 상호 작용을 담당 Repository는 데이터베이스에 액세스하기 위한 메서드를 정의하고, 데이터를 검색, 저장, 업데이트 및 삭제하는데 사용 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member){ em.persist(member); } } @Repository 어노테이션은 Spring에서 Repository 계층의 빈으로 등록하기 위해 사용 EntityManager는 JPA에서 데이터베이스와 상호작용을 위해 사용되는 인터페이스. EntityManager는 영속성 컨텍..