분류 전체보기

    Entity 모듈 분리(멀티 모듈 프로젝트) - 게시판 만들기(9)

    본격적으로 시작하기에 앞서 도메인 별로 모듈을 분리를 한다면 그에 따라 Entity도 각자 가지고 있을 것이고 만약 이 Entity들이 다른 도메인에서도 사용된다면(연관 관계 등에 의해서) 공통 모듈로 분리하는 것이 좋다고 생각이 되었다. 우선 로그인 기능을 붙이고 싶었다. 로그인, 회원 가입 등이 발생하는 Auth-API와 사용자들 관련 Member-API 두 가지를 만드려 하니 두 곳 모두 Member라는 Entity가 공통으로 사용될 것 같다고 생각이 되었다. 그래서 Entity를 분리하기로 했고 Member와 MemberInfo로 나누어서 관계 설정하여 모듈화 시켜보겠다. Auth-API , Entity 모듈 생성 이전의 멀티 모듈 프로젝트 생성 과정에서 본 것과 같이 auth-api , enti..

    @Valid를 이용한 객체 유효성 검증 - 게시판 만들기(8)

    @Valid란? @Valid는 JSR-303 표준 스펙(자바 진영 스펙)으로써 Bean Validator를 이용하여 객체의 제약 조건을 검증하도록 지시하는 어노테이션이다. JSR 표준의 빈 검증 기술의 특징은 객체의 필드에 달린 어노테이션으로 편리하게 검증을 한다는 것이다. Spring에서는 LocalValidatorFactoryBean을 Bean으로 등록하면 LocalValidatorFactoryBean이제약 조건 검증을 처리한다. Spring Boot에서는 아래와 같이 의존성을 추가해주면 해당 기능들을 사용할 수 있다. implementation 'org.springframework.boot:spring-boot-starter-validation' 동작 원리 Spring에서 모든 요청은 Dispatc..

    Spring Entity와 DTO 구분하기 -게시판 만들기(7)

    기존에 작성했던 코드를 보면 Entity와 DTO 구분이 없었다. @PostMapping("/signup") public ResponseEntity signup(@RequestBody Member member){ boolean result = memberService.createMember(member); if(result){ return new ResponseEntity(success(),HttpStatus.OK); }else{ return new ResponseEntity(failure(),HttpStatus.BAD_REQUEST); } } 처음 Spring을 배웠을 땐 그냥 분리해서 사용하다가 Entity를 재활용하면 좋지 않을까? 라는 생각에 이렇게 사용하려 했다. 하지만 이전에 분리해서 사용하던..

    @ControllerAdvice를 사용한 예외 처리,에러 핸들링 - 게시판 만들기 (6)

    우선 해당 어노테이션을 사용하기 전에 기존의 프로젝트들은 모두 if,else 또는 try,catch 등을 사용하여 예외 처리를 했었다. 이런 경우 제공하는 서비스의 규모가 커질수록 복잡해지고 코드도 길어져서 가독성이 떨어지고 수정하기 매우 힘들었다. 해당 문제점들을 해결하기위해 에러 핸들링 방법들을 찾아보던 중 @ControllerAdvice를 찾아 사용하게되었다. @ControllerAdvice & @RestControllerAdvice Spring은 전역적으로 예외처리를 할 수 있는 @ControllerAdvice를 Spring 3.2 부터, @RestControllerAdvice를 Spring4.3 부터 제공하고 있다. 두 어노테이션의 차이는 @Controller와 @RestController의 차..

    Spring 공통 응답 만들기(Enum, 제네릭 타입) - 게시판 만들기(5)

    이전에 공통 응답 클래스를 만들어서 활용하기는 했지만 보기에만 조금 더 깔끔해진 것 같지 사용하기 좋아보이지는 않는다. 오늘은 공통 응답을 조금 더 수정하기 쉽고 사용하기 좋게 바꾸려고 한다. controller/MemberController package com.seungh1024.controller; import com.seungh1024.Response; import com.seungh1024.entity.Member; import com.seungh1024.service.MemberService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.uti..

    JPA 레포지터리, Member CRUD - 게시판 만들기(4)

    Repository Repository란? 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들(findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해 테이블에 어떤 값을 넣거나 조회하거나 업데이트하거나 삭제시키는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이때 CRUD를 어떻게 처리할지 정의하는 계층이 Repository이다. CRUD 데이터 조회하기 api 모듈에 새로운 패키지인 repository를 만들고 MemberRepository 인터페이스를 생성한다. repository/MemberRepository package com.seungh1024.repository; import com.seungh1024.entity.Memb..

    Spring Boot JPA 설정, 테이블 생성(Entity) - 게시판 만들기(3)

    의존성 추가 - build.gradle(api 모듈) dependencies { runtimeOnly 'mysql:mysql-connector-java' //MySQL implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //JPA } 다음과 같이 JPA 의존성을 추가해 준다. 위와 같이 의존성을 추가해주면 테이블 생성, 쿼리문 등을 매우 간편하게 할 수 있는 어노테이션이나 메소드들을 사용할 수 있게된다. implementation implemetation은 해당 라이브러리가 변경되더라도 이 라이브러리와 연관된 모든 모듈들을 컴파일하지 않고 직접 관련이 있는 모듈들만 컴파일하기 때문에 rebuild 속도가 빠르다. 혹시 JPA에 대..

    Spring Boot Mysql 연결, 민감한 정보 관리하기(환경 변수 설정하기)- 게시판 만들기(2)

    멀티 모듈을 활용하여 직접 게시판 서비스를 만들어보려고 한다. 우선 api 모듈을 하나 만들면 아래와 같은 파일 구조가 나올 것이다. 이전의 멀티 모듈과 다른 점은 멀티 모듈을 ‘server’라는 파일 아래에 위치시켰다. 비슷한 성격의 모듈들을 저 ‘server’ 파일에서 관리하기 위함이다. build.gradle(루트 프로젝트) plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } repositories { mavenCentral() } bootJar.enabled = false subprojects{ group = 'com.seungh102..