[Kotlin+SpringBoot] 코프링 스터디 1주차 회고, 코틀린+스프링부트 플젝 생성과 간단한 API로 라우팅

SSO·2022년 5월 9일
0
post-thumbnail

Overview


미루고 미루다가..! 벌써 3주차 스터디를 달려가고 있는 지금..!! 드디어 1주차 회고록 쓰러 왓다 ㅎㅁㅎ
SOPT 동아리에서 코틀린+스프링부트를 활용해보는 스터디를 진행하길래 덥썩 신청해버렸다. 심지어 스터디장을 도우는 헬퍼로 자원을 했다..!! (열정과다 ㅋㅋ) 코틀린은 아예 모르고 스프링부트 개인적으로 잠깐 써본 것이 다 이다. 근데 왜 자원했냐면..!! 스터디 전에 커리큘럼과 컨텐츠를 함께 생각해보며 좀 더 적극적으로 공부해보고 싶었다. 처음엔 이런 실력으로 자원을 해도 될까 하면서 무작정 했는데 너무너무 감사하게도 스터디장님이 열심히만 하면 좋은 멘토가 될 수 있다며 용기(?)를 불어넣어주셨다 ㅎ.ㅎ 그래서 도전하게된 코프링 스터디!!
3주째 해 본 소감으로는.. 재밌다! 일정이 꼬이고 꼬여서 본스터디에는 참여하지 못하고 녹강으로 따라가고 있지만, 멘토헬퍼 스터디에서 이것저것 해보는 것이 재밌다 ㅎㅎ 벨로그를 통해 배우고 느낀 점을 일기장처럼 써내려 갈 것 >.<



MenHel Study


멘헬 스터디? 멘토 헬퍼, 그리고 스터디장이 모여 앞으로의 스터디 방향을 정하는 스터디이다! (단순) 두근두근 첫 멘헬 스터디!~! 첫주차인만큼 방향성에 대해 얘기를 나눠보았다. (물론 스터디장님이 큰 틀을 거의 짜와주셨다 ㅎㅎ)
첫 주에는, 나를 포함하여 코틀린이 처음인 사람이 많을 것을 예상하여 코틀린 언어를 잠깐 간략하게나마 짚고 스프링부트 소개 후 프로젝트를 생성해보고 API를 간단하게 만들어보는 것으로 간단히 멘헬 스터디를 마무리 지었다.



Week1 Study


일정이 맞지 않아서, 실시간으로는 참석하지 못하고 녹강으로 1주차 스터디를 따라갔다.

🌱 Kotlin (코틀린)

익숙한 파이썬이나 자바와는 생각보다 다른 언어였다 ㅇㅁㅇ!! 스터디를 해나가면서 새로운 것을 많이 배울 것 같다. 배운 후 중요해보이는 것이나 신기한 건 기록할 예정 ㅎㅎ 우선 1주차에 배운 내용은 이러하다!

변수 var와 상수 같은 val
var형은 값이 변할 수 있는 변수 타입! : 중간에 값이 변할 수 있다.
val형은 값이 변하지 않는 변수 타입! : 중간에 절대 값이 변하지 않는다.

조건문 when

when(var) {
	'value1' -> fun1()
    'value2' -> fun2()
    ...
    else -> doElse()

오 코틀린 when 조건문 완전 신기했다 😲

Nullable
변수 타입에 ?를 붙여줌으로써 null 사용을 가능하게 한다.

var <변수명>: <변수타입>? = <null or 변수값>

🌱 Intellij Ultimate

이제까지 Community용만 사용해왔는데, 대학 계정만 있으면 학생 인증 받고 Ultimate를 무료로 쓸 수 있었다 ㅇㅁㅇ!! 당장 Ultimate로 갈아타셍요~~

🌱 SpringBoot 프로젝트 생성하기 (Gradle)

코틀린용 스프링부트 프로젝트를 생성했다.
(Name) 프로젝트 이름을 적어준다.
(Language) Kotlin 선택
(Type) Gradle 선택
(Group) 그룹 이름을 적어준다. (구글, 네이버 같은! 나는 소현!)
(Package name) com.(그룹이름).(프로젝트이름) 식으로 해주면 된다.
(JDK) Java 17로 선택한다. 없으면 다운로드 받는다.
(Packaging) War 선택

🌱 Get Mapping

Controller 파일을 추가하여 @GetMapping()을 배워보았다!

root url로 접속했을 때 "Hello World!" 문구를 볼 수 있다. (기본 port 번호는 8080)

    // GET localhost:8080
    
    @GetMapping("")
    fun printHelloWorld() = "Hello World!"



GetMapping에 /introduce를 넣어줌으로써 해당 라우터를 만들 수 있다. "localhost:8080/introduce"로 접속하면 해당 문구를 확인할 수 있다.

    // GET localhost:8080/introduce
    
    @GetMapping("/introduce")
    fun printMyself() = "저는 김소현이고 23살입니다."



url에 값을 param에 추가할 수도 있다. {name} 자리에 들어가는 값으로 받아온다. (ex. name이 '소현'으로 들어오면 "이름: 소현", '쏘'로 들어오면 "이름: 쏘")

    @GetMapping("/introduce/{name}")
    fun printName(
            @PathVariable("name") name: String
    ) = "이름: $name"



쿼리를 통해 url의 param으로 값을 넘겨줄 수 있다. 쿼리는 ?로 시작하여 사용한다. (/introduce-param?name=<값>&age=<값>)

    @GetMapping("/introduce-param")
    fun printByQuery(
            @RequestParam("age") age: Int,
            @RequestParam("name") name: String
    ) = "이름: $name, 나이: $age"



전체 Controller은 다음과 같이 작성한다.

> com.sohyeon.kopring.controller.SamController.kt

@RestController
class SampleController {
    // GET localhost:8080/
    @GetMapping("")
    fun printHelloWorld() = "Hello World!"

    // GET localhost:8080/introduce
    @GetMapping("/introduce")
    fun printMyself() = "저는 김소현이고 23살입니다."

    /**
     * 1. Path
     * 2. Query
     * 3. RequestBody -> POST, PUT, DELETE
     */

    @GetMapping("/introduce/{name}")
    fun printName(
            @PathVariable("name") name: String
    ) = "이름: $name"

    @GetMapping("/introduce-param")
    fun printByQuery(
            @RequestParam("age") age: Int,
            @RequestParam("name") name: String
    ) = "이름: $name, 나이: $age"

}

🌱 Request Body Mapping

Request Body로 받아와서 url에 mapping 시킬 수 있다. 형식으로는 입력값을 받아오는 POST, 해당 값을 내놓는 GET, 값을 수정하는 PUT, 값을 삭제하는 DELETE가 있다.
여기서 GET은 이미 배웠다! 위에 Get Mapping~~ 그럼 나머지를 알아보자!

우선 Request Body로 값을 담아 올 형식을 정해주어야 한다. 예제로 User의 이름과 나이를 받아오는 형식의 UserDto를 data class로 만들어 주었다.

> com.sohyeon.kopring.dto.UserDto.kt

data class UserDto(
        val name: String,
        val age: Int
)

값을 받아오는 url 테스트는 어떻게 할 수 있을까? 다양한 서비스들이 있지만 코프링 스터디에서는 Postman 사이트를 사용하고 있다. POST부터 GET, PUT, DELETE API들을 테스트할 수 있다.

Postman 바로가기


본격적으로 매핑을 시작해보자. 입력한 값을 받아와서 저장하는 POST Mapping API를 생성하는 방법은 다음과 같다.
    @PostMapping("")
    fun postUser(@RequestBody userDto: UserDto) = userDto.name

json 파일로 입력한 값이 잘 넘어갔음을 확인할 수 있다. 여기서 name 값만 나타나는 것은 코드에서 userDto.name만 출력하도록 했기 때문이다.

값을 입력해줬으니 PUT Mapping으로 값을 수정해보자.

    @PutMapping("")
    fun putUser(@RequestBody userDto: UserDto) = userDto

수정한대로 값이 잘 들어간 것을 확인할 수 있다.

DELETE Mapping으로 값을 지워보자.

    @DeleteMapping("")
    fun deleteUser(@RequestBody userDto: UserDto) = "삭제에 성공하였습니다."

삭제 성공이다 >.<

전체 Controller

> com.sohyeon.kopring.controller.MappingController.kt

@RestController
@RequestMapping("/mapping")
class MappingController {
    @PostMapping("")
    fun postUser(@RequestBody userDto: UserDto) = userDto.name

    @PutMapping("")
    fun putUser(@RequestBody userDto: UserDto) = userDto

    @DeleteMapping("")
    fun deleteUser(@RequestBody userDto: UserDto) = "삭제에 성공하였습니다."
}


Feeling


코틀린부터 스프링부트까지의 기본들을 배웠다. 간단한 CRUD API를 만들어본 것 뿐이지만 만들어낸 API 대로 서버를 실행하고, url로 타고 들어가서 로직대로 동작하는 것이 재밌다 ㅎㅎ 앞으로의 스터디도 열심히 해서 코프링 어린이에서 어른이가 되어야지-!

1주차 코프링 스터디 회고 끝!

profile
쏘's 코딩·개발 일기장

0개의 댓글