본문 바로가기

전체 글

(564)
MLOps란 무엇인가? 1) DevOps 탄생 배경과 MLOps의 중요성!DevOps라는 개념이 처음 소개되고 몇 년이 지난 지금, SW 개발자라면 DevOps라는 말을 한 번쯤은 들어 보았을 것이다. 더 나아가 대부분의 기업과 조직들이 DevOps 문화를 도입하기 위해 많은 노력을 하고 있고 이미 운영을 하고 있는 조직 또한 많이 존재하는 것으로 알고 있다. DevOps는 말 그대로 개발(Dev)과 운영(Ops)의 합성어이다. 즉 개발, IT운영, 품질, 보안등 다양한 영역의 업무를 빠르게 조율하고 협업할 수 있도록 하여 더욱 높은 품질의 제품을 지속적으로 신속하게 고객에게 전달하고자 하는데 목표를 두고 있다. 이와 같은 목표를 달성하기 위해 SW 엔지니어가 개발한 코드를 지속적으로 빌드하고 테스트 하며, 안정적이라고 판단된..
Refactoring 2 책을 읽고! 개발자라면 단연 "리팩터링"이라는 단어를 처음 접하는 사람은 없을 것이다. 어마 어마한 천재이거나, 신이 아니라면 대부분의 개발자는 자신이 만든 코드를 다시 돌이켜 보며 리팩터링이라는 작업을 하게 된다. 리팩터링은 자신이 만들어 놓은 코드를 다시 한번 재정비하고 수정하여 더욱 좋은 코드로 발전시키는 작업이다. 리팩터링을 할 수 있다는 것은 SW에겐 축복이고 IT 세상에 무한한 발전을 가능하게 해 준 원동력 중 하나라고 생각한다. 외부에 변화를 최소화하며 내부에 변화를 지속적으로 해나가는 것이 리팩터링이기 때문에 리팩터링을 하는 애플리케이션은 계속 진화하고 있다고 볼 수 있다. 많은 사람들이 리팩터링을 거친 시스템은 과거보다 더 생산적이고 효율적이며 안전하게 될 것을 기대할 것이다. 하지만 리팩터링을 하는..
[Reactive Java] Spring WebFlux에서 Error 다루기 애플리케이션을 설계하고 개발할 때 다양한 케이스의 예외 상황을 고려해야 하는 것처럼, 리액티브 애플리케이션을 설계할 때도 모든 종류의 예외 상황을 처리 할 수 있어야 한다. 우리가 알고 있는 onError 시그널은 리액티브 스트림 스펙의 필수 요소여서 예외를 처리할 수 있는 경로로 전파 할 수 있다. 그러나 최종 구독자가 onError 시그널에 대한 핸들러를 정의하지 않으면 onError는 UnsupportedOperationException을 발생 시킨다.그리고 리액티브 스트림에서는 onError가 스트림이 종료되었다고 정의하고 있다. 그렇기 때문에 onError 시그널을 받으면 시퀀스가 실행을 중지하게 된다. 아래 onError 시그널을 처리할 수 있는 다양한 방법을 살펴보자.1. subscribe ..
[보안 인증] ITSEC란 무엇인가? ITSEC(Information Technology Security Evaluation Criteria)는 TCSEC와는 별개로 유럽에서 발전한 보안 표준이다. (TCSEC {미국} : https://digitalbourgeois.tistory.com/73) TCSEC는 기밀성만을 강조한 반명 ITSEC는 무결성과 가용성을 포괄하는 표준안이다. ITSEC는 TCSEC와 독일의 ZSIEC와 상호 호환을 목적으로 총 10가지로 보안 수준을 평가 한다. F-C1, F-C2, F-B1, F-B2, F-B3 -> TCSEC의 C1, C2등과 동일 F-IN(무결성), F-AV(가용성), FDI(전송 데이터 무결성), F-DC(데이터 기밀성), F-DX(전송 데이터 기밀성) -> 독일의 ZSIEC *정보 보안 개론 ..
[보안 인증] TCSEC 이란 무엇인가? TCSEC(Trusted Computer System Evaluation Criteria)는 미 국방부 문서(Rainbow Series : Orange Book이라 불린다) 중 하나이다. TCSEC는 1960년부터 시작하여 1972년 지침이 발표되고 1983년에 미국 정보 보안 조례로 세계에 최초 공표되었으며 1995년에 공식화 되었다. 오랜 역사를 가진 인증으로 보안 솔루션을 개발할 때 기준이 되는 표준이다. [TCSEC 보안 등급] D: Minial Protection -보안 설정이 이루어지지 않은 단계 C1 : DisTCSEC(Trusted Computer System Evaluation Criteria)는 미 국방부 문서(Rainbow Series : Orange Book이라 불린다) 중 하나이다..
[빅데이터] Data Lake란 무엇인가? [Data Lake란 무엇인가?] "가공되지 않은 다양한 종류의 데이터를 한 곳에 모아둔 저장소의 집합이다."   오랜 시간 데이터들은 데이터가 생성된 영역별로 수집 및 관리가 이루어졌으며 주로 정형화된 데이터로만 분석되어왔다. 하지만 빅데이터와 인공지능 기술의 중요성이 커지면서 다양한 영역의 다양한 데이터가 만나 새로운 가치를 만들어내기 시작하였다. 이와 같이 빅데이터를 효율적으로 분석하고 사용하고자 다양한 영역의 Raw 데이터(가공되지 않은 데이터)를 한 곳에 모아서 관리하고자 하는 것을 바로 Data Lake라 한다.    [Data Lake Framework 탄생] "Data Lake에 빅데이터를 사용자가 보다 쉽고 빠르게 사용할 수 있도록 제공해주는 Framework"   Data Lake라는 ..
[빅데이터] 데이터 웨어 하우스란? 데이터 웨어 하우스는 효율적으로 분석 가능한 형태로 정보들이 저장되어 있는 중앙 저장소이다. 데이터 웨어 하우스는 관계형 데이터베이스 , 트랜잭션 시스템 등.. 다양한 시스템으로부터 정기적으로 데이터를 수집하는 개념이다. 이와 같이 수집된 데이터를 비즈니스 인텔리전스 도구 ,SQL 클라이언트와 같이 데이터를 분석하는 목적으로 사용한다. 빅데이터 시대가 되면서 비즈니스에 중요한 결정을 데이터 기반으로 하는 사례가 늘어나는 등.. 다양한 이유로 많은 데이터 기반으로 데이터를 분석 및 처리해야하는 업무가 늘어나고 있다. 이와 같은 상황에서 많은 양의 데이터를 효율적으로 저장하여 I/O를 최소화하고 수십만 명의 사용자에게 빠른 속도로 쿼리 결과를 전달할 수 있도록 하는 것이 바로 데이터 웨어 하우스 이다. 데이..
[JAVA8] 람다 표현식을 조합할 수 있는 유용한 메서드 알아보기 1.Comparator - Comparator.comparing : comparing은 Comparator의 정적 메서드로 Function을 인자로 받는다. Comparator c = Comparator.comparing(Test::getTest); - reversed : 역정렬 Comparator.comparing(Test::getTest).reversed(); - thenComparing : 첫 비교결과가 동일할 경우 다음 비교 Function을 설정할 수 있다. Comparator.comparing(Test::getTest).reversed().thenComparing(Test::getScore()); 2. Predicate - negate : 기존 Predicate을 반전 시킬때 Predicate..
초보자를 위한 유니티 입문 요즘 5G 통신이 거론되면서 함께 관심이 모이는 분야중 하나가 바로 Game분야 이다. 2019년 올해초 Google은 Stadia를 소개하며 Game 시장에 관심을 보여 큰이슈가 되었다. 이와 같이 글로벌한 큰 기업들이 Game 시장에 관심을 보이는 이유는 무엇일까? 5G 통신이 가능하게 되면서 엄청난 속도로 많은 양의 데이터를 주고 받을 수 있게 되었다. 이와 같은 기술의 변화는 대용량의 데이터를 주고 받아야 하는 VR / AR 서비스를 사용화 할 수 있게 만들면서 다양한 형태의 Game을 탄생할 수 있는 발판을 만들었다. 그리고 더 나아가 VR / AR 뿐만 아니라 통신 속도의 증가로 Device는 가볍게 쓸 수 있도록 Cloud Sever 환경에 의존적인 게임 서비스들이 늘어나는 추세이다. 다양한..
[JAVA8] Lambda(람다)에서 지역변수 사용하기 람다 표현식에서는 익명 함수가 하는 것처럼 자유 변수(파라미터로 넘겨진 변수가 아닌 외부에서 정의된 변수)를 사용할 수 있다. 이와 같은 동작을 람다 캡처링이라고 부른다. 람다에서는 인스턴스 변수와 정적 변수는 제약없이 캡처하여 사용할 수 있다. 즉 자신의 바디 영역에서 언제든지 사용할 수 있다는 의미이다. 하지만 지역 변수는 제약 사항이 있다. final로 선언되어 있거나 실질적으로 final로 선언된 변수와 똑같이 사용되어야 한다. 즉 한번 할당한 지역 변수를 두번 할당하지 않는 지역변수만 람다에서 사용가능하다는 뜻이다. 아래 내용은 가능함. int message = "hi"; Runnable r = () -> System.out.println(message); 아래 내용은 가능하지 않음. int m..