![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이번주는 정말 아무것도 아닌 듯이 많은 개념을 배웠다 여기서 하나하나 정리를 해야 내꺼가 될 듯해서 여기에 정리를 좀 해봐야겠다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
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;
}
}
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
// 번역된 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)로 바꾸고 아이콘 테마도 좀 바꿨는데 역시 보이는게 이뻐야 할 맛이 난다(?) 각각의 파일과 폴더들의 역할을 어느정도 짐작하고 사용할 수 있다는 점이 초보자에겐 매우 도움이 된다규!!
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
'Java' 카테고리의 다른 글
<JAVA> DTO가 뭐예요? 꼭 써야 하나요? (0) | 2021.11.08 |
---|---|
웹개발의 봄, 스프링 5주차 (최저가셀렉샵) [스파르타코딩클럽] (0) | 2021.08.19 |
웹개발의 봄, 스프링 4주차 (최저가셀렉샵) [스파르타코딩클럽] (0) | 2021.08.18 |
웹개발의 봄, 스프링 3주차 (24시간뉴스피드) [스파르타코딩클럽] (0) | 2021.08.16 |
웹개발의 봄, 스프링 1주차 (+자바) [스파르타코딩클럽] (0) | 2021.08.12 |
댓글