#03 URL구상 및 Spring 클래스 세팅 (feat. BaseEntity)

김대진·2023년 3월 20일
0

Sekkison Project

목록 보기
4/22
post-thumbnail

Sekkison URL 구상

이제 프로젝트를 만들고, MySql 설정, 연동까지 끝냈으니 본격적인 백엔드 로직을 작성할 차례이다. 하지만 그 전에 앞서, 준비해야 할 것이 있다.

먼저는 프로젝트에 필요한 API주소와 method, 기능을 임시로 작성해 보는 것이다.
그래서 앞서 만들어 보았던 figma 스토리보드를 보면서 어떤 데이터가 필요할지 생각해 보고, 다음과 같이 url을 임시로 작성해 보았다.

🔽 RestAPI EndPoint

METHODURI기능
POST/users회원가입
POST/users/login로그인
GET/users/{userId}User객체 반환
PUT/users/{userId}회원정보수정
DELETE/users/{userId}회원탈퇴
GET/users/duplicated/{parameter}아이디, 별명, 전화번호 중복체크
GET/users/my_list/{userId}/{parameter}친구 초대 리스트, 약속 초대 리스트
PUT/users/{param}/{userId}별명, content 정보수정
GET/users/search/invite/{userId}/{appointId}{postId}약속에 초대할 유저 검색
POST/upload/upload프로필 업로드
GET/upload/{userId}프로필 불러오기
POST/appoints/{userId}약속 만들기
GET/appoints/{userId}/{appointId}약속 가져오기
PUT/appoints/{appointId}/{userId}약속 수정
DELETE/appoints/{userId}/{appointId}약속 삭제
GET/appoints/members/{appointId}멤버 별명 가져오기
DELETE/appoints/members/{appoint_id}/{from_id}/{to_id}약속 멤버 강퇴
GET/appoints/search/{is_public}/{is_recruit}/{page}약속 최대인원 수정
PUT/appoints/setCount/{appoint_id}/{user_id}/{count}약속 멤버 강퇴
GET/appoints/list/{userId}/{page}내약속목록 가져오기
DELETE/friends/{friendId}친구초대 거절
POST/friends/친구초대 보내기
POST/friends/accept/{friendId}친구초대 수락
GET/friends/list{userId}친구목록
DELETE/invites/{inviteId}약속초대 거절
POST/invites//{appointId}/{fromId}/{toId}초대보내기
GET/messages/list/{userId}쪽지 목록
DELETE/messages/{userId}쪽지 삭제
POST/messages쪽지 보내기
GET/myAppoints/is_master/{userId}/{appointId}방장 여부
POST/myAppoints/{userId}/{appointId}약속 참가
DELETE/myAppoints/{userId}/{appointId}약속 나가기

이제 이 주소대로, 기능대로 컨트롤러와 서비스, 레포지토리를 작성하면 된다. (하지만 말 그대로 구상일 뿐이며, 프로젝트 진행 중 변경된 사항도 있다.)
그러면 작성하기 이전에 코드가 들어갈 폼을 각자 만들어 보기로 하자.

Class 세팅

먼저, 다음과 같이 EnableJpaAuditingSpringBootApplication 어노테이션이 있는 main함수에 적용시키자.

Application.class

@SpringBootApplication
@EnableJpaAuditing
public class SekkisonApplication {
    public static void main(String[] args) {
        SpringApplication.run(SekkisonApplication.class, args);
    }
}

EnableJpaAuditing 어노테이션은 엔티티의 createAt/updateAtBaseEntity에서 따로 관리하기 위해 적용하였다.

우리 프로젝트에서는 다음과 같이 각각의 엔티티마다 컨트롤러, 서비스, 레포지토리가 존재한다.

해야 할 것은 이 파일들에 코드를 넣기 전에 폼을 미리 만들어 놓는 것이다. (BaseEntity는 뒤에 설명하도록 하겠다.)

Entity

@Entity
@Table(name = "tests")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
public class Test extends BaseEntity {

}

Controller

@RestController
@RequestMapping("/tests")
@RequiredArgsConstructor
public class TestController {
    private final TestService testService;

}

@RequiredArgsConstructor를 사용하면 final로 설정된 변수들을 Spring bean에서 자동으로 주입해 준다.

Repository

public interface TestRepository extends JpaRepository<Test, Long> {

}

레포지토리는 인터페이스이다.

Service

@Service
@Transactional
@RequiredArgsConstructor
public class TestService {
    private final TestRepository testRepository;
}

마찬가지로 final로 자동주입받는다.

이제 각 테이블 별로 폴더를 만들고 그 안에 형식에 맞추어 4개의 파일을 넣도록 하자. 위 코드들의 tests 또는 Test 부분만 수정하면 될 것이다.

BaseEntity 설정

참고로 우리 프로젝트에서는 코드의 반복을 줄이고 유지보수를 위해 BaseEntity를 만들어 놓았다. 이 클래스는 common이라는 폴더 안에 있으며, createAtupdateAt을 관리한다.

BaseEntity

@Data
@MappedSuperclass
@EntityListeners(value = AuditingEntityListener.class)
public class BaseEntity {

    @CreatedDate
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
    @JsonProperty("create_at")
    private LocalDateTime createAt;

    @LastModifiedDate
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
    @JsonProperty("update_at")
    private LocalDateTime updateAt;
}

이제 이 클래스를 필요한 곳에 extends 하면 될 것이다.

URL을 설정해 보고, 프로젝트 코드 작성을 위한 기본 폼을 만들어 보았다. 다음 게시글에서 작성 방법과 API를 위한 Response 클래스에 대해 적어보도록 하겠다.

profile
만재 개발자

0개의 댓글