인프런 워밍업 스터디 클럽 1기 발자국 1회

인프런 워밍업 스터디 클럽 1기 발자국 1회

저는 일주일동안 16강까지 강의를 수강했구요. 기본적인 CRUD api 사용법과 데이터베이스 사용법에 대해 알수 있어서 좋았습니다.

 

맨처음에 강의를 수강을 시작하면서 개발환경 세팅에 관해서 조금 고민이 생겼었는데요.

개인적으로 vscode를 크게 불만없이 사용중이라 제 개발환경에 크게 벗어나고 싶지 않는 점이 가장 컸습니다.

그래서 저는 vscode extention을 통해 자바 에디터환경을 준비했고,

강사님과는 살짝 다른 openJDK인 Amazon Corretto 11를 다운받아 설치했습니다.

https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html

그래서 지금까지 사용해본바, 아직까지는 크게 불편한 점이 없어서 다행입니다.

 

강의를 수강하면서 이제 첫번째 프로젝트를 만들어야 했는데요. 문제는 현재 자바스프링 버전에서는 제가 원하는 자바와 스프링 버전을 선택할수 없었습니다.

제가 프론트엔드 강의를 들을때 라이브러리의 버전이 안맞아서 코드 작성에 고생했던 기억이 떠올라서 이건 꼭 맞춰서 가야겠다는 생각이 강력히 들어서 방법을 찾기 시작했습니다.

제가 할수 있는 모든 방법을 통해서 방법을 알아보니 생각보다 변경이 간단한 부분이었고, gradle환경의 변수내용만 바꿔주면 강의와 동일하게 프로젝트를 설정해서 진행할수 있었습니다.

image

그리고 강의를 들으면서 어노테이션을 계속 사용하게 되는데, 원하는 어노테이션이 자동으로 import되지 않더라구요.

그래서 확인해보니, 다음과 같은 디펜던시를 설정해줘야지 웹api관련 어노테이션을 사용할수 있는걸 알았습니다.

implementation 'org.springframework.boot:spring-boot-starter-web'

이제 자동 import는 문제없이 잘 되게 되었습니다!

 

저는 mac환경에서 프로젝트를 진행하고 있는데요. 매번 gradle파일을 수정할때마다, 코드를 변경할때마다 매번 build를 진행해야되고, 서버를 재시작해야되는 불편함이 있었습니다.

그래서 분명히 코드가 변경될때마다 자동으로 빌드해주고 서버를 재시작해주는 설정이 있을거라고 확신을 갖고 검색을 했습니다.

검색을 통해 스프링 데브 툴이라는 개발 디펜던시의 존재에 대해서 알게되었고,

developmentOnly 'org.springframework.boot:spring-boot-devtools'

application.properties를 작성했지만 원하는대로 작동되지 않았습니다..

spring.devtools.restart.enabled=true
spring.devtools.restart.poll-interval=2000
spring.devtools.restart.quiet-period=1000

그래서 검색결과는 아주 오래전부터 지원되고 있음을 알게 되었는데, 정작 작동되지 않으니, 너무 답답한 상황이었습니다.

 https://github.com/redhat-developer/vscode-java/issues/3392

 

그런 와중에 우연히 스택오버플로우 글을 보게되었는데, 두개를 동시에 실행해야 된다는 정보를 보게 되어서 그대로 했더니 동작하게 되었습니다!

 https://stackoverflow.com/questions/54937518/visual-studio-code-spring-boot-reload-static-content

./gradlew bootJar --continuous
./gradlew bootRun

 

그외에 자바 스프링을 공부하면서 알게된점은 결과 반환을 json 형식으로 보내주려면 객체를 새로생성해서 데이터를 넣어주면 간단하게 할수 있게되었구요.

DTO의 역활이 클라이언트 -> 서버 로 데이터를 제자리에 알맞게 변환시키는것도 중요하지만 반대로 서버 -> 클라이언트로 데이터를 전달할때도 중요하게 사용되어진다는걸 알게되었습니다.

자바에서도 람다와 익명클래스로 코드를 좀더 간결하게 작성할수있는 방법과 데이터베이스 조작언어에 관해서 좀더 다양한 키워드를 알수 있어서 좋았습니다.

 

특히 미션 4번에서는 데이터베이스의 있는 내용을 특정 기준으로 분류해서 모든 값을 더한 결과값이 최종 데이터가 되어야 되는 미션이었는데요.

맨처음에는 여기서 단순 쿼리로 데이터를 받아와서 컨트롤러에서 처리하는것을 생각해보았지만, 강사님께서 sum, gruop by 옵션에 대한 힌트를 주셔서 이것을 활용하면 더 훨씬 간결한 코드가 나올것같아 관련 내용을 검색해서 찾아보았습니다.

 

sum과 group by를 사용한다면

select sum(price) as seles_amout from fruit group by is_sold having is_sold = 1;

이런식으로 작성해서 쿼리를 두번 호출하면 원하는 데이터를 가져올수 있게 됩니다.

 

그런데 저는 이 코드에서 두개의 컬럼의 결과값을 한번에 가져올수 있을거라는 생각이 들어서 조금더 검색해보기로 했습니다. sql에서도 다양한 조건 검색을 제공하고 있는데 그중에서 case를 사용해서 원하는 컬럼의 값만 가져올수 있는걸 알게 되었습니다.

제가 최종적으로 작성한 코드는 다음과 같고.

SELECT 
SUM(CASE WHEN is_sold = 1 THEN price ELSE 0 END) AS seles_amount,
 SUM(CASE WHEN is_sold = 0 OR is_sold IS NULL THEN price ELSE 0 END) AS not_sales_amount
 FROM fruit

이고 결과적으로 gruop by는 사용하지 않았지만, 깔끔하고 한번에 가져올수 있어서 만족합니다.

 

다음 주차의 목표는 ci/cd 설정및 아마존 배포까지 해보는것입니다!

목표를 이룰수 있도록 열심히 한번 해보겠습니다.

댓글을 작성해보세요.