처음부터 제대로 배우는 스프링 부트 - 자바와 코틀린으로 만나는 클라우드 네이티브 애플리케이션 구축
마크 헤클러 지음, 오시영.서정대 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


스프링 부트 책은 시중에 매우 많이 있습니다. 

이책의 장단점 및 대상 독자분들에 대해서 리뷰를 해보려고 합니다.

 

책의 표지를 우선 소개해드리고 싶었습니다.

표지에서 언급된 키워드가 이 책의 포인트이고, 저자의 책 구성 방향을 잘 설명하고 있습니다.

책 표지에서 언급된 키워드를 살펴보면, 책의 특징은 아래와 같습니다.

  • 처음부터 제대로 배우는 (Up & Running) : 중급자를 대상으로도 좋다는 의미 (추천사 참고)
  • 자바와 코틀린을 함께 경험할수 있다. 
  • 클라우드 네이티브를 경험할수 있다.
  • 저자분이 VMWare 개발자 분이시며, 자바개발자 및 코틀린 구글 개발자 전문가 입니다

 

■ 인트로는 쉽게..

 

■ 선택사항

 

■ 구체적으로 책 내용 살펴보기

springboot에 대해서 전반적인 부분을 언급합니다. 가장 기본이 되는 CRUD처리 및 API에 대해서 설명은 기본이고

설정, 레디스, 몽고DB등 다앙한 접속, MVC, 프로덕션, 리액터와 웹플럭스를 사용한 리액티브 프로그래밍, 배포, 보안등에 대해서 언급합니다.

보통 책이 모든 기능을 다 설명하면, 이것이 메뉴얼같은 느낌이 들기도 합니다.

하지만 그중에 가장 많이 사용하고 핵심이 되는 개념이 있고, 많은 Annotaion중에 기본적이라고 생각하는 중요하고 많이 사용하는 부분이 있습니다. 여기서 이책의 장점이 있는것 같습니다. 가장 중요한 개념을 빠르게 학습하고 이해한다면, 그것을 바탕으로 가지치기가 가능합니다.

 

처음 Spring이나 Springboot를 사용할때, 뭔가 주입식으로 알게 되는것이 @Annotation이다.

거의 반복하는 패턴으로 사용하기 때문이다.

 

p.53

 - @Controller : MVC의 여러부분을 연결하는데 사용됩니다. 데이터를 전송하는 부분과 데이터를 표현하는 부분(view)을 분리해서 생성하는데, 이것을 연결해주는 역활을 합니다.

@Controller는 @Component의 스테로오타입 별칭입니다. 

저희가 많이 사용하는 어노테이션인 @Component, @Controller, @Repository, @Service에 대해서 모두 해당 jar에 있습니다.

@Controller가 붙은 클래스는 Model객체를 받습니다. Model객체로 표현 계층에 모델기반 데이터를 제공합니다.

또 ViewResolver와 함께 자동해서 랜더링 뷰를 처리합니다.

 

해당 어노테이션의 소스를 보면, Controller, Repository, Service모두 @Component를 기본적으로 포함하고 있습니다.

 

 

@RestController의 구성요소 : Controller + ResponseBody

@RequestMapping 

 - @GetMapping, @PostMapping .....

- REST 구성시, API의 http 상태값에 대한 고민도 되어야 합니다.

 

 

■ DB Access

 - @Entity : JPA어노테이션입니다. (javax.persistence)

 - @Repostory : Spring Data에 정의

 - JPARepository , CrudRepository

- P.82 데이터 테스트를 위한 방법

1) CommandLineRunner, ApplicationRunner를 활용한 방법

2) 람다를 이용하는 방법

3) @Component클래스와 @PostConstruct 메소드를 이용하는 방법

 

■ 설정과 검사

- @Value : application.properties의 내용을 사용하는데 보통 환경변수처럼 ${}형태로 재사용이 가능하다

// 초기값을 설정할수 있다.
@Value("{test-key : initValue}")

 

- @ConfigurationProperties : @Value의 유연하지만, 단점을 보완함, 그 클래스의 속성을 앱 환경에 추가

@ConfigurationPropertiesScan을 이용해서 추가함

@ConfigurationProperties(prefix="greeting")

- 자동 설정 리포트

- 액추에이터 : 스프링부터에서 수행되는 다양한 정보를 취득가능하다.

https://incheol-jung.gitbook.io/docs/study/srping-in-action-5th/chap-16.

 

■ 다양한 데이터 환경 구성하기

"스프링데이터"를 사용해서 처리하는 다양한 방법

p. 125. 많이 사용하는 lombok에 대한 어노테이션 설명

p. Neo4j를 이용한 서비스 개발하기 내용이 있습니다.

 

 

■ 비동기로 처리

 

■ 추가적인 사항

- ApplicationContext에 대한 중요한 정리 (p.239)

 - Spring Security를 통한 인증 보안

 - jar를 통한 배포 방안,처리 방법등에 대한 내용으로 구성되어 있습니다.

 

전반적으로 SpringBoot를 사용하는데, 필요한 개념을 초급,중급 모두 도움이 되는 구성되어 있고, 여러가지 고민되는 요소에 대해서 

정의를 하는 방향이 흥미롭고 도움이 많이 됩니다. 사용법에 대한 설명도 있지만, 왜 사용해야 하는지에 대한 공감대 형성을 통해서 지금 기술의 발전이 어떤 방향이고, 해당 부분은 SpringBoot를 통한 해결방안이 잘 제시되어 있습니다.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
풀스택 테스트 - 10가지 테스트 기술의 기본 원칙과 전략
가야트리 모한 지음, 최경현 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


개발할때, 테스트의 중요성은 이제 어느 누가 강조하지 않아도 당연한 절차로 생각되어집니다.

하지만, 실제 테스트를 잘하기 위해서는 많은 난관이 존재합니다.

크게는 사용자가 실제 사용하는것처럼 동일한 케이스를 만들고 가상의 mock객체를 구성하는 것이

말로는 쉽지만, 실제 구성하기 위해서는 다양한 케이스가 존재하고, 이러한 것을 프로그램적으로 처리하는 것이 

쉽지많은 않습니다. 또한 너무 다양한 언어와 외부 라이브러리가 존재하기 때문에 이러한 것을 TestCase로 작성하는것은

어떨때는 기능개발보다 어렵습니다.

 

저자는 집필의도를 통해서 우리가 제품에서 테스트를 실패하는 원인은 아래와 같이 정의합니다.

  • 사용자 화면 기준의 End to End 테스트 집중하는 현상
  • 일부 기능테스트만 수행하고, 비기능적인 문제를 찾지 못하는 현상
  • 수동적인 테스트에만 의존하는 현상

정말 다 맞는 말입니다. 많은 분들이 느끼는 문제점이 오랜시간 흘러왔지만, 이러한 것을이 아직도 쉽게 해결되지 않는 문제점 이기도 합니다.

 

평소 풀스택이라는 단어가 좋게도 느껴지는데, 어떠한 부분에서는 조금 과장된 단어가 아닐까 생각이 들기는 합니다.

이책에서의 내용을 살펴보면서, 어떠한 의미로 풀스택테스트라는 제목인지 살펴보려고 합니다.

책에서 말하는 "풀스택"이라는 의미는 모든 기술을 의미하는 것이 아니고, <UI계정, 서비스 계청, 데이터베이스> 를 커버하는 애플리케이션의 전제 범주를 의미하는 것입니다.

 

 

 

■ 책이 구성

· 웹 및 모바일 어플리케이션을 대상으로 10가지의 테스트 기술을 상세히 설명합니다.

· 보통 많이 들어보셨을 포스트맨, Jnit 및 다양한 실제 다양한 테스트를 하기 위한 기법이 소개되어집니다.

· 눈에 들어온 분야는 "데이터테스트", "시작적 테스트", "보안테스트", "성능테스트" 등등 매우 다양하고 생소하지만 평소에 필요한 테스트 기법이 설명되어지고 있어서 매우 다양한 분야에 걸처서 테스트 기법이 소개되어 집니다.

· 조금 화두가 되고 있는 AI/ML,블록체인에 대해서 테스트 하는 기법 소개도 많이 흥미로운 내용입니다.

· 테스트 개념 뿐만이 아니라 간단한 실습도 진행을 하면서, 해당 기법을 통해서 독자분들이 개발환경에 맞는것을 조금더 학습해 갈수 있는 다양한 방법을 소개한다는 점이 매우 좋았습니다. 모든 개발 환경을 다 커버하는 책은 없습니다. 단순히 Spring환경에서 구현을 하여도 정말 다양한 방법으로 개발되어서 100% 각자의 환경이 일치하는 환경으로 테스트 샘플을 구할수는 없습니다. 그런점에서 다양한 기법이 소개되어지고, 그 원리를 이해하면 활용할수 있는 방향을 제시하는 부분도 매우 많은 도움이 되는 책이라고 생각합니다.

· 10가지 정의하고 있는 풀스택 테스트

 

 

■ 1. 수동 탐색적 테스트

· 수동테스트 vs 수동 탐색적 테스트는 분명 다른 개념이다.

· postman : 많이들 사용하는 tool, 로그인 후 테스트 url정보등이 서버에 저장되기 때문에 기업 보안정책 검토 필요

· https://any-api.com/ (공개된 api 사이트)

· wiremock : https://wiremock.org/start

다른 구성요소의 작동을 모방하는 스텁을 만들고 변경하기 위한 도구
wiremock에 대해서 실행해본 화면 "여기서는 stub을 잘 만드는것이 핵심으로 보입니다"

<UI탐색도구>
· 다양한 브라우저를 테스트 할수 있는 클라우드 테스트 플랫폼

보통 상황에 따라서 PC에 설치되지 않는 브라우저를 테스트 하는 경우가 종종 있습니다. 클라우드에서 비용을 지불해야 하지만 이런 사이트를 알고 있으면 좋은것 같습니다. (너무 비슷한 사이트들이 많아서 책에서 언급된 플랫폼 정보는 아래와 같습니다)
1) https://www.browserstack.com/

2) https://saucelabs.com/

· 버그마그넷
크롬, 파이어폭스에서 플러그인방식으로 사용
https://chrome.google.com/webstore/detail/bug-magnet/efhedldbjahpgjcneebmbolkalbhckfi

 

· 크롬 개발자 도구

가장 많이 사용하고, 다양한 기능을 제공한다 책에 소개된 내용중 평소에 알지 못한 기능을 기록한다.
1) 느린 네트워크 환경 테스트

 

2) 서비스 중단시 작동
특정 요청을 block처리를 해서, 서비스 중단 시나리오를 테스트 할수 있다.

 

 

 

■ 2. 자동화된 기능 테스트

마이크로 테스트, 매크로 테스트의 개념을 알아야 한다.

· 유닛 테스트의 백앤드 프레임워크

JUnit, TestNG, NUnit

· 유닛 테스트의 프런트앤드 프레임워크
Jest, Mocha, Jasmine

· 계약테스트 활용

Postman, pact (https://docs.pact.io/)

· 서비스 테스트 활용

postman, Rest Assured(https://rest-assured.io/), 가레테(https://github.com/karatelabs/karate)

· UI기능 테스트

셀레니움(https://www.selenium.dev/), Cypress (https://www.cypress.io/)

 

· 커버리지를 관리하기 위한 방법

TestRail(https://www.testrail.com/), Jira, 엑셀 등

· 참고) JetBrain에서 테스트를 위한 IDE가 있어서 소개합니다. (https://www.jetbrains.com/aqua/)

· 행동 주도 개발 (BDD)
 테스트 할때 많이 들어보았을 Given, When, Then 구조를 가진 사용자 스토리 작성하는 기능 제공 (https://cucumber.io/

· Cypress에서도 테스트 케이스를 생성해서, Junit처럼 테스트 결과를 확인할수 있습니다.

<서비스 테스트>

· Rest Assured에서는 restapi를 자동화 테스트를 수행한다. Junit, TestNG모두 사용할수 있다.

<유닛 테스트>

· java : JUnit, TestNG, .net : NUnit, javascript : Jest, Mocha, 루비 : RSpec

 

■ 3. 지속적 테스트

· 많이 사용하는 jenkins를 통해서 구성한다. 

· 여기에 다양한 플러그인을 통해서 ci/cd를 구성한다.

 

■ 4. 데이터 테스트

· jdbc를 통한 테스트 

· Deequ: 아마존에서 개발한 도구로 스파크 위에 구축된다. 대규모 배치 처리에 사용된다.

 

■ 5. 시작적 테스트

화면에서 시각적으로 몇px이 다르게 보여지는 경우에 대해서 테스트 하는 방법등 시작적인 부분에 대해서 테스트를 수행한다.

· Phantomjs(https://phantomjs.org/), BackstopJS(https://github.com/garris/BackstopJS)은 오픈소스이고, Applitools Eyes(https://applitools.com/platform/eyes/),Functionize(https://www.functionize.com/) 는 AI기반 유료 도구이다.

· 프런트쪽 유닛테스트는 Jest , react testing library등을 이용한다.

· 다시한번 오픈소스에 대해서 정리를 하면, CyPress, Galen(http://galenframework.com/), backstopjs등이 있고, 유료도구에는 applitools eyes, percy (https://percy.io/) 등이 있다.

 

 

■ 6. 보안 테스트

· 보안에 대해서는 범위도 넓고, 다양한 기법들이 있습니다.
1) SAST : 정적인 보안 테스트
2) SCA : 소프트웨어 구성 분석
3) 기능적 보안 테스트 자동화

4) 이미지 스캔
5) DAST : 동적인 보안 테스트

· OWASP Dependency-check는 수비게 설치를 해서 소스의 취약점을 검사해줍니다.

ex) mac에서는 brew을 통해서 쉽게 설치가 가능합니다.

· 스닉은 InlliJ에서도 쉽게 구성할수 있어서 SCA, SAST모두 지원해서 활용을 잘 해보면 좋을것 같습니다.

 

 

■ 7. 성능 테스트

<서버>

· JMeter를 통한 성능테스트

· 개틀링(https://gatling.io/) : 부하테스트, 스칼라 기반 script작성

· 아파치 벤치마크 : 보통 ab tool이라로 한다.

<프런트>

· WebpageTest (https://www.webpagetest.org/) : 무료 온라인 도구

· 라이트 하우스 : 크롬의 일부 기능 포함됨

 

■ 8. 접근성 테스트

· 접근성 테스트 전략

 

■ 10. 모바일 테스트

· Appium (https://appium.io/): "Appium은 웹드라이버를 사용하여 Android 또는 iOS에서 스크립트를 실행하고 네이티브 애플리케이션, 모바일 웹 애플리케이션 및 하이브리드 애플리케이션을 테스트하기 위한 오픈 소스 자동화 도구입니다" 크로스 플랫폼을 지원하는 자동화 도구로 애플에서 제공하는 iOS용 XCUITest와 구글에서 제공하는 안드로이드용 UiAutomator와 같은 OS별 번들링하여서 사용한다.

· 성능 테스트 도구에는 몽키(가오스 엔지니어링), 보안테스트 도구에는 MosSF, Qark가 있다.

 

 

책에서 언급하는 다양한 개념과 기법, 이것을 활용한 다양한 tool중에 평소에 알고 있었던 부분이 있지만, 새로운 tool 및 사용법을 소개받고 파악한 내용이 많아서, 앞으로도 필요한 테스트 환경 및 범위를 선정해서 활용을 잘하면 매우 큰 도움이 되는 책이라고 생각합니다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
추천 시스템 입문 - 개인화된 콘텐츠 제공을 위한 추천 시스템 설계부터 UI/UX, 구현 기법, 평가까지
가자마 마사히로.이즈카 고지로.마쓰무라 유야 지음, 김모세 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


추천시스템은 매우 오래된 키워드이고, 기본적으로 서비스 구성시에 고려하는 부분입니다.

겉모습은 추천시스템인지 모르고 사용하는 경우도 많고, 같은 추천시스템이라도 그 구성은 매우 차이가 많이 납니다.

요즘은 머신러닝, 딥러닝을 통한 다양한 추천 알고리즘을 구현할수 있습니다.

넷플렉스, 멜론, 쇼핑몰, 유트브 추천 알고리즘등  개인화된 정보를 가지고 조금더 편리한 서비스 및 매출, 구매유도를 하기 위해서 곳곳에 적용되는 사례는 이제 너무나 당연한 이야기가 되었습니다.

예전에는 추천이라는 주제는 대학교 연구과제로도 많이 연구한 학문분야 입니다.

검색엔진에서 "추천 알고리즘"을 검색해서 사용하기 보다, 기본에 충실한 추천 시스템을 구성해보려고 하고 

그 근간이 되는 원리를 학습하기에 좋은책으로 조금더 책의 내용을 살펴보려고 합니다.

 

■ 추천이 왜 중요할까?

· 조금 근본적이고 원칙적인 이야기 이기는 하지만, 추천이라는 키워드는 항상 서비스 측면에서 중요한 부분으로 여겨집니다.

저의 생각은 추천은 사람들의 시간을 줄여주는 의미가 있지 않나 생각이 듭니다. 지금 시점에 "유트브 맞춤 영상", "트위터 팔로우 추천", "서점에서 해당 책을 본 다른 추천" 이러한 기능은 실제 나와 성향이나, 필요하거나, 관심사가 비슷한 사람들이 했던 행동기반으로 다양한 정보가 제공되어 집니다.

· 추천을 구성하는 프로세스는 크게 3가지로 정의합니다.

1) 개요 추천 (개인화 없음) : 모든 사용자에게 동일한 정보를 제공하는 방식

2) 연관 아이템 추천 : 각 아이템 간에 유사도를 사용 

3) 개인화   

 

 

 

■ 추천시스템 알아가기

<검색엔진 vs 추천시스템>

· 검색엔진도 유사도 설정을 통해서 연관 아이템등을 제공하는 방식도 있다. 검색도 하나의 정보를 찾기위한 기술이고 두가지 항목에 대해서 비교한 표입니다. 비교표가 눈에 들어게 잘 되어 있습니다. 

<추천 시스템의 UI/UX는 어떻게 구성할까?>

· 기술적인 부분도 중요하지만, UX를 구성할때 어떻게 되어 하면 조금더 쉽게 개발한 추천정보를 제공할지에 대해서 설명하는 chapter가 있는 부분도 흥미로운 내용입니다. 구성을 하기 위해서 4가지 부류로 구분을 하여서 접근을 하라고 합니다.

1) 적합 아이템 발견 : "서울역 근처에 식사하는 식당 찾기"

2) 적합 아이템 나열 : "가능한 모든 서비스를 나열하는 방식"

3) 아이템 계열 소비 : "열람, 소비하는 동안 추천된 아이템 계열 전체에서 가치를 찾는 방식"

4) 서비스 내 체류 : "특별한 목적은 없는 경우"

 

 

 

 

이렇게 구분된 사항만 보면 잘 파악하기기 힘들다. 책에서 안내하는 화면 예시를 보면 조금 더 이해하기가 쉽다.

그리고 이책은 비개발자분들이 추천관련된 사항을 개발자 조직과 의사소통을 원할하게 하기 위해서 관련 용어 및 개념을 잡는 것을 책의 중요한 관점으로 설명하고 있으니 전반적인 개념을 잡는 목적으로도 좋은 입문책인거 같다.

 

 

 

■ 추천 알고리즘에 대해서

· 크게 분류는 2가지로 구성이 됩니다. 내용기반 필터링은 우리가 기본적으로 생각하는 수집된 데이타를 기반으로 유사도를 계산해서 추천하는 알고리즘 입니다. 이때, 책이라면 아이템의 제목, 장르, 출판일등의 속성과 사용자의 과거 이력등의 프로필 정보등을 활용합니다.

메모리 기반은2가지 방식이으로 구성되어 있는데, 기준을 추천인과 비슷한 추천인을 찾는 방식, 다른 방식은 선호하는 아이템과 비슷한 아이템을 찾는 방식으로 구성되어 있어서, 추구하고 찾으려는 관점으로 접근하는 방법입니다. 모델 기반은 미리 데이터의 규칙성을 학습한 모델을 미리 만들어두어서 사용하는 방식입니다.

· 추천 알고리즘에 대해서 다양한게 존재하는데 이러한 알고리즘중에 10개 이상 실습을 하면서 동작원리를 파악합니다.

코드는 Python으로 작성되어 있습니다. 파이썬을 통해서 쉽게 설치가 가능한 다양한 라이브러리를 사용합니다. pandas, numpy, sklearn, implicit, xlearn등 다앙한 라이브러리를 이용합니다. 아마 보시면서 머신러닝책에서 소개되는 부분도 있고, 예전에 어디서 경험한 코드를 보실수도 있는데, 머신러닝을 통한 추천알고리즘에 대한 부분이고 이책에서는 조금 더 다양하게 추천이라는 영영에 다양한 내용으로 구성된 것을 확인하실수 있습니다. 

 

■ 실제 서비스에는 어떻게 배포를 할까?

· 가장 쉽게 설계 할수 있는 방법은 사용자별, 또는 그룹별로 추천된 정보를 batch성으로 DB에 넣어서 처리하는 방식이다. 

이렇게 구성이 되면 실시간성의 확보에 대한 고민을 할것이고, 배치 주기도 고민하게 되는것은 당연한 부분이라고 생각이 듭니다.

 

· 책의 후반부에는 이렇게 만든 추천알고리즘이 정상적인지 검증하는 "추천시스템 평가" 부분이 있습니다.

개발을 하고 테스트 케이스를 만들고 검증을 하는 것처럼, 작성한 추천 알고리즘의 결과가 의도한 대로 정상 처리가 되고 있는지 확인하는 절차 침 과정은 반드시 필요하다고 생각됩니다.

추천 알고리즘에 대해서 설명 및 해당 알고리즘을 실제 서비스에 배포하기 위한 내용이 있는 부분, 추천 내용에 대한 검증기법등이 있는 부분은 책의 완성도를 높여주는 내용이라고 생각합니다. 이러한 부분은  운영하는 측면, 관리하는 측면에서 많은 도움 및 키워드들에 대해서 도움은 받을수 있는 부분입니다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
자바와 파이썬으로 만드는 빅데이터 시스템 - 하둡, 카프카, 아파치 스파크로 연결하는 나만의 빅데이터 전처리 파이프라인 구현
황세규 지음 / 제이펍 / 2023년 5월
평점 :
장바구니담기


■ 책에서 다루고 있는 빅데이터 시스템의 기술 요소들

· 빅데이터를 다루는 기술은 예전에 nosql이 화두가 되면서 다양한 기술들이 소개되어지고, 언급되었습니다.

이책에서 언급되고 내용이 구성되는 기술은 "하둡", "카프카", "스파크", "MySQL", "몽고DB" 입니다.

· 책의 목차부분인데, 여러가지 빅데이터 관련 시스템에 대해서 Java, Python의 언어로 프로젝트의 예시로 구성하고 있는것을 알수 있습니다.

 

 

· 이책에서 다루는 기술적인 요소들의 실습 Flow입니다.

맨 앞에서 있는 FRED(Federal Reserve Economic Data)는 미국 세인트루이스 연방준비은행에서 관리하고 제공하는 경제통계 시계열 데이타를 의미합니다. 이 데이터를 가지고 아래의 기술요소들을 순차적으로 목적에 맞게 활용하는 실습을 해볼수 있게 책이 구성되어 있습니다. 아래의 기술요소들은 모두 각각의 책으로 구성되고, 하나하나 별로 큰 주제임은 분명합니다.

하지만, 이렇게 전체적인 관점으로 데이터를 바라보게 되면, 하나의 데이터흐름에 대해서 1-Cycle을 알수 있게 합니다.

그래서 이러한 구성은 매우 도움이 많이 됩니다.

단독으로 kafka만 사용해도 되고, Spark만 사용해도 되고, MySQL만 사용해도 되지만 우리는 조금더 큰 개념으로 flow를 파악해보고 각각의 기술의 장단점을 비교해가면서 파악할수 있는 책의 구성이라고 생각합니다

실습환경은 window11, ubuntu 22.04

java 11LTS, python 3.9.5, 

IDE Eclipse(python은 Pydev를 이용해서 Eclipse을 이용함)

MySQL 11, Monggodb 6.0, Hadoop 3.3, kafka2.13, spark3.1.3

빌드 환경으로는 maven을 사용합니다.

등을 사용합니다. 대부분 안정적버전 기준으로 사용합니다.

이 책의 예시들이 java, python모두 Eclipse IDE로 통합해서 실습하는 과정이 소스 형상관리 및 개발의 편의성을 제공해주어서 정말 책의 제목처럼 "자바와 파이션으로 만드는....."의 의미를 충분히 담고 있다고 생각합니다.

동일한 환경구성하는 코드가 2개의 다른 언어를 작성된 코드를 보는 재미도 많이 있습니다.

 

  • 데이터 : FRED, 데이터 레이크
  • Hadoop HDFS : 데이터 추출(Extract), 변환하고 (Transform), 분산 클러스터에 저장 (Load)의 ETL스트림 프로세스
  • kafka : 비동기적으로 Spark에 데이터 전송을 하는 분산 메시징 시스템
    p.224 : 최종적으로 데이터 마트에 입력하기 위한 요소를 아래와 같이 정의합니다.
    (kafka에서 토픽으로 아래와 같이 정의를 하여서 구성하는 예시입니다.)

  • Spark : In-Memory처리방식, 데이터 전처리 과정에서 데이터 가공 및 적재하는 역활, 실시간 처리를 위한 스트리밍 작업
  • MySQL, MongoDB : 데이터 마트 역활
    • 최종적으로 데이터를 가공하고, 정제하여서 각각의 MySQL, MongoDB에 저장된 데이터를 python seabon 시각화 라이브러리를 이용해서 우리가 보고 싶은 관점의 차트를 구성해본다.

 

 

■ 빅데이터를 접해보고, 경험해볼수 있는 기회 제공

· 시스템적인 부분은 프로그램적인 부분과 비교해서 더욱더 정답이 없는 분야라고 생각됩니다. 또한 프로그램은 쉽게 혼자 또는 작은 단위로 테스트가 가능하지만, 빅데이터를 다루는 기술을 학습하고 실습하기 위해서는 기본적으로 필요한 데이터 사이즈 및 서버의 대수도 많이 필요합니다. VM을 통해서 실습하는것에 대해서는 한계가 있고, AWS 등을 통해서 실습하기에는 비용이 듭니다. 

이러한 부분에 대해서 이책의 실습예제는 좋은 가이드가 됩니다. 

· ETL, ELT의 개념 및 데이터 레이크, 데이터 웨어하우스, 데이터 마트에 대한 용어는 익숙하시신 분들도 계시지만, 단순히 개념적 또는 회사에서 기존에 구성되어 있는 시스템을 이용만 하고 있었지만, 실제 해당 도메인에 대한 부분의 용어 및 개념이 담당업무가 아니라서 정확한 개념은 모르시는 분들이 많을수도 있는데, 이 책을 통해서 이론적인 부분 및 각각의 차이점을 파악하기 좋습니다. 알고 보면 당연한 이야기 일수 있는 부분들의 별도의 용어 정리 및 산업계에서 통용되는 솔루션이 제공되고 사용되어 집니다.

 

■ hadoop관련

· 하둡의 내용이 처음에 나와서, 조금? 어? 하시는 분들도 있지 않을까 생각이 들었습니다.

2006년에 처음 hadoop의 소개되어지고, ECO System이 알려지고 그때는 인공지능은 hadoop을 통한 다양한 솔류션이 나오고, 자체적으로 구축하는 사업도 많았습니다. 지금은 많이 관심도가 식은 점은 사실입니다.

· 하지만 저는 이책에서 왜 처음에 hadoop을 소개하고 처음 기술요소의 장표로 구성하는지 책에 자세히 설명되어져서 좋았습니다.

하둡을 통해서 모든걸 다 처리하는 시점에서는 불편한 점들이 많았지만, 이제는 다양한 제품들이 그 부족한 부분을 잘 채워주고

하둡이 잘하고 효율적인 부분에 대해서 집중해서 사용하면 더 좋은 구성도가 나오게 됩니다. 

  1. 스케일 아웃이 가능한 저비용 저장소
  2. 기존 데이터웨어하우스의 schema on write, schema on read
  3. 다양한 데이터 타입
  4. YARN을 통한 장애 대응
  5. 대규모 빅데이터를 적용하여 데이터를 모델링하고 분석 가능



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
머신러닝 시스템 설계 - 프로젝트 범위 산정부터 프로덕션 배포 후 모니터링까지, MLOps 완벽 해부하기
칩 후옌 지음, 김대근.김영민 옮김 / 한빛미디어 / 2023년 3월
평점 :
장바구니담기


· 책의 난이도 있습니다. 단순히 Ops 입장의 책은 아니고 MLOps를 잘하기 위한 책이라는 생각이 들었습니다.

  머신러닝 알고리즘 개발자 분들도 이책을 보면, 많은 도움을 받으실수 있다고 생각이 들었습니다.

  알고리즘 개발시 필요한 요소들이 크게 시스템적으로 접근했을때 어떻게 접근하는지는 비슷한 부분이 많았습니다.

· 저자분의 다양한 경험 및 이론을 잘 뒷받침 하는 자료 및 근거가 제시되어 있어서 참고할 내용이 많이 있습니다.

· MLOps를 구축하기 위해서, 기준이 되는 바이블 같은 책입니다.

· 언급되는 항목이 꼭 MLOps가 아니여도 곳곳에 전체적인 시스템적으로 도움을 받을만한 내용이 있습니다.

· 책의 서문에 나온 대상독자 글에서도 명확히 이책의 장점이 나타납니다. 아래와 같은 시나리오는 한번쯤은 고민해봤을 부분이라고

생각이 되고, 지면을 통해서 순차적으로 설명되어 집니다.

 

 

■ 언제 머신러닝을 도입해야 할까? 우리 프로젝트에 머신러닝이 더 적합한 것인가?

· 약간 근본적인 질문입니다. 머신러닝 시스템을 구성하기 전에 한번더 머신러닝에 대해서 정의하고, 일반 솔류션과의 차이점을 환경적인 부분에서 재 정의 해보면 좋을것 같습니다.

· 책에서는 총 9가지 항목으로 정의합니다.

  1. 학습 : 시스템에 학습 능력이 있습니다. (RDBMS는 ML시스템이 아님)
  2. 복잡한 패턴 : 학습할 패턴이 존재하며 복잡합니다.
  3. 기존 데이터 : 사용가능한 데이터가 있거나, 데이터 수집이 가능합니다.
  4. 예측 : 예측에 대한 문제입니다.
  5. 본적 없는 데이터 : 본적없는 데이터가 훈련 데이터와 동일한 패턴을 갖습니다.
  6. 반복적입니다.
  7. 잘못된 예측으로 발생하는 비용이 낮습니다.
  8. 대규모로 수행됩니다.
  9. 패턴이 지속적으로 변합니다.

위의 사항을 보면, DBMS에 저장된 기존 아키텍처를 사용해서 정보를 제공하는것 말고, 예측, 패턴을 제공하는 서비스에는 머신러닝이 검토하는 과정이 필요해 보입니다.

 

 

■ 머신러닝 시스템 vs 전통적인 소프트웨어

분명 다르다고 알고 있고, 차이점이 있다는 것을 알고 있는데 정확히 표현을 못할수 있습니다.

· 가장큰 차이는 데이터 관점입니다.

· 기존 소프트웨어 SWE는 코드와 데이터가 분리돼 있다고 가정하에 설계되어있고, 가능한 코드와 데이터를 모듈화 하는것에 우선하는 경향이 있는데, ML 시스템은 코드, 데이터, 그리고 이것으로 생성된 아티팩트로 구성되어 있습니다.

· ML알고리즘은 데이터를 개선하는데 매우 큰 비중을 둡니다. 이렇게 다양한 데이터 샘플을 유연하게 처리 할수 있는 구조가 되어야 합니다.



■ 머신러닝 시스템의 핵심 : 반복 프로세스

· 보통 반복인 batch성 작업으로 처리됩니다. 하지만, ML에서는 조금 더 다르게 반복 프로세스가 더욱 중요한 부분을 차지합니다. 

그 이유는 워낙 많은 다양한 모델을 학습해야 하고, 그 중심에는 지속적으로 변경되는 데이타가 있습니다.

 

· 책에서 나온 광고 사례입니다.
· 책에서 언급된 처리는 사람이 할수 없는 시스템화 되어 이어야 하는 부분입니다.

 

 

■ 데이터의 중요성

· 우리는 DB에 많은 데이터가 저장되어 있다고 하지만, 데이터의 종류는 정형화된 데이타 말고, 더 많은 비정형화된 데이타가 있습니다.

데이터의 형태는 매우 다양하고, MLOps에서도 이러한 부분이 고려되어야 하고 

이러한 관점은 알고리즘 개발자입장에서도 매우 관심이 많습니다. 연구를 하려는 데이터가 다양한 포맷으로 제공되고

보통 상업적인 데이터를 제외하고는 그 형태가 매우 다양하기 때문입니다.

사용자의 로그를 기준으로 보아도, 년월일의 포맷이 다 다르고 그 data의 생성되는 위치도 모두 일치하지 않습니다.

이러한 Pre-Handling 하는 입장에서 어떻게 그 사항을 다루어야 하는지 설명합니다.

· Json, CSV, 넘파이, 판다스를 통한 설명이 있고, 데이터를 행과 열의 입장에서 제공하는 예시도 좋았습니다.

· 우리가 많이 사용하는 관계형 데이타베이스, RDBMS를 통한 데이터 접근법도 참고하면 됩니다.

· NoSql은 Json,xml, bson등의 형태로 인코딩됩니다. 그래프 모델 등이 있습니다.

· 정형데이타, 비정형데이타가 있습니다.


■ 훈련데이터

훈련데이터는 머신러닝을 하기위해서 반드시 있어야 하는 매우 중요한 요소입니다.

이러한 훈련데이터의 속성을 아는것이 매우 중요합니다. 학습에 필요한 데이터는 모두 동일하지 않고

어떻게 분류하고, 구분지어서 관리하느냐, 어느 관점으로 Data-Set의 기준선을 정하는지 등에 따라서 많은 차이가 발생합니다.

· 다양한 샘플링 기법으로 비확율샘플링, 단순 무작위 샘플링, 계층적 샘플링, 가중 샘플링, 저수지 샘플링, 중요도 샘플링이 있습니다.

· 레이블링의 기법으로는 수작업 레이블, 자연 레이블등이 있습니다.

· 클래스의 불균현 문제를 해결하고, 올바른 지표를 추출해서 리샘플링 할수 있게 합니다.

 

■ 모델에 대한 평가

작성된 모델이 정상적인가, 잘 동작하는지 평가하고 확인하는 과정이 필요합니다.

· 모델 개발과 훈련은 머신러닝 모델이 많은데 어떠한 알고리즘을 사용해야 할지 정하는데 도움이 됩니다.

  1. 최첨단만 추정하는 함정에 빠지지 않기
  2. 가장 단순한 모델부터 시작하기
  3. 모델을 선택할때 사람의 편향을 주의하기
  4. 현재 성과와 미래 성과를 비교 평가하기
  5. 트레이드오프를 평가하기
  6. 모델의 가정을 이해하기

· 양상블을 이용해서 처음 적용하는 입장에서 모델을 예측해보면 좋습니다. 배깅, 부스팅, 스태킹 기법을 이용합니다.

· 평가를 하기 위해서 ML도 베이스라인을 정하고, 교란테스트, 불변성 테스트, 방향예상테스트, 모델보정, 신뢰도 측정, 슬라이스 기반평가 등을 수행합니다.

 

 

■ 배포하기, 장애는 어떠한 것이 있을까?

보통 이책의 가장 관심이 있는 부분이 7장 (모델배포와 예측서비스) 부분이라고 생각이 듭니다.

· 아래 통상적으로 알고 있는 질문은 ML배포관련된 현업의 충분한 의문해소를 제공합니다.

<아래 사항은 이렇다는 것이 아니고, 많이 통념으로 인지하는 그러한 제목글입니다.>

  1. 한번에 한두가지 머신러닝 모델만 배포합니다.
  2. 아무것도 하지 않으면 모델 성능은 변하지 않습니다.
  3. 모델을 자주 업데이트할 필요가 없습니다.
  4. 대부분 머신러닝 엔지니어는 스케일에 신경 쓰지 않아도 됩니다.

· 시스템이 배치처리를 해야 할지, 온리인 처리를 해야 할지, 파이프라인에 대한 구성

· 많은 모델에 대해서 어떻게 효율적으로 서비스를 할지, 압축에 대한 부분에 대한 해법

  이러한 모델도 지속적으로 업데이트 해야 하는 부분도 기존 시스템과 다른 부분입니다.

· 장애관련해서는 프로덕션 환경 데이타가 훈련데이터와 다른경우가 있습니다.

· ML 인프라를 위한 레이어는 아래와 같이 제시합니다.

일반적인 시스템과 같이 사용하는것도 있지만, ML을 위한 별도의 레이어가 제공됩니다.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo