2022/02/06 개발자키우기 프로젝트..?


사람(Client) HTTP요청를 하고 Server를 통해서 데이터바인딩, validation 검증하고 정상적인 요청이다 인증이되면 DB와 Tranjection을 통해 처리해서 예외처리 후 HTTP응답을 하는 프로젝트를 진행하여 공부를 해보려고 한다.

강사님의 Git에 들어가서 commit 이력을 보면서 어떤작업을 했는지 확인해 가면서 공부할 예정 물론 강의도 같이 들으면서 강의 다 끝나면 천천히 따라가면서 해볼 예정이다.

  • 프로젝트명: DMarker

개발자 키우기 주요기능 (CRUD 예제에 대해서 공부할 듯?)

개발자 생성하기

POST 메서드를 활용하여 개발자를 생성
validation에 대해서도 배움

개발자 목록과 특정 개발자 상세 내용 확인(API 두개(목록,상세))

GET 메서드를 활용하여 개발자(들)의 정보를 확인
DTO(Data Transfer Object)의 개념과 역할에 대해서도 배우게 된다

개발자 정보 수정

PUT 메서드를 활용하여 개발자의 정보를 수정하게 된다.

개발자 삭제

DELETE 메서드를 활용하여 개발자의 정보를 삭제(분리보관)합니다
(분리보관하면서 update도 해야하므로)트랜잭션에 대해서도 배우게 된다라고 하셨다.

Spring FrameWork를 공부하면서 CRUD 예제에서 TODOlist를 많이 실습했는데 강의에서는 TODO리스트는 진행하지 않고 이런 프로젝트를 한다는것에 좋은 것같다.. 흐흫
재밌게 프로젝트를 진행해봐야겟다

LOMBOK?

롬복은 자바 스프링에서 반복적으로 타이핑 해야하는 보일러플레이트 코드를 자동으로 생성해주는 거의 필수적인 라이브러리라고 하셨음! -> LOMBOK을 그냥 추가하기만했는데 이런 이유엿구나 ...

DTO 생성

public class DevDto {
    String name;
    Integer age;
    LocalDateTime startAt;
   
}

3개의 프로퍼티는 JavaBean규약을 따르기 위해 getter&setter를 생성해야한다

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

예전에는 이렇게 getter&setter를 타이핑을 통해서 다 세팅을 해야했다.
-> 이렇게 하면 프로퍼티의 이름을 바꾸거나 추가를 할 때 마다 다 수정을 해야하는 불편함이 있다.. 물론 내가 현장실습을 할때도 이런 불편한점이 있었다.. Lombok을 통해서 이렇게 편하게 바꿀수 있다


@Setter
@Getter
public class DevDto {
    String name;
    Integer age;
    LocalDateTime startAt;
}

단 두줄로 setter&getter를 만들었다.. 얼마나 편한가.. 빨리 알았다면..

이런식으로 DeLombok을 하면 우리가 진행했던 getter&setter가 Lombok이 어떻게 처리하는지 알 수 있다

그 외에도 @ToString이라는 Lombok에서 제공하는 애노테이션이있다
애노테이션 없이 toString매소드를 사용할 수있다. 이때 toString은 Object의 해시코드 값을 출력하도록 도와준다. 우리가 알고싶은건 devDTO에 저장된 값들의 String 값을 알고싶으므로 이때 @ToString을 사용해서 알 수 있다.

Lombok에서 제공하는 생성자생성 애노테이션

  • @NoArgsConstructor : 아무 argument가없는 기본생성자를 만들어줌
  • @AllArgsConstructor : 모든 argument가 있는 생성자를 만들어줌
  • @RequiredArgsConstructor: 필수적인(필요한값들) argument가 있는 생성자를 만들어줌, final필드나 nonnull인 필드를 기본적으로 만들어준다.

@RequiredArgsConstructor는 빈들을 만들때도 자주사용 할 Constructor 애노테이션임!! 잘 알고 있자!

아주마법같은 애노테이션 @Data

Generates getters for all fields, a useful toString method, and hashCode and equals implementations that check all non-transient fields. Will also generate setters for all non-final fields, as well as a constructor.
Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.
Complete documentation is found at the project lombok features page for @Data .
See Also:
Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value

해당 코드를 들어가서 보면 이런 내용들이 있다
맨 아래를 보면 Getter,Setter,RequiredArgsConstructor 등등 다 합친 애노테이션이라는 것을 알 수 있다.. 아주 마법이군.. 사용에 맞게 애노테이션을 추가하면될거같다!
@Data 애노테이션은 강사님은 양날의 검인 애노테이션이라고 하셨고 실무에서는 잘 안사용하신다고 하셨다. 불필요한 것들이 있을 수도 있고 DTO에 개인정보를 담을 상황에 ToString이 있어버리면 에러메세지에 개인정보들이 찍힐 수 있다. 이래서 상황에 맞게 사용하면될거같다.

@Builder 애노테이션

강사님이 선호하시는 애노테이션이라고 하셨다. 디자인 패턴중 Builder가 있는데 Builder패턴을 막상 구현하려면 까다롭다고 하셨다. @Builder가 있으면

    DevDto devDto= DevDto.builder()
            .name("snow")
            .age(23)
            .startAt(LocalDateTime.now())
            .build();
           
           

이런 식으로 누가 봤을 때도 알기 쉬운 코드가 생성이 되어 손쉽게 추가할 수있다는 장점이 있어 강사님께서 추천하신다고 하셨다.

Setter와 차이점이 뭔가?

여러 처리를 하다보면 automic하게 코드를 생성하는게 좋은데 Setter는 중간에 set...~ 이렇게 다 선언을 해줘야하는데 이러다가 set을 여러군데 하게 될 경우 코드에 응집력이 떨어지게 되고 , 이후에 처리를 할 때 위의 데이터가 어떤거에 따라서 동작이 바뀌게 되므로 테스트도 어려워지고 여러 다양한 케이스에 대해서 확인을 해야하므로 한번 세팅후 바꾸지 않는게 좋다고 하셨다. 이런 Builder를 사용하면 한번에 세팅을 하고 안바꾸게 final를 이용해서 setter를 직접쓰지 않게 중간에 바뀌지 않게 안심하고 코드를 작성할 수 있다고 하셨다.

@Slf4j

간단하게 Log를 찍을 수있는 애노테이션이다

private static final Logger log = org.slf4j.LoggerFactory.getLogger(DevDto.class);

@Slf4j를 사용하지않고 로그를 찍으려면 이러한 코드들을 매번 로그를 찍을때 사용을 해야한다는 단점이 있다 .. 로그를 찍을 상황이 있으면 @Slf4j를 사용하자!

이외에 유용한 애노테이션들이 많으므로 Lombok이나 github를 통해서 살펴보라고 하셨다!

좋은 웹페이지 즐겨찾기