스프링 9

[스프링] 9. 쿼리메소드

지난 시간에 JPA를 이용하여 findById, findAll등의 메소드를 사용하여 데이터베이스에 접근할 수 있다는 것을 알았다. 그때는 간단하게만 살펴보았는데 복잡한 SQL문을 처리하고 싶을 수 있다. SQL문의 꽃이라고 볼 수 있는 select, from, where등을 사용할 수 있도록 하는 메소드가 쿼리메소드이다. // repository/UserRepository.java public interface UserRepository extends JpaRepository { List findByName(String name); } 위 메소드를 정의하고 테스트해보자. // test/repository/UserRepositoryTest.java @SpringBootTest class UserReposi..

[스프링] 8. JPA

JPA (Java Persistence API) 현재 자바에서 ORM기술 표준으로 알려져 있다. 스프링만을 위한 것은 아니고 자바 전반적으로 사용되는 듯 하다. 지난 시간 도메인 객체를 만들 때 Id, GeneratedValue, Entity 어노테이션이 그 예이다. 메소드명 의미 save 객체 하나를 삽입한다. saveAll 여러개의 객체를 동시에 삽입한다. findById 특정 Id를 가진 객체를 검색한다.(Optional로 반환) findAll 테이블에 존재하는 모든 객체를 검색한다. deleteById 해당하는 Id를 가진 객체를 삭제한다. deleteAll 모든 객체를 삭제한다.(위험) delete 해당 객체를 삭제한다. deleteAllInBatch 모든 객체를 삭제하는데 한번의 SQL만 호출..

[스프링] 7. Object Relational Mapping

지난시간에 DTO를 위해 Object Mapping이 자동적으로 적용된다는 사실을 알게 되었다. Object Mapping은 데이터 전송을 위한 객체를 json으로 변환해주는 작업이었는데 이번엔 데이터베이스에 자동으로 매핑해주는 Object Relational Mapping(ORM)을 알아보려고 한다. Object Mapping : Object $\leftrightarrow$ Json Object Relational Mapping(ORM) : Object $\leftrightarrow$ Relation(Table) ORM을 모르는 상태라면 데이터베이스를 조작하기 위해 SQL문법을 배우고 직접 사용하며 해당 언어와 데이터베이스를 연결하는 라이브러리를 알아야 한다. (실제로 내가 ORM을 몰라서 School..

[스프링] 6. 테스트코드 작성

지금까지는 코드 작성이 정상적으로 실행되는지를 서버를 켜고 API를 요청하는 방법으로 확인했다. 확실하긴 하지만 사람이 테스트한다는 점에서 귀찮음이 있다. 코드를 통해서 자동화하는 방법을 알아보고자 한다. // controller/ApiController.java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/") public String hello(){ return "Hello"; } } 간단한 코드를 하나 작성했다. 클래스 안에 커서를 두고 Ctrl + Shift + T를 누르면 테스트코드 작성 창이 나온다. 확인을 누르면 테스트 폴더에 같은 레벨의 폴더에 테스트 코드가 만들어진다. // test/c..

[스프링] 5. Lombok

지난시간 데이터를 주고 받기 위해 DTO클래스를 생성했다. 자바는 코틀린과 달리 data키워드를 제공하지 않기 때문에 getter, setter, constructor, toString같은 메서드들을 직접 구현해야 했다. IDE레벨에서 지원하긴 하지만 멤버변수가 늘어날 때마다 직접 추가하기 불편하다. 이럴때 롬복(Lombok)을 사용하면 편리하다. DTO // dto/StudentDTO.java public class StudentDTO { int id; String name; public StudentDTO(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(i..

[스프링] 4. Object Mapper

지난시간에 api를 만들어서 string데이터를 주고 받았다. 지난시간에도 말했듯이 오직 string만 주고 받는 일은 거의 없고 여러 데이터를 포함해서 보낸다. 예를들면 학생을 요청할때 학번, 이름, 학과등을 모아서 보내는 경우가 있다. api는 서로 다른 언어끼리도 통신할 수 있는데 서로 객체를 표현하는 방식이 다르기 객체를 직접 보낼 수 없다. 객체를 문자열(json)로 바꿔서 전송하고 그 문자열을 객체로 바꿔서 수신한다. 여기서 객체와 문자열을 바꾸는 역할을 Object Mapper가 한다. 객체 -> Object Mapper -> json -> Object Mapper -> 객체 DTO 전송될 객체를 DTO로 나타낸다. DTO는 Data Transfer Object의 약자이고 송신측과 수신측의 ..

[스프링] 3. REST API 만들기

우리는 REST API를 통해 CRUD를 구현할 수 있다. CRUD는 Create, Read, Update, Delete이고 각각 http method에서 POST, GET, PUT, DELETE에 대응된다. 리소스를 생성하는데 GET을 써서 구현해도 동작이야 하겠지만 이것 또한 개발자들간의 합의(?)같은 것이기 때문에 일치시키는게 좋다. HTTP Method 지난시간에 GetMapping을 통해 GET을 구현했다. {method}Mapping어노테이션을 사용하면 해당하는 메소드를 구현할 수 있다. // controller/ApiController.java @RestController public class ApiController { @GetMapping("/api/hello") public Strin..

[스프링] 2. 첫 api 만들기

스프링은 api 서버로 사용이 가능하다. request를 받으면 "Hello world"를 반환하는 코드를 작성해보자. Controller 스프링은 request를 Controller에서 받고 클래스를 정의해줘야 한다. Controller는 프로젝트 폴더 안에 controller라는 패키지를 만들고 Controller라는 접미사를 가진 클래스명으로 사용하는 것이 국룰인듯 하다. // controller/ApiController.java @RestController public class ApiController { @GetMapping("/api/hello") public String hello(){ return "Hello world"; } } @RestController : 이 컨트롤러는 Rest요청..

[스프링] 1. 스프링 시작하기

Prologue 지금까지 스프링 공부 시도를 3번쯤 한 것 같은데 계속 까먹어서 블로그에 글을 남기면서 공부하려고 합니다. 초보자의 입장에서 바라본 스프링을 작성한 카테고리이니 잘못된 점 지적 환영합니다. 스프링 우리나라 기업들은 자바를 상당히 많이 사용한다. 그중에서도 전자정부프레임워크와 수많은 레거시 코드들이 스프링으로 이루어져 있다. 그만큼 역사가 깊고 스프링이 견고하다는 뜻인 것 같다. 나는 지금까지 자바를 잘 몰라서 스프링 말고 다른 프레임워크(장고, fastapi, express 등)를 공부해 왔지만 스프링도 배워둬야 할 것 같아서 공부를 시작하게 되었다. 프로젝트 만들기 인텔리제이에서 프로젝트 만드는 방법은 간편하다. 1. 새 프로젝트 2. 프로젝트 설정 Spring Initializr를 선..