[인프런 워밍업 스터디 클럽 0기] 첫 번째 발자국

[인프런 워밍업 스터디 클럽 0기] 첫 번째 발자국

강의 출처

https://inf.run/XKQg

 

1주차 학습 내용 요약

 

Day 1: 개발 환경 설정 및 네트워크 기초

스프링 프로젝트를 만들고, 웹에서 데이터를 주고 받는 방법에 대해 이해했습니다.

API를 만들기 전에 API 설계를 어떻게 하는지 배우고, 그것을 기반으로 스프링의 어노테이션을 사용하여 실제 API를 개발했습니다.

 

Day 2: 첫 HTTP API 개발

클라이언트로부터 JSON 형식의 데이터를 받아와서 처리하는지에 대한 기본 코드를 작성하면서, 실제 도서 관리 애플리케이션을 만들어보았습니다.

 

Day 3: 기본적인 데이터베이스 사용법

디스크와 메모리의 차이를 이해하고, 간단한 엑셀로 비유를 통해 MySQL이라는 데이터베이스를 어떻게 다루는지 학습했고, MySQL을 사용하여 데이터베이스를 조작하는 기초적인 CRUD 작업을 익혔습니다.

또한, 스프링 서버에서 실제로 데이터베이스에 접근하도록 설정 파일을 작성하고 Jdbctemplate을 이용한 데이터베이스 연동을 학습했습니다.

 

Day 4: 데이터베이스를 사용해 만드는 API

요청 값의 검증과 예외 처리에 대한 로직을 작성하여 안정적으로 업데이트와 삭제 API를 개발했고, 스프링 서버가 데이터를 저장, 조회, 업데이트, 삭제할 수 있는 모든 기능을 구현했습니다.

 

Day 5: 클린 코드의 개념과 첫 리팩토링

클린 코드의 중요성과 코드를 깔끔하게 유지하기 위해 Layered Architecture를 도입하여 Controller, Service, Repository로 3단 분리하여 코드를 리팩토링하는 방법에 대해 배웠습니다.

이를 통해 코드의 가독성과 유지보수성을 향상시키는 방법을 알게 되었습니다.

 


 

1주차 미션

 

Day1

 

어노테이션을 사용하는 이유(효과)는 무엇일까?

나만의 어노테이션은 어떻게 만들 수 있을까?

 

어노테이션에 대해 학습하여 해당 질문에 대한 답변을 스스로 작성해볼 수 있는 미션이었습니다.

평소에 스프링에서 어노테이션을 사용할 때 그냥 사용하면 되는구나 정도로만 알고 있었는데, 어노테이션의 기본 문법부터 커스텀 어노테이션까지 학습하면서 어노테이션의 역할과 장점을 이해할 수 있었습니다.

보일러 플레이트 코드를 줄여주는 이점과 애플리케이션의 고유한 요구사항에 맞게 커스텀한 어노테이션의 사용이 개발 생산성에 도움을 줄 수 있다는 점도 알게 되었습니다.

이제는 개념들을 단순히 사용하는 것이 아니라, 그 뒤에 숨은 이유와 장점을 고려하여 개발에 적용할 수 있게 되었습니다.

 

블로그

https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C

 

 

Day2

 

GET API와 POST API 개발하기

 

문제에 제시된 API Spec을 보고 API를 개발하는 미션이었습니다.

먼저, GET API를 개발할 때 쿼리 파라미터의 처리 방법에 대해 고민하였습니다.

쿼리 파라미터의 개수가 한 개인 경우에는 변수에 바로 바인딩하는 방식을 선택하였고, 여러 개의 쿼리 파라미터가 필요한 경우에는 Dto 클래스를 활용하여 요청을 매핑하는 방식을 선택했습니다.

POST API를 개발할 때에는 Request Body로 전송되는 JSON 데이터를 받아오기 위해 Request Dto를 만들고, 이를 통해 데이터를 매핑하는 코드를 작성했습니다.

이때, Java 14에서 추가된 record를 활용하여 Dto를 불변 객체로 만들어 코드의 안정성을 높였습니다.

또한, Java 8 이후로 도입된 LocalDate 클래스를 사용하여 Date 클래스와의 차이점과 날짜 데이터를 처리하는 방법을 익힐 수 있었습니다.

 

블로그

https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%91%90-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C

 

 

Day3

 

자바의 람다식은 왜 등장했을까?

람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까?

 

람다식이 등장한 이유와 익명 클래스와의 관계에 대해 알아보면서 해당 질문에 대한 답변을 생각할 수 있는 미션이었습니다.

기존에는 익명 클래스를 사용하여 함수형 인터페이스를 구현하는데 많은 코드를 필요로 했으며, 이는 작은 작업을 수행하는 경우에도 코드의 양이 불필요하게 많아지는 문제를 야기했습니다.

하지만, 람다식의 등장으로 이러한 불편함을 해소하고, 간단한 표현으로 함수형 인터페이스를 구현할 수 있게 되었습니다.

람다식이 어떻게 코드를 간결하게 만들어주는지를 실제 코드를 통해 경험하면서 개념을 익힐 수 있었습니다.

 

블로그

https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%84%B8-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C

 

 

Day4

 

데이터베이스를 사용해 API 개발하기

 

JdbcTemplate을 활용하여 데이터베이스와 상호 작용하는 방법에 대해 깊게 학습했습니다.

필요한 테이블을 생성하고 JdbcTemplate을 사용하여 SQL 쿼리를 실행하여 데이터를 다루는 방법을 익혔습니다. 예제를 따라가면서 HTTP 요청에 따라 데이터베이스에 새로운 데이터를 추가하거나 업데이트하는 코드를 작성하면서 JdbcTemplate의 실제 활용도를 체감할 수 있었습니다.

테이블에 is_sold 칼럼을 추가하여 데이터의 판매 여부를 명시함으로써 데이터베이스의 일관성과 코드의 가독성을 향상할 수 있었습니다.

그리고 문제 3에서 SUM이나 GROUP BY 등의 집계 함수에 대한 정확한 이해가 필요하다고 느껴, 틈틈히 SQL 공부를 병행해야 겠다는 생각이 들었습니다.

 

블로그

https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C

 

 

Day5

 

클린 코드 개념을 적용하여 코드 리팩토링하기

 

클린 코드 작성하는 방법에 대해 찾아보고 과제에 제시된 코드를 리팩토링하는 미션이었습니다.

코드를 입력, 실행, 출력 단계로 명확히 분리하여 가독성을 향상하여 Main 클래스에서 코드의 흐름을 쉽게 이해할 수 있도록 설계했습니다.

코드를 읽는 개발자가 다른 개발자의 의도를 이해하는 데 도움이 될 수 있도록 메소드명과 변수명을 코드의 목적과 기능을 명확히 드러낼 수 있도록 작성했습니다.

코드를 작게 만들어 가독성을 높이고, 재사용성을 증가시키기 위해 클래스와 메소드는 하나의 책임만을 갖도록 설계했습니다.

상수를 활용하여 반복되는 문자열을 상수로 정의하여 코드의 일관성을 유지하고 오타를 방지했습니다.

주사위를 나타내는 클래스에서 OOP 개념을 도입하여 유연성을 높이고, 나중에 주사위 범위를 변경해도 코드의 수정이 용이하도록 구조화했습니다.

이번 미션을 통해 클린 코드 작성의 중요성과 가독성의 영향력을 체감할 수 있었습니다.

코드를 작성하는 것뿐만 아니라, 코드를 읽는 것이 개발에 있어서 중요한 부분임을 깨닫게 되었습니다.

 

 

블로그

https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8B%A4%EC%84%AF-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C

 


 

1주차 회고

 

프로젝트를 진행하면서 스프링 JPA에 대한 학습을 병행했는데, 조금은 힘든 도전이었지만, 그만큼 성취감과 만족도도 크게 느낄 수 있었습니다.

또한, 인프런 스터디를 통해 다양한 주제에 대한 학습과 토론을 할 수 있어 지식의 폭을 넓히는 데에 도움이 되었습니다.

여러 일을 병행하면서 힘들기도 했지만, 이러한 경험이 성장의 발판이 될 것이라고 생각합니다.

앞으로도 끝까지 완주할 수 있도록 노력하겠습니다:)

댓글을 작성해보세요.