본문 바로가기
스프링 부트/코틀린

[코틀린] 맥북에 설치하고 스프링 Rest API로 CRUD 해보기

by illlilillil 2022. 3. 8.

설치


우선적으로 코틀린 설치가 되어 있어야 합니다.

설치는 Homebrew를 이용합니다.

//코틀린 설치
brew install kotlin
//설치 확인
kotlinc -version

 

프로젝트 만들기


https://start.spring.io/ 에서 쉽게 만들 수 있어요. postgresql을 사용했지만 다른 mysql이나 mongoDB를 사용하셔도 무방합니다

yml 설정

spring:
  jpa:
    hibernate:
      ddl-auto: create-drop
  datasource:
    password: '{password}'
    username: {username}
    url: jdbc:postgresql://localhost:5432/{database name}
    driverClassName: org.postgresql.Driver

 

실행 테스트


HomeController를 만들고 가볍게 테스트 해볼게요

@RestController
class HomeController {
    @GetMapping
    fun home() : String = "Hello!"
}

이렇게 나오면 성공입니다.

 

 

폴더 구조


 

Entity 생성

@Entity
@Table(name="board")
class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long? = null
    var title: String? = null
    var description: String? = null
    var writer: String?= null
}

 

Repository 생성

interface BoardRepository : JpaRepository<Board, Long> {
}

 

Controller 생성

원래는 서비스 단까지 생성해야 하지만 연습이기 때문에 생략합니다. 

자바와 다른 점은 Return 값을 메소드 뒤에서 생성하는 것이고, @RequiredConstructor 없이 val 하나만으로 DI가 가능하다는 점이에요.  흔한 Lombok조차 대체가 가능하다는 점이 코틀린의 장점인거 같습니다. 아직은 자바에 익숙해 헷갈리네요..

 

@RestController
@RequestMapping("/board")
class BoardController(val boardRepository: BoardRepository) {
    @GetMapping
    fun getBoardList() = boardRepository.findAll()

    @GetMapping("/{boardId}")
    fun getBoard(@PathVariable("boardId") boardId: Long): Optional<Board>? {
        return boardRepository.findById(boardId)
    }

    @PostMapping
    fun postBoard(@RequestBody board: Board) : Board {
        return boardRepository.save(board)
    }

    @PutMapping("/{boardId}")
    fun updateBoard(@RequestBody board: Board,
                    @PathVariable("boardId") boardId: Long): Board {
        var preBoard: Board = boardRepository.findById(boardId).get()
        preBoard.title=board.title
        preBoard.description=board.description
        preBoard.writer=board.writer
        return boardRepository.save(preBoard)
    }

    @DeleteMapping("/{boardId}")
    fun deleteBoard(@PathVariable("boardId") boardId: Long) {
        boardRepository.deleteById(boardId)
    }
}

 

테스트


댓글