인프런 커뮤니티 질문&답변

김병곤님의 프로필 이미지
김병곤

작성한 질문수

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

[실습] 서비스 개발

문법질문입니다.

해결된 질문

작성

·

59

0

image.png

코드를 제가 잘 이해하고 따라가는지 궁금합니다.

질문1

리포지토리에서 활성화가 되어있는 프로젝트만 가져와서

projects에 리스트 형태로 넣어서 다시 ProjectDTO 형태로 넣어서 컨트롤러에서 처리하게끔 해주는건가요?

질문2

여기서 제가 이해한게 맞다면 return 할떄 projects.map을 왜 이용하는건가요? map은 키와 값으로 이루어 져있는 배열로 알고있는데 ProjectDTO가 키와 값으로 이루어져서 그런건가요?

질문3

ProjectDTO(it) 여기서 말하는 it은 무엇을 의미하는지 알수있나요?

 

답변 1

0

정보근님의 프로필 이미지
정보근
지식공유자

안녕하세요 정보근입니다:)

 

질문 1)

본 프로젝트에서는 사용자가 특정 페이지에 접속했을 때,

데이터베이스에서 사용자에게 보여줄 데이터만을 조회해온 뒤

조회해온 데이터로 해당 페이지의 화면을 그려줍니다.

 

그럼 전체적인 구조는

클라이언트(사용자, 프론트) <-> 서버(스프링) <-> 데이터베이스가 되겠죠.

 

이 때 서버 <-> 데이터베이스 영역에서 사용자에게 보여줄 데이터를 조회해오는 역할이

presentationRepository.getActiveProject()가 되고요.

테이블에서 조회해온 레코드는 서버에서 엔티티로 매핑이 됩니다.

데이터베이스에서 조회해온 데이터를 담는 통이라고 생각해주세요.

 

그럼 서버에선 조회해온 데이터를 사용자에게 전달해줘야겠지요.

그런데 엔티티를 그대로 클라이언트에게 노출시키는 건 일반적으로 좋지 않습니다.

그래서 사용자에게 노출시키는 목적으로 또 다른 통을 만들고 이걸 DTO라고 부릅니다.

 

결과적으로 아래와 같은 모양으로 각각의 영역에서 DTO, 엔티티를 이용해 데이터를 주고 받는겁니다.

                   (DTO)          (엔티티)

클라이언트(사용자, 프론트) <-> 서버(스프링) <-> 데이터베이스

 

서버 안에서도 컨트롤러는 사용자와의 연결, 리포지토리는 데이터베이스와의 연결을 담당하고요.

서비스의 getProject() 메소드는 리포지토리를 통해 데이터를 조회해오고,

엔티티를 컨트롤러에 넘겨줄 DTO 형태로 변환하는 기능을 한다고 보시면 됩니다.

저희 프로젝트가 단순해서 엔티티 -> DTO 변환 역할만 하지만,

요구사항에 따라서 다양한 기능을 할 수 있습니다.

 

질문 2)

여기서 map은 알고 계신 자료 구조가 아니고, 코틀린에서 컬렉션 자료형에 대해 지원하는 메소드입니다.

map은 인풋을 받아서 아웃풋을 내는 기능을 한다고 보시면 될 것 같아요.

 

위의 project.map {ProjectDTO(it)} 코드의 경우는,

각각의 Project 엔티티에 대해 반복을 돌면서 Project DTO로 변환한 뒤 다시 리스트로 모아주는 기능을 합니다

결과물은 List<ProjectDTO>가 되는거죠.

만약 project.map {it.name}과 같이 코드를 작성한다면,

각 엔티티에서 이름을 뽑아와 리스트로 모아줍니다.

결과물은 List<String> 형태가 될거에요.

 

결국 아래 수도코드와 같은 기능을 한다고 보시면 됩니다.

val projectDtos: List<ProjectDTO> = mutableListOf()
for (project: projects) {
  projectDtos.add(ProjectDTO(project))
}

 

코틀린의 컬렉션 API로 검색해보시면 도움 되실 거에요.

 

질문 3)

it은 컬렉션 api의 인풋으로 들어오는 각각의 요소를 가르키는 코틀린의 예약어입니다.

여기선 projects 리스트 안의 각각의 엔티티를 말합니다.

 

감사합니다.

김병곤님의 프로필 이미지
김병곤
질문자

정말 진심으로 이해가됐습니다. 정말 감사합니다. ㅠㅠ 열심히 포기하지않고 끝까지 듣고 모르는 부분은 더 공부해야겠네요 정말 감사합니다.!

김병곤님의 프로필 이미지
김병곤

작성한 질문수

질문하기