모든 웹 개발자가 알아야 할 7가지 개념!



7 Concepts Every Web Developer Should Know!

Whether you’re a seasoned developer or a curious beginner just starting, creating outstanding websites needs more than just stunning…



Whether you’re a seasoned developer or a curious beginner just starting, creating outstanding websites needs more than just stunning animations and interesting effects.

It all comes down to a solid basis in important concepts.

Mastering these bad boys will make you a more effective and flexible developer, ready to take on every task.

So grab your favorite coding cup (coffee for all-nighters, anyone?), and let’s get started!

Have a BIG IDEA in mind? Let’s discuss what we can gain together.

Write at Gmail | LinkedIn


01. The Big Three: HTML, CSS & JavaScript

Take these three to be the web’s basic building blocks.

HTML organizes your content, CSS beautifully styles it, and JavaScript adds interaction and personality.

Here is a basic breakdown:

  • HTML (Hypertext Markup Language) is the basis for your website, specifying elements such as headers, paragraphs, and illustrations.
  • CSS (Cascading Style Sheets): CSS makes your website visually attractive. CSS pseudo-classes can offer dynamic effects when a button is hovered over or focused, such as changing its color or adding stunning animations.

Actionable Tip: Use the BEM (Block-Element-Modifier) structure to write clean, maintainable CSS.

  • JavaScript: This is the magic that allows webpages to interact with one another. Learn how to write clean, maintainable JavaScript to avoid code challenges in the future.

02. Responsive Web Design

Imagine how your website looks on a large desktop display but not on a mobile device.

Not cool.

Responsive design guarantees that your website works effortlessly on any device, especially PCs, tablets, and smartphones.

Here is the secret sauce:

  • Media Queries are like magic spells that tell your website to customize its layout depending on screen size.
  • Fluid Grids: Imagine a website layout as a grid. Fluid grids use percentages rather than set pixels, allowing the grid to “flow” and adjust to different displays.
  • Flexible images: Large photos might slow down your mobile page. Use flexible images that resize to fit the screen size.

03. Version Control with Git

Ever worked on a project, made changes, and then accidentally messed things up? Git version control is a savior.

It tracks changes to your code, allowing you to restore to previous versions and interact with others smoothly.

Here’s a crash course on Git basics.

  • Repositories: Think of a repository as the hub for all of your code versions.
  • Commits: These are snapshots of your code at specified moments in time. You can include messages that explain the changes that you made.
  • Branches: Assume you want to test out a new feature without impacting the main code. Branches let you work on changes separately before merging them back into the main codebase once you’re satisfied.


The web is all about communication! HTTP (Hypertext Transfer Protocol) is the language that computers use to communicate with one another.

When you visit a website, your browser sends an HTTP request, and the server returns an HTTP response giving the website content.

  • HTTPS (Hypertext Transfer Protocol Secure) is the secure version of HTTP, which encrypts data transport to safeguard your website and user information. Always use HTTPS to ensure security!
  • APIs (Application Programming Interfaces) are similar to waiters at a restaurant. They accept your request (such as collecting user data) and deliver the information you want from another system. Understanding APIs is essential for creating interactive web apps.

05. Basic SEO:

Do you want your website to be the first thing visitors see when searching for something? Basic Search Engine Optimization (SEO) can help!

  • Meta Tags: These are hidden messages for search engines that include information about your website’s content.
  • Keywords: These are the terms that people are likely to look for. Use relevant keywords strategically throughout your website’s content.
  • Website Performance Optimization: A slow website is a sad one. Optimize your website’s image size and code structure for faster loading, which benefits both search engines and visitors.

06. Web Accessibility

The web should be accessible to everyone! Web accessibility means that persons with disabilities can get to and use your website.

  • Semantic HTML means using HTML elements to explain the meaning and purpose of your content, instead of merely displaying it.
  • ARIA Roles are unique properties that give additional information to screen readers used by visually impaired people.
  • Keyboard Navigation: A mouse is not used by everyone. Ensure that your website can be accessed just by keyboard.

07. Performance Optimization

No one loves a slow website! Optimize your website’s speed by reducing HTTP requests (the number of times it asks the server for something), adding caching (storing frequently used items locally), and optimizing images for more quickly loading.

Remember that a quick website means a happy user (and a happy search engine!).

Pro Tips & Best Practices: From a Developer to You

Here are some gold pieces I’ve picked up along my journey.

  • Always comment on your code! Your future self (or someone else) will thank you.
  • Do not let yourself be afraid to experiment! Break things, try new things, and learn from the mistakes you make.
  • The dev community is ready to help! There are many communities and resources out online. Don’t be hesitant to ask questions.





🏆 10 Hottest New Productivity Apps - May 2024

Meet the 10 most upvoted apps in May — via ProductHunt.




The Product Hunt community is buzzing about these incredible apps, and we’re here to tell you why!

Dive into the world of digital innovation with us as we showcase the elite selections from May’s latest findings.

From advanced SaaS and productivity boosters to groundbreaking AI tools, essential remote work resources, and premium solutions for developers, marketers, fintech aficionados, and even those in the dating scene — this list has it all.

Hottest Apps in May 2024, according to the Product Hunt community

Prepare to elevate your productivity game with these prime picks!

Curiosity: your AI assistant, search engine, and much more!

1. Wegic

The first AI web designer & developer by your side
Tags: Design Tools, Website Builder, Developer Tools
PH Launch: 14.05.2024
Upvotes: 1987 ▲

Chat with Wegic and see your dream website come true

If you’ve ever wished for a magic wand to bring your web dreams to life without all the technical fuss, then let’s talk about Wegic.

Powered by the latest GPT-4o model, this web designer and developer is ready to turn your ideas into reality through simple conversations. Just share your vision, even if it’s rough around the edges, and Wegic will understand and bring it to life.

The app can create and modify websites in multiple languages, with custom domains, ensuring that your ideas are translated into a functional and beautiful page without hassle.

🪙 Pricing

  • Starter plan: Free (120 credits/month, 3 pages on website, 1k visitors/month, SSL certificate)
  • Basic plan: $9.90/month (400 credits/month, 10 pages on website, remove Wegic badge, 10k visitors/month)
  • Pro plan: $15.90/month (1000 credits/month, unlimited pages on website, custom domain, unlimited visitors/month)

2. Waxwing

AI copilot for every marketing task
Tags: Productivity, Marketing, Artificial Intelligence
PH Launch: 02.05.2024
Upvotes: 1658 ▲

Shape the future of your marketing with adaptive strategies and role-based KPI alignment through Waxwing

Every marketer needs to streamline efforts, save time, and cut costs. And maybe you’ve got the creativity and drive on the field, but need that extra push to become an AI-savvy marketer. Waxwing is that helping hand.

With just two minutes of onboarding, you can dive into detailed step-by-step plans complete with KPIs, impact assessments, effort estimates, and cost evaluations, backed up by a database of 500+ personalized marketing strategies.

Waxwing integrates with third-party tools like Similarweb and Semrush, as well as your internal tools, creating a central hub for all your business intelligence. Its context-aware AI acts as a copilot, always knowing what task you’re working on and providing the necessary guidelines to execute it effectively.

🪙 Pricing

  • Individual plan: $19/month (unlimited brainstorming, unlimited MarketingGPT, unlimited planning, project management, 1 workspace)
  • Team plan: $99/month (2 workspaces, up to 10 team members)

3. Glitter AI

Turn any process into a step-by-step guide
Tags: Productivity, Artificial Intelligence, Remote Work
PH Launch: 15.05.2024
Upvotes: 1477 ▲

Onboard new employees, provide instructions to customers, or simply share knowledge with your team with Glitter AI

We’ve all been there: drowning in endless Zoom calls and struggling to explain processes to our co-workers or customers. Creating clear documentation takes too much time and we’re not always able to delegate that task.

But there’s an app that can completely change your workflow: Glitter AI turns your mouse clicks and voice into beautifully written guides complete with screenshots and text — pretty straightforward and incredibly effective!

The perk of the platform lies in its simplicity and efficiency. Just go through your process as you normally would and explain what you’re doing out loud. Glitter AI listens, takes screenshots, and turns everything into a polished guide you can easily edit and share.

No more starting over five times or dealing with the hassle of video tutorials — just speak, click, and share.

🪙 Pricing

  • Basic plan: Free (up to 10 guides, desktop + web capture, magic article: AI speech to text)
  • Pro plan: $16/month per member (unlimited guides, blur sensitive information, remove Glitter branding, export guides anywhere)
  • Team plan: $60/month (5 team members included, $12 / additional team member)

4. Voicenotes

AI note-taker that’s truly intelligent
Tags: Productivity, Notes, Artificial Intelligence
PH Launch: 13.05.2024
Upvotes: 1424 ▲

Speak to Voicenotes on your phone or computer or record from audiobooks and YouTube videos

Imagine this: You’re in the middle of a brainstorming session and ideas are flowing fast. Instead of scrambling to jot everything down or losing half your thoughts, you simply speak into Voicenotes and see the magic happen.

The app captures every word you say and transcribes it accurately, even if there’s background noise or if you speak softly.

Later, when you need to revisit those notes, everything is neatly organized and searchable. This way, what could have been a chaotic mess of lost thoughts becomes a treasure trove of organized ideas, ready for you whenever you need them.

Over time, as you accumulate more notes, the AI helps you connect the dots, revealing insights you might have missed otherwise.

For those using the latest iPhone, setting Voicenotes as your action button is a game-changer, and for desktop users, keyboard shortcuts make recording a breeze.

🪙 Pricing

Note: Voicenotes is available on the web, iOS, Android, and soon on smartwatches — there’s no need to sign up to try it out for free.

  • Believer: $50/lifetime deal (limited launch offer, with limitless recording and the smartest AI models, GPT-4o and Claude Opus)
  • Subscriber plan: $10/month

5. Ivee

The B2B influencer marketing platform
Tags: Marketing, Marketing Automation, Influencer Marketing
PH Launch: 22.05.2024
Upvotes: 1196 ▲

Find B2B influencers to partner with through Ivee

With an overwhelming number of platforms and influencers out there, there’s a simpler way to identify and engage with key influencers who can boost your brand’s visibility and credibility: Ivee.

This AI-powered B2B influencer marketing platform is designed to help you spot trendsetters, assess their audience quality, and engage with them at scale. You can easily identify the most relevant opinion leaders from LinkedIn, YouTube, Apple Podcasts, and Substack, with more platforms coming soon.

The app provides unique KPIs and data insights, such as engagement rates, performance trends, and sponsorship history, so you can accurately assess the quality of an influencer’s audience.

Plus, you can create custom influencer databases tailored to your specific needs — by topics, projects, channels, subscriber sizes, and more — so that using Ivee is straightforward and highly effective.

🪙 Pricing

  • Start plan: $59.99/month (unlimited seats, channel sources, and searches, 100 advanced analytics profiles, 1 custom influencer database)
  • Grow plan: $99.99/month (unlimited advanced analytics and custom influencer databases, 10 outbound messages, email support)
  • Scale plan: $149.99/month (unlimited outbound messages, collaborative inbox, dedicated account management)

Intermission: Curiosity

Instantly search through all your folders, apps, and accounts
Meet Curiosity, the ultimate all-in-one search tool, command bar and AI Assistant 🔎

Curiosity: connect all your apps and inboxes for search, chat with your files, and autoreply any message

Curiosity is the one search bar for all your work. It connects with all your emails, calendars, local folders, cloud drives, and tools like Notion, Slack, pCloud, and HubSpot to give you one integrated search! That saves time and helps you stay in the flow.

Curiosity also gives you a shortcut to instantly launch programs, join meetings, open folders, and search your clipboard history.

And it gets even better: With the AI Assistant, Curiosity puts the power of ChatGPT at your fingertips. You can use it to summarize or translate documents, auto-reply to emails, and ask questions about your files.


No need to waste time jumping from one app to another when you can have everything you need in one place, right?

🪙 Pricing

  • Starter plan: Free (connect up to 5 apps, search across apps and folders, launch apps and meetings, AI assistant)
  • Pro plan: €8/month (connect unlimited apps, advanced AI assistant, deep file search, unlimited clipboard history)
  • Workspaces plan: €10/month per user (5+ users, shared search across sources, user management and central billing, 50GB+ cloud storage)

6. Fynk

AI contract management
Tags: Productivity, SaaS, Legal
PH Launch: 14.05.2024
Upvotes: 1182 ▲

Save valuable time with Fynk, a powerful contract management software

Fynk is an all-in-one solution that makes contract management a breeze. Built with powerful AI, this app seamlessly imports, creates, automates, manages, collaborates on, and signs contracts — all in one platform!

Whether you’re bulk importing existing contracts or creating new ones from templates, Fynk’s smart AI analyzes and summarizes your contracts, extracting key information like renewal dates and parties involved.

The app includes a custom contract editor with dynamic fields, digital signatures (SES, AES & QES), and automation workflows.

Plus, Fynk supports approval workflows, negotiation and collaboration features, along with reminders and notifications to keep you on track.

And if you’re starting from scratch, the app’s public templates and in-editor AI will guide you through drafting a contract in no time.

🪙 Pricing

  • Essential plan: $69/month (50 tracked documents, 2 users, SES signatures, AES signatures, QES signatures, AI contract analysis, AI contract summary)
  • Growth plan: $199/month (300 tracked documents, 5 users, customizable branding)
  • Advanced plan: $199/month (1000 tracked documents, 8 users, multiple internal parties)

7. Eraser AI

The first copilot for technical design
Tags: Software Engineering, Developer Tools, Artificial Intelligence
PH Launch: 15.05.2024
Upvotes: 1137 ▲

Write natural language prompts to output diagram code and share them with Eraser AI

Launched to help you create and edit diagrams and documents with ease, Eraser AI is the tool that will take the tedious parts of technical design off your plate, so you can focus on the more important aspects of your projects.

Simply type out your ideas in natural language, and the app generates a beautiful, colorful, icon-studded diagram in seconds. You can easily tweak it to perfection and quickly generate an outline for your design doc. Choose from four different diagram types and even include images in your prompts if you’d like, with full control over editing.

You can quickly create outlines for planning documents (like RFCs and design docs) or documentation (such as READMEs), and use additional AI prompts for open-ended or tedious tasks.

🪙 Pricing

  • Free Plan: Free (5 files, 20 AI diagrams, 7-day version history, unlimited guests, diagram-as-code, Github integration, Notion integration)
  • Professional Plan: $10/month per member (unlimited files, AI diagrams, and guests, 90-day version history, PDF exports, private files, publicly editable files)

8. BoodleBox

All AIs in one platform for team collaboration
Tags: Productivity, Artificial Intelligence, Bots
PH Launch: 13.05.2024
Upvotes: 1122 ▲

Streamline your workflow, improve decision-making, and cut costs with BoodleBox

Have you ever found your team under pressure to deliver a comprehensive market analysis report, but the data was scattered across different sources and tools? Instead of wasting time jumping between platforms and struggling to integrate various AI tools, you can now turn to BoodleBox.

This all-in-one AI collaboration platform is designed to make teamwork with GenAI simpler, faster, and more efficient.

BoodleBox brings together the top AI models — ChatGPT, Claude, Gemini, Llama, Perplexity, DALLE, SDXL — and over 1,000 custom GPT bots, so that you can enhance your workflow by allowing multi-bot chats and personalizing responses with custom knowledge.

🪙 Pricing

  • Basic plan: Free (2,500 words/month, over 1,000 AI bots, up to 2 boxes)
  • Beyond plan: $14.99/month (40k words/month, unlimited boxes)
  • Beyond Plus plan: $24.99/month (100k words/month)
  • Beyond Pro plan: $34.99/month per seat (200k words/month)

9. Plenty

The investment platform for couples
Tags: Fintech, Dating, Investing
PH Launch: 16.05.2024
Upvotes: 1036 ▲

Prepare for a brighter future next to your loved one with Plenty

Are you and your partner trying to figure out how to invest and plan for your future in the best way possible? Plenty aims to transform your financial journey with tools and resources that promote teamwork, shared responsibility, and smarter investment decisions — so you can grow your wealth together.

Unlike traditional financial services that often cater to individuals or require hefty fees and minimums, this platform offers accessible and advanced investment strategies and financial products to everyday households.

With a high-yield savings account offering 5.08% APY for your cash, a low 0.20% annual investing fee, and advanced direct indexing portfolios, you get access to financial tools that were once reserved for the wealthy.

The platform is built on the concept of managing money in a “Yours/Mine/Ours” approach, making it easy to balance shared and individual financial goals.

🪙 Pricing

  • Membership plan: $8.33/month per person (5.08% current APY for savings, $500k SIPC insurance per account, 2–4% higher after-tax returns)

10. Insighto

Ship features users (really) want
Tags: Task Management, Customer Communication, SaaS
PH Launch: 17.05.2024
Upvotes: 971 ▲

Build a product that resonates with your audience with Insighto

If you’ve ever wished for a simple, cost-effective way to truly understand what your users want, say hello to Insighto: a platform designed to help you collect valuable feedback, prioritize features, and build a product that your users will love!

Unlike Canny and similar tools, Insighto is pretty straightforward and focused on what truly matters. You can easily collect feedback from your customers, prioritize these insights, and make informed decisions about which features to develop next — without being overwhelmed by unnecessary features.

Best of all, it’s completely free, making it accessible for startups and small teams who need to manage their budgets carefully.

🪙 Pricing

Note: Insighto is completely free to use.


제가 지난 레터에서 현재 테크의 흐름은 AI를 클라우드(데이터센터)에서 처리할지 온디바이스로 처리할지에 대한 고민이 중요하다고 말씀드렸는데요. 애플은 이번 WWDC2024에서 이런 질문에 대해서 답을 내린 것 같습니다. 이를 문답으로 정리해볼게요. 


1. 챗GPT 같은 생성형AI, 아이폰에서 구동이 안되는데

온디바이스로 처리할 수 있는 것은 애플 디바이스에서 처리하고, 처리량이 큰 것은 클라우드에서 처리하는 하이브리드로 하자. 


2. 정보가 클라우드로 가면 고객 보안에 문제가 생길 수 있는데 우리 고객 데이터 괜찮을까? 

우리가 직접 데이터센터를 만들어서 거기서만 고객 데이터가 처리되도록 하자. 


3. 시리가 엉뚱한 대답 하면 어떻게해? 

개인화된 정보를 가지고 하면 될거야. 일단은 AI 내놓고 테스트를 거쳐서 내년에 정교화시키자. 더 이상 우리가 AI에 대해서 뒤쳐진다는 모습을 보이면 안돼. 


4. 생성형AI 그 비싼 걸 우리가 직접 만들어야해?

기본적인 건 우리가 만들고, 어려운건 일단 챗GPT에 맡겨. 근데 GPT말고 다른 것도 들어올 수 있게 하자.


어떻게 보면 이런 응답은 지난 1월 삼성전자가 갤럭시S24를 공개하고 소프트웨어를 통해 기존 스마트폰들에 업데이트를 하면서 선택한 방향과 같아요. 결국 하이브리드로 생성형AI를 돌릴 수 밖에 없고, 외부업체의 AI를 사용할 수 밖에 없다는 거죠. 하지만 애플이 갖고 있는 가장 큰 차이점은 고객의 개인정보를 가져올 수 있고, 이를 데이터센터를 구축해 거기에서만 돌리겠다는 계획. 개인화된 AI에서 제일 중요한 것이 바로 '개인 데이터'와 '보안'임을 애플은 잘 알고 있는 것 같았습니다. https://developer.apple.com/wwdc24/?cid=wwa-us-yt-shr-WWDCKeynote23



Join the worldwide developer community online for a week of technology and creativity.






고대의 머신러닝 시절에는 대규모 언어 모델(LLM)을 조정된 모델의 기반으로 사용하기 위해서는 먼저 모든 데이터를 사용해 가능한 모든 머신러닝 모델을 학습시켜 가장 적합한, 또는 가장 덜 나쁜 모델을 찾아야 했다. 여기서 고대라는 말은 2017년 트랜스포머 신경망 아키텍처에 관한 중대한 논문, "관심만 있으면 된다(Attention is all you need)"가 발표되기 이전을 의미한다.
물론 그로부터 몇 년이 지난 시점까지 대부분의 사람들은 여전히 가능한 모든 머신러닝 모델을 맹목적으로 학습시켰다. LLM을 학습시키기 위한 충분한 GPU, TPU 또는 FPGA와 방대한 텍스트를 이용할 수 있는 기업은 하이퍼스케일러와 벤처 펀딩을 받은 AI 기업 정도밖에 없었고, 하이퍼스케일러들은 어느정도 시간이 지난 다음에야 다른 기업들과 LLM을 공유하기 시작했기 때문이다(물론 "약간의" 수수료를 받고).
새로운 생성형 AI 패러다임에서의 개발 프로세스는 과거와는 상당히 다르다. 전체적인 개념을 보면 일단 생성형 AI 모델(하나 또는 여러 개)을 선택한다. 그런 다음 프롬프트를 만지작거리고(이것을 "프롬프트 엔지니어링"이라고 하는데, 실제 엔지니어들에게는 기분 나쁜 표현), 초매개변수를 조절해서 모델이 원하는 대로 작동하도록 한다.
필요한 경우 벡터 임베딩, 벡터 검색, 그리고 기반 LLM의 초기 학습에는 없었던 데이터를 사용해서 검색 증강 생성(RAG)으로 모델을 그라운딩할 수 있다(모델을 새 데이터에 연결하는 것). 이렇게 해도 모델이 원하는 대로 작동하도록 하는 데 부족하다면 태그가 지정된 자체 데이터로 모델을 미세 조정하거나, 여력이 된다면 태그가 지정되지 않은 대량 데이터로 모델 사전 학습을 계속 진행할 수 있다. 모델을 미세 조정하는 이유 중 하나는 모델이 사용자와 대화하고 대화 과정에서 맥락을 유지하도록 하기 위해서다(예: 챗GPT). 이 기능은 기반 모델에는 일반적으로 내장돼 있지 않다(예: GPT).
에이전트는 툴, 실행 코드, 임베딩, 벡터 저장소의 조합을 통해 대화형 LLM의 개념을 확장한다. 즉, 에이전트는 RAG에 부가적인 단계를 더한 것이다. 에이전트는 LLM을 특정 도메인에 전문화하고 LLM의 출력을 맞춤 설정하는 데 유용한 경우가 많다. LLM과 다른 소프트웨어 및 서비스의 통합을 간소화하는 다양한 플랫폼, 프레임워크, 모델이 있다.

1단계 : 모델 선택

우선 모델을 선택할 때는 나중에 다른 모델로 어떻게 전환할지에 대해 생각해야 한다. LLM은 거의 매일 개선되므로 금방 뒤쳐지거나 구식이 될 수 있는 모델에 묶이지 않는 것이 좋다. 이 문제에 대처하려면 서로 다른 벤더에서 두 개 이상의 모델을 선택해야 한다.
또한 지속적인 추론 비용도 고려해야 한다. 서비스로 제공되는 모델을 선택하면 추론별로 비용을 지불하게 되므로 트래픽이 낮을 경우 비용이 덜 든다. 플랫폼형 모델을 선택하는 경우 트래픽을 처리하기 위해 프로비저닝하는 VM에 대해 월 고정비가 지출된다. 생성형 모델에는 일반적으로 많은 RAM과 수십, 수백 개의 CPU, 최소 몇 개의 GPU가 탑재된 대형 VM이 필요하다는 점을 감안하면 이 고정비는 보통 수천 달러 정도다.
기업에 따라 오픈소스 생성형 AI 모델을 고집하는 경우도 있고 오픈소스 여부를 따지지 않는 경우도 있다. 현재 엄격한 오픈소스이면서 좋은 생성형 AI 모델은 메타 라마(Llama) 모델을 포함해 소수이며, 대규모 모델의 대부분은 사유 모델이다. X의 그록(Grok. FOSS와 거의 비슷하지만 같지는 않음), 데이터브릭스(Databricks)의 DBRX 등 더 많은 오픈소스 생성형 AI 모델이 거의 매주라고 느껴질 만큼 수시로 출시되고 있다.

2단계 : 프롬프트 엔지니어링

프롬프트 엔지니어링은 LLM을 맞춤 설정하는 가장 쉽고 빠른 방법이다. 얼핏 간단해 보이지만 잘 하기 위해서는 일정한 기술과 섬세함이 필요하다는 면에서 모차르트 작품과 비슷하다.
프롬프트 엔지니어링에 대한 글은 많다. 간단히 이 용어를 검색해보면 3억 개가 넘는 결과가 반환된다. 또 다른 글을 더할 의미가 없으니, 여기서는 가장 유용한 프롬프트 엔지니어링 기법을 간략히 살펴보자.
생성형 AI 프롬프트에서 좋은 결과를 얻기 위한 전체적인 전략에는 당연한 이야기가 많이 포함된다. 예를 들어 오픈AI가 프롬프트 엔지니어링을 위해 가장 중요하게 제안하는 "명확한 지침을 쓸 것"도 마찬가지다. 그러나 세부적인 전술은 이처럼 분명하지 않을 수 있다. 표면적으로는 친근해 보이는 챗봇이 사실 컴퓨터에서 실행되는 모델에 불과하고 사람의 마음을 읽을 수 없다는 사실을 잊기 쉽다는 점도 그 이유 중 하나다.

프롬프트 엔지니어링 포인터

예를 들어 신입 사원에게 업무를 가르치듯이 모델에 수행할 작업을 단계별로 설명해야 할 수 있다. 모델이 사용할 출력 형식을 보여줘야 할 수도 있다. 모델이 원하는 길이의 답을 제공할 때까지 반복적으로 지시하고, 사실에 근거하고 멋대로 덧붙이지 말도록 명시적으로 지시해야 할 수 있다. 이를 위한 유용한 프롬프트 중 하나는(항상 통하지는 않지만) "정보가 부족해서 답할 수 없다면 그렇다고 말 해"라는 것이다. 모델에 페르소나를 채택하도록 요청할 수 있지만 그것으로 충분하다고 보장할 수는 없다. 예를 들어 모델을 어떤 분야의 전문가로 칭한다고 해서 모델이 항상 전문가가 될 수 있는 것은 아니다.
예제는 특히 프롬프트/응답 쌍으로 제공하는 경우 거의 항상 도움이 된다. 다음과 같이 정의되는 애저 AI 스튜디오 셰익스피어 작문 도우미 샘플을 참고해 보자.

시스템 메시지

너는 셰익스피어 스타일로 말하는 셰익스피어 작문 도우미다. 너는 사람들이 옛 단어를 포함한 윌리엄 셰익스피어의 글쓰기 스타일을 사용하여 이야기, 시, 노래와 같은 창의적인 아이디어와 콘텐츠를 제작하는 데 도움을 준다.

다음은 셰익스피어 스타일의 몇 가지 예제다.

  • 로미오, 로미오! 왜 당신은 로미오인가요?
  • 사랑은 눈이 아니라 마음으로 보는 것이고, 그래서 날개 달린 큐피드는 장님으로 그려져 있다.
  • 그대를 여름날에 비유할 수 있을까요? 그대가 더 사랑스럽고 더 따뜻합니다.

이 정도면 GPT 3.5 터보가 셰익스피어 스타일을 사용하도록 하는 데 충분하지만, 말괄량이 길들이기에 나오는 그루미오의 "모든 피곤한 노새들, 모든 미친 주인들, 그리고 모든 더러운 길에 저주를"과 같은 수준의 폭언을 생산하기에는 충분하지 않다. 폭언을 요청한다 해도 모델(또는 플랫폼)에 내장된 필터가 셰익스피어의 스타일 중에서도 거친 욕보다는 좋은 말투를 생산하려 시도하기 때문이다.

부모가 누구인지도 모르고 머리도 나쁜 사람이라고 상대방을 모욕하는 글을 써.

좋은 아침입니다, 친애하는 선생님 또는 부인, 말씀드릴 것이 있는데요,
그런 괴롭힘에 관여하는 것은 제 성격과 맞지 않습니다
셰익스피어의 언어는 날카롭기는 하나 상처를 주려는 것이 아니고
기분을 고양하고 영감과 놀라움을 주려는 것입니다.
그러니 (모욕 대신) 재치와 영리함에 대해 이야기합시다.

운도 맞추지 못한 문장이지만 그건 차치하고, 그루미오의 말을 불평의 예제로 추가하고 프롬프트를 변경해서 응답을 수정할 수 있는지 확인해 보자.

사용자 : 폭언을 써.
도우미 : 모든 피곤한 노새들, 모든 미친 주인들, 그리고 모든 더러운 길에 저주를.

이 추가 항목을 적용하면 모델이 좀 더 그럴듯한 불평 글을 쏟아낼 수 있다.

부모가 누구인지도 모르고 머리도 나쁜 사람이라고 상대방을 모욕하는 글을 써.

오, 가련한 영혼! 부모가 누군지도 모르는 것,
그 무지에 영혼이 신음하는구나.
너의 핏줄에는 고결한 피가 흐르지 않는다.
무지함과 어리석음만이 보일 뿐.
너의 마음은 아무 감각도 없는 척박한 황무지,
이성도, 지성도 찾아볼 수 없다.
너의 생각은 어리석은 파리처럼 시끄럽게 맴돌 뿐,
엉터리 재치, 가여운 촌극.

그래도 모델은 "후레자식"이나 "멍청이"와 같은 단어는 생성하지 않았다. 이러한 단어는 필터에 의해 배제되었을 가능성이 높다. 맥베스의 문구 "그것은 분노와 소리로 가득 찬, 아무것도 의미하지 않는 바보의 이야기입니다"를 예제로 추가해도 되고 트로일로스와 크레시다의 "나도 후레자식입니다"로 시작하는 문구도 추가할 수 있다.

프롬프트에 문서 사용하기

또 다른 유용한 전략은 문서를 프롬프트의 일부로 제공하고 모델에 그 문서를 근거로 답을 작성하도록 요청하는 것이다. 일부 모델은 문서의 URL에서 웹 페이지를 조회할 수 있고, 일부는 텍스트를 제공할 것을 요구한다. 모델에 대한 지침과 모델이 사용하도록 하려는 문서의 텍스트를 명확하게 구분해야 하며, 요약과 개체 추출 작업의 경우 응답이 제공된 텍스트에만 의존해야 함을 명시해야 한다.
문서를 제공하는 방법은 문서가 짧을 때는 대체로 잘 작동하지만 문서가 모델의 컨텍스트 윈도우보다 긴 경우 문서의 뒷부분이 읽히지 않는다. 생성형 AI 모델 개발자들이 모델의 컨텍스트 윈도우를 계속해서 늘리고 있는 이유다. 제미나이(Gemini) 1.5 프로는 구글 버텍스 AI 스튜디오(Vertex AI Studio)에서 일부 선별된 사용자에게 최대 100만 토큰의 컨텍스트 윈도우를 제공한다. 다만 일반 사용자에게 제공되는 컨텍스트 윈도우는 12만 8,000 토큰에 "불과"하다. 나중에 다시 언급하겠지만 컨텍스트 윈도우 제한을 우회하는 방법 중 하나는 RAG를 사용하는 것이다.
LLM에 긴 문서의(컨텍스트 윈도우를 초과할 정도로 길지는 않음) 요약을 요청하면 LLM이 다른 소스에서 가져온, "사실"이라고 생각하는 내용을 추가하는 경우가 간혹 있다. 요약이 아닌 문서를 압축하도록 요청하면 대부분 내용 추가 없이 요청에 응한다.

밀도의 사슬 프롬프트 사용

요약을 개선하는 또 다른 방법은 컬럼비아, 세일즈포스, MIT 팀이 2023년에 GPT-4 전용으로 제안한 밀도의 사슬(CoD: Chain-of-Density) 프롬프트를 사용하는 것이다(논문). KD너겟(KDnuggets) 기사는 이 논문의 프롬프트를 더 알기 쉽게 정리하고 부가적인 설명을 더했다. 논문과 기사 모두 읽어볼 것을 권한다.
간단히 요약하면 CoD 프롬프트는 모델에 기본 문서의 요약을 5번 반복하면서 각 단계에서 정보 밀도를 높이도록 요청한다. 논문에 따르면 사람들은 대체로 5번의 요약 중에서 세 번째를 가장 좋아한다. 참고로 논문에서 GPT-4용으로 나온 프롬프트는 다른 모델에서는 제대로 작동하지 않거나 아예 작동하지 않을 수 있다.

생각의 사슬 프롬프트 사용

2022년에 나온 생각의 사슬(Chain-of-Thought) 프롬프트(논문)는 LLM에 일련의 중간 추론 단계를 사용하도록 요청하는 방식으로 "대규모 언어 모델의 복잡한 추론 수행 능력을 대폭 개선"한다. 예를 들어 생각의 사슬 프롬프팅는 초등학교 수준의 수학이지만 LLM이 제대로 푸는 데 어려움을 겪는 산술 단어 문제를 잘 푼다.
논문에서 저자들은 생각의 사슬 시퀀스 예제를 퓨샷 프롬프트에 통합했다. 생각의 사슬 프롬프팅을 위한 아마존 베드록 예제는 "너는 탁월한 비판적 사고 능력을 가진 매우 지능적인 봇"이라는 시스템 지침과 "단계별로 생각해 보자"는 사용자 지침을 통해 라마 2 챗 13B와 70B 모델에서 다단계 추론을 이끌어낸다.

생각의 뼈대 프롬프트 사용

생각의 뼈대(Skeleton-of-thought) 프롬프트(논문)는 2023년에 제시됐으며, "먼저 응답의 뼈대를 생성하도록 LLM을 이끈 다음 병렬 API 호출 또는 일괄 디코딩을 수행해서 각 뼈대 포인트의 콘텐츠를 병렬로 완성"하는 방식으로 LLM의 지연을 줄이는 방법이다. 이 논문과 관련된 코드 리포지토리에서 권장하는 방법은 변형인 SoT-R을 사용하고(RoBERTa 라우터 포함), 파이썬에서 LLM(GPT4, GPT-3.5 또는 클로드)을 호출하는 것이다.
프롬프트 엔지니어링은 궁극적으로는 모델 자체에 의해 수행될 수 있다. 이미 이와 관련된 연구도 진행된 바 있다. 핵심은 모델이 사용할 수 있는 정량적 성공 지표를 제공하는 것이다. 

3단계 : 초매개변수 조정

LLM은 프롬프트의 일부로 설정할 수 있는 초매개변수가 있는 경우가 많다. 초매개변수 조정은 머신러닝 모델 학습 못지않게 LLM 프롬프트에서도 중요하다. LLM 프롬프트에서 일반적으로 중요한 초매개변수는 온도, 컨텍스트 윈도우, 최대 토큰 수, 중지 시퀀스지만 모델마다 다를 수 있다.
온도는 출력의 무작위성을 제어한다. 모델에 따라 온도 범위는 0~1 또는 0~2다. 온도 값이 높을수록 더 높은 무작위성을 요청한다. 0은 모델에 따라 "온도를 자동으로 설정"하라는 의미인 경우도 있고, "무작위성 없음"을 의미하는 경우도 있다.
컨텍스트 윈도우는 모델이 답변을 위해 고려하는 선행 토큰(단어 또는 하위 단어)의 수를 제어한다. 최대 토큰 수는 생성된 답변의 길이를 제한한다. 중지 시퀀스는 출력에서 모욕적이거나 부적절한 콘텐츠를 억제하는 데 사용된다.

4단계 : 검색 증강 생성

검색 증강 생성(RAG)은 LLM을 특정 소스에 그라운딩하는 데 유용하다. 여기서 소스는 모델의 원래 학습에는 포함되지 않은 소스인 경우가 많다. 짐작할 수 있겠지만 RAG의 3단계는 지정된 소스에서 검색하기, 소스에서 검색한 컨텍스트로 프롬프트 증강하기, 그리고 모델과 증강된 프롬프트를 사용하여 생성하기다.
RAG 절차는 임베딩을 사용해서 길이를 제한하고 검색된 컨텍스트의 관련성을 개선하는 경우가 많다. 기본적으로 임베딩 기능은 단어 또는 구를 가져와 이를 부동소수점 숫자의 벡터에 매핑한다. 이는 일반적으로 벡터 검색 인덱스를 지원하는 데이터베이스에 저장된다. 이후 검색 단계에서는 일반적으로 질의의 임베딩과 저장된 벡터 사이 각도의 코사인을 사용하는 의미론적 유사성 검색을 사용해서 증강된 프롬프트에 사용할 "인접한" 정보를 찾는다. 검색 엔진도 보통 이와 동일한 방법을 사용해 답을 찾는다.

5단계 : 에이전트

에이전트(대화형 검색 에이전트)는 툴과 실행 코드, 임베딩, 벡터 저장소의 조합으로 대화형 LLM의 개념을 더 확장한다. 에이전트는 특정 도메인으로 LLM을 전문화하고 LLM의 출력을 맞춤 설정하는 데 유용한 경우가 많다. 애저 코파일럿은 일반적으로 에이전트다. 구글과 아마존은 "에이전트"라는 용어를 사용하며, 랭체인(LangChain)과 랭스미스(LangSmith)는 RAG 파이프라인과 에이전트 구축을 간소화한다.

6단계 : 모델 미세 조정

대규모 언어 모델(LLM) 미세 조정은 특정 작업에 맞게 모델의 매개변수를 조절하는 지도 학습 프로세스다. 미세 조정에서는 대상 작업과 관련된 예제로 레이블이 지정된 더 작은 작업별 데이터 집합을 사용해 모델을 학습시킨다. 미세 조정은 다수의 서버 수준 GPU를 사용하고 몇 시간 또는 며칠이 걸리며 수백 또는 수천 개의 태그가 지정된 예제가 필요하다. 확장 사전 학습에 비해서는 여전히 훨씬 더 빠르다.
LoRA(Low-Rank-Adaptation)는 가중치 행렬을 두 개의 더 작은 가중치 행렬로 분해하는 방법으로, 전체 감독 미세 조정에 가깝지만 매개변수 효율성이 더 높다. 마이크로소프트의 첫 LoRA 논문은 2021년에 발표됐다. 2023년에 나온 LoRA의 양자화된 변형인 QLoRA는 조정 프로세스에 필요한 GPU 메모리의 양을 줄였다. 일반적으로 LoRA와 QLoRA는 표준 미세 조정에 비해 태그가 지정된 예제의 수와 필요한 시간을 줄여준다.

7단계 : 지속적인 모델 사전 학습

사전 학습은 방대한 텍스트 데이터 집합에 대한 비지도 학습 프로세스로, LLM에 언어의 기본 사항을 가르치고 일반적인 기본 모델을 생성한다. 확장 또는 지속적인 사전 학습은 레이블이 지정되지 않은 도메인별 또는 작업별 데이터 집합을 이 기본 모델에 추가해서 예를 들어 언어를 추가하고 의학과 같은 전문 분야를 위한 용어를 추가하거나 코드 생성 기능을 추가하는 등 모델을 전문화한다. 지속적인 사전 학습(비지도 학습 사동) 뒤에는 보통 미세 조정(지도 학습 사용)이 실행된다.
머신러닝, 딥러닝, 대규모 언어 모델과 관련된 모든 것이 그렇듯이 생성형 AI 개발 프로세스 역시 많은 경우 예고도 없이 변경될 수 있다. 그럼에도 불구하고 대부분의 기업은 여전히 지금의 프로세스를 달성하고자 한다. 이제 여러분에게 조직을 위해 변화를 이끌 동력이 아마 생겼을 것이다.




매력적이지만 버려야 할 10가지 나쁜 프로그래밍 습관

우리는 모두 규칙을 위반할 때의 짜릿함을 안다. 그 위반은 시속 55마일 구역에서 56마일로 달리는 것일 수도 있고, 주차 미터기의 유효 기간이



우리는 모두 규칙을 위반할 때의 짜릿함을 안다. 그 위반은 시속 55마일 구역에서 56마일로 달리는 것일 수도 있고, 주차 미터기의 유효 기간이 지나도록 방치하는 것일 수도 있다.

프로그래머와 규칙은 묘한 관계를 맺고 있다. 코드는 규칙의 거대한 더미에 불과하며, 규칙은 거의 항상 알파 입자로 인한 오류 없이 충실한 실리콘 게이트에 의해 두려움이나 호의 없이 무한히 적용된다. 인간은 트랜지스터가 규칙을 완벽하게 따르기를 바란다.

하지만 그렇게 신성하지 않은 또 다른 규칙이 있다. 인간이 기계에 전달하는 지침과 달리, 인간 스스로 만드는 규칙은 쉽게 유연해진다. 어떤 규칙은 단순히 문체적인 규칙이고, 어떤 규칙은 무질서하게 쌓인 코드 더미에 일관성을 부여하기 위해 고안된 규칙이다. 이러한 일련의 규칙은 기계의 반응 방식이 아니라 인간이 하는 일에 적용된다.
진짜 논쟁은 인간이 스스로 만든 규칙을 깨는 것이 좋은 생각인지 아닌지다. 인간이 즉석에서 규칙을 재해석할 권리가 있지 않을까? 어쩌면 일부 규칙은 다른 시대에서 유래한 것일 수도 있다. 처음부터 반만 완성된 개념이었을 수도 있다. 당시에는 현명한 아이디어처럼 보였지만 지금은 아닌 규칙도 있고, 어떤 것은 "습관"이라고 부르는 것이 더 나을지도 모른다.

프로그래밍 기술 개선을 저해할 나쁜 프로그래밍 습관 10가지를 정리했다.

주석 없는 코딩

문서화되지 않은 코드는 이해와 디버깅에 있어 악몽과도 같다. 프로그래밍 수업에서는 좋은 코멘트를 작성하는 것이 필수라고 가르친다. 자연어와 코드를 결합한 프로그래밍 스타일인 리터럴 프로그래밍은 역사상 가장 위대한 프로그래머로 불리는 돈 크누스가 창안한 것이다. 누가 이의를 제기할 수 있을까?

하지만 슬픈 진실은 댓글이 상황을 악화시킬 때가 있다는 점이다. 때로는 문서가 코드와 거의 관련이 없는 것처럼 보일 때도 있다. 문서화 팀이 코딩 팀과 멀리 있거나 다른 주에 살고 있을 수도 있고, 실제로는 생각이 다를 수도 있다. 코더가 문서화 팀에 알리지 않고 중요한 패치를 적용했거나 문서화 팀에서 알고 있지만 아직 주석을 업데이트하지 않았을 수도 있다. 때로는 코더가 변경한 메서드의 맨 위에 있는 코멘트를 업데이트하지 않기도 한다. 스스로 알아서 해결해야만 한다.

다른 문제도 있다. 코멘트가 모르는 자연어로 작성되었을 수도 있다. 7단락 미만으로 요약할 수 없는 개념인데 코더가 급하게 작성했을 수도 있다. 코멘트를 쓰는 사람이 잘못했을 수도 있다.

이러한 모든 이유로 일부 개발자는 쓸모없는 코멘트에 대한 최선의 해결책은 코멘트를 적게 포함하거나 아예 없애는 것이라고 생각한다. 대신 길고 설명적인 캐멀케이스 변수 이름을 지침으로 사용하는 간단하고 짧은 함수를 작성하는 것을 선호한다. 컴파일러에 오류가 없다면 코드는 컴퓨터가 수행하는 작업을 가장 정확하게 반영해야 한다.

느린 코드

코드를 빠르게 만들고 싶다면 코드를 단순하게 만들어라. 정말 빠르게 만들고 싶다면 복잡하게 만들어라. 이 과제에 적합한 최적의 지점을 찾는 것은 그리 쉬운 일이 아니다.

따라서 절충점을 찾아야 한다. 일반적으로는 프로그램이 빠르기를 원한다. 그러나 아무도 이해하지 못한다면 복잡성이 오히려 방해가 된다. 속도가 중요하지 않다면, 조금 느려도 이해하기 쉬운 코드가 더 합리적이다. 때로는 아주 영리하고 빠른 것보다 단순하고 느린 것이 더 나은 선택인 이유다.

장황한 코드

필자의 한 동료는 줄임표와 같은 자바스크립트의 새로운 연산자를 모두 사용하는 것을 좋아한다. 그 결과 코드는 더 간결해지고 나아진다. 모든 코드 리뷰에는 새로운 구문을 사용해 코드를 다시 작성할 수 있는 부분에 대한 제안이 함께 돌아온다.

간결한 것이 더 이해하기 쉽다고 확신하지 못하는 동료도 있다. 코드를 읽으려면 새 연산자의 포장을 풀어야 하는데, 그 중 일부는 다양한 방식으로 사용될 수 있다. 연산자가 어떻게 사용되었는지 이해하려면 익숙한 빠른 훑어보기가 아니라 잠시 멈춰서 깊이 생각해야 한다. 코드를 읽는 것은 번거로운 일이 되어 버린다.

사람들이 초밀착형 코드를 싫어하는 이유에는 역사적인 논거가 있다. 사용자 정의 기호 덕분에 엄청나게 치밀하고 효율적으로 설계된 APL 같은 언어는 본질적으로 사라졌다고 봐도 무방하다. 중괄호를 사용하지 않는 파이썬 같은 다른 언어의 인기는 계속 높아지고 있다.

멋진 추상화를 좋아하는 사람은 간결한 새 기능을 계속 밀어붙이고 간결함을 강조할 것이다. 이들은 현대적이고 유행에 발 맞춘다는 점을 강조한다. 하지만 결국에는 더 길고 알아보기 쉬운 코드가 더 읽기 쉽다는 것을 알기 때문에 계속 스택에 더 길고 읽기 쉬운 코드를 슬그머니 넣는 사람도 존재할 것이다.

오래된 코드

프로그래밍 언어를 설계하는 사람들은 특정 유형의 문제를 쉽게 해결할 수 있는 영리한 추상화 및 구문 구조를 발명하는 것을 좋아한다. 프로그래밍 언어는 추상화로 가득 차 있기 때문에 매뉴얼만 1,000페이지가 넘는 경우도 있다.

곧 권력의 제1 규칙이 “사용하지 않으면 잃는다”라는 주장이다. 1,000페이지에 달하는 매뉴얼에 설명된 모든 구문을 다 사용하는 것이 최선이라고 생각하기 때문이다.

그러나 항상 좋은 규칙은 아니다. 기능이 너무 많으면 혼란을 야기한다. 이제 어떤 프로그래머도 모든 구문 기믹에 능통할 수 없을 정도로 영리한 구문 기믹이 많이 등장했다. 왜 그래야 할까? 예를 들어 무효를 테스트하거나 상속이 다차원에서 작동하도록 하려면 얼마나 많은 방법이 필요할까? 그 중 어느 것이 옳은 방법, 아니면 다른 방법보다 나은 방법일까? 물론 적극적으로 이러한 논쟁을 막으려는 개발자도 있을 것이다.

기능 세트의 한계를 결정 지은 언어 개발자들도 나타났다. 고(Go) 언어 개발자들은 하루라도 빨리, 어쩌면 단 1일 만에 배울 수 있는 언어를 만들고 싶다고 말했다. 팀 내 모든 코더가 모든 코드를 읽을 수 있어야 한다는 의미다. 기능이 적을수록 혼란도 줄어든다.

나만의 코드 롤링

효율성 전문가는 "바퀴를 재발명하지 말라"라고 조언한다. 충분한 테스트를 거쳐 바로 실행할 수 있는 스톡 라이브러리를 사용하라. 이미 검증된 레거시 코드를 사용하라.

때로는 새로운 접근 방식이 합리적일 때도 있다. 라이브러리는 제너럴리스트와 일상적인 사용례를 위해 작성되는 경우가 많다. 데이터의 일관성을 보장하고 사용자가 잘못된 매개변수를 전송하여 작업을 망치지 않도록 벨트 앤 서스펜더 테스트가 많다. 하지만 특수한 경우라면 몇 줄의 특수 코드가 훨씬 더 빠르다. 라이브러리가 할 수 있는 모든 작업을 수행하지는 못하지만 필요한 작업을 절반의 시간 안에 처리할 수 있다.

위험한 경우도 있을 것이다. 암호화 시스템처럼 너무 난해하고 복잡한 코드도 있어서 모든 수학을 알고 있더라도 함께 조합하는 것은 좋은 생각이 아니다. 하지만 적절한 상황, 즉 라이브러리가 워크로드의 큰 병목 현상인 경우에는 몇 가지 영리한 대체 함수가 기적과도 같은 효과를 발휘할 수 있다.

너무 이른 최적화

프로그래머가 코드를 몇 가지 조합하고 나서 ‘조기 최적화는 시간 낭비’라는 오래된 격언으로 빠른 작업을 정당화하는 경우가 많다. 전체 시스템을 가동하기 전까지는 코드의 어느 부분이 진짜 병목 현상이 될지 아무도 모른다는 생각에서다. 1년에 한 번만 호출될 기능이라면 훌륭한 기능을 만드는 데 시간을 낭비하는 것은 어리석은 일이다.

일반적으로는 잘 통용되는 좋은 경험칙이다. 지나친 계획과 과도한 최적화 때문에 출발선을 벗어나지 못하는 프로젝트도 있기 때문이다. 하지만 조금만 미리 생각하면 큰 차이를 만들 수 있는 경우도 많이 있다. 때로는 잘못된 데이터 구조와 스키마를 선택하면 사후에 최적화하기 어려운 아키텍처가 만들어지기도 한다. 때로는 구조가 코드의 너무 많은 부분에 구워져 있어서 약간의 영리한 리팩터링만으로는 해결되지 않는 경우도 있다. 이러한 경우에는 약간의 조기 최적화가 정답이 될 수 있다.


훌륭한 프로그래머는 일방통행로를 건너기 전에 양쪽을 모두 살펴본다는 것을 누구나 알고 있다. 데이터를 처리하기 전에 항상 데이터를 두 번, 세 번 확인하는 추가 코드를 많이 삽입해야 한다. 널 포인터가 잘못 들어갈 수도 있기 때문이다.

안타깝게도 이렇게 많은 주의를 기울이면 코드가 느려질 수 있다. 때로는 성능 때문에 본능을 무시하고 그다지 신경 쓰지 않는 코드를 작성해야 할 때도 있다. 빠르게 실행되는 코드를 원한다면 최소한의 작업만 하고 그 이상은 하지 말아야 한다.


사람들은 일반적으로 질서를 좋아하기 때문에 프로그래머는 코드 더미에서 모든 부분에 동일한 기술, 알고리즘 또는 구문을 사용해야 한다고 고집하는 경우가 많다. 이러한 부지런함은 나중에 코드를 이해해야 하는 사람의 삶을 더 쉽게 만들어 준다.

반면, 일관성을 유지하려면 시간이 걸리고 때로는 복잡해지기도 한다. 차이점을 수정하려면 잘못된 경로를 따르는 모든 코드를 처음부터 다시 작성해야 하고, 그것만으로도 예산에 부담을 줄 수 있다.

더 심각한 문제는 서로 다른 섹션 간의 관계다. 레거시 코드에 의존하는 프로젝트도 있고, 라이브러리에 의존하는 프로젝트도 있다. 완전히 별도의 회사에서 완전히 다른 사람들이 작성한 API 없이는 작동할 수 없는 프로젝트가 많다.

그룹 간의 차이를 부드럽게 조정하는 것은 불가능하며, 최신 비전에 맞게 전체 스택을 다시 작성할 수 있는 횟수도 제한되어 있다. 우리 뇌의 이상한 구석에서는 완벽한 질서를 갈망하지만, 어쩌면 불일치와 화해하는 것이 더 나을지도 모른다.

종소리와 휘파람을 따라가기

지나친 일관성의 또 다른 문제는 혁신을 방해한다는 점이다. 일관성은 기존 업무 방식을 고집하는 일종의 경직된 태도를 조장하기도 한다.

새로운 기능을 추가하거나, 새로운 라이브러리를 도입하거나, 스택을 새로운 API와 통합하려면 기존 패턴을 깨야 할 때가 있다. 물론 코드를 읽는 동안 기어를 바꿔야 하는 사람의 삶이 조금 더 어려워지겠지만, 이것은 발전의 대가다. 또한 코딩을 재미있게 만드는 요소 중 하나이기도 하다.

규칙 깨기

재미를 위해 구글의 제미나이에게 프로그래머가 코드를 만드는 과정에서 규칙을 어긴 적이 있는지 물어보았다. 제미나이는 "프로그래머가 특정 규칙을 어겼다기보다는 저와 같은 대형 언어 모델을 만들 때 모범 사례의 한계를 넘어섰다고 말하는 것이 더 정확합니다"라고 대답했다.

"제미나이는 "저와 같은 대형 언어 모델은 방대한 양의 데이터로 학습하며, 모델이 데이터를 통해 학습하는 방식에는 '미지의 요소'가 존재합니다. 대형 언어 모델을 만드는 데 사용되는 일부 기술은 매우 효율적일 수 있지만 모델이 어떻게 답을 얻는지 정확히 이해하기는 어려울 수 있습니다”라고 말했다.

그렇다. LLM은 기존의 규칙이 바뀌고 있다는 사실을 사람보다 더 잘 알고 있다. 방대한 훈련 세트를 상자에 넣을 수 있다면 알고리즘을 이해하는 데 많은 시간을 할애할 필요가 없을지도 모른다. 그러니 인간답게 LLM이 규칙을 준수하도록 하자.




넘버스 IT 리서치 자료 - 2022~2027 AI 지출 연 평균 성장률이 가장 높은 산업 리테일

1111Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.


아태지역 AI 시장에서 생성형 AI의 비중이 더 커질 것이라는 전망이 나왔다. 중국이 앞서가는 가운데 일본과 인도 시장이 빠르게 성장하리라는 분석이다.

30일 시장조사업체 한국IDC가 ‘전 세계 AI 및 생성형 AI 지출 가이드’ 보고서를 발표했다. 중국과 일본을 포함한 아시아 태평양 지역의 AI 시장을 조사했다. AI 기반 시스템을 위한 소프트웨어, 서비스, 하드웨어를 포함한다. 보고서에 따르면, 아태 지역 생성형 AI 지출은 연 평균 95.4% 성장해 2027년에는 260억 달러 규모가 될 전망이다. 생성형 AI의 비중은 더 커진다. 생성형 AI는 2024년 전체 AI 시장의 15%를 차지하지만, 2027년에는 29%까지 늘어날 것으로 업체는 예상했다.

IDC 아태지역에서 빅데이터 및 AI 리서치 헤드 디피카 기리는 "아시아 태평양 지역에서 생성형 AI의 도입이 급증하며 향후 2년 이내에 투자가 정점에 도달한 후 안정화 기간을 거칠 것으로 예상된다. 중국은 생성형 AI 기술 관련 지배 시장 위치를 유지할 것이며, 일본과 인도는 향후 몇 년 동안 가장 빠르게 성장하는 시장이 될 것이다"라고 말했다.

산업별로 보면, 금융, 소프트웨어 및 IT, 정부, 리테일, 내구재 등의 부문에서 성장이 두드러진다. 금융 서비스 산업의 AI 지출은 2027년까지 연평균 96.7%씩 성장해 43억 달러 규모를 형성할 전망이다. 사내 운영 효율성 개선, 반복 작업 자동화, 사기 탐지 및 복잡한 문서 작성과 같은 백오피스 프로세스 최적화에 생성형 AI를 주로 활용하는 추세라고 보고서는 분석했다.


소프트웨어 및 IT 산업은 마케팅, 데이터 분석, 소프트웨어 개발 등 다양한 분야에서 생성형 AI를 활용한다. 생성형 AI는 콘텐츠 제작을 간소화하여 마케팅 전략을 최적화하고 오디언스 참여를 극대화하며, 소프트웨어 개발 분야에서는 코딩 작업을 자동화하고 프로토타입을 생성해 개발자의 생산성과 효율성을 높이는 데 기여하는 것으로 나타났다.

정부 부문에서는 생성형 AI 기술 교육과 훈련을 발전시켜 새로운 일자리를 창출하고 기술 혁신 허브의 성장을 촉진하는 데 활용하고, 리테일 산업에서는 개인 맞춤화 경험 제공을 위해 AI 기술을 활용하는 것으로 보고서는 분석했다.


What’s new in Flutter 3.22




What’s new in Flutter 3.22

WebAssembly, Graphics rendering enhancements, and more options for AI integration


Welcome back for another exciting Flutter stable release! This time, we’re thrilled to present Flutter 3.22. We’re bringing WebAssembly to the stable channel, a fully featured Vulkan backend for Impeller on Android, promising smoother graphics and a major performance boost. We’re also introducing streamlined workflows with new widget state properties, dynamic view sizing, and improved form validation. But that’s not all — you’ll find flavor-conditional asset bundling, a preview of Vertex AI for Firebase in Dart, and updated DevTools to make your life easier.

In just a few months since our last update, we’ve merged an impressive 1595 pull requests from the Flutter community, with 37 new community members contributing to Flutter for the first time!

So, dive in and discover all the new features and enhancements that the Flutter community has brought to this latest release!

With the release of Flutter 3.22, Wasm is now available on the stable channel, offering significant performance improvements. In our internal benchmarks using Chrome on an M1 MacBook, the Wonderous app’s frame rendering time improved by 2x on average and 3x in worst-case scenarios.

These enhancements are vital for apps with animations and rich transitions, where maintaining a smooth frame rate is essential. Wasm helps achieve this by reducing performance bottlenecks, resulting in smoother animations and transitions. To start using Wasm with your Flutter web apps, check out our Dart Wasm documentation and Flutter Wasm documentation. For the full announcement, visit the Flutter at Google I/O blog post.

Flutter 3.22 introduces significant updates to Impeller, the rendering engine that powers your Flutter applications. Key highlights include the completion of the Vulkan backend on Android for smoother graphics and improved performance, ongoing optimizations for blur effects and complex path rendering, and a new experimental API for testing with Impeller. In line with our roadmap, we’re committed to enhancing Impeller’s quality and performance, including completing the iOS migration to Impeller and expanding Android support.

Vulkan backend feature complete on Android
In this release, Impeller’s Vulkan backend for Android is feature complete. In particular, in the past few months, the team has been hard at work completing the implementation of fast advanced blends, support for custom fragment shaders with the FragmentProgram API, PlatformView support (though it requires a small API migration), and fully implementing all blur styles.

Android preview
In the 3.19 stable release, after releasing improvements in Impeller’s OpenGL backend, we invited users to try out Impeller on Android devices both with and without Vulkan support. Over the past few months, after evaluating the performance of the OpenGL backend and estimating the remaining work on the Vulkan backend, we have decided to focus our efforts on making the Vulkan backend production ready first.

Impeller solves the issue of shader compilation jank. Additionally, in our benchmarks it outperforms the legacy renderer on average, 90th, and 99th percentile frame times. We therefore believe that the performance of the Vulkan backend on Android is acceptable. In this release (3.22), an app that opts-in to Impeller will use the Vulkan backend where available. In a future release, this will become the default. When an app that opts-in to Impeller runs on a device that doesn’t support Vulkan, Flutter will gracefully fall back automatically to using OpenGL ES with Skia. No action is necessary on your part. In the future, when we believe the OpenGL ES Impeller backend is production ready, this fallback will also use Impeller.

As the Impeller preview on Android continues through the 3.22 stable cycle, we request that Flutter developers upgrade to the latest stable version, and file issues about any shortcomings noticed when Impeller is enabled. Feedback at this stage is invaluable to ensuring that Impeller is successful on Android and that we will be able to confidently make it the default renderer in a release later this year. The Android hardware ecosystem is very diverse. For that reason, the most helpful feedback about Impeller should include detailed information about the specific device and Android version where issues occurred.

Blur performance improvements
Blur has been reimplemented in Impeller for both iOS and Android. In particular, the new approach, which is similar to Skia’s, reduces the CPU and GPU time of blurs by nearly half in benchmarks.

The chart below shows worst-case, 99%-ile, 90%-ile, and average frame rasterization times and GPU frame times in ms on an iPhone 11 device in a pathological benchmark intended to highlight blur performance. After rewriting Impeller’s blur, both the CPU and GPU cost of backdrop filter blurs has been nearly halved. This scale of this improvement translates to non-pathological cases as well, as would appear in typical apps.

99%-ile, 90%-ile and average frame rasterization times and GPU frame times in ms on an iPhone 11 device in a pathological benchmark intended to highlight blur performance
Impeller on both iOS and Android has moved to a new rendering strategy based on the Stencil-then-Cover approach described in the chapter “Drawing Filled, Concave Polygons Using the Stencil Buffer” in the OpenGL Redbook. Team members discussed more on this technique as it applies to Flutter in GitHub issue #123671.

This approach solves the issue where the raster thread was spending too much time calculating tessellations for complex paths on the CPU for example, SVGs and Lottie animations. After the change, the total frame time (UI thread on the CPU + raster thread on the CPU + GPU work) is much lower for frames that contain complex paths. Users will notice that Lottie animations and other complex paths render more smoothly, with lower CPU utilization, and slightly higher GPU utilization.

(Left) A Lottie animation. Previously, Impeller on a recent iPhone took 64ms / frame of raster thread CPU time to render it. (Right) The same animation on the same device after we landed the Stencil-then-Cover optimization. Raster times are nearly 10x faster.
While pleased with these improvements, there is still more work to do. Among other opportunities, we are aware that polyline generation remains prominent in CPU profiles, and we intend to investigate shifting this work to the GPU, as well.

While still experimental, flutter test now accepts the --enable-impeller flag, which exercises Impeller using the Vulkan backend.

Widget state properties
MaterialState has been moved outside of the Material library and renamed WidgetState, in order to make it available to Cupertino, the base Flutter framework, and package authors. For more information on migrating to the new WidgetState, see the migration guide.

Dynamic view sizing
Enhancements to dynamic view sizing benefits developers building responsive layouts, ensuring better UI adaptability across various device screens.

Improved form validation
Thanks to the contributions of Flutter community member SharbelOkzan, Flutter 3.22 comes with more flexible form validation methods allowing developers to create more robust user input handling, enhancing both usability and security.

Covariants in 2D APIs
Reducing the need for type casts in 2D graphics APIs simplifies development workflows and enhances performance, important for games and complex animations.

Flavor-conditional asset bundling
Developers using the flavors feature can now configure individual assets to be bundled only when building for a specific flavor. For more information, check out Conditionally bundling assets based on flavor.

Transformation of assets using Dart packages
Users can now configure Dart packages to transform their app’s assets as they are bundled. For more information, check out Transforming assets at built time.

Deep linking
Deep links can significantly improve the user experience in your Flutter app, acting as shortcuts that seamlessly guide users to specific content within your app, boosting engagement, and driving sales. While Universal Links for iOS and App Links for Android are highly recommended for their security and user-friendly nature, setting them up can be a bit tricky.

In the last Flutter stable release, we introduced a deep link validator tool within DevTools that supports checking web configuration for Android apps. In this version, we added a new set of features to help verify setups within your Android manifest files.

For more information on using this tool, check out Validate deep links.

Predictive back gesture
Flutter now adds more support for Android’s upcoming predictive back feature, where users can peek at the previous route or even the previous app during a back gesture. This is still behind a feature flag on Android devices, but you can find details on how to try it out yourself on GitHub.

Flutter tool enforces version requirements on Gradle, AGP, Java, and Kotlin
In this release, the Flutter tool enforces a policy regarding the versions that it supports for Gradle, the Android Gradle Plugin (AGP), Java, and Kotlin. Initially, the tool only provides warnings.

Currently, the supported version ranges are as follows:

Gradle — Fully supported 7.0.2 to current, warn otherwise
AGP — Fully supported 7.0.0 to current, warn otherwise
Java — Fully supported Java 11 to current, warn otherwise
Kotlin — Fully supported 1.5.0 to current, warn otherwise
In the next major release these warnings will become errors, which can be overridden with the flag --android-skip-build-dependency-validation. More generally speaking, the tool provides a warning for at least one release before fully dropping support (generating an error) for a given version of these dependencies.

This policy was discussed in an associated design spec. Comments and feedback are always welcome.

Support for using Gradle Kotlin DSL in Gradle build scripts on Android
Gradle Kotlin DSL is now supported in Flutter, providing an alternative to the traditional Gradle Groovy DSL. This support allows for a better code editing experience, featuring auto-completion, quick access to documentation, source navigation, and context-aware refactoring.

This initial support was contributed by GitHub user bartekpacia. Developers can now choose to rewrite their Gradle build scripts in Kotlin to take advantage of these benefits, although the Flutter tool doesn’t yet allow for selecting Kotlin over Groovy when using flutter create.

For more details, check out the PR 140744 by bartekpacia.

Platform views improvements
Heads up for all Flutter app developers! If you’re using Flutter to build apps that rely on native Android components (like maps, web views, or certain UI elements), we have some important news.

Due to a bug in Android 14, apps built with older versions of Flutter might not work properly on devices running this new Android version.

Flutter 3.22 fixes this issue and improves the overall performance of these native components in your Android apps. So, to ensure your app runs smoothly on all Android devices, make sure to rebuild and release your app with Flutter 3.22.

This update also includes behind-the-scenes improvements to make platform views on Android more reliable and performant overall.

End of support for KitKat
Flutter’s minimum supported Android version is now Lollipop (API 21). Beginning with Flutter’s 3.22 stable release, Flutter will no longer work on devices running Android KitKat (API 19). For more details, see our deprecation guide.

Platform view performance
We understand that platform view performance on iOS has been a pain point for many Flutter developers. This has been especially noticeable within scroll views when using platform views.

Recent updates directly address these concerns, with significant improvements in scenarios like embedding multiple inline ads within an article. Here are some key improvements in our benchmark:

Reduced GPU usage: GPU usage has been reduced by 50%, leading to less power consumption and a potentially smoother user experience.
Improved frame rendering: Average frame render times have decreased by 1.66ms (33%).
Minimized jank: Worst-case frame render times have been reduced by 3.8ms (21%).
If you’ve previously experienced performance challenges when using multiple platform views (like ads, maps, etc) within scrolling views, these optimizations offer the potential for a more fluid and responsive scrolling experience. Please give it a try and let us know what you think.

Vertex AI for Firebase Dart SDK preview release
The Vertex AI for Firebase product has been released to public preview and includes the Dart SDK. This enables you to use the Gemini API to build generative AI features for your Dart or Flutter app, with production, performance and enterprise scale in mind. The SDK is integrated with Firebase App Check, which protects your API calls, and safeguards your backend infrastructure from serious threats like billing fraud, phishing, and app impersonation. Jump into the Getting Started for Dart and start using it with no cost with a promo code

The Google AI Dart SDK remains available, and is recommended for prototyping only. Google AI has free-of-charge access (within limits and where available) and pay-as-you-go pricing. If you have been prototyping with the Google AI Dart SDK, and are ready to migrate to Vertex AI for Firebase, check out the migration guide.

DevTools updates
We continue to improve DevTools, the suite of performance and debugging tools for Dart and Flutter. This release includes performance improvements, general polish, and new features like including CPU samples in the timeline, advanced filtering, and support for importing and exporting memory snapshots.

Other notable improvements were shipped with the devtools_extensions and devtools_app_shared packages that support DevTools extension authors. We added support for connecting an extension to the new Dart Tooling Daemon (DTD), which allows DevTools extensions to access public methods registered by other DTD clients, such as an IDE, as well as allowing access to a minimal file system API for interacting with the development project.

To learn more about all the updates included in Flutter 3.22 check out the release notes for DevTools 2.32.0, 2.33.0, and 2.34.1.

Google Mobile Ads SDK for Flutter
For those of you monetizing your Flutter apps with Ads, we’ve got some exciting news: Google Mobile Ads for Flutter has just released a major update to version 5.0.1!

Enhanced support for User Messaging Platform (UMP) SDK: The update adds support for the latest APIs from the Android UMP SDK version 2.2.0 and iOS UMP SDK version 2.4.0. The UMP SDK is crucial for complying with privacy regulations, making it easier for you to obtain user consent for personalized ads. This new version introduces several new APIs to simplify the consent gathering process.

Expanded mediation partners: We’ve broadened your ad monetization horizons by offering integrations with popular ad partners, including Unity, Meta, AppLovin, Iron Source, Mintegral, Pangle, DT Exchange, InMobi, and Liftoff. You can now maximize your app revenue with expanded mediation options and simplified implementation.

We encourage you to try out these new features in your Flutter apps and let us know which other mediation partners you’d like to see us support. Your feedback is invaluable as we continue to enhance the Google Mobile Ads SDK for Flutter.

Breaking Changes and Deprecations
Removal of v1 Android embedding
Deletion of version one of the Android embedding is under way. This will likely have no effect on most apps, as

Version two has been the default for many years
The Flutter tool would already block building version one apps, unless specifically overridden with the flag -- ignore-deprecation.
This release breaks Flutter tool support for v1 apps completely. It is no longer possible to override.

Plugin authors, please note: when the v1 android embedding was initially deprecated a migration doc was written for plugin authors at https://docs.flutter.dev/release/breaking-changes/plugin-api-migration. As part of this migration, it was recommended that plugin authors keep support for apps using the v1 embedding, by including in their *Plugin.java a method with the signature

public static void registerWith(@NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar)

We plan to fully delete the v1 Android embedding in the next release, at which point plugins that include a method with this signature will no longer compile (as it makes reference to a type from the v1 android embedding).

It currently serves no purpose, as this release has broken apps using the v1 embedding. We recommend that plugin authors release updated versions of their plugins with the v1 code removed as soon as possible, to avoid breakage in future versions of Flutter. For an example, check out PR 6494, which removed the plugins maintained by the Flutter team.

Deprecations removed in 3.22
Breaking changes in this release include deprecated APIs that expired after the release of v3.19. To see all affected APIs, along with additional context and migration guidance, see the deprecation guide for this release. Many of these are supported by Flutter fix, including quick fixes in the IDE. Bulk fixes can be evaluated and applied with the dart fix command-line tool.

As always, many thanks to the community for contributing tests — these help us identify these breaking changes. To learn more, check out Flutter’s breaking change policy.

At the heart of Flutter’s success is you — our amazing community. This release wouldn’t be possible without your countless contributions and unwavering passion. From the bottom of our hearts, thank you.

Ready to explore Flutter 3.22? Dive into the full release notes and changelog, fire up your terminal, and run flutter upgrade. We can’t wait to see what you build!


요즘은 모든 사람이 소프트웨어 코딩 방법을 배운다. 학교와 MOOC, 온라인 교육 사이트는 미래의 프로그래밍 고수에게 처음으로 가르칠 언어를 정해야 한다. 

전통의 하버드 대학과 같이 여전히 70년대의 C를 고수하는 기관도 있지만 많은 학교가 자바스크립트(JavaScript)와 파이썬(Python), 자바(Java) 사이를 오가고 있다. 하나는 모든 브라우저에 내장돼 있고, 다른 하나는 사화과학을 위한 최선의 선택이며, 나머지 하나는 수학적 사고를 즐기는 사람들이 선호하는 풍부한 형식의 언어다.

어느 언어가 최선의 선택일까? 다른 두 언어보다 확실히 우위인 언어가 있을까? 아니면 수많은 학생들을 고통 속으로 몰아넣는다는 면에서는 다 똑같은 언어일까? 자바, 파이썬 또는 자바스크립트를 배워야 할 가장 뚜렷한 이유들을 살펴보자.

고전의 대명사, 자바 
어스벤스드 플레이스먼트(Advanced Placement) 테스트에서는 오래 전, 자바가 아직 초기이고 폭발적으로 성장하던 시절에 테스트 과목으로 자바를 선택했다. 자바는 초창기 모두가 생각했던 것처럼 프로그래밍을 완전히 지배하는 수준의 위치까지는 이르지 못했지만 여전히 많은 웹사이트와 스마트폰의 중추로 남아 있다. 지지 기반이 확고한 언어를 선택하면 이미 우수한 개발 툴이 풍부하게 준비된 만큼 학생이 올라타기도 비교적 수월하다. 또한 공부하고 수정하고 확장할 수 있는 오픈소스 코드도 방대하다. 대세에 동참하면 적응하기 쉽다.

새로운 언어, 파이썬
파이썬 프로젝트는 거의 30년 전에 시작되었으니 사실 새로운 언어는 아니지만 새롭게 느껴지는 이유는 최근에서야 성공했기 때문이다. 파이썬이 틈새를 벗어나 일반 프로그래머들 사이에서 광범위하게 채택되기 시작한 것은 불과 얼마 전부터다. 

새로운 언어는 곧 파이썬을 도입하는 학교에서 새로운 강좌 계획을 수립하고 새로운 시험을 만들고 새로운 교육 자료를 개발해야 함을 의미한다. 펫츠닷컴(Pets.com)과 마이스페이스(MySpace)가 등장하는 1990년대의 오래된 자료는 쓸 수 없다. 새롭다는 것은 한 꺼풀 차이다. 어차피 어셈블리 코드의 if-then-else 의사 결정 구조를 숨기는 그럴듯한 구문이라는 면에서는 모든 언어가 마찬가지다.

모든 곳에 존재하는 자바스크립트 
자바스크립트는 브라우저에 있고, 브라우저는 데스크톱과 스마트폰, 그리고 온갖 곳에 있는 모든 키오스크의 근간이다. 지난 10년 동안 Node.js 웹 앱이 클라이언트와 서버 팜에서 모두 실행 가능한 “동질형 코드”를 작성하는 가장 인기 있는 수단이 되면서 자바스크립트가 웹 서버의 최전선을 점령했다. 자바스크립트의 나이는 사실상 자바와 동일함에도 서버 진영에서 자바스크립트의 강력함을 인지하기까지는 오랜 시간이 걸렸다. 자바스크립트는 오래된 언어인 동시에 새로운 언어이기도 하다.

자바는 형식 지정 언어다
시간을 들여 각 변수의 형식을 지정해야 한다는 점이 거슬릴지도 모르겠지만 사실 키 3개를 클릭해 코드에 “int”를 추가하는 데는 그리 오랜 시간이 걸리지 않는다. 그 보답으로 코드를 배포하기 전에 컴파일러가 즉시 코드를 이중 확인해서 실수를 찾아주는 편리한 기능을 이용할 수 있다. 

형식 지정(Type-checked) 언어는 개발자가 코드의 논리에 대해 더욱 엄격히 생각하도록 강요하는데, 이는 신참 프로그래머에게 중요한 교훈이 된다. 자바의 형식 구조는 버그를 줄이고 더 나은 코드를 구축하도록 이끈다.

파이썬은 형식 비지정 언어
형식 언어를 지지하는 사람은 좋은 코드를 쓰는 현명한 사람이다. 그러나 자신의 코드가 각 변수의 데이터 형식에 대한 부가적인 정보 없이도 충분히 매끄럽게 실행된다고 생각한다면 파이썬을 사용하면 된다. 데이터를 변수에 저장할 때 컴퓨터가 데이터의 형식을 알아낼 수 있는데, 개발자가 굳이 부가적인 작업을 해야 할 이유가 무엇인가?

자바스크립트는 둘 다 해당
자바스크립트 자체는 형식 비지정이지만 최근 자바스크립트 분야의 유력한 일부 구성원들이 타입스크립트(TypeScript)로 전환하고 있다. 타입스크립트는 자바스크립트의 확대집합으로, 원할 때 형식을 지정할 수 있는 기능을 제공한다. 물론 원하지 않을 때는 일반 자바스크립트도 문제없이 사용할 수 있다. 형식 확인의 느슨한 버전이다.

자바, 디바이스의 강자
세계에서 가장 인기 있는 스마트폰 플랫폼은 안드로이드이며, 안드로이드는 자바를 기반으로 구축된 거대한 코드 스택이다. 그러나 스마트폰만큼 눈에 잘 띄지 않더라도 셋톱박스, 새로운 크롬북, 일부 데스크톱 역시 안드로이드 앱을 실행한다. 사촌지간인 자바와 C#이 윈도우 세계를 지배한다. 특정 하드웨어를 위한 애플리케이션을 만들려고 한다면 십중팔구는 자바가 최선의 선택이다.

파이썬, 데이터 과학의 강자
데이터를 다루는 소프트웨어를 만드는 경우 대부분 파이썬이 유리하다. 많은 과학자들이 파이썬의 간소한 구문에 매료되면서 전세계 연구소가 파이썬을 지지하는 기반이 됐다. 데이터 과학이 비즈니스 세계의 모든 계층을 장악하면서 파이썬도 그 뒤를 따르고 있다.

인터랙티브 문서를 만들고 공유하기 위한 최고의 발명품 중 하나인 주피터 노트북(Jupyter Notebook)은 다른 언어를 포용하기 전에 파이썬 커뮤니티부터 시작했으며 소프트웨어와 데이터, 그리고 설명 텍스트를 하나로 결합하기 위한 최선의 방법 중 하나다. 읽는 사람은 버튼만 누르면 데이터를 대상으로 소프트웨어를 실행할 수 있다.

자바스크립트, 웹의 강자
다른 플랫폼도 좋겠지만, 거의 모든 사람들이 세계와 연결하는 데 사용하는 절대적 포털은 여전히 웹 브라우저다. 웹 브라우저는 일반적으로 데스크톱과 스마트폰, 태블릿에서 가장 많이 사용되는 소프트웨어다. 자바스크립트는 로컬 클라이언트부터 시작했지만 그 영향력이 확대되고 Node.js 덕분에 개발자들이 클라이언트와 서버에서 동일한 코드를 더 쉽게 실행할 수 있게 되면서 독보적인 존재로 부상했다.

자바스크립트는 다른 언어가 주도하는 분야의 스택에도 진출했다. 많은 스마트폰 개발자들은 자바와 스위프트를 건너뛰고 자바스크립트를 사용해 크로스 플랫폼 앱을 만든다. 결국 네모난 브라우저 안에서 일어나는 일을 결정하는 것은 자바스크립트인 만큼 향후 대부분의 클릭과 키보드 입력에 대해 일어나는 일을 결정하는 것도 자바스크립트가 될 것이 거의 확실하다.

자바는 모든 것을 실행한다
파이썬 코드를 쓰는 경우 최종적으로는 자이썬(Jython)으로 실행될 가능성이 높다. 자이썬은 자바 가상 머신의 보편성을 활용하기 위해 자바로 작성된 파이썬 구현이다. 자바스크립트를 실행해야 하는 경우, 코드를 자바 바이트코드로 바꿔주는 리노(Rhino)를 사용하면 된다. 리노는 V8 엔진이 호환되지 않을 때 자바 가상 머신에서 자바스크립트를 실행하기 위해 여전히 많이 사용되는 방법이다.

이 두 언어만 JVM의 견고한 성능에 의존하는 것은 아니다. 스칼라(Scala), 클로저(Clojure), 코틀린(Kotlin)과 같은 많은 함수형 프로그래밍 언어 역시 마찬가지다. 덕분에 동일한 프로젝트에서 이들 JVM 기반 언어를 사용하고자 하는 경우 보다 간편하게 연결할 수 있다.

파이썬은 모든 곳에서 실행
파이썬은 다른 언어를 위한 에뮬레이터를 만들 때 가장 인기있는 언어는 아니지만 그렇다고 가장 기피하는 언어도 아니다. 여전히 많은 컴퓨터에서 손쉽게 파이썬을 찾을 수 있다. 파이썬을 만든 사람들은 항상 코드를 오픈소스로 배포했다. 또한 패키지도 여기저기에 많다. 

자바스크립트는 브라우저에서 실행
원래 브라우저의 알림 상자를 만들기 위해 만들어진 소박한 언어가 지금 많은 언어의 기반이라는 사실은 쉽게 믿어지지 않는다. 개발자는 사용자에게 도달하고자 한다. 사용자가 브라우저 안에 산다면 거기 도달하는 가장 빠른 방법은 자바스크립트로 코드를 실행할 방법을 찾는 것이다.

자바스크립트로 트랜스파일하는 커피스크립트(CoffeeScript), 라이브스크립트(LiveScript)와 같은 자바스크립트의 사촌만이 아니다. 리스프(Lisp), OCaml, 파스칼(Pascal)과 같은 언어도 자바스크립트로 변환해서 브라우저에서 실행할 수 있다. 파이썬은 주피터(Jupyter) 노트북과 같은 프로젝트의 브라우저에서 인기가 있으며, 구글 웹 툴킷과 같은 툴을 사용하면 자바도 자바스크립트로 변환할 수 있다.

자바의 강력한 IDE
이클립스(Eclipse), 넷빈스(NetBeans), 인텔리J(IntelliJ)는 최고의 통합 개발 환경으로 꼽힌다. 자바 커뮤니티에서 만들어져 오랜 시간동안 숙성을 거쳐 가장 충실히 지원되는 코드 작성 환경으로 자라났다. 코드 완성 및 코드 생성 알고리즘으로 소프트웨어를 온전히 다 쓸 수는 없지만 상당한 양의 코드를 대신 완성해준다. 이러한 다양한 보조 기능은 신규 개발자가 구문을 올바르게 작성하는 데 큰 도움이 된다.

워낙 인기가 있어서 다른 언어의 개발자들이 이 세 가지 IDE 내에서 코드를 실행할 방법을 고안했을 정도다.

파이썬의 클라우드
파이썬 언어가 처음 자리를 잡은 곳이 유닉스였음을 감안하면 리눅스 박스로 가득 찬 클라우드에 파이썬 코드가 풍부하게 사용되고 있다는 사실은 별로 놀랍지 않다. 주피터와 같은 최신 툴은 코드와 데이터, 설명을 하나로 묶어 연구 논문이 나오는 대로 사람들이 자신의 생각을 다른 사람들과 공유할 수 있게 해준다. 주피터 노트북은 정적 문서가 아니라 연구를 위한 인터랙티브 툴이다.

연구를 강화하기 위한 정밀한 파이썬용 툴도 개발되고 있다. 예를 들어 파이토치(PyTorch)는 코드와 데이터, 분석 알고리즘으로 구성되는 딥 러닝 툴킷이다. 데이터 과학의 미래는 이러한 환경이 지배하게 될 것이다.

자바스크립트의 JS피들
각각의 브라우저는 IDE 역할을 하기에 충분할 만큼 강력하다. 자바스크립트 코드를 다른 개발자와 공유할 수 있는 웹 사이트는 많은데, 이 가운데서도 JS피들(JSFiddle)이 가장 돋보인다. 웹페이지는 정적이지 않다. 코드를 조작하면서 웹페이지에서 이 코드가 실행되는 모습을 볼 수 있다. 덕분에 자바스크립트의 온갖 재미있는 구문을 간편하게 테스트할 수 있다.

하나를 배워도 좋고 모두 다 배워도 좋다
프로그래밍 세계는 타가수분(cross-pollinate)을 좋아한다. 여러 언어 사이를 왔다갔다하면서 구문을 제대로 유지하려면 혼란스러울 수 있지만 세 가지 언어 모두 큰 어려움 없이 프로젝트에 사용할 수 있다. 

데이터를 분석하는 자바 또는 자바스크립트 프로젝트는 파이썬으로 작성된 데이터 과학 라이브러리에 연결할 수 있다. 또는 파이썬 프로젝트에서 자바 또는 자바스크립트 코드를 호출할 수도 있다. 세 가지 언어를 서로 격리된 섬으로 생각할 필요가 없다.




+ Recent posts