인프런 강의
-
처음으로 하는 백엔드 공부, 여태까지 해본 공부는 솔리디티를 이용한 스마트컨트랙 계약 공부였는데 이번에 처음으로 백엔드를 공부하기로 했다.
-
백엔드에서 주로 사용하는 스프링 부트를 이용하여 백엔드를 구성한다.
-
해당 프로젝트는 백엔드를 구성, 카카오 API를 이용하여 블로그 검색 시 검색어 순위를 테이블에 담는 간단한 프로젝트다.
-
언어는 코틀린을 사용하였다.
-
코틀린은 크로스 플랫폼 범용 프로그래밍 언어로, 자바와 완벽하게 호환이된다. JVM 기반의 언어이다.
-
var
읽기/쓰기 가능 -
val
읽기만 가능 -
Int, Int? 코틀린의 경우
?
이 있을 시 널값을 허용하고 없으면 허용하지 않는다. -
클래스 : 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해
변수
와메소드
를 정의하는 틀 -
인터페이스 : 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할을 담당하는 일종의 추상 클래스
-
자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있는 장점을 가질 것이다
-
하지만 다중 상속의 경우 메소드 추러의 모호성 등 여러가지 문제 때문에 자바에서는 클래스를 통한 다중 상속은 지원하지 않는다.
-
데이터베이스는 mariadb,dbeaver를 사용하였다
-
sql문 작성 등은 학부 수업에서 배웠기 때문에 작성할수있었다(간단한 테이블만...)
-
Spring initializr를 통해 스프링 프로젝트를 만들고 세팅을 하였다.
-
스프링은 자바 기반의 오픈 소스 프레임워크로, 애플리케이션 개발을 위한 다양한 기능과 도구를 제공한다.
-
build.gradle.kts
-
빌드
란? 맨날 프로젝트하면서 빌드라는 단어만 추상적으로 이해하고 있었지 이게 정말 뭘 하는건지 제대로 몰랐다 -
소스코드를 실행가능한 애플케이션 생성물을 만드는 과정이라고 생각하면 된다. 즉 빌드 과정은 소스코드를 컴파일하고 연겷하여 패키징을 통해 실행가능한 형태로 만드는 것이다
-
gradle
은 유연함과 성능에 초점을 둔 오픈소스 빌드 도구다. -
`maven은 소프트웨어 프로젝트 관리 도구다.
-
plugins
: 미리 구성해둔 태스크 그룹, 빌드 과정에서 필요한 정보들을 포함하고 있으며 커스터마이징이 가능 -
dependencies
: 의존성 관리, Maven reposityory에서 필요한 거는 검색해서 추가하면 된다. -
annotation
: 컴파일러나 프레임워크에게 특정한 동작이나 처리 방식을 알려주는 역할. 이를 통해 동작을 더 쉽게 구성하고 설정할 수 있도록 도와준다 -
이를 통해 의존성 주입 방식, 트랜잭션 관리 등을 간단하게 설정할 수 있게하여 개발 생산성을 향상시키고 코드의 가독성을 높여준다
-
application.yml or properties
: 스프링 부트의 프로젝트에서 사용되는 설정 파일.- 데이터베이스 연결정보, 서버 포트, 로깅 설정, 프로파일 등을 설정
- yml파일은 들여쓰기를 통해 계층적인 구조를 표현
- Representational State transfer API: 웹 서비스 자원을 다루기 위한 아키텍쳐 스타일
- REST는 클라이언트와 서버 간의 통신 방식을 정의하며, HTTP 프로토콜(서버 간 통신을 위한 통신 규칙)을 기반으로 한다.
- 특징 : 자원 지향적(URI를 통한 접근),
- 서버가 클라이언트의 상태 관리를 하지 않는다(요청은 상태 정보를 포함해야 한다)
- 메세지 기반: 요청(request)와 응답(response)의 형태로 이루어진다
- 캐시 가능: HTTP의 캐시기능을 사용하여 클라이언트의 응답을 캐싱
- 계층 구조
- 일반적으로 JSON 또는 XML 형식으로 데이터를 전달
DTO
: 데이터 저장 담당 클래스, controller,service,view 계층 간의 데이터 교환을 위해 쓰인다- 순수한 데이터 객체이며, getter,setter 메소드만을 가지고 있다
- 여러 개의 필드를 가진 객체로 데이터를 묶어 전송하기 때문에, 한번의 호출로 여러 필드 값을 전송할 수 있다
- 도메인 모델은 비즈니스 로직에 집중하고, DTO는 데이터 전소을 담하게 하여, 도메인 모델을 단순화하고 의존성을 관리하기 쉽게 만들어준다
-
Entity
: 데이터베이스 테이블에 매핑되어 테이블에 CRUD할 때 사용한다 -
repository
: enitity를 가지고 CRUD (db와 상호작용) -
service
: 비즈니스 로직을 구현하는 부분, 모델이 데이터베이스에서 받아온 데이터를 전달받아 가공하는 역할 -
controller
: 요청 url에 따라 적절한 view와 매핑을 처리한다. 적절한 responseEntity(DTO)를 body에 담아 클라이언트에 반환한다 -
Controller의 경우 API와 View(화면)을 동시에 사용하는 경우에 사용하며, RestController는 뷰가 필요없는 API만 지원하는 서비스에 사용한다
- ExceptionHandler와 Validation의 경우 해당 강의에서 다루긴했지만 따로 더 자세히 공부해야할 것 같다.
프로젝트 경험도 없고 해본거라곤 스마트 계약 작성해서 nft 마켓플레이스를 구현해본게 전부였다. 이번에 백엔드를 공부룰 처음 해봤는데, 생각보다 백엔드를 구성하는 요소들이 많고 각 요소들이 각자의 역할에 맞게 구조적으로 잘 짜여있는 모습이 인상 깊었다. 간단한 프로젝트를 하는데 이렇게 많은 요소들이 들어가는데 엄청 큰 애플리케이션의 백엔드 구성은 어떻게 되어있을까 궁금해진다. POSTMAN을 통해 API요청을 했을 때 응답이 잘 된것을 보고 굉장히 뿌듯한 감정이 들었다 ㅋㅋㅋ 내가 쓰고 있는 애플리케이션들에 나오는 모든 정보들이 다 이렇게 (생각보다 매우) 복잡한 백엔드에서 처리되서 나온다는 걸 알게된 뒤, 사용자에게는 보이지 않는 백엔드 개발자의 노고가 가늠이 안된다...