logo
emoji
검색하기
어제 가장 많이 검색된 기술
emoji
가장 많이 읽은 글
logo
CatLIP: 2.7배 빠른 범주 학습(Categorical) 기법에 대한 연구(feat. Apple)
Apple이 매주 연구 결과들을 공개하고 있는데, 뭔가 반가우면서도 어색한 미묘한 기분이네요😲요즘 Apple은 Visual Encoder에 진심인건지, 작년 말에는 CLIP보다 작은 크기로 더 나은 성능을 보이는 MobileCLIP에 대한 연구를 공개한데 이어,이번에는 Web Scale의 이미지-텍스트 쌍(Image-Text Pair) 데이터들을 더 빠르게 사전학습하는 CatLIP에 대한 연구를 공개했습니다.CLIP의 대조 학습(Contrastive Learning) 대신 범주 학습(Categorical Learning)을 사용하여 성능은 비슷하면서도 속도는 2.7배 가량 빠르다고 하는데요,심지어 사전 학습 모델의 가중치와 함께 모델 코드의 공개도 언급하였습니다.CatLIP: 대규모 이미지-텍스트 데이터로 2.7배 빠른 사전학습 및 CLIP 수준의 인식 정확도를 달성Apple이 이번에 공개한 CatLIP(Categorical Loss for Image-text Pre-training)은 OpenAI에서 소개한 CLIP(Contrastive Language-Image Pretraining)과 비교하여약 2.7배 빠른 사전 학습 속도를 보이는 새로운 방법입니다.OpenAI가 CLIP에서 사용한 Constrastive Pre-Training 기법 (출처: OpenAI 홈페이지)OpenAI가 CLIP에서 사용한 대조학습(Contrastive Learning) 기법은 엄청난 규모의 이미지들을 사용한 사전학습(Pre-training) 방법입니다.이전의 지도 학습(Supervised Learning)에서는 학습 데이터로 사용하는 이미지가 어떠한 것인지를 나타내는 레이블(Label, 정답)이 있어야 하기 때문에 대량의 데이터셋을 생성하기가 쉽지 않았습니다.OpenAI에서는 이를 해결하기 위해 인터넷에 공개된 다양한 이미지와 이를 설명하는 텍스트(명시적인 설명 또는 설명으로 추정되는 텍스트 등)를 모은 다음,사전 학습 시 하나의 배치 내의 여러개의 쌍에 대해서 유사성을 학습하였습니다.즉, 위 그림과 같이 이미지와 텍스트를 각각 인코더에 통과시켜 임베딩(Embedding)을 추출한 뒤,학습 시 사용하는 하나의 배치(Batch) 내에서 서로 같은 Image-Text 쌍에 대해서는 유사도가 높도록(Positive Sample, 위 그림의 I-T Matrix의 대각 성분),서로 다른 Image-Text 쌍에 대해서는 유사도가 낮도록(Negative Samples, 위 그림의 I-T Matrix의 대각 성분을 제외한 나머지) 학습하는 방식입니다.이러한 대조 학습 방식은 잡음(noise)이 많은 대량의 데이터셋을 처리하는데 있어 획기적인 성과를 보였지만,이미지와 텍스트 임베딩 간의 광범위한 쌍별(pairwise) 유사성을 확인하는 과정에서 다소 많은 연산 작업이 필요합니다.이를 위해 모델의 일부를 최적화하거나 전처리된 인코더를 사용하는 방법들이 제안되었지만, CatLIP에서는 아예 이러한 과정을 다르게 접근하였습니다.CatLIP은 CLIP에서 사용했던 전처리 과정을 대조적 방법(Contrastive)이 아닌 분류 작업(Categorical)으로 재구성함으로써,대조 학습(Contrastive Learning) 시에 사용하던 유사도 계산(Similarity Comptation) 과정을 생략하였습니다.이를 통해 CatLIP의 사전학습 속도가 CLIP보다 2.7배 가량 빠르게 개선되었으며, 적용하는 작업(Downstream Task)에서의 정확도는 비슷하게 유지함을 보였습니다.CatLIP의 주요 아이디어• None 새로운 사전 학습 접근 방식: CatLIP은 이미지-텍스트 데이터의 사전 학습을 분류 작업으로 처리하여 사전 학습 단계를 가속화하는 방법을 제시합니다. 이 접근 방식은 이 분야에서 처음 시도되는 것으로, 일반적으로 CLIP에서 볼 수 있는 대조적 학습 방법과는 다르게, CatLIP은 이미지-텍스트 전처리를 다중 레이블 분류 작업으로 취급합니다. 이러한 접근 방식을 통해 텍스트에서 파생된 레이블을 이미지에 직접 연결하여 학습 과정을 단순화합니다.• None 스케일링 향상: 소개된 방법인 CatLIP은 데이터 및 모델 스케일링 시 정확도를 향상시킵니다. 특히 작은 규모의 이미지-텍스트 데이터셋에서 CatLIP 하에 긴 학습 기간 동안 CLIP을 사용할 때보다 더 나은 성능을 보입니다.• None 효율성 및 속도: 사전 학습 시 각 이미지-텍스트 쌍(pair)들 간의 비교를 하지 않아도 됨으로써, CatLIP은 CLIP 대비 연산 오버헤드를 줄일 수 있었습니다. 이를 통해 대규모 데이터셋에서 모델 전처리 속도를 CLIP 대비 2.7배 향상시켰습니다.• None 전이 학습: 전통적인 전이 학습 접근 방식은 사전 훈련된 모델 백본을 사용하고 분류기(Classifier)의 가중치를 새로 초기화하는 것이었습니다. CatLIP은 타겟 작업 레이블과 관련된 임베딩을 분류 계층에서 추출할 수 있어, 이렇게 추출한 임베딩을 직접 새 작업의 분류 계층에 초기화하는 것을 가능하게 합니다. 이는 새로운 작업에서 레이블로 사용할 수 있어 효율적인 전이학습이 가능합니다.• None 광범위한 검증: 논문은 객체 탐지 및 의미론적 분할과 같은 다양한 하류 작업에 걸쳐 광범위한 실험을 자세히 설명하며, CatLIP이 학습한 표현이 CLIP이 학습한 표현과 비슷한 성능을 보임을 보여줍니다. 특히, CatLIP을 사용한 비전 트랜스포머(ViT B/16)는 COCO 데이터셋에서 평균 정밀도 점수 49.9를 달성하여 CLIP의 성능과 동등하지만 사전 학습 시간은 2.7배 빠르다는 점을 강조합니다.CatLIP은 Vision Transformer(ViT)를 이미지 인코더로 사용하여 이미지로부터 특징을 추출합니다.이 과정에서 ViT는 이미지를 패치로 나누고, 이 패치들을 시퀀스처럼 처리하여 각 패치의 특징을 학습합니다.또한, 앞에서 설명하였던 것처럼 사전 학습을 이미지에 대한 텍스트 레이블을 분류(Classification)하는 작업으로 보고 접근합니다.이를 위해 학습 시에는 텍스트 캡션으로부터 명사들을 추출한 뒤,이를 WordNet을
4/30/2024
logo
CatLIP: 2.7배 빠른 범주 학습(Categorical) 기법에 대한 연구(feat. Apple)
Apple이 매주 연구 결과들을 공개하고 있는데, 뭔가 반가우면서도 어색한 미묘한 기분이네요😲요즘 Apple은 Visual Encoder에 진심인건지, 작년 말에는 CLIP보다 작은 크기로 더 나은 성능을 보이는 MobileCLIP에 대한 연구를 공개한데 이어,이번에는 Web Scale의 이미지-텍스트 쌍(Image-Text Pair) 데이터들을 더 빠르게 사전학습하는 CatLIP에 대한 연구를 공개했습니다.CLIP의 대조 학습(Contrastive Learning) 대신 범주 학습(Categorical Learning)을 사용하여 성능은 비슷하면서도 속도는 2.7배 가량 빠르다고 하는데요,심지어 사전 학습 모델의 가중치와 함께 모델 코드의 공개도 언급하였습니다.CatLIP: 대규모 이미지-텍스트 데이터로 2.7배 빠른 사전학습 및 CLIP 수준의 인식 정확도를 달성Apple이 이번에 공개한 CatLIP(Categorical Loss for Image-text Pre-training)은 OpenAI에서 소개한 CLIP(Contrastive Language-Image Pretraining)과 비교하여약 2.7배 빠른 사전 학습 속도를 보이는 새로운 방법입니다.OpenAI가 CLIP에서 사용한 Constrastive Pre-Training 기법 (출처: OpenAI 홈페이지)OpenAI가 CLIP에서 사용한 대조학습(Contrastive Learning) 기법은 엄청난 규모의 이미지들을 사용한 사전학습(Pre-training) 방법입니다.이전의 지도 학습(Supervised Learning)에서는 학습 데이터로 사용하는 이미지가 어떠한 것인지를 나타내는 레이블(Label, 정답)이 있어야 하기 때문에 대량의 데이터셋을 생성하기가 쉽지 않았습니다.OpenAI에서는 이를 해결하기 위해 인터넷에 공개된 다양한 이미지와 이를 설명하는 텍스트(명시적인 설명 또는 설명으로 추정되는 텍스트 등)를 모은 다음,사전 학습 시 하나의 배치 내의 여러개의 쌍에 대해서 유사성을 학습하였습니다.즉, 위 그림과 같이 이미지와 텍스트를 각각 인코더에 통과시켜 임베딩(Embedding)을 추출한 뒤,학습 시 사용하는 하나의 배치(Batch) 내에서 서로 같은 Image-Text 쌍에 대해서는 유사도가 높도록(Positive Sample, 위 그림의 I-T Matrix의 대각 성분),서로 다른 Image-Text 쌍에 대해서는 유사도가 낮도록(Negative Samples, 위 그림의 I-T Matrix의 대각 성분을 제외한 나머지) 학습하는 방식입니다.이러한 대조 학습 방식은 잡음(noise)이 많은 대량의 데이터셋을 처리하는데 있어 획기적인 성과를 보였지만,이미지와 텍스트 임베딩 간의 광범위한 쌍별(pairwise) 유사성을 확인하는 과정에서 다소 많은 연산 작업이 필요합니다.이를 위해 모델의 일부를 최적화하거나 전처리된 인코더를 사용하는 방법들이 제안되었지만, CatLIP에서는 아예 이러한 과정을 다르게 접근하였습니다.CatLIP은 CLIP에서 사용했던 전처리 과정을 대조적 방법(Contrastive)이 아닌 분류 작업(Categorical)으로 재구성함으로써,대조 학습(Contrastive Learning) 시에 사용하던 유사도 계산(Similarity Comptation) 과정을 생략하였습니다.이를 통해 CatLIP의 사전학습 속도가 CLIP보다 2.7배 가량 빠르게 개선되었으며, 적용하는 작업(Downstream Task)에서의 정확도는 비슷하게 유지함을 보였습니다.CatLIP의 주요 아이디어• None 새로운 사전 학습 접근 방식: CatLIP은 이미지-텍스트 데이터의 사전 학습을 분류 작업으로 처리하여 사전 학습 단계를 가속화하는 방법을 제시합니다. 이 접근 방식은 이 분야에서 처음 시도되는 것으로, 일반적으로 CLIP에서 볼 수 있는 대조적 학습 방법과는 다르게, CatLIP은 이미지-텍스트 전처리를 다중 레이블 분류 작업으로 취급합니다. 이러한 접근 방식을 통해 텍스트에서 파생된 레이블을 이미지에 직접 연결하여 학습 과정을 단순화합니다.• None 스케일링 향상: 소개된 방법인 CatLIP은 데이터 및 모델 스케일링 시 정확도를 향상시킵니다. 특히 작은 규모의 이미지-텍스트 데이터셋에서 CatLIP 하에 긴 학습 기간 동안 CLIP을 사용할 때보다 더 나은 성능을 보입니다.• None 효율성 및 속도: 사전 학습 시 각 이미지-텍스트 쌍(pair)들 간의 비교를 하지 않아도 됨으로써, CatLIP은 CLIP 대비 연산 오버헤드를 줄일 수 있었습니다. 이를 통해 대규모 데이터셋에서 모델 전처리 속도를 CLIP 대비 2.7배 향상시켰습니다.• None 전이 학습: 전통적인 전이 학습 접근 방식은 사전 훈련된 모델 백본을 사용하고 분류기(Classifier)의 가중치를 새로 초기화하는 것이었습니다. CatLIP은 타겟 작업 레이블과 관련된 임베딩을 분류 계층에서 추출할 수 있어, 이렇게 추출한 임베딩을 직접 새 작업의 분류 계층에 초기화하는 것을 가능하게 합니다. 이는 새로운 작업에서 레이블로 사용할 수 있어 효율적인 전이학습이 가능합니다.• None 광범위한 검증: 논문은 객체 탐지 및 의미론적 분할과 같은 다양한 하류 작업에 걸쳐 광범위한 실험을 자세히 설명하며, CatLIP이 학습한 표현이 CLIP이 학습한 표현과 비슷한 성능을 보임을 보여줍니다. 특히, CatLIP을 사용한 비전 트랜스포머(ViT B/16)는 COCO 데이터셋에서 평균 정밀도 점수 49.9를 달성하여 CLIP의 성능과 동등하지만 사전 학습 시간은 2.7배 빠르다는 점을 강조합니다.CatLIP은 Vision Transformer(ViT)를 이미지 인코더로 사용하여 이미지로부터 특징을 추출합니다.이 과정에서 ViT는 이미지를 패치로 나누고, 이 패치들을 시퀀스처럼 처리하여 각 패치의 특징을 학습합니다.또한, 앞에서 설명하였던 것처럼 사전 학습을 이미지에 대한 텍스트 레이블을 분류(Classification)하는 작업으로 보고 접근합니다.이를 위해 학습 시에는 텍스트 캡션으로부터 명사들을 추출한 뒤,이를 WordNet을
2024.04.30
emoji
좋아요
emoji
별로에요
logo
Rockstar 프로그래밍 언어 알아보기: 코드로 노래 가사를 쓸 수 있다면?
안녕하세요 데보션 영 3기 5CEAN에서 활동 중인 권지원이라고 합니다.저는 종종 노래방에서 Linkin Park의 Given Up을 부르면서 스트레스를 풀곤 합니다. 코딩을 할 때는 유명한 락 밴드들의 노래를 하루종일 틀어놓고요.노래를 들으며 코딩을 하다 보면 이런 생각이 들 수 있습니다. 프로그래밍 언어와 노래는 아무런 연관이 없을까?"Just call my name, 'cause I'll hear you scream Master, Master"란 Metallica의 Master of Puppets 노래 가사를 보고, 프로그래밍 언어의 컴파일러를 생각해보는 겁니다.call에게 print 란 키워드 역할을 주고, my name이 변수 이름이라고 가정하면?공백을 기준으로 파싱하고, 특별한 규칙을 적용할 키워드를 정의한다면? 흥미로운 언어가 만들어지지 않을까?실제로 이런 농담 같은 생각에서 만들어진 언어가 존재합니다. 바로 오늘 소개할 프로그래밍 언어인 Rockstar입니다.The Art of Code 란 컨퍼런스를 보신 분 계신가요? 코드의 예술적인 면을 보여주는 아주 재미있는 강연입니다.그중에서도 제 눈을 이끈건 영상 말미에 소개된 강연자 Dylan Beattie가 제작한 Rockstar란 언어입니다.프로그래밍 언어 자체로도 아름다울 수 있다는 것을 깨닫게 해주었죠. 예제 코드를 한번 볼까요?해당 코드는 Rockstar로 쓰인 Fizzbuzz입니다.코드에 리듬만 붙이면 그럴싸한 노래가 될 것 같습니다.Rockstar 언어의 핵심 가치인 "If you can't sing it, you can't have it"이 드러난 코드입니다.그렇다면 Rockstar 언어는 어떻게, 그리고 왜 만들어지게 된 것인지 알아보겠습니다.Rockstar란 메탈 가사처럼 보이는 프로그램을 작성할 수 있는 동적 타입 컴퓨터 프로그래밍 언어입니다.Paul Stovell의 트윗에서 영감을 받아 Dylan Beattie에 의해 만들어진 언어로, 1980년대 하드 록과 파워 발라드 가사 컨벤션에 큰 영향을 받았습니다.Rockstar 언어는 왜 만들어진 걸까요? Rockstar 개발자에 따르면 해당 언어는 순전히 농담에서 출발한 언어라고 합니다.그리고 노래 가사를 컴파일하는 것이 멋지고 'CERTFIED ROCSTAR DEVELOPER'라고 스티커를 붙일 수도 있다는 점이 장점인 언어라 홍보하고, 그 이외에 기능적인 장점은 일절 언급하지 않습니다.이것도 이 언어의 매력적인 점이라고 볼 수 있죠 😄언어의 주요 특징으로는 거의 모든 코드가 문자라는 것입니다.Rockstar의 주요 문법은 Hello World 코드 샘플을 분석해보며 훑어보겠습니다.해당 Rockstar 코드를 실행하면 콘솔 창에 Hello World가 출력됩니다. 엄청 길지만 참 멋진 코드입니다.Rockstar에서는 주석을 소괄호로 처리합니다.이번 게시글에서는 가볍게 알아보는 자리이므로 예제에 주석으로 코드가 의미하는 바를 분석해놓았고, 예제 밑에 주요 문법 특징을 적어보았습니다.• None Rockstar만의 독특한 언어 기능.• None 개발자 내면 깊숙한 곳의 공포, 두려움을 표현하도록 도와줍니다.• None• None 변수 이름 + 키워드 is, are, was, were 뒤에 오는 해당 줄의 코드는 모두 10진수로 취급됩니다.• None 따라서 The prize == 7이 됩니다.• None Rockstar에서 문자와 숫자는 유니코드를 기준으로 변환됩니다.• None with 뒤에 있는 원소를 삽입• None 변수 이름은 case insensitive이기 때문에 The dawn과 the dawn은 모두 같은 변수입니다.Rockstar 깃헙 레포지토리에 있는 예제를 이용해 "Hello World"를 출력해보았습니다.단순히 문자열만 출력하는 방법도 있지만 Rockstar 언어의 특징을 살려 "Hello World"를 출력한 코드를 보는 것이 더 의미있을 것 같아서 가져왔습니다.가끔 공부를 하다 보면, 이런저런 것들을 따지느라 프로그래밍 언어 자체의 매력을 잊어버릴 때가 있습니다.저는 그럴 때마다 재미난 것들을 탐구하며 시간을 보내곤 합니다. 이번 탐구 활동의 결과물인 프로그래밍 언어 Rockstar를 소개글을 작성해보았습니다.거의 처음 작성해보는 게시글이라 글의 전개나 글이 어색한 면이 없지 않아 있지만, 제가 해당 언어를 보고 느꼈던 즐거움이 전해졌으면 좋겠습니다.최근에는 상대적으로 친숙한 언어인 Java로 Rockstar 컴파일러를 조금씩 제작하고 있는데, 생각보다 쉽지 않네요 🥲모두 힘들더라도 🤘Rock n' Roll 🤘하며 이겨냅시다. 화이팅 !!앞서 언급한 The Art of Code 컨퍼런스 번역본에 관심 있으신 분 계신가요?
4/30/2024
logo
Rockstar 프로그래밍 언어 알아보기: 코드로 노래 가사를 쓸 수 있다면?
안녕하세요 데보션 영 3기 5CEAN에서 활동 중인 권지원이라고 합니다.저는 종종 노래방에서 Linkin Park의 Given Up을 부르면서 스트레스를 풀곤 합니다. 코딩을 할 때는 유명한 락 밴드들의 노래를 하루종일 틀어놓고요.노래를 들으며 코딩을 하다 보면 이런 생각이 들 수 있습니다. 프로그래밍 언어와 노래는 아무런 연관이 없을까?"Just call my name, 'cause I'll hear you scream Master, Master"란 Metallica의 Master of Puppets 노래 가사를 보고, 프로그래밍 언어의 컴파일러를 생각해보는 겁니다.call에게 print 란 키워드 역할을 주고, my name이 변수 이름이라고 가정하면?공백을 기준으로 파싱하고, 특별한 규칙을 적용할 키워드를 정의한다면? 흥미로운 언어가 만들어지지 않을까?실제로 이런 농담 같은 생각에서 만들어진 언어가 존재합니다. 바로 오늘 소개할 프로그래밍 언어인 Rockstar입니다.The Art of Code 란 컨퍼런스를 보신 분 계신가요? 코드의 예술적인 면을 보여주는 아주 재미있는 강연입니다.그중에서도 제 눈을 이끈건 영상 말미에 소개된 강연자 Dylan Beattie가 제작한 Rockstar란 언어입니다.프로그래밍 언어 자체로도 아름다울 수 있다는 것을 깨닫게 해주었죠. 예제 코드를 한번 볼까요?해당 코드는 Rockstar로 쓰인 Fizzbuzz입니다.코드에 리듬만 붙이면 그럴싸한 노래가 될 것 같습니다.Rockstar 언어의 핵심 가치인 "If you can't sing it, you can't have it"이 드러난 코드입니다.그렇다면 Rockstar 언어는 어떻게, 그리고 왜 만들어지게 된 것인지 알아보겠습니다.Rockstar란 메탈 가사처럼 보이는 프로그램을 작성할 수 있는 동적 타입 컴퓨터 프로그래밍 언어입니다.Paul Stovell의 트윗에서 영감을 받아 Dylan Beattie에 의해 만들어진 언어로, 1980년대 하드 록과 파워 발라드 가사 컨벤션에 큰 영향을 받았습니다.Rockstar 언어는 왜 만들어진 걸까요? Rockstar 개발자에 따르면 해당 언어는 순전히 농담에서 출발한 언어라고 합니다.그리고 노래 가사를 컴파일하는 것이 멋지고 'CERTFIED ROCSTAR DEVELOPER'라고 스티커를 붙일 수도 있다는 점이 장점인 언어라 홍보하고, 그 이외에 기능적인 장점은 일절 언급하지 않습니다.이것도 이 언어의 매력적인 점이라고 볼 수 있죠 😄언어의 주요 특징으로는 거의 모든 코드가 문자라는 것입니다.Rockstar의 주요 문법은 Hello World 코드 샘플을 분석해보며 훑어보겠습니다.해당 Rockstar 코드를 실행하면 콘솔 창에 Hello World가 출력됩니다. 엄청 길지만 참 멋진 코드입니다.Rockstar에서는 주석을 소괄호로 처리합니다.이번 게시글에서는 가볍게 알아보는 자리이므로 예제에 주석으로 코드가 의미하는 바를 분석해놓았고, 예제 밑에 주요 문법 특징을 적어보았습니다.• None Rockstar만의 독특한 언어 기능.• None 개발자 내면 깊숙한 곳의 공포, 두려움을 표현하도록 도와줍니다.• None• None 변수 이름 + 키워드 is, are, was, were 뒤에 오는 해당 줄의 코드는 모두 10진수로 취급됩니다.• None 따라서 The prize == 7이 됩니다.• None Rockstar에서 문자와 숫자는 유니코드를 기준으로 변환됩니다.• None with 뒤에 있는 원소를 삽입• None 변수 이름은 case insensitive이기 때문에 The dawn과 the dawn은 모두 같은 변수입니다.Rockstar 깃헙 레포지토리에 있는 예제를 이용해 "Hello World"를 출력해보았습니다.단순히 문자열만 출력하는 방법도 있지만 Rockstar 언어의 특징을 살려 "Hello World"를 출력한 코드를 보는 것이 더 의미있을 것 같아서 가져왔습니다.가끔 공부를 하다 보면, 이런저런 것들을 따지느라 프로그래밍 언어 자체의 매력을 잊어버릴 때가 있습니다.저는 그럴 때마다 재미난 것들을 탐구하며 시간을 보내곤 합니다. 이번 탐구 활동의 결과물인 프로그래밍 언어 Rockstar를 소개글을 작성해보았습니다.거의 처음 작성해보는 게시글이라 글의 전개나 글이 어색한 면이 없지 않아 있지만, 제가 해당 언어를 보고 느꼈던 즐거움이 전해졌으면 좋겠습니다.최근에는 상대적으로 친숙한 언어인 Java로 Rockstar 컴파일러를 조금씩 제작하고 있는데, 생각보다 쉽지 않네요 🥲모두 힘들더라도 🤘Rock n' Roll 🤘하며 이겨냅시다. 화이팅 !!앞서 언급한 The Art of Code 컨퍼런스 번역본에 관심 있으신 분 계신가요?
2024.04.30
emoji
좋아요
emoji
별로에요
logo
AI와 엣지 컴퓨팅의 결합
AI가 알파고에서 챗GPT로 초 거대화되고 클라우드의 성능이 더욱 좋아지면서, 엣지 컴퓨팅은 새로운 전환의 계기가 만들어지고 있습니다. 새로운 정보 단말기에는 AI가 기본으로 탑재될 것이고, AI를 품은 엣지 컴퓨팅은 더 많은 기기에 필수 기술로 자리 잡을 것으로 전망합니다.
4/30/2024
logo
AI와 엣지 컴퓨팅의 결합
AI가 알파고에서 챗GPT로 초 거대화되고 클라우드의 성능이 더욱 좋아지면서, 엣지 컴퓨팅은 새로운 전환의 계기가 만들어지고 있습니다. 새로운 정보 단말기에는 AI가 기본으로 탑재될 것이고, AI를 품은 엣지 컴퓨팅은 더 많은 기기에 필수 기술로 자리 잡을 것으로 전망합니다.
2024.04.30
emoji
좋아요
emoji
별로에요
logo
JPA에서 아이디를 자동증가 값으로 사용 시 하이버네이트의 @NaturalId 사용해 보기
JPA에서 아이디를 자동증가 값으로 사용 시 하이버네이트의 @NaturalId 사용해 보기신규 테이블 생성 시 기본키 생성은 어떻게 하고 계시나요? 저희팀에서는 기본 RDBMS 로 MySQL을 사용하고 있습니다.MySQL의 경우 기본키를 Clustered Index 로 사용하고 있습니다. Clustered Index란 데이터베이스 테이블에서 데이터를 저장하는 물리적인 순서를 인덱스 순서로 사용하는 것을 말합니다. 그래서 데이터 삽입 시 기본키 기준으로 데이터가 정렬되기 때문에 자동증가값 사용 시 삽입 성능이 좋습니다. 그리고 배치와 같이 대량의 데이터를 청크 단위로 조회할 때 offset-limit 쿼리로 조회했을 때보다는 아래처럼 기본키를 기준으로 조회했을 때 훨씬 빠르게 조회할 수 있습니다. 이러한 이유로 주로 기본키에는 auto_increment를 사용해 왔습니다.운영환경과 테스트환경의 아이디값 불일치로 인한 문제저희팀에서는 테스트환경과 운영환경을 함께 운영하고 있는데요, 테스트 환경의 경우에는 테스트용도로 데이터를 생성하다보니 운영환경과는 다른 데이터를 종종 생성하고는 합니다.그래서 자동증가 값을 기본키로 사용하는 엔티티 대부분이 운영환경과 테스트환경의 아이디값이 다르게 되어 있습니다.운영환경과 테스트환경의 아이디값이 달라서 문제가 됐던 경험이 있지 않으신가요?운영환경과 테스트환경의 아이디값 불일치 문제를 설명해보기 위해 특정한 요구사항이 들어온 상황을 가정해 보겠습니다.특정 상품의 판매 촉진을 위해 특정한 기간동안 특정 상품 몇개에 대해서만 80% 할인을 해야 한다는 요구사항이 들어왔습니다.현재 상품 테이블 구조는 아래와 같습니다.엔티티는 다음과 같습니다.현재는 할인 기능이 없습니다. 개발기간이 충분하다면 할인 기능을 개발하여 적용하고 싶지만, 안타깝게도 내일 모레부터 바로 운영환경에 적용되어야 하는 상황입니다.운영 배포전 테스트도 필요하기 때문에 내일 오전까지 개발완료 후 내일 오후부터는 테스트환경에 배포하여 테스트 이후에 모레 오전에 운영환경에 배포하기로 하였습니다.운영환경과 테스트환경의 상품이 모두 동일하면 좋았겠지만, 아쉽게도 테스트환경에는 테스트용으로 생성했던 상품들이 따로 존재합니다. 따라서 아래와 같이 동일한 상품이라도 아이디가 각각 다르게 등록되어 있습니다.하루 만에 모든 기능 개발을 끝마쳐야 하기 때문에 일단은 할인대상 상품 아이디 목록을 하드코딩하기로 하였습니다. 상품 아이디가 운영환경과 테스트환경에 각각 다르게 생성되어 있어서, 해당하는 상품들의 아이디를 운영환경과 베타환경에서 각각 찾아서 아래와 같이 사용하는 형태로 일단락지었습니다.열심히 개발하여 테스트환경에 배포하려는 순간 추가 요구사항이 발생하였습니다. 운영배포일 오전에 운영환경에 XXX와 YYY라는 상품이 신규로 생성되게 되는데, 신규로 생성되는 2개의 상품중 XXX 상품에도 동일하게 할인을 적용해 달라는 요구사항이였습니다.베타환경의 경우 새로운 상품을 추가 후 바로 해당 상품의 아이디를 yml 파일에 추가하였지만, 운영환경은 내일 상품이 새로 생성 되어야만 아이디 값을 알 수 있어서 운영환경에 추가된 상품의 아이디 값을 어떻게 yml 파일에 추가할지 고민이 생겼습니다.먼저 떠오른 생각은 상품을 먼저 생성 후 생성된 상품의 아이디를 확인 후 코드상에 추가한 뒤 배포하는 방법이었습니다.하지만 배포를 위해 아침 일찍 일어나 코딩까지 하기에는 너무나 억울한 마음이 들었던 저는 아이디 값이 어차피 자동증가 값이니 현재까지의 상품등록 추이를 보았을 때 알파벳순으로 상품이 등록되었으니 이번에도 XXX, YYY순으로 상품이 등록될 것으로 예상하여 현재 운영환경에 등록된 가장 큰 아이디값에 +1만 해주면 될 것이라는 생각을 하게 되었습니다.그래서 현재 운영환경에 등록된 상품 중 가장 큰 아이디값인 5에다가 +1 해준 값인 6을 아래처럼 yml 파일에 추가하였고 운영환경에 그대로 배포하였습니다.오전에 운영환경에 배포 이후 즐겁게 일하고 있던 저에게 갑자기 문의가 들어왔습니다.오늘 운영환경에 추가한 상품 중 XXX 상품이 할인되어야 하지만, 실제로는 YYY 상품이 할인되고 있다는 문의였습니다.원인은 상품의 순서가 예상과는 달리 XXX, YYY 순서로 등록되지 않고 반대 순서인 YYY, XXX 순서로 상품이 등록되는 바람에 YYY 상품이 할인되고 있었습니다.급하게 운영환경에 하드코딩된 아이디 값을 고쳐서 재배포 이후에는 정상적으로 XXX 상품이 할인될 수 있었습니다.변경되지 않는 유니크 키가 설정된 컬럼을 사용해 보자위의 사례와 같이 운영환경과 테스트환경의 자동증가하는 아이디값이 불일치하여 발생하는 일을 방지하기 위해서는 어떻게 해야 할까요?여러 가지 방법이 있겠지만 한 가지 방법으로는 아래와 같이 자동 증가하는 아이디값 외에 유니크 키가 적용된 컬럼을 하나 더 추가하여 코드에서 자동증가값 대신에 유니크 키 컬럼을 사용해 보는 방법이 있습니다.컬럼의 경우 아이디 값 대신에 사용되어야 합니다. 즉 생성만 가능하고 변경이 되면 안 됩니다. 이에 아래와 같이 생성자에서만 전달받도록 엔티티를 수정하였습니다.추가된 유니크키 컬럼값을 통해 운영환경과 테스트환경에서 동일한 식별값으로 데이터를 생성할 수 있게 되어 아이디가 불일치하여 생기는 문제는 예방할 수 있게 되었습니다.그래서 이제부터는 아이디 대신 유니크키 컬럼 값으로 조회하여 사용하기로 마음먹고 아래와 같이 메서드를 에 추가 후 기존 메서드를 사용하는 부분들을 모두 메서드를 사용하도록 수정하기로 하였습니다.사용시 모든 기능은 정상동작하지만, 한 가지 마음에 걸리는 게 생겼습니다.동일한 트랜잭션에서 동일한 엔티티를 여러 번 조회하는 경우, 를 사용하면 한 번만 쿼리가 발생하지만 를 호출하면 매번 쿼리가 발생한다는 점입니다. ProductRepositoryTest.java[참고] MySQL 이나 MariaDB 드라이버를 사용하는 경우 아래와 같은 설정으로 쿼리 로그를 남길 수 있습니다.하이버네이트의 @NaturalId를 사용해 보자찜찜함을 해결하기 위해 열심히 이곳저곳을 찾아보다가 하이버네이트에는 가 붙은 필드가 아닌 필드에 선언하여, 가 붙은 필드와 유사하게
java
4/30/2024
logo
JPA에서 아이디를 자동증가 값으로 사용 시 하이버네이트의 @NaturalId 사용해 보기
JPA에서 아이디를 자동증가 값으로 사용 시 하이버네이트의 @NaturalId 사용해 보기신규 테이블 생성 시 기본키 생성은 어떻게 하고 계시나요? 저희팀에서는 기본 RDBMS 로 MySQL을 사용하고 있습니다.MySQL의 경우 기본키를 Clustered Index 로 사용하고 있습니다. Clustered Index란 데이터베이스 테이블에서 데이터를 저장하는 물리적인 순서를 인덱스 순서로 사용하는 것을 말합니다. 그래서 데이터 삽입 시 기본키 기준으로 데이터가 정렬되기 때문에 자동증가값 사용 시 삽입 성능이 좋습니다. 그리고 배치와 같이 대량의 데이터를 청크 단위로 조회할 때 offset-limit 쿼리로 조회했을 때보다는 아래처럼 기본키를 기준으로 조회했을 때 훨씬 빠르게 조회할 수 있습니다. 이러한 이유로 주로 기본키에는 auto_increment를 사용해 왔습니다.운영환경과 테스트환경의 아이디값 불일치로 인한 문제저희팀에서는 테스트환경과 운영환경을 함께 운영하고 있는데요, 테스트 환경의 경우에는 테스트용도로 데이터를 생성하다보니 운영환경과는 다른 데이터를 종종 생성하고는 합니다.그래서 자동증가 값을 기본키로 사용하는 엔티티 대부분이 운영환경과 테스트환경의 아이디값이 다르게 되어 있습니다.운영환경과 테스트환경의 아이디값이 달라서 문제가 됐던 경험이 있지 않으신가요?운영환경과 테스트환경의 아이디값 불일치 문제를 설명해보기 위해 특정한 요구사항이 들어온 상황을 가정해 보겠습니다.특정 상품의 판매 촉진을 위해 특정한 기간동안 특정 상품 몇개에 대해서만 80% 할인을 해야 한다는 요구사항이 들어왔습니다.현재 상품 테이블 구조는 아래와 같습니다.엔티티는 다음과 같습니다.현재는 할인 기능이 없습니다. 개발기간이 충분하다면 할인 기능을 개발하여 적용하고 싶지만, 안타깝게도 내일 모레부터 바로 운영환경에 적용되어야 하는 상황입니다.운영 배포전 테스트도 필요하기 때문에 내일 오전까지 개발완료 후 내일 오후부터는 테스트환경에 배포하여 테스트 이후에 모레 오전에 운영환경에 배포하기로 하였습니다.운영환경과 테스트환경의 상품이 모두 동일하면 좋았겠지만, 아쉽게도 테스트환경에는 테스트용으로 생성했던 상품들이 따로 존재합니다. 따라서 아래와 같이 동일한 상품이라도 아이디가 각각 다르게 등록되어 있습니다.하루 만에 모든 기능 개발을 끝마쳐야 하기 때문에 일단은 할인대상 상품 아이디 목록을 하드코딩하기로 하였습니다. 상품 아이디가 운영환경과 테스트환경에 각각 다르게 생성되어 있어서, 해당하는 상품들의 아이디를 운영환경과 베타환경에서 각각 찾아서 아래와 같이 사용하는 형태로 일단락지었습니다.열심히 개발하여 테스트환경에 배포하려는 순간 추가 요구사항이 발생하였습니다. 운영배포일 오전에 운영환경에 XXX와 YYY라는 상품이 신규로 생성되게 되는데, 신규로 생성되는 2개의 상품중 XXX 상품에도 동일하게 할인을 적용해 달라는 요구사항이였습니다.베타환경의 경우 새로운 상품을 추가 후 바로 해당 상품의 아이디를 yml 파일에 추가하였지만, 운영환경은 내일 상품이 새로 생성 되어야만 아이디 값을 알 수 있어서 운영환경에 추가된 상품의 아이디 값을 어떻게 yml 파일에 추가할지 고민이 생겼습니다.먼저 떠오른 생각은 상품을 먼저 생성 후 생성된 상품의 아이디를 확인 후 코드상에 추가한 뒤 배포하는 방법이었습니다.하지만 배포를 위해 아침 일찍 일어나 코딩까지 하기에는 너무나 억울한 마음이 들었던 저는 아이디 값이 어차피 자동증가 값이니 현재까지의 상품등록 추이를 보았을 때 알파벳순으로 상품이 등록되었으니 이번에도 XXX, YYY순으로 상품이 등록될 것으로 예상하여 현재 운영환경에 등록된 가장 큰 아이디값에 +1만 해주면 될 것이라는 생각을 하게 되었습니다.그래서 현재 운영환경에 등록된 상품 중 가장 큰 아이디값인 5에다가 +1 해준 값인 6을 아래처럼 yml 파일에 추가하였고 운영환경에 그대로 배포하였습니다.오전에 운영환경에 배포 이후 즐겁게 일하고 있던 저에게 갑자기 문의가 들어왔습니다.오늘 운영환경에 추가한 상품 중 XXX 상품이 할인되어야 하지만, 실제로는 YYY 상품이 할인되고 있다는 문의였습니다.원인은 상품의 순서가 예상과는 달리 XXX, YYY 순서로 등록되지 않고 반대 순서인 YYY, XXX 순서로 상품이 등록되는 바람에 YYY 상품이 할인되고 있었습니다.급하게 운영환경에 하드코딩된 아이디 값을 고쳐서 재배포 이후에는 정상적으로 XXX 상품이 할인될 수 있었습니다.변경되지 않는 유니크 키가 설정된 컬럼을 사용해 보자위의 사례와 같이 운영환경과 테스트환경의 자동증가하는 아이디값이 불일치하여 발생하는 일을 방지하기 위해서는 어떻게 해야 할까요?여러 가지 방법이 있겠지만 한 가지 방법으로는 아래와 같이 자동 증가하는 아이디값 외에 유니크 키가 적용된 컬럼을 하나 더 추가하여 코드에서 자동증가값 대신에 유니크 키 컬럼을 사용해 보는 방법이 있습니다.컬럼의 경우 아이디 값 대신에 사용되어야 합니다. 즉 생성만 가능하고 변경이 되면 안 됩니다. 이에 아래와 같이 생성자에서만 전달받도록 엔티티를 수정하였습니다.추가된 유니크키 컬럼값을 통해 운영환경과 테스트환경에서 동일한 식별값으로 데이터를 생성할 수 있게 되어 아이디가 불일치하여 생기는 문제는 예방할 수 있게 되었습니다.그래서 이제부터는 아이디 대신 유니크키 컬럼 값으로 조회하여 사용하기로 마음먹고 아래와 같이 메서드를 에 추가 후 기존 메서드를 사용하는 부분들을 모두 메서드를 사용하도록 수정하기로 하였습니다.사용시 모든 기능은 정상동작하지만, 한 가지 마음에 걸리는 게 생겼습니다.동일한 트랜잭션에서 동일한 엔티티를 여러 번 조회하는 경우, 를 사용하면 한 번만 쿼리가 발생하지만 를 호출하면 매번 쿼리가 발생한다는 점입니다. ProductRepositoryTest.java[참고] MySQL 이나 MariaDB 드라이버를 사용하는 경우 아래와 같은 설정으로 쿼리 로그를 남길 수 있습니다.하이버네이트의 @NaturalId를 사용해 보자찜찜함을 해결하기 위해 열심히 이곳저곳을 찾아보다가 하이버네이트에는 가 붙은 필드가 아닌 필드에 선언하여, 가 붙은 필드와 유사하게
2024.04.30
java
emoji
좋아요
emoji
별로에요
logo
고객 구매 경험의 진화 방향 - 자동차 구매 경험을 중심으로
디지털 고객 경험을 통해 상품을 구매하고 서비스를 상호작용하는 방식이 변화하고 있습니다. 자동차 판매업체는 소비재 판매업체로부터 변화를 수용하고 진화하는 방법을 배울 수 있습니다.
4/30/2024
logo
고객 구매 경험의 진화 방향 - 자동차 구매 경험을 중심으로
디지털 고객 경험을 통해 상품을 구매하고 서비스를 상호작용하는 방식이 변화하고 있습니다. 자동차 판매업체는 소비재 판매업체로부터 변화를 수용하고 진화하는 방법을 배울 수 있습니다.
2024.04.30
emoji
좋아요
emoji
별로에요
logo
삼성바이오로직스, 생성형 AI 기반 업무 자동화 사례
생성형 AI에서 정확한 E2E 데이터를 연결하려면 데이터의 구조화 및 표준화가 필요하며, RAG나 프롬프트 작성도 표준화된 데이터 구조나 형식을 반영해야 합니다.
4/30/2024
logo
삼성바이오로직스, 생성형 AI 기반 업무 자동화 사례
생성형 AI에서 정확한 E2E 데이터를 연결하려면 데이터의 구조화 및 표준화가 필요하며, RAG나 프롬프트 작성도 표준화된 데이터 구조나 형식을 반영해야 합니다.
2024.04.30
emoji
좋아요
emoji
별로에요
logo
강남언니 온보딩 키트 리뉴얼 스토리 Ready to Break it?
안녕하세요 강남언니 브랜드 콘텐츠 디자이너 Lingling 입니다.“링링! 온보딩 키트 재고가 얼마 안 남았어요!”2021년, 강남언니의 첫 온보딩 키트는 구성원 모두가 강남언니의 원칙을 극도로 추구하도록 3가지 핵심가치를 담아 'Be Radical! 극도의 나, 극도의 동료가 돼라'라는 메시지로 제작되었습니다. 각 구성품마다 핵심가치를 메시지로 담았지만, 텍스트만으로는 의미를 충분히 전달하는 데 한계를 느꼈습니다. 게다가 제작 일정이 촉박하여 구성원의 니즈를 반영하지 못한 구성품에 대한 아쉬움도 있었지요. 이 경험을 토대로 다음에는 어떻게 더 나은 키트를 만들 수 있을지 고민했습니다.2023년 말, 때마침 기존 온보딩 키트가 소진될 시점이 다가왔습니다. 기존 구성품과 메시지를 리뉴얼하기 전, 동료들에게 그동안 온보딩 키트를 사용하면서 어땠는지 의견을 들어보기 위해 사전 설문조사를 진행했습니다. 구성원들의 피드백 결과를 종합해 보니, 실용성 측면에서 전반적으로 만족스럽지 못했음을 확인할 수 있었고, 키트에 새겨진 핵심가치는 텍스트만으로 원칙을 추구하자는 의도를 명확히 느끼지 못했다는 의견도 있었습니다. 이에 따라 구성원의 니즈를 반영하여 제품을 재구성하고, 강남언니 팀이 미션을 달성하기 위해 어떤 태도와 마음으로 원칙을 추구하는지 키트에 담기로 했습니다.그래서 이번 온보딩 키트의 제작 목표는!• 강남언니 팀이 원칙을 추구하는 태도와 마음 보여주기• 실용도 높은 굿즈로 재구성하기• 키트를 받는 구성원들이 "와"를 외치는 경험하게 하기강남언니팀은 더 좋은 의료 서비스를 누구나 누릴 수 있는 세상을 만들기 위해 의료 정보 불균형을 해소하고 성형,시술에 대한 부정적 인식을 올바르게 변화시키는 여정에 끊임없이 나아가고 있습니다. 이 여정에서 원칙을 추구한다는 것은 본능적으로 행동하기 어렵기에 우리에게는 끊임없는 노력 그 이상의 의지가 필요합니다. 바로 목표와 한계를 깨부수겠다는 'Break it!'하는 태도와 마음입니다.합류 첫날 Welcome! 하며 반기는 것도 물론 중요하지만 앞으로 이 조직에서 내가 어떤 마음가짐으로 임하면 좋을지 이 키트를 통해 상기시키고 싶었습니다. 여정의 길목 앞에 선 그들의 마음속에 이러한 의지가 내재되어 있는지 스스로에게 질문하기를 바랐습니다. “Ready to Break it?” 라며 말이죠. Break it, Brea-kit, Break-kit는 절제선이 없습니다Break it의 의미를 온보딩 키트에 담기란 여간 쉬운 일이 아니었습니다. 초반 패키징 형태를 고민할 당시, 'Break it을 어떻게 보여주지? 망치를 쥐여줄까? 포춘쿠키를 넣을까?' 산으로 가는 아이디어들이 발산되는 와중에 부시기 위한 도구에만 매몰되었다는 것을 깨달았고 what보다 키트를 어떻게 Break it 하면 좋을지 How를 찾는 고민으로 방향을 틀었습니다.“박스의 사방을 다 막는 건 어때요? 한계를 깨부순다는 의지로 이 박스를 여는 거죠. 각자의 방식으로요”앞서 진행한 설문 결과를 토대로 제품 구성은 실용성을 최우선 목표로 삼았고, 시즈널
4/30/2024
logo
강남언니 온보딩 키트 리뉴얼 스토리 Ready to Break it?
안녕하세요 강남언니 브랜드 콘텐츠 디자이너 Lingling 입니다.“링링! 온보딩 키트 재고가 얼마 안 남았어요!”2021년, 강남언니의 첫 온보딩 키트는 구성원 모두가 강남언니의 원칙을 극도로 추구하도록 3가지 핵심가치를 담아 'Be Radical! 극도의 나, 극도의 동료가 돼라'라는 메시지로 제작되었습니다. 각 구성품마다 핵심가치를 메시지로 담았지만, 텍스트만으로는 의미를 충분히 전달하는 데 한계를 느꼈습니다. 게다가 제작 일정이 촉박하여 구성원의 니즈를 반영하지 못한 구성품에 대한 아쉬움도 있었지요. 이 경험을 토대로 다음에는 어떻게 더 나은 키트를 만들 수 있을지 고민했습니다.2023년 말, 때마침 기존 온보딩 키트가 소진될 시점이 다가왔습니다. 기존 구성품과 메시지를 리뉴얼하기 전, 동료들에게 그동안 온보딩 키트를 사용하면서 어땠는지 의견을 들어보기 위해 사전 설문조사를 진행했습니다. 구성원들의 피드백 결과를 종합해 보니, 실용성 측면에서 전반적으로 만족스럽지 못했음을 확인할 수 있었고, 키트에 새겨진 핵심가치는 텍스트만으로 원칙을 추구하자는 의도를 명확히 느끼지 못했다는 의견도 있었습니다. 이에 따라 구성원의 니즈를 반영하여 제품을 재구성하고, 강남언니 팀이 미션을 달성하기 위해 어떤 태도와 마음으로 원칙을 추구하는지 키트에 담기로 했습니다.그래서 이번 온보딩 키트의 제작 목표는!• 강남언니 팀이 원칙을 추구하는 태도와 마음 보여주기• 실용도 높은 굿즈로 재구성하기• 키트를 받는 구성원들이 "와"를 외치는 경험하게 하기강남언니팀은 더 좋은 의료 서비스를 누구나 누릴 수 있는 세상을 만들기 위해 의료 정보 불균형을 해소하고 성형,시술에 대한 부정적 인식을 올바르게 변화시키는 여정에 끊임없이 나아가고 있습니다. 이 여정에서 원칙을 추구한다는 것은 본능적으로 행동하기 어렵기에 우리에게는 끊임없는 노력 그 이상의 의지가 필요합니다. 바로 목표와 한계를 깨부수겠다는 'Break it!'하는 태도와 마음입니다.합류 첫날 Welcome! 하며 반기는 것도 물론 중요하지만 앞으로 이 조직에서 내가 어떤 마음가짐으로 임하면 좋을지 이 키트를 통해 상기시키고 싶었습니다. 여정의 길목 앞에 선 그들의 마음속에 이러한 의지가 내재되어 있는지 스스로에게 질문하기를 바랐습니다. “Ready to Break it?” 라며 말이죠. Break it, Brea-kit, Break-kit는 절제선이 없습니다Break it의 의미를 온보딩 키트에 담기란 여간 쉬운 일이 아니었습니다. 초반 패키징 형태를 고민할 당시, 'Break it을 어떻게 보여주지? 망치를 쥐여줄까? 포춘쿠키를 넣을까?' 산으로 가는 아이디어들이 발산되는 와중에 부시기 위한 도구에만 매몰되었다는 것을 깨달았고 what보다 키트를 어떻게 Break it 하면 좋을지 How를 찾는 고민으로 방향을 틀었습니다.“박스의 사방을 다 막는 건 어때요? 한계를 깨부순다는 의지로 이 박스를 여는 거죠. 각자의 방식으로요”앞서 진행한 설문 결과를 토대로 제품 구성은 실용성을 최우선 목표로 삼았고, 시즈널
2024.04.30
emoji
좋아요
emoji
별로에요
logo
프론트엔드 개발자에게도 AI가 필요할까요?
안녕하세요, SK Planet의 프론트엔드 개발자 김찬민이라고 합니다.바야흐로 copilot, ChatGPT 등의 AI가 업무를 보조해주는 시대가 열렸는데요,AI는 명확한 설명서가 있는 도구가 아닌 만큼 개발자의 상상력에 따라 무궁무진한 사용 방법이 있는 보조수단이라고 생각해요.이번 글에서는 제가 업무에서 AI를 사용하는 방법을 3가지 정도 소개해보려 하는데요, 이밖에도 멋진 아이디어가 있다면 댓글로 공유해 주세요!지난 달에는 광고를 위한 문구 배너를 급하게 추가해야 할 일이 있었는데요, 디자이너가 요청한 몇 가지 조건이 있었어요.이를 빠르게 구현하기 위해 저는 피그마 UI와 필요한 요청을 프롬프트에 추가해 질문을 던졌고, 원하던 결과물과 거의 비슷한 코드를 곧바로 얻을 수 있었어요.만약 제가 이를 처음부터 직접 구현했더라면 이런 고민들이 필요했을 거에요.• None ‘어떻게 두 텍스트가 무한히 나타나도록 하지?’• None ‘약간의 관성 효과는 어떻게 넣어야 하지?’AI를 사용한 덕분에 30분도 채 걸리지 않는 시간에 요건을 구현해내고, 오후에 예정된 배포를 성공적으로 마칠 수 있었던 뿌듯한 경험이었어요.기획자, 디자이너에 의해 잦은 변경이 생기는 프론트엔드는 백엔드에 비해 코드의 수명이 짧아 불가피하게 코드 품질이 저하되는 경우가 종종 생기곤 해요.저는 스스로 작성한 코드에 의문이 생길 때 ChatGPT에 리팩터링을 위한 쿼리를 자주 요청하는데요, 기대 이상으로 만족스러운 결과물을 얻었던 적이 많은 것 같아요.저는 블록체인 플랫폼 서비스를 개발하고 있어 이런 로직을 작성한 적이 있었는데요, 위의 로직은 정말 단순하지만 새로운 NFT 타입이 추가되면 if문이 그만큼 늘어나야 한다는 아쉬움이 있었어요.AI는 어떻게 코드를 개선했을까요?더이상 무한정 확장되는 if문이 아니라 map 구조를 사용해 코드를 개선한 결과인데요, 이렇게 정리된 코드를 받아봤을 때 저는 정말 뛸 듯이 기뻤던 것 같아요.제가 프론트엔드 개발을 처음 배우기 시작했던 2019년까지만 하더라도 새로운 기술을 배우려면 공식 문서의 “getting started” 단락부터 읽어 내려가는 것이 일반적이었어요.하지만 이제는 프롬프트를 활용해 내가 궁금한 키워드나 구현에 필요한 코드만을 콕 찝어서 얻을 수 있게 되었고,그 결과 새로운 기술이나 라이브러리를 도입할 때 필요한 POC 기간을 크게 줄일 수 있었던 것 같아요.저는 AI가 우리가 일하는 모습에 상상 이상의 변화를 가져올 것이라고 기대하는데요,일례로 저는 Copilot을 6개월 정도 구독하다가 “너무 뛰어나서” 해지한 경험이 있어요.그 이유는 Copilot은 코드를 작성하는 도중에 제 의도를 예측하고 코드를 제안하는데,결과물이 너무나도 뛰어나 제가 깊은 고민을 하지 않고도 제시된 코드를 선택하기만 하면 원하는 기능들이 만들어지거든요.그런데 오히려 이런 점이 제 코딩력(?) 을 떨어뜨리는 것 같아 질의를 수동으로 보내야 하는 ChatGPT만을 업무에 활용하고 있는데요,여러분들도 업무의 조그마한 부분들부터 AI와 함께해 보는 것은 어떠실까요?
4/29/2024
logo
프론트엔드 개발자에게도 AI가 필요할까요?
안녕하세요, SK Planet의 프론트엔드 개발자 김찬민이라고 합니다.바야흐로 copilot, ChatGPT 등의 AI가 업무를 보조해주는 시대가 열렸는데요,AI는 명확한 설명서가 있는 도구가 아닌 만큼 개발자의 상상력에 따라 무궁무진한 사용 방법이 있는 보조수단이라고 생각해요.이번 글에서는 제가 업무에서 AI를 사용하는 방법을 3가지 정도 소개해보려 하는데요, 이밖에도 멋진 아이디어가 있다면 댓글로 공유해 주세요!지난 달에는 광고를 위한 문구 배너를 급하게 추가해야 할 일이 있었는데요, 디자이너가 요청한 몇 가지 조건이 있었어요.이를 빠르게 구현하기 위해 저는 피그마 UI와 필요한 요청을 프롬프트에 추가해 질문을 던졌고, 원하던 결과물과 거의 비슷한 코드를 곧바로 얻을 수 있었어요.만약 제가 이를 처음부터 직접 구현했더라면 이런 고민들이 필요했을 거에요.• None ‘어떻게 두 텍스트가 무한히 나타나도록 하지?’• None ‘약간의 관성 효과는 어떻게 넣어야 하지?’AI를 사용한 덕분에 30분도 채 걸리지 않는 시간에 요건을 구현해내고, 오후에 예정된 배포를 성공적으로 마칠 수 있었던 뿌듯한 경험이었어요.기획자, 디자이너에 의해 잦은 변경이 생기는 프론트엔드는 백엔드에 비해 코드의 수명이 짧아 불가피하게 코드 품질이 저하되는 경우가 종종 생기곤 해요.저는 스스로 작성한 코드에 의문이 생길 때 ChatGPT에 리팩터링을 위한 쿼리를 자주 요청하는데요, 기대 이상으로 만족스러운 결과물을 얻었던 적이 많은 것 같아요.저는 블록체인 플랫폼 서비스를 개발하고 있어 이런 로직을 작성한 적이 있었는데요, 위의 로직은 정말 단순하지만 새로운 NFT 타입이 추가되면 if문이 그만큼 늘어나야 한다는 아쉬움이 있었어요.AI는 어떻게 코드를 개선했을까요?더이상 무한정 확장되는 if문이 아니라 map 구조를 사용해 코드를 개선한 결과인데요, 이렇게 정리된 코드를 받아봤을 때 저는 정말 뛸 듯이 기뻤던 것 같아요.제가 프론트엔드 개발을 처음 배우기 시작했던 2019년까지만 하더라도 새로운 기술을 배우려면 공식 문서의 “getting started” 단락부터 읽어 내려가는 것이 일반적이었어요.하지만 이제는 프롬프트를 활용해 내가 궁금한 키워드나 구현에 필요한 코드만을 콕 찝어서 얻을 수 있게 되었고,그 결과 새로운 기술이나 라이브러리를 도입할 때 필요한 POC 기간을 크게 줄일 수 있었던 것 같아요.저는 AI가 우리가 일하는 모습에 상상 이상의 변화를 가져올 것이라고 기대하는데요,일례로 저는 Copilot을 6개월 정도 구독하다가 “너무 뛰어나서” 해지한 경험이 있어요.그 이유는 Copilot은 코드를 작성하는 도중에 제 의도를 예측하고 코드를 제안하는데,결과물이 너무나도 뛰어나 제가 깊은 고민을 하지 않고도 제시된 코드를 선택하기만 하면 원하는 기능들이 만들어지거든요.그런데 오히려 이런 점이 제 코딩력(?) 을 떨어뜨리는 것 같아 질의를 수동으로 보내야 하는 ChatGPT만을 업무에 활용하고 있는데요,여러분들도 업무의 조그마한 부분들부터 AI와 함께해 보는 것은 어떠실까요?
2024.04.29
emoji
좋아요
emoji
별로에요
logo
옵시디언이 사랑받는 이유 : 장단점 분석
안녕하세요, 데보션영 3기로 활동중인 강대훈입니다 🙇🏻‍♂️먼저 이 글을 쓰게 된 계기는, 데보션에서 노션에 대한 자세한 소개 글 을 접하고, 같은 노트 앱인 옵시디언에 대한 소개글도 있으면 좋을듯 해서 작성하게 되었습니다.옵시디언 사용 이유와 몇 가지 플러그인 활용법, 장단점에 대해 간단히 다뤄보겠습니다 😊그동안 저는 필기 앱으로 수 년간 노션을 주로 활용해왔습니다.노션은 정말 많은 장점들을 가지고 있습니다.우선 러닝커브가 거의 없다시피 하며, 기존 노트앱에 꿈꿔온 수많은 기능들이 내재되어 있어 처음 접했을 땐 거의 혁신과도 같았습니다.그러나 몇가지 이슈들로 인해 타 노트앱으로의 이전을 마음먹었습니다.1. 느린 속도와 높은 메모리 점유율노션은 노트앱치곤 리소스를 많이 잡아먹고, 데이터가 쌓일 수록 속도도 눈에 띄게 느려졌습니다.백그라운드에 두었을 때에도 옵시디언의 약 두배에 달하는 메모리 사용량을 보여주었고,실제 사용 중일 때에는 1GB를 넘어가는 기염을 토하기도 했습니다.저는 노트 앱에 메모리를 1GB 이상 투자하는 것이 과연 맞을까 생각이 들었고, 노트를 켜고 메모를 작성할 때마다 버벅임과 버퍼링을 겪으며 스트레스를 받아왔습니다.다음은 노션에서 기존에 사용하던 대시보드입니다.기본적인 UI가 예쁘고 깔끔하긴 하지만, 어느 정도 쓰다보면 질리는 것은 사실입니다.자유롭게 커스터마이징이 힘들다는 것이 사용하면서 계속 아쉬웠습니다.물론 노션 인핸서와 같은 어느정도의 솔루션은 존재하지만, 커스터마이징에 한계가 있고 노션 앱의 업데이트에 따라 호환성이 깨질 수 있다는 점 등 다양한 문제가 존재합니다.앞선 속도와도 같은 원인으로, 노션은 클라우드 기반이기 때문에 데이터베이스도 노션 쪽에서 가지고 있고, 내 데이터에 대한 주권이 나에게 있지 않습니다.따라서 노션 서비스에 모종의 장애가 발생할 경우, 내가 작성한 노트를 보지 못하고 최악의 경우 소실할 수도 있고, 최근 들어서도 몇 번이나 노션 서버에 장애가 생겨 노트를 보지 못해 불편을 겪는 상황이 종종 있었습니다.또한 인터넷이 차단된 폐쇄망 혹은 네트워크가 불안정한 환경에서도 노트를 볼 수 없습니다.위 요소들은 상당한 디메리트라고 생각하고 노트 앱을 변경하게 된 결정적인 이유가 되었습니다.옵시디언은 빠르게 성장하고 생태계를 넓히는 중인 노트앱으로, 로컬 + 마크다운 기반으로 작동하는 노트앱으로서 메모 앱들의 대체제로 떠올랐습니다.이 앱은 위에서 제시한 노션의 단점들을 상쇄할 수 있는 요소들을 가지고 있어, 활용하기에 따라 무궁무진한 가능성을 가지고 있습니다.1. 능동적인 데이터 백업과 빠른 속도먼저 로컬 기반으로 동작하기 때문에, 데이터를 사용자 개인이 저장하고 있습니다.그리고 마크다운 기반이기에 텍스트 파일로서 저장되고, 텍스트 편집기와 파일 관리자로 노트를 편집, 관리할 수 있을 뿐만 아니라 데이터 용량 자체도 굉장히 작습니다.또한 데이터를 사용자가 가지고 있으므로 이중 , 삼중 백업 또한 자유입니다. 깃허브, 외장하드, NAS등 다양한 백업 루트를 활용할 수 있습니다.물론 로컬 + 마크다운 기반이라는 말은 속도가 굉장히 빠르다는 것 또한 의미합니다.데이터가 아무리 쌓여도, 속도로 인해 답답할 일도 없고 메모리를 과다하게 사용하는 일도 없습니다.2. 다양한 커스터마이징 요소와 무한한 확장성옵시디언은 쉽게 질릴 일이 없습니다.마치 어렸을 적 다꾸를 하듯이, 메모 앱을 입맛대로 꾸밀 수 있는데요, 옵시디언에는 사용자들이 제작한 다양한 테마들이 존재합니다.이를 클릭 몇 번으로 자유롭게 사용 가능하고, 그 안에서도 얼마든지 커스터마이징 또한 가능합니다.저는 개인적으로 사용하는 볼트는 AnuPpuccin을 사용 중입니다.*(볼트는 저장소의 단위로, 노션의 워크스페이스와 비슷한 개념이라고 볼 수 있습니다)위 사진이 옵시디언을 처음 시작했을 때의 모습이고,위 모습이 제가 커스텀해서 현재 사용 중인 모습입니다.이처럼 보이는 UI 뿐만 아니라 모든 동작에 대한 단축키, 노트 생성에 대한 규칙, 아웃링크 규칙, 헤더 사이즈 별 색상 설정등 상상하는 대부분의 요소를 커스텀할 수 있습니다.물론 이는 옵시디언에서 기본적으로 제공하는 기능도 있지만, 대부분은 커뮤니티 플러그인 을 통해 이루어집니다.옵시디언의 가장 큰 특징 중 하나로, 사용자가 만든 추가 확장 기능을 커뮤니티 플러그인이라고 부릅니다.사용자들은 불편을 겪는 요소나 필요하다고 생각하는 기능들을 공식 웹사이트에 건의하는 것이 아닌, 직접 만들고 배포하며 생태계를 키워갑니다.24년 4월 기준 1631개의 플러그인이 공식적으로 존재하며, 비공식적으로 배포 중인(불법 요소가 있어서가 아니라 베타 버전 상태인) 플러그인까지 포함하면 그 수는 정말 방대합니다.다양한 플러그인 활용법들은 이후 옵시디언의 단점에 대해 다루면서 함께 알아보겠습니다.3. 무료로 제한 없이 사용 가능옵시디언은 유료 라이선스가 존재하며, 장치간 노트 동기화와 노트 퍼블리싱은 유료 솔루션으로서 제공중입니다.그러나 이러한 부분들도 후술할 커뮤니티 플러그인에서 무료로 해결 가능합니다.옵시디언은 매우 강력한 검색 기능을 제공합니다.노트들이 모두 각각의 텍스트 파일이기 때문에 굉장히 빠른 속도의 검색을 제공합니다.위 예시는 제 노트에서 실제로 특정 키워드를 검색하는 모습을 녹화한 것입니다.'smb' 에 대해 검색한다면, 해당 키워드가 포함된 모든 노트와, 아웃링크를 가진 노트까지 전부 검색이 가능합니다.또한 데이터의 양과 상관없이 매우 빠른 쿼리 속도를 보여줍니다.🩹옵시디언의 보완 가능한 단점과 유용한 플러그인옵시디언의 대부분의 단점들은 플러그인을 통해 보완이 가능합니다.몇 가지 필수적이라고 생각하는 기능들을 구현하는 방법을 플러그인 사용법과 함께 다뤄보겠습니다.대시보드의 필요성은 말해봐야 입만 아픕니다.폴더 탐색기와 달리 한 눈에 내가 현재 진행하는 모든 일들과 해야 하는 일을 볼 수 있고,그러한 파일들을 모두 아웃링크 / 인링크로 연결하여 사용성을 극대화 할 수 있습니다.더불어 노트 앱에서 자칫 길을 잃는 것을 방지해 줍니다.• None 메모를 쉽게 관리하는 색인으로 설계된 대시보드 만들기먼저 dashboard CSS 스니펫을 현재
notion
4/29/2024
logo
옵시디언이 사랑받는 이유 : 장단점 분석
안녕하세요, 데보션영 3기로 활동중인 강대훈입니다 🙇🏻‍♂️먼저 이 글을 쓰게 된 계기는, 데보션에서 노션에 대한 자세한 소개 글 을 접하고, 같은 노트 앱인 옵시디언에 대한 소개글도 있으면 좋을듯 해서 작성하게 되었습니다.옵시디언 사용 이유와 몇 가지 플러그인 활용법, 장단점에 대해 간단히 다뤄보겠습니다 😊그동안 저는 필기 앱으로 수 년간 노션을 주로 활용해왔습니다.노션은 정말 많은 장점들을 가지고 있습니다.우선 러닝커브가 거의 없다시피 하며, 기존 노트앱에 꿈꿔온 수많은 기능들이 내재되어 있어 처음 접했을 땐 거의 혁신과도 같았습니다.그러나 몇가지 이슈들로 인해 타 노트앱으로의 이전을 마음먹었습니다.1. 느린 속도와 높은 메모리 점유율노션은 노트앱치곤 리소스를 많이 잡아먹고, 데이터가 쌓일 수록 속도도 눈에 띄게 느려졌습니다.백그라운드에 두었을 때에도 옵시디언의 약 두배에 달하는 메모리 사용량을 보여주었고,실제 사용 중일 때에는 1GB를 넘어가는 기염을 토하기도 했습니다.저는 노트 앱에 메모리를 1GB 이상 투자하는 것이 과연 맞을까 생각이 들었고, 노트를 켜고 메모를 작성할 때마다 버벅임과 버퍼링을 겪으며 스트레스를 받아왔습니다.다음은 노션에서 기존에 사용하던 대시보드입니다.기본적인 UI가 예쁘고 깔끔하긴 하지만, 어느 정도 쓰다보면 질리는 것은 사실입니다.자유롭게 커스터마이징이 힘들다는 것이 사용하면서 계속 아쉬웠습니다.물론 노션 인핸서와 같은 어느정도의 솔루션은 존재하지만, 커스터마이징에 한계가 있고 노션 앱의 업데이트에 따라 호환성이 깨질 수 있다는 점 등 다양한 문제가 존재합니다.앞선 속도와도 같은 원인으로, 노션은 클라우드 기반이기 때문에 데이터베이스도 노션 쪽에서 가지고 있고, 내 데이터에 대한 주권이 나에게 있지 않습니다.따라서 노션 서비스에 모종의 장애가 발생할 경우, 내가 작성한 노트를 보지 못하고 최악의 경우 소실할 수도 있고, 최근 들어서도 몇 번이나 노션 서버에 장애가 생겨 노트를 보지 못해 불편을 겪는 상황이 종종 있었습니다.또한 인터넷이 차단된 폐쇄망 혹은 네트워크가 불안정한 환경에서도 노트를 볼 수 없습니다.위 요소들은 상당한 디메리트라고 생각하고 노트 앱을 변경하게 된 결정적인 이유가 되었습니다.옵시디언은 빠르게 성장하고 생태계를 넓히는 중인 노트앱으로, 로컬 + 마크다운 기반으로 작동하는 노트앱으로서 메모 앱들의 대체제로 떠올랐습니다.이 앱은 위에서 제시한 노션의 단점들을 상쇄할 수 있는 요소들을 가지고 있어, 활용하기에 따라 무궁무진한 가능성을 가지고 있습니다.1. 능동적인 데이터 백업과 빠른 속도먼저 로컬 기반으로 동작하기 때문에, 데이터를 사용자 개인이 저장하고 있습니다.그리고 마크다운 기반이기에 텍스트 파일로서 저장되고, 텍스트 편집기와 파일 관리자로 노트를 편집, 관리할 수 있을 뿐만 아니라 데이터 용량 자체도 굉장히 작습니다.또한 데이터를 사용자가 가지고 있으므로 이중 , 삼중 백업 또한 자유입니다. 깃허브, 외장하드, NAS등 다양한 백업 루트를 활용할 수 있습니다.물론 로컬 + 마크다운 기반이라는 말은 속도가 굉장히 빠르다는 것 또한 의미합니다.데이터가 아무리 쌓여도, 속도로 인해 답답할 일도 없고 메모리를 과다하게 사용하는 일도 없습니다.2. 다양한 커스터마이징 요소와 무한한 확장성옵시디언은 쉽게 질릴 일이 없습니다.마치 어렸을 적 다꾸를 하듯이, 메모 앱을 입맛대로 꾸밀 수 있는데요, 옵시디언에는 사용자들이 제작한 다양한 테마들이 존재합니다.이를 클릭 몇 번으로 자유롭게 사용 가능하고, 그 안에서도 얼마든지 커스터마이징 또한 가능합니다.저는 개인적으로 사용하는 볼트는 AnuPpuccin을 사용 중입니다.*(볼트는 저장소의 단위로, 노션의 워크스페이스와 비슷한 개념이라고 볼 수 있습니다)위 사진이 옵시디언을 처음 시작했을 때의 모습이고,위 모습이 제가 커스텀해서 현재 사용 중인 모습입니다.이처럼 보이는 UI 뿐만 아니라 모든 동작에 대한 단축키, 노트 생성에 대한 규칙, 아웃링크 규칙, 헤더 사이즈 별 색상 설정등 상상하는 대부분의 요소를 커스텀할 수 있습니다.물론 이는 옵시디언에서 기본적으로 제공하는 기능도 있지만, 대부분은 커뮤니티 플러그인 을 통해 이루어집니다.옵시디언의 가장 큰 특징 중 하나로, 사용자가 만든 추가 확장 기능을 커뮤니티 플러그인이라고 부릅니다.사용자들은 불편을 겪는 요소나 필요하다고 생각하는 기능들을 공식 웹사이트에 건의하는 것이 아닌, 직접 만들고 배포하며 생태계를 키워갑니다.24년 4월 기준 1631개의 플러그인이 공식적으로 존재하며, 비공식적으로 배포 중인(불법 요소가 있어서가 아니라 베타 버전 상태인) 플러그인까지 포함하면 그 수는 정말 방대합니다.다양한 플러그인 활용법들은 이후 옵시디언의 단점에 대해 다루면서 함께 알아보겠습니다.3. 무료로 제한 없이 사용 가능옵시디언은 유료 라이선스가 존재하며, 장치간 노트 동기화와 노트 퍼블리싱은 유료 솔루션으로서 제공중입니다.그러나 이러한 부분들도 후술할 커뮤니티 플러그인에서 무료로 해결 가능합니다.옵시디언은 매우 강력한 검색 기능을 제공합니다.노트들이 모두 각각의 텍스트 파일이기 때문에 굉장히 빠른 속도의 검색을 제공합니다.위 예시는 제 노트에서 실제로 특정 키워드를 검색하는 모습을 녹화한 것입니다.'smb' 에 대해 검색한다면, 해당 키워드가 포함된 모든 노트와, 아웃링크를 가진 노트까지 전부 검색이 가능합니다.또한 데이터의 양과 상관없이 매우 빠른 쿼리 속도를 보여줍니다.🩹옵시디언의 보완 가능한 단점과 유용한 플러그인옵시디언의 대부분의 단점들은 플러그인을 통해 보완이 가능합니다.몇 가지 필수적이라고 생각하는 기능들을 구현하는 방법을 플러그인 사용법과 함께 다뤄보겠습니다.대시보드의 필요성은 말해봐야 입만 아픕니다.폴더 탐색기와 달리 한 눈에 내가 현재 진행하는 모든 일들과 해야 하는 일을 볼 수 있고,그러한 파일들을 모두 아웃링크 / 인링크로 연결하여 사용성을 극대화 할 수 있습니다.더불어 노트 앱에서 자칫 길을 잃는 것을 방지해 줍니다.• None 메모를 쉽게 관리하는 색인으로 설계된 대시보드 만들기먼저 dashboard CSS 스니펫을 현재
2024.04.29
notion
emoji
좋아요
emoji
별로에요
logo
AWS 비용 최적화 Part 1: 버즈빌은 어떻게 월 1억 이상의 AWS 비용을 절약할 수 있었을까
데이터 엔지니어의 Airflow 데이터 파이프라인 CI 테스트 개선기들어가며 안녕하세요, 버즈빌 데이터 엔지니어 Abel 입니다. 이번 포스팅에서는 데이터 파이프라인 CI 테스트에 소요되는 시간을 어떻게 7분대에서 3분대로 개선하였는지에 대해 소개하려 합니다. 배경 이전에 버즈빌의 데이터 플랫폼 팀에서 ‘셀프 서빙 데이터 …
4/29/2024
logo
AWS 비용 최적화 Part 1: 버즈빌은 어떻게 월 1억 이상의 AWS 비용을 절약할 수 있었을까
데이터 엔지니어의 Airflow 데이터 파이프라인 CI 테스트 개선기들어가며 안녕하세요, 버즈빌 데이터 엔지니어 Abel 입니다. 이번 포스팅에서는 데이터 파이프라인 CI 테스트에 소요되는 시간을 어떻게 7분대에서 3분대로 개선하였는지에 대해 소개하려 합니다. 배경 이전에 버즈빌의 데이터 플랫폼 팀에서 ‘셀프 서빙 데이터 …
2024.04.29
emoji
좋아요
emoji
별로에요
Copyright © 2024. Codenary All Rights Reserved.