본문 바로가기
Java

웹개발의 봄, 스프링 2주차 (내머리터짐) [스파르타코딩클럽]

by 돈민찌 2021. 8. 15.
반응형

이번주는 정말 아무것도 아닌 듯이 많은 개념을 배웠다 여기서 하나하나 정리를 해야 내꺼가 될 듯해서 여기에 정리를 좀 해봐야겠다.

남병관 튜터님이 설명할 때 사용해주신 인포그래픽을 내 서타일로 조금 바꿔봄..

JPA: Java의 언어로 번역된 SQL 쿼리라고 생각하면 될 것 같다. 이를테면 H2(서버가 종료되면 데이터 역시 함께 휘발하는 간단한 SQL 도구)에 직접적으로 SQL문을 작성할 필요없이 리포지토리에 새로운 Person 인스턴스를 저장하면 INSERT INTO PERSON... 과 같은 SQL쿼리문으로 번역되어 실행, 해당 데이터가 데이터베이스에 저장된다.

Repository: 데이터베이스(SQL DB)와 상응하는 클래스, 자바 안에서는 interface 형태로 구현하고 JpaRepository를 상속받아 사용한다.

@Service: 아직 정확하게 "왜" 쓰는지는 잘 모르겠는 개념. @Transactional을 붙인 메소드를 통해 데이터베이스 속에서 id를 가지고 데이터를 찾아, 그 내용을 새로운 DTO의 내용으로 업데이트할 때 썼다.

@Controller: 일반적인 사이트의 View를 반환하는 라우터 역할을 하는 것으로 보인다. root 도메인과 그 하위 도메인들에 접속했을 때 화면에서 나타낼 View를 지정할 수 있다. 

@RestController: 주용도는 Json 형태로 객체 데이터를 반환하는 것이다. 스프링으로 웹의 보이는 화면을 구성하는 것 뿐만 아니라, 서버 자체를 구현해서 api 요청을 받고 답을 보내는 것까지 가능해진다.

JPA라는 언어에 익숙해질 필요가 있을 것 같다. 따라할 땐 쉬웠는데 과제 혼자 하려니까 막막했다.. 그래도 해냈으니 다행... 대강 이 글에 정리해두자면,

// JPA식 테이블 생성

package com.sparta.week01.domain;
import com.sun.istack.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@Entity
@NoArgsConstructor
public class Person extends TimeStamped {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private int age;

    @Column(nullable = false)
    private String address;

    @Column(nullable = false)
    private String job;

    public Person (String name, int age, String address, String job) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.job = job;
    }
}

 

아직도 코딩 안배웠어? 5만원 깎아줄께 형아만 믿어

 

// 번역된 SQL문

create table person (
  id bigint not null, 
  create_at timestamp, 
  modified_at timestamp, 
  address varchar(255) not null, 
  age integer not null, 
  job varchar(255) not null, 
  name varchar(255) not null, 
  primary key (id)
)

SQL은 예전에 배워두긴 했지만 그다지 익숙하게 쓰는 편은 아니라, 이런 식으로 클래스의 인스턴스를 만들 듯이 데이터를 추가하는 것은 조금만 적응하면 편하게 쓸 수 있을 것 같다. 근데 아직은 너모 불편해...

추가로 이번에 배우게 된 Lombok은 이렇게나 기능이 많은데, 요 네가지 정도만 사용해 봤다. 인텔리제이 IDE를 통해 자동완성되기는 하지만 매우 불편했던 클래스의 Getter, Setter 작성, 또 생성자 만들기 등을 아주 깔끔한 @주석 하나로 "작성한 셈" 쳐주는 도구라 잘 익혀두면 좋을 것 같다.

@Getter // 이번에 사용해봤다.
@Setter // 이번에 사용해봤다.
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@RequiredArgsConstructor // 이번에 사용해봤다.
@NoArgsConstructor // 이번에 사용해봤다.
@Log
@Log4j
@Log4j2
@Slf4j
@XSlf4j
@CommonsLog
@JBossLog
@Flogger
@CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
experimental @var
@UtilityClass

그리고 인텔리제이 테마를 Moonlight(Material)로 바꾸고 아이콘 테마도 좀 바꿨는데 역시 보이는게 이뻐야 할 맛이 난다(?) 각각의 파일과 폴더들의 역할을 어느정도 짐작하고 사용할 수 있다는 점이 초보자에겐 매우 도움이 된다규!!

반응형

댓글