플랫폼/스프링 프레임 워크

2. SpringBoot & JPA로 간단 API 만들기 1/2[스프링부트로 웹 서비스 출시하기]

삐뚤어진 개발자 2020. 2. 23.

1편

 

이번 시간엔 SpringBoot & JPA로 간단한 API를 만들기를 따라 할거다.

분량이 많아 1편 2편을 나누기로 한다.

 

Tip)
아직 SI 환경에선 Spring & MyBatis 를 많이 사용하지만, 쿠팡/우아한형제들/NHN Entertainment 등 자사 서비스를 개발하는 곳에선 SpringBoot & JPA를 많이 사용하고 있습니다.
특히 기존 프로젝트 환경을 개편하시는 분들은 거의 위 스택으로 전환하려고 합니다.
SpringBoot & JPA로 진행하시면 진짜 집중해야할 비지니스 로직에만 집중할수 있습니다.
(Express, Django, Rails 못지않게 생산성이 좋습니다.)
자사 서비스를 운영하는 회사에선 점점 더 많이 사용되고 있기 때문에 이런 회사로 가고자 하시는 분들은 이번 기회에 꼭! 시작해보셨으면 합니다.

라고 한다. spring 과 mybatis를 사용해 보진 않았지만 spring을 사용하는 si 업체들에서 아직도 많이 사용하고 있는 듯 하다. (지인 피셜)

하지만 난 spring이 처음이라 jpa를 사용해 보기로 마음먹었다. 생산성을 높여주는 새로운 기술을 써보는게 좋지않겠나 싶다.

 

1. 도메인 코드 만들기

domain/posts 패키지와 posts 클래스, postsRepository 인터페이스를  만들어 줬다.

 

그리고 Posts.class 를 다음과 같이 작성해줬다.

 

Posts.class

    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    @Getter
    @Entity
    public class Posts {

        @Id
        @GeneratedValue
        private Long id;

        @Column(length = 500, nullable = false)
        private String title;

        @Column(columnDefinition = "TEXT", nullable = false)
        private String content;

        private String author;

        @Builder
        public Posts(String title, String content, String author) {
            this.title = title;
            this.content = content;
            this.author = author;
        }
    }

 

 

@Entity 어노테이션에서 에러가 났다. 

프로젝트 생성할 때 jpa 설정을 빼먹었나 보다.

 

bulid.gragle 에 아래 코드를 추가해주고 update 해준다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

jpa는 디비와 연동을 쉽게 할수 있는 모듈이다.

보통 디비 작업을 변경하려면 쿼리를 수정하는 경우가 많은데 jpa는 

이 Entity 클래스를 변경해준다고 한다. (간편할거같다.)

 

  • @Entity
    • 테이블과 링크될 클래스임을 나타냅니다.
    • 언더스코어 네이밍(_)으로 이름을 매칭합니다.
    • ex) SalesManager.java -> sales_manager table
  • @Id
    • 해당 테이블의 PK 필드를 나타냅니다.
  • @GeneratedValue
    • PK의 생성 규칙을 나타냅니다.
    • 기본값은 AUTO 로, MySQL의 auto_increment와 같이 자동증가하는 정수형 값이 됩니다.
    • 스프링 부트 2.0에선 옵션을 추가하셔야만 auto_increment가 됩니다!
  • @Column
    • 테이블의 컬럼을 나타내면, 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 컬럼이 됩니다.
    • 사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있을경우 사용합니다.
    • 문자열의 경우 VARCHAR(255)가 기본값인데, 사이즈를 500으로 늘리고 싶거나(ex: title), 타입을 TEXT로 변경하고 싶거나(ex: content) 등의 경우에 사용됩니다.

 

이 정도 어노테이션만 있어도 테스트 웹사이트를 구축해보는데 무리가 없을 것 같다.

더 필요한 기능들은 그때그때 찾아보는게 좋겠다.

(@NoArgsConstructor, @Getter, @Builder) 이런 것들을 찾아보면 도움이 많이 될것 같다.

 

Tip)
웬만하면 Entity의 PK는 Long 타입의 Auto_increment를 추천합니다.
(MySQL 기준으로 이렇게 하면 bigint 타입이 됩니다.)
주민등록번호와 같은 비지니스상 유니크키나, 여러키를 조합한 복합키로 PK를 잡을 경우 난감한 상황이 종종 발생합니다.
(1) FK를 맺을때 다른 테이블에서 복합키 전부를 갖고 있거나, 중간 테이블을 하나더 둬야하는 상황이 발생합니다.
(2) 인덱스에 좋은 영향을 끼치지 못합니다.
(3) 유니크한 조건이 변경될 경우 PK 전체를 수정해야하는 일이 발생합니다.
주민등록번호, 복합키 등은 유니크키로 별도로 추가하시는것을 추천드립니다.

 

PK를 그냥 row_stamp로 관리하는게 좋다는 뜻인거 같다. 나중에 참고해야지..

 

 

 

 

 

출처 : https://jojoldu.tistory.com/251?category=635883

댓글