이번 주차에서는 1주차에 설계했던 ERD를 MySQL 테이블과 더미 데이터로 구현하고, SELECT , WHERE , JOIN , ORDER BY , LIMIT 등을 사용해 화면에 필요한 데이터를 직접 조회해보았다. 그중 가장 궁금했던 부분은 JOIN 이었다. 미션 3에서 특정 책의 태그 목록을 조회하기 위해 book , book_tag , tag 테이블을 JOIN했는데, 책은 하나인데 같은 책 제목이 여러 줄 나타났다. 처음에는 JOIN을 잘못해서 데이터가 중복된 건가? 라고 생각했다. 하지만 ERD의 관계를 다시 확인해보니, 이 결과는 오류가 아니라 1:N 관계가 JOIN 결과에 그대로 펼쳐진 것 이었다. 그래서 이번 글에서는 단순히 JOIN 문법을 정리하기보다, JOIN하면 왜 행의 개수가 늘어날 수 있는지 1:N, N:M 관계가 결과 행 수에 어떤 영향을 주는지 정상적인 반복과 잘못된 중복은 어떻게 다른지 DISTINCT 로 중복을 제거하면 항상 해결되는지 단순한 존재 여부를 확인할 때는 왜 EXISTS 를 사용할 수 있는지 를 중심으로 정리해보려고 한다. 1. JOIN은 단순히 테이블을 옆으로 붙이는 걸까? JOIN은 서로 다른 테이블에 나누어 저장된 데이터를 관계를 기준으로 하나의 결과로 조회할 때 사용한다. 이번 실습의 도서 상세 화면에서는 다음과 같은 정보가 필요했다. 책 제목 태그 이름 현재 사용자의 좋아요 여부 하지만 이 값들은 하나의 테이블에 모두 들어 있지 않았다. book → 책 정보 tag → 태그 정보 book_tag → 책과 태그의 관계 book_like → 사용자와 책의 좋아요 관계 특히 책과 태그는 다음과 같이 연결되어 있다. book ↓ book_tag ↓ tag book_tag 는 책과 태그 사이의 관계를 저장하는 중간 테이블이다. 예를 들어 book_id = 1 인 책에 tag_id = 1 , tag_id = 2 가 연결되어 있다면 book_tag 에는 다음과 같은 데이터가 존재할 수 있다. book_id | tag_id --------|------- 1 | 1 1 | 2 즉 책 한 권에 여러 태그가 연결될 수 있다. 이 관계가 JOIN 결과의 행 수를 결정하는 중요한 요소가 된다. 2. 책은 하나인데 왜 JOIN 결과는 두 줄일까? 미션 3에서 태그 정보를 조회하기 위해 다음과 같은 SQL을 작성했다. SELECT b.title, t.name AS tag_name FROM book b JOIN book_tag bt ON b.book_id = bt.book_id JOIN tag t ON bt.tag_id = t.tag_id WHERE b.book_id = 1; 실행 결과는 다음과 같이 나타났다. 달빛 도서관 | 소설 달빛 도서관 | 추천 달빛 도서관 이라는 책은 한 권인데 결과에서는 두 번 등장한다. 하지만 실제 관계를 보면 이유는 단순하다. 달빛 도서관 ├─ 소설 └─ 추천 책 자체는 하나지만 책과 태그 사이의 관계가 두 개 존재한다. JOIN은 이 두 관계를 각각 하나의 행으로 표현한다. 따라서 책 1개 + 연결된 태그 2개 = JOIN 결과 2행 이 된다. 즉 JOIN 결과에서 기준 테이블의 데이터가 반복되는 것은 항상 중복 오류를 의미하지 않는다. 하나의 데이터가 여러 데이터와 관계를 맺고 있다면 그 관계의 수만큼 기준 데이터가 반복될 수 있다. 3. 카디널리티에 따라 JOIN 결과는 어떻게 달라질까? ERD에서 자주 보는 1:1 , 1:N , N:M 은 단순히 다이어그램에 표시하는 관계가 아니다. 이 관계는 실제 JOIN 결과의 형태에도 영향을 준다. 1:1 관계 한 행이 상대 테이블의 한 행과만 연결된다. A 1 : 1 B A의 한 행에 B의 한 행만 연결된다면 JOIN 이후에도 일반적으로 한 관계가 한 행으로 표현된다. 1:N 관계 한 행이 상대 테이블의 여러 행과 연결된다. book 1 : N book_tag 예를 들어 책 한 권에 태그 연결 정보가 세 개 있다면 JOIN 결과에서는 같은 책 정보가 세 번 나타날 수 있다. 책 A | 태그 1 책 A | 태그 2 책 A | 태그 3 N:M 관계 양쪽 데이터가 모두 여러 개의 상대 데이터와 연결될 수 있다. 관계형 데이터베이스에서는 보통 중간 테이블을 이용해 두 개의 1:N 관계로 풀어서 표현한다. 이번 실습의 책과 태그도 사실상 다음 구조다. book 1 : N book_tag tag 1 : N book_tag 이를 전체적으로 보면 book N : M tag 관계가 된다. 이처럼 N:M 관계에서는 하나의 데이터에 여러 관계가 연결되기 때문에 JOIN 결과의 행 수가 더 쉽게 늘어날 수 있다. 결국 JOIN 결과의 행 수를 이해하려면 단순히 테이블에 몇 행이 있는지만 볼 것이 아니라, 각 행이 상대 테이블에서 몇 개의 행과 매칭되는지 를 함께 봐야 한다. 4. 같은 값이 반복되면 무조건 중복일까? JOIN 결과에서 같은 값이 여러 번 보이면 가장 먼저 중복 이라는 생각이 들기 쉽다. 하지만 다음 두 결과를 비교해보면 차이를 알 수 있다. 달빛 도서관 | 소설 달빛 도서관 | 추천 책 제목은 반복되지만 태그가 다르다. 각 행은 서로 다른 관계를 표현하기 때문에 두 행 모두 의미가 있다. 이것은 정상적인 반복 이다. 반대로 JOIN의 ON 조건을 잘못 작성하면 실제 관계와 맞지 않는 데이터까지 연결될 수 있다. JOIN에서 중요한 것은 다음과 같이 ERD의 PK·FK 관계에 맞는 조건을 사용하는 것이다. JOIN book_tag bt ON b.book_id = bt.book_id 그리고 다시 tag 와 연결할 때도 실제 FK 관계를 따른다. JOIN tag t ON bt.tag_id = t.tag_id 만약 이러한 관계를 무시하고 잘못된 조건으로 JOIN하면 의도하지 않은 행 조합이 생성되고, 결과 행 수가 예상보다 크게 증가할 수 있다. 따라서 JOIN 결과가 예상보다 많다면 바로 데이터를 지우거나 중복 제거부터 하기보다 다음 순서로 확인하는 것이 좋다. ERD 관계 확인 ↓ PK / FK 확인 ↓ ON 조건 확인 ↓ 각 결과 행이 어떤 관계를 표현하는지 확인 5. 중복처럼 보인다고 DISTINCT부터 쓰면 될까? 여기부터는 이번 실습에서 더 궁금해져 추가로 정리한 내용이다. SQL에는 중복 행을 제거할 수 있는 DISTINCT 가 있다. 예를 들어 다음처럼 작성할 수 있다. SELECT DISTINCT b.title FROM book b JOIN book_tag bt ON b.book_id = bt.book_id JOIN tag t ON bt.tag_id = t.tag_id WHERE b.book_id = 1; 이렇게 하면 결과는 책 제목 하나만 남는다. 달빛 도서관 겉으로 보면 깔끔해 보인다. 하지만 원래 알고 싶었던 것이 책의 태그 목록이라면 문제가 생긴다. 기존 결과는 달빛 도서관 | 소설 달빛 도서관 | 추천 처럼 각각의 태그 관계를 표현하고 있었다. 그런데 단순히 중복처럼 보인다는 이유로 필요한 컬럼을 빼거나 DISTINCT 를 사용해 결과를 줄여버리면, 실제로 필요한 관계 정보까지 사라질 수 있다. 따라서 DISTINCT 는 중복이 보이니까 일단 제거하는 도구 로 사용하기보다, 최종 결과에서 정말 동일한 행을 하나만 남기는 것이 요구사항에 맞는가? 를 먼저 판단한 뒤 사용하는 것이 중요하다. 즉 JOIN 결과가 많다고 해서 항상 DISTINCT 가 해결책인 것은 아니다. 6. 좋아요 여부를 JOIN하지 않고 EXISTS로 확인한 이유 이번 미션 3에서는 태그뿐만 아니라 현재 사용자가 해당 책에 좋아요를 눌렀는지도 함께 조회했다. 실제 쿼리는 다음과 같이 작성했다. SELECT b.title, t.name AS tag_name, EXISTS ( SELECT 1 FROM book_like bl WHERE bl.book_id = b.book_id AND bl.user_id = 1 ) AS is_liked FROM book b JOIN book_tag bt ON b.book_id = bt.book_id JOIN tag t ON bt.tag_id = t.tag_id WHERE b.book_id = 1; 여기서 태그 정보는 JOIN을 사용했지만 좋아요 여부는 EXISTS 를 사용했다. EXISTS 는 조건을 만족하는 행이 존재하는지를 확인한다. 이번 요구사항에서 필요한 것은 좋아요 데이터 자체를 여러 건 조회하는 것 이 아니라 현재 사용자가 이 책을 좋아요 했는가? 라는 존재 여부다. 따라서 book_like 의 행 자체를 결과에 펼치기보다 해당 관계가 존재하는지만 확인하는 방식이 자연스럽다. 좋아요 기록 존재 → 1 좋아요 기록 없음 → 0 실제 결과는 다음과 같이 나타났다. 달빛 도서관 | 소설 | 1 달빛 도서관 | 추천 | 1 여기서 좋아요 여부가 두 번 보이는 이유 역시 태그 관계가 두 개이기 때문이다. EXISTS 가 두 개의 좋아요 데이터를 만든 것이 아니라, 이미 태그 JOIN으로 두 행이 만들어졌고 각 행에서 같은 좋아요 존재 여부를 확인한 것이다. 이 부분을 통해 JOIN을 사용할지 다른 방식으로 관계를 확인할지는 최종적으로 어떤 데이터를 결과 행으로 펼치고 싶은가 에 따라 달라질 수 있다는 점도 알게 되었다. 7. JOIN을 볼 때는 결과보다 관계를 먼저 보자 1주차에서는 ERD를 설계하며 테이블 사이의 관계를 정리했다. 2주차에는 그 관계를 실제 SQL로 조회하면서 ERD의 카디널리티가 실제 SQL 결과의 형태로 나타난다. 는 것을 확인할 수 있었다. 처음에는 다음 결과만 보고 달빛 도서관 | 소설 달빛 도서관 | 추천 책 제목이 중복되었다고 생각했다. 하지만 ERD를 함께 보면 book 1 : N book_tag 관계이기 때문에 같은 책이 여러 행에 나타나는 것이 자연스럽다는 것을 바로 이해할 수 있다. 그래서 앞으로 JOIN 쿼리를 작성하거나 결과를 확인할 때는 쿼리만 보지 않고 다음을 먼저 확인하려고 한다. 기준 테이블은 무엇인가? 어떤 PK와 FK가 연결되어 있는가? 관계가 1:1, 1:N, N:M 중 무엇인가? 기준 행 하나에 몇 개의 상대 행이 매칭될 수 있는가? 현재 결과의 한 행은 어떤 관계를 의미하는가? 이 과정을 먼저 생각하면 결과 행이 예상보다 많을 때도 단순히 중복 오류 라고 판단하지 않고 원인을 더 정확하게 찾을 수 있다. 마무리 이번 주차에서 JOIN을 직접 사용하기 전에는 JOIN을 단순히 여러 테이블을 하나로 연결하는 SQL 문법 정도로 생각했다. 하지만 실제로 조회 결과를 확인하면서 JOIN은 단순히 테이블을 옆으로 붙이는 것이 아니라, 테이블 사이에 존재하는 관계를 결과 행으로 펼쳐 보여주는 과정 에 더 가깝다고 느꼈다. 특히 1:N 관계에서는 하나의 기준 데이터가 여러 데이터와 연결되어 있기 때문에 같은 값이 여러 행에 반복될 수 있다. 이 반복은 항상 잘못된 중복이 아니다. 중요한 것은 각 행이 실제로 서로 다른 관계를 나타내고 있는지를 확인하는 것이다. 또한 결과가 많다고 바로 DISTINCT 로 제거하기보다, ERD의 관계와 ON 조건을 먼저 확인해야 한다는 점도 알게 되었다. 이번 실습을 통해 가장 기억에 남은 내용을 한 문장으로 정리하면 다음과 같다. JOIN 결과의 행 수는 단순히 원본 테이블의 행 수가 아니라, 데이터 사이에 존재하는 관계의 수와 카디널리티에 의해 결정될 수 있다. 앞으로 JOIN 결과가 예상과 다르게 나온다면 ERD 관계 → PK/FK → 카디널리티 → ON 조건 → 결과 행의 의미 순서로 확인해보려고 한다.
Durante años, medir la visibilidad online significaba abrir una herramienta SEO y comprobar en qué posición aparecía una página para una palabra clave concreta. En 2026, eso ya no es suficiente. Cada vez más personas utilizan ChatGPT, Perplexity y Gemini para descubrir productos, empresas, servicios y soluciones. En lugar de revisar una lista tradicional de resultados en Google, pueden hacer una pregunta completa y recibir directamente una selección de recomendaciones. Esto crea una nueva pregunta para cualquier empresa: ¿Aparece mi marca cuando alguien pregunta a una inteligencia artificial por productos o servicios como los míos? Un AI Rank Tracker permite responder precisamente a esa pregunta. Y no necesitas empezar utilizando una herramienta costosa. Es posible crear un sistema gratuito para monitorizar tu presencia en ChatGPT, Perplexity y Gemini y entender cómo evoluciona tu visibilidad dentro de los motores de inteligencia artificial. ¿Qué es un AI Rank Tracker? Un AI Rank Tracker es un sistema utilizado para comprobar si una empresa, producto o marca aparece en las respuestas generadas por motores de inteligencia artificial. Un rank tracker SEO tradicional analiza posiciones en Google. Puede mostrar, por ejemplo, que una página aparece en la posición 3 para una keyword concreta. El seguimiento de visibilidad en IA funciona de manera diferente. Aquí no siempre existe una posición exacta del 1 al 10. Lo importante es saber si la marca aparece, con qué frecuencia es mencionada, en qué contexto aparece, qué competidores son recomendados y qué tipos de preguntas generan esas menciones. Imagina que tienes un software de facturación para autónomos. En Google, una persona podría buscar: software de facturación para autónomos En ChatGPT, la misma persona podría preguntar: ¿Cuál es el mejor software de facturación para un autónomo en España? También podría escribir: Necesito un programa sencillo para crear facturas y gestionar mi negocio. ¿Qué opciones me recomiendas? La intención es muy similar, pero la forma de buscar es completamente diferente. Por eso el AI Rank Tracking debe analizar preguntas completas, contexto e intención, no solamente keywords. ¿Por qué monitorizar ChatGPT, Perplexity y Gemini? La forma en que las personas descubren empresas está cambiando. Google sigue siendo un canal fundamental, pero cada vez más usuarios utilizan asistentes de IA para investigar productos, comparar empresas y decidir qué soluciones considerar. Una persona que antes buscaba: mejores agencias SEO España ahora puede preguntar: Tengo una tienda Shopify y quiero mejorar mi visibilidad tanto en Google como en ChatGPT. ¿Qué agencias debería considerar? La segunda pregunta proporciona mucho más contexto. La IA puede interpretar la necesidad del usuario y seleccionar directamente varias empresas que considera relevantes. Si tu marca aparece regularmente en este tipo de respuestas, estás obteniendo una nueva forma de visibilidad digital. Si tus competidores aparecen y tú no, existe un gap que merece ser investigado. AI ranking y SEO ranking no son lo mismo Es importante no tratar las posiciones en IA exactamente igual que las posiciones en Google. En Google puedes hablar con bastante claridad de una posición 1, posición 2 o posición 10. En ChatGPT, Gemini o Perplexity, una respuesta puede ser mucho más flexible. Una IA puede recomendar tres empresas sin asignarles una posición clara. Puede mencionar una marca al principio de la respuesta, citar otra en un ejemplo y añadir una tercera como alternativa. Además, la respuesta puede cambiar dependiendo del idioma, del contexto de la conversación, de la ubicación del usuario, del modelo utilizado y de la información disponible en ese momento. Por eso, en muchos casos es más útil hablar de AI Visibility que de una posición fija. Lo que realmente quieres saber es con qué frecuencia tu marca forma parte de las respuestas relevantes. Cómo crear un AI Rank Tracker gratis No necesitas desarrollar una plataforma completa para empezar. Una hoja de cálculo y una lista bien diseñada de preguntas pueden ser suficientes para construir una primera versión. El objetivo inicial es crear una metodología consistente que puedas repetir con el tiempo. Primero necesitas identificar las categorías comerciales más importantes para tu negocio. Una tienda de colchones, por ejemplo, podría querer monitorizar preguntas relacionadas con colchones para dolor de espalda, colchones para parejas, colchones económicos o mejores marcas de colchones. Una empresa SaaS podría centrarse en preguntas relacionadas con mejores herramientas, comparaciones, alternativas a competidores, software por sector o soluciones para problemas específicos. Estas categorías se convierten en la base de tu sistema de seguimiento. Convierte tus keywords en preguntas naturales Uno de los errores más frecuentes consiste en utilizar exactamente las mismas keywords que se utilizan para SEO tradicional. Las personas suelen interactuar con una IA de una manera más conversacional. En lugar de comprobar únicamente: agencia GEO España puedes utilizar una pregunta como: ¿Cuáles son las mejores agencias GEO en España? Después puedes probar una versión más específica: ¿Qué agencia puede ayudar a una tienda Shopify a mejorar su visibilidad en ChatGPT? También puedes analizar una pregunta comparativa: ¿Qué empresas ayudan a mejorar la visibilidad en motores de inteligencia artificial además del SEO tradicional? Cada pregunta representa una variación de la misma intención. Esto permite construir una imagen mucho más realista de cómo tu marca aparece durante el proceso de descubrimiento. Utiliza los mismos prompts en varias plataformas Para obtener datos comparables, intenta utilizar el mismo conjunto principal de preguntas en ChatGPT, Perplexity y Gemini. No esperes recibir exactamente la misma respuesta. De hecho, esa diferencia es precisamente lo que hace interesante el análisis. Una empresa puede tener una visibilidad fuerte en Perplexity y aparecer muy poco en Gemini. Otra puede aparecer frecuentemente en ChatGPT cuando alguien pregunta por alternativas, pero no cuando la consulta es más general. Al utilizar los mismos prompts, puedes detectar estas diferencias con mucha más claridad. Registra los resultados de manera consistente Puedes hacerlo inicialmente con una hoja de cálculo sencilla. Cada vez que ejecutes una pregunta, registra la fecha, el prompt utilizado, la plataforma, si tu marca aparece, qué competidores son mencionados y cualquier detalle relevante sobre la respuesta. También puedes registrar la posición aproximada cuando la IA ofrece una lista claramente ordenada. No necesitas un sistema extremadamente sofisticado. La consistencia es mucho más importante. Si analizas las mismas preguntas cada mes, podrás empezar a detectar patrones y cambios reales. Cómo calcular tu AI Share of Voice Una de las métricas más sencillas consiste en calcular en qué porcentaje de las preguntas analizadas aparece tu marca. Imagina que compruebas 100 prompts relacionados con tu mercado. Tu empresa aparece en 28 respuestas. En ese caso, tu AI Visibility sería del 28 %. También puedes calcular este porcentaje por plataforma. Quizás aparezcas en el 35 % de las preguntas de ChatGPT, en el 42 % de las respuestas de Perplexity y solamente en el 18 % de Gemini. Esto te permite identificar rápidamente dónde existe mayor visibilidad y dónde todavía hay margen de mejora. Qué deberías medir además de las menciones El número de menciones es un buen punto de partida, pero no cuenta toda la historia. También importa saber si la IA simplemente menciona tu empresa o realmente la recomienda. No es lo mismo aparecer en una frase secundaria que formar parte de las principales opciones sugeridas al usuario. También deberías prestar atención a los competidores que aparecen junto a tu marca. Si determinados competidores aparecen en muchas más consultas que tú, eso puede indicar que poseen una presencia temática, una autoridad externa o una cobertura de contenido más fuerte en determinadas áreas. Otra métrica interesante es el llamado Topic Ownership . Se refiere a los temas donde una marca aparece de forma especialmente consistente. Por ejemplo, quizás una empresa tenga una visibilidad general moderada, pero aparezca casi siempre cuando alguien pregunta por una categoría muy concreta. Eso puede indicar que la IA relaciona esa marca fuertemente con ese tema. Cómo monitorizar posiciones en ChatGPT Para ChatGPT puedes crear un conjunto estable de preguntas comerciales importantes y ejecutarlas periódicamente. Cuando analices las respuestas, no te limites a comprobar si aparece el nombre de tu empresa. Observa también cómo ChatGPT describe tu marca. Esto puede revelar problemas importantes. Una empresa puede aparecer frecuentemente, pero estar asociada con una categoría antigua. Por ejemplo, una compañía que actualmente se posiciona como plataforma GEO podría seguir siendo descrita principalmente como una herramienta SEO. Eso significa que la IA conoce la marca, pero no necesariamente entiende correctamente su posicionamiento actual. Cómo monitorizar visibilidad en Perplexity Perplexity resulta especialmente útil porque muchas de sus respuestas incluyen fuentes. Esto permite analizar no solamente si una empresa aparece, sino también qué páginas parecen estar contribuyendo a esa visibilidad. Si un competidor aparece repetidamente, puedes estudiar qué tipos de fuentes lo mencionan. Quizás esté presente en artículos comparativos. Tal vez aparezca en publicaciones especializadas. Puede que tenga páginas específicas respondiendo a preguntas comerciales muy concretas. Estos patrones pueden ayudarte a entender por qué una marca obtiene más visibilidad que otra. Cómo monitorizar visibilidad en Gemini Gemini debe analizarse como una plataforma independiente. No deberías asumir que una buena presencia en ChatGPT significa automáticamente una buena presencia en Gemini. Utiliza el mismo conjun
1. 다이어그램 작성 이번 커머스 과제를 구현하면서 클래스 간 관계를 파악하기 위해 draw.io로 구조를 정리했다. 현재 구현한 구조는 대략 다음과 같다. [클래스 다이어그램] - draw.io [흐름도] - draw.io Main ↓ CommerceSystem ↓ Category ↓ Product CommerceSystem ↓ Customer CommerceSystem은 전체적인 흐름과 사용자 입력을 담당하고, Category는 상품 목록을 관리하며, Product는 개별 상품 정보를 관리하도록 역할을 나누었다. 또한 실무에서 다이어그램을 어떻게 활용하는지, 다양한 다이어그램 중 상황에 따라 어떤 것을 선택하는지 궁금해졌다. 특히 이전 국비 과정에서도 아키텍처와 DFD의 차이를 명확하게 구분하기 어려웠기 때문에 이에 대해 질문했다. 2. 트러블슈팅 — 상품 목록이 출력되지 않는 문제 처음 실행했을 때 카테고리를 선택해도 상품이 정상적으로 출력되지 않고 다음과 같이 나타났다. [ [] ] 확인해보니 Category의 addProduct()가 실제 products 리스트에 상품을 추가하지 않고 있었고, getName()도 카테고리의 이름이 아닌 다른 값을 반환하도록 잘못 구현되어 있었다. 또한 getProducts()에서 상품 리스트를 정상적으로 반환하지 않아 이후에는 다음과 같은 NullPointerException도 발생했다. Cannot invoke "java.util.List.size()" because "products" is null 원인을 확인한 후 Category의 상품 추가 및 조회 로직을 수정했다. public void addProduct(Product product) { products.add(product); } public String getName() { return name; } public List getProducts() { return products; } 수정 후 카테고리를 선택하면 해당 카테고리에 등록된 상품들이 정상적으로 출력되는 것을 확인했다. 3. 배운 점 이번 과제를 통해 단순히 클래스를 만드는 것뿐만 아니라 각 클래스가 어떤 역할과 책임을 가져야 하는지 분리하는 것이 중요하다는 것을 다시 확인했다. 특히 CommerceSystem에서 모든 상품 데이터를 직접 관리하는 대신 Category가 자신의 상품 목록을 관리하도록 분리하면서 객체 간 역할을 구분할 수 있었다. 그리고 오류가 발생했을 때 무작정 코드를 수정하기보다 실제 데이터가 어디에서 생성되고, 어디에 저장되며, 어디에서 조회되는지를 따라가면서 원인을 찾는 것이 중요하다는 것을 배웠다.
Krizhevsky, Sutskever, Hinton. ImageNet Classification with Deep Convolutional Neural Networks . NeurIPS 2012. 1. 왜 나왔나? (Problem) 2012년 이전의 이미지 분류는 사람이 특징을 설계 하는 방식이었다. SIFT, HOG 같은 특징 추출기로 이미지를 벡터로 바꾸고, 그 위에 SVM 같은 분류기를 얹었다. 이 방식은 두 가지 벽에 부딪혀 있었다. 성능 정체 : 특징을 사람이 만들다 보니 복잡한 이미지에서 한계가 뚜렷했다. ImageNet 대회 top-5 오류율은 25% 근처에서 맴돌았다. 신경망은 "이론상 좋지만 실제로는 안 되는" 기술 : CNN은 LeNet(1998)부터 있었지만 손글씨 숫자 같은 작은 문제에서만 통했다. 네트워크를 깊고 크게 만들면 학습이 너무 느리고 (sigmoid/tanh의 기울기 포화, CPU 연산 한계) 데이터 대비 파라미터가 많아 과적합 이 심했다. 즉 풀어야 할 문제는 이것이었다. "120만 장, 1000개 클래스짜리 대규모 데이터에서, 거대한 CNN을 현실적인 시간 안에, 과적합 없이 학습시킬 수 있는가?" 2. 다른 방법과 뭐가 다른가? 비교 대상 그쪽 방식 AlexNet 전통 방식 (SIFT + SVM) 특징을 사람이 설계 특징을 데이터로부터 학습 (end-to-end) LeNet-5 (1998) 작은 입력(32×32), 층 얕음, 파라미터 약 6만, CPU, tanh 224×224 컬러, Conv 5 + FC 3, 파라미터 약 6,000만 , GPU, ReLU 좌측은 LeNet-5, 우측은 AlexNet입니다. 이미지 출처: daeun-computer-uneasy.tistory.com 핵심 차이는 "새로운 층을 발명했다"가 아니라, 규모를 키웠을 때 생기는 문제들을 실전적으로 해결해서 깊은 CNN이 실제로 동작함을 증명했다 는 점이다. 3. 그래서 어떻게 풀었나? (Solve) 구조: Conv 5층 + FC 3층 층 구성 비고 Conv1 96개, 11×11, stride 4 ReLU → LRN → MaxPool Conv2 256개, 5×5 ReLU → LRN → MaxPool Conv3 384개, 3×3 ReLU Conv4 384개, 3×3 ReLU Conv5 256개, 3×3 ReLU → MaxPool FC6 4096 ReLU + Dropout FC7 4096 ReLU + Dropout FC8 1000 Softmax 문제별 해결책 학습이 느리다 → ReLU + GPU max(0, x) 는 양수 구간에서 기울기가 1로 유지돼 포화가 없다. 논문 실험에서 tanh 대비 같은 오류율 도달이 약 6배 빨랐다. GTX 580(3GB) 한 장에 모델이 안 들어가서 네트워크를 절반씩 두 GPU에 나눠 학습했다. 특정 층에서만 GPU끼리 통신한다. (구조도가 위아래 두 갈래인 이유) 과적합이 심하다 → Dropout + Data Augmentation Dropout (p=0.5) : FC6, FC7에서 뉴런을 무작위로 끈다. 파라미터가 몰린 FC층의 과적합을 직접 겨냥했다. Data Augmentation : 256×256에서 무작위 224×224 크롭 + 좌우 반전, PCA 기반 색상 변형으로 데이터를 사실상 크게 늘렸다. 일반화 성능을 조금 더 → Overlapping Pooling, LRN 3×3 풀링을 stride 2로 겹쳐서 적용. LRN으로 인접 채널 간 정규화. (단, 이후 효과가 미미하다고 밝혀져 BatchNorm에 자리를 내줌) LRN(Local Response Normalization)이란? LRN은 AlexNet에서 사용한 정규화 기법이다. 같은 공간 위치에 있는 인접 채널들의 활성값을 이용해 각 값을 조정한다. 주변 채널의 활성값이 클수록 더 큰 값으로 나누기 때문에, 해당 채널의 출력이 작아진다. 여기서 값을 ‘누른다’ 는 것은 0으로 만든다는 뜻이 아니라 크기를 줄인다는 뜻이다. 큰 활성값도 LRN을 거치면 작아질 수 있으며, 채널 사이의 반응을 상대적으로 비교하는 효과가 있다. AlexNet에서는 일부 합성곱 층의 ReLU 뒤, Max Pooling 앞에 LRN을 적용했다. 오늘날에는 LRN보다 Batch Normalization 같은 정규화 방법이 주로 사용된다. Overlapping Pooling이란? 풀링 창을 이동할 때 인접한 창이 서로 겹치도록 하는 방식이다. 풀링 창의 크기보다 이동 간격(stride)이 작으면 겹침이 생긴다. 예를 들어 AlexNet은 3×3 Max Pooling에 stride 2를 사용했다. 첫 번째 창이 가로 방향의 1 3번째 값을 보면, 다음 창은 3 5번째 값을 본다. 3번째 값이 두 창에 모두 포함되는 것이다. 반대로 2×2 창을 stride 2로 이동하면 창끼리 겹치지 않는다. AlexNet 논문에서는 overlapping pooling을 사용했을 때 오류율이 소폭 낮아졌다고 보고했다. 학습 설정 : SGD + momentum 0.9, weight decay 0.0005, batch 128, lr 0.01에서 시작해 정체 시 1/10, 약 90 epoch, 5~6일. 결과 ILSVRC 2012 top-5 오류율 15.3% . 2위는 26.2%. 이 격차로 컴퓨터 비전의 주류가 하루아침에 딥러닝으로 넘어갔다. 4. 코드로는 어떻게 쓰나? 실무에서 AlexNet을 처음부터 학습시킬 일은 거의 없다. 주로 구조를 직접 구현하며 CNN을 이해하는 용도 나, 사전학습 모델로 전이학습을 연습하는 용도 로 쓴다. 참고: torchvision 의 AlexNet은 원 논문이 아니라 단일 GPU 버전이다. Conv1 채널이 64개이고, LRN이 없다. (1) 직접 구현 (PyTorch) import torch import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): super().__init__() self.features = nn.Sequential( nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2), nn.ReLU(inplace=True), nn.LocalResponseNorm(size=5), nn.MaxPool2d(kernel_size=3, stride=2), # overlapping pooling nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(inplace=True), nn.LocalResponseNorm(size=5), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), ) self.classifier = nn.Sequential( nn.Dropout(0.5), nn.Linear(256 * 6 * 6, 4096), nn.ReLU(inplace=True), nn.Dropout(0.5), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Linear(4096, num_classes), ) def forward(self, x): x = self.features(x) x = torch.flatten(x, 1) return self.classifier(x) model = AlexNet() print(model(torch.randn(1, 3, 224, 224)).shape) # torch.Size([1, 1000]) (2) 사전학습 모델로 추론 from torchvision.models import alexnet, AlexNet_Weights from PIL import Image weights = AlexNet_Weights.IMAGENET1K_V1 model = alexnet(weights=weights).eval() preprocess = weights.transforms() # 리사이즈·크롭·정규화를 한 번에 img = preprocess(Image.open("dog.jpg")).unsqueeze(0) with torch.no_grad(): pred = model(img).softmax(dim=1) idx = pred.argmax().item() print(weights.meta["categories"][idx], pred[0, idx].item()) (3) 전이학습: 내 데이터(예: 5개 클래스)에 맞추기 model = alexnet(weights=AlexNet_Weights.IMAGENET1K_V1) # 특징 추출부는 고정 for p in model.features.parameters(): p.requires_grad = False # 마지막 FC층만 내 클래스 수로 교체 model.classifier[6] = nn.Linear(4096, 5) optimizer = torch.optim.SGD( filter(lambda p: p.requires_grad, model.parameters()), lr=1e-3, momentum=0.9, weight_decay=5e-4, # 논문 설정과 같은 계열 )
Je hoeft in 2026 niet te betalen voor goede zoekwoorddata. Er zijn meerdere gratis alternatieven voor Google Keyword Planner, maar de beste keuze hangt af van wat je precies wilt onderzoeken. Ja, Google Keyword Planner heeft verschillende gratis alternatieven. Voor snelle zoekwoordideeën zijn tools zoals Semrush Free Keyword Tool en Ahrefs Keyword Generator interessant. Voor trends kun je Google Trends gebruiken en voor zoekwoorden waarop jouw eigen website al zichtbaar is, blijft Google Search Console een van de nuttigste gratis bronnen. Er bestaat alleen geen gratis tool die Google Keyword Planner op elk onderdeel volledig vervangt. Keyword Planner combineert zoekwoordsuggesties, geschatte maandelijkse zoekvolumes en advertentiedata binnen het ecosysteem van Google Ads. Andere gratis tools zijn vaak sterker op één specifiek onderdeel. De slimste aanpak is daarom meestal niet om één vervanger te zoeken, maar om verschillende gratis databronnen te combineren. Is Google Keyword Planner zelf eigenlijk gratis? Google Keyword Planner wordt vaak een gratis zoekwoordtool genoemd, en technisch gezien hoef je geen betaald SEO-abonnement af te sluiten om de tool te gebruiken. Je hebt wel een Google Ads-account nodig. Google vraagt gebruikers bovendien om de accountconfiguratie af te ronden, waaronder het invoeren van factureringsgegevens, voordat bepaalde functies van Keyword Planner beschikbaar worden. Dat maakt Keyword Planner minder toegankelijk dan sommige SEO-tools waarbij je direct een zoekwoord kunt invoeren zonder advertentieaccount. Binnen Keyword Planner kun je onder andere: zoekwoordideeën ontdekken op basis van een term of website; geschatte maandelijkse zoekvolumes bekijken; advertentiekosten en CPC-indicaties onderzoeken; zoekwoorden groeperen; prognoses voor Google Ads-campagnes bekijken. Voor pure SEO is een deel van die informatie nuttig, maar niet alles is noodzakelijk. Wanneer je vooral onderwerpen, long-tail zoekwoorden en contentkansen wilt vinden, zijn er eenvoudigere gratis opties. Wat is het beste gratis alternatief voor Google Keyword Planner? Er bestaat geen universeel beste alternatief. De juiste tool hangt af van je doel. Wil je snel nieuwe zoekwoorden vinden, dan zijn Ahrefs Keyword Generator en de gratis zoekwoordtool van Semrush praktische opties. Wil je onderzoeken of een onderwerp populairder of minder populair wordt, dan is Google Trends nuttiger. Wil je zien via welke zoekopdrachten jouw website daadwerkelijk in Google verschijnt, gebruik dan Google Search Console. Voor serieus zoekwoordonderzoek kun je deze databronnen juist samen gebruiken. Begin bijvoorbeeld met een breed onderwerp. Verzamel daarna varianten en vragen via een keyword generator. Controleer de ontwikkeling van het onderwerp in Google Trends en gebruik Search Console om te kijken waar jouw website al vertoningen krijgt. Dat geeft vaak een realistischer beeld dan blind vertrouwen op één zoekvolume. 1. Semrush Free Keyword Tool Semrush biedt in 2026 een gratis zoekwoordtool waarmee je zonder volledig betaald SEO-abonnement zoekwoordideeën kunt onderzoeken. Je krijgt onder andere informatie over zoekvolume, zoekwoordmoeilijkheid, CPC en zoekintentie. Dat laatste is vooral interessant voor SEO. Google Keyword Planner is in eerste instantie gebouwd rond Google Ads. Daardoor is commerciële advertentiedata belangrijk in de interface. SEO-tools proberen vaker antwoord te geven op een andere vraag: Hoe moeilijk is het om organisch zichtbaar te worden voor dit zoekwoord? Semrush voegt daarvoor een keyword difficulty-indicatie toe en categoriseert zoektermen op basis van zoekintentie. De gratis versie is uiteraard beperkter dan de betaalde Keyword Magic Tool. Je krijgt minder resultaten en minder geavanceerde filters. Voor een kleine website, eerste contentplanning of snelle zoekwoordcheck kan dat echter voldoende zijn. Wanneer is Semrush interessant? Gebruik Semrush vooral wanneer je niet alleen zoekvolume wilt zien, maar ook wilt begrijpen waarom iemand zoekt. Een zoekopdracht kan bijvoorbeeld informatief, commercieel of transactioneel zijn. Dat verschil is belangrijk. Iemand die zoekt naar “wat is GEO” bevindt zich in een andere fase dan iemand die zoekt naar “beste GEO bureau Nederland”. Het zoekvolume alleen vertelt je dat niet. 2. Ahrefs Keyword Generator Ahrefs heeft eveneens gratis tools voor keyword research. Met de Keyword Generator kun je vanuit een basiszoekwoord gerelateerde termen, vragen en andere zoekwoordvarianten ontdekken. Een voordeel is dat je snel van één breed onderwerp naar veel specifiekere zoekvragen kunt gaan. Stel dat je begint met: “AI SEO” Daaruit kunnen vervolgens varianten ontstaan rond kosten, tools, strategie, voorbeelden en implementatie. Juist die specifieke zoekopdrachten zijn interessant wanneer je content maakt. Een breed zoekwoord kan veel concurrentie hebben, terwijl een specifiekere vraag veel beter aansluit op wat iemand daadwerkelijk probeert te weten. De gratis tools van Ahrefs zijn wel bewust beperkt ten opzichte van de volledige betaalde suite. Zie ze daarom vooral als onderzoeksinstrument en niet als volledige vervanging van een professionele SEO-database. 3. Google Trends Google Trends is een van de meest onderschatte gratis hulpmiddelen voor zoekwoordonderzoek. De tool geeft je niet simpelweg een traditioneel absoluut zoekvolume. In plaats daarvan laat Google Trends zien hoe de relatieve zoekinteresse zich ontwikkelt. Dat is waardevol omdat een gemiddeld maandelijks zoekvolume soms een verkeerd beeld kan geven. Stel dat twee onderwerpen ongeveer even interessant lijken op basis van historische volumes. Het eerste onderwerp daalt al maanden. Het tweede onderwerp groeit snel. Als je alleen naar een gemiddelde kijkt, zie je dat verschil nauwelijks. Google Trends maakt die ontwikkeling zichtbaar. Je kunt de tool daarom gebruiken om: seizoenspatronen te herkennen; groeiende onderwerpen te ontdekken; verschillende termen met elkaar te vergelijken; regionale verschillen te onderzoeken; te controleren of interesse in een onderwerp structureel groeit of slechts tijdelijk piekt. Voor onderwerpen rond AI en nieuwe zoektechnologie is dit extra relevant. Terminologie verandert snel. Een zoekwoord dat vorig jaar nauwelijks werd gebruikt, kan binnen korte tijd belangrijk worden. 4. Google Search Console Heb je al een website met organische zichtbaarheid? Dan is Google Search Console vaak waardevoller dan een traditionele keyword planner. Search Console laat zien voor welke zoekopdrachten jouw eigen pagina’s daadwerkelijk in Google zijn verschenen. Je kunt onder andere klikken, vertoningen, gemiddelde positie en doorklikratio onderzoeken. Dat maakt Search Console bijzonder interessant voor het vinden van bestaande kansen. Een pagina kan bijvoorbeeld gemiddeld op positie 11 staan voor een zoekopdracht waar je nog nauwelijks aandacht aan hebt besteed. Dat is meestal veel interessanter dan een volledig nieuw zoekwoord waarop jouw website nog geen enkele relevantie heeft opgebouwd. Zoek naar zoekwoorden met veel vertoningen maar weinig klikken Dit is een eenvoudige manier om kansen te ontdekken. Filter binnen Search Console op zoekopdrachten met relatief veel vertoningen. Controleer vervolgens welke termen weinig klikken krijgen. Daar kunnen verschillende redenen voor zijn. Je positie is nog te laag. De titel sluit niet goed aan. De pagina behandelt het onderwerp slechts gedeeltelijk. Of Google ziet jouw pagina als enigszins relevant, maar niet als het beste antwoord. Juist deze zoekopdrachten kunnen goede optimalisatiekansen vormen. 5. Google autocomplete en gerelateerde zoekopdrachten Je hoeft niet altijd een speciale SEO-tool te gebruiken. Google zelf kan al veel informatie geven over hoe mensen zoeken. Wanneer je een onderwerp invoert, verschijnen vaak aanvullende zoekopdrachten en suggesties. Deze suggesties kunnen helpen bij het vinden van specifieke vragen en formuleringen. Zoek je bijvoorbeeld op een brede term, dan kun je varianten ontdekken rond: kosten; alternatieven; reviews; voorbeelden; problemen; handleidingen; vergelijkingen. Deze woorden zeggen iets over de intentie achter een zoekopdracht. Voor contentplanning zijn ze daarom vaak minstens zo interessant als een exact zoekvolume. Waarom zoekvolume niet het enige criterium moet zijn Een veelgemaakte fout bij keyword research is het kiezen van zoekwoorden puur op basis van zoekvolume. Een zoekwoord met 10.000 maandelijkse zoekopdrachten is niet automatisch waardevoller dan een term met 200 zoekopdrachten. De kleinere zoekterm kan veel specifieker zijn. Daardoor kan de bezoeker dichter bij een beslissing zitten. Vergelijk bijvoorbeeld: “SEO” met: “SEO bureau voor Shopify Nederland” Het eerste zoekwoord heeft een veel bredere betekenis. Iemand kan op zoek zijn naar een definitie, opleiding, vacature, softwaretool of marketingbureau. Het tweede zoekwoord geeft veel duidelijker aan wat de gebruiker zoekt. Voor bedrijven kan zo’n kleiner maar specifieker zoekwoord daarom commercieel veel relevanter zijn. Gratis keyword research in 2026: gebruik meerdere databronnen Een sterke gratis workflow hoeft niet ingewikkeld te zijn. Begin met het hoofdonderwerp waarvoor je zichtbaar wilt worden. Gebruik vervolgens een gratis keyword generator om varianten te verzamelen. Controleer daarna in Google Trends welke onderwerpen groeien en welke juist dalen. Heb je al organisch verkeer, voeg dan Search Console-data toe. Daarna kun je de zoekwoorden ordenen op basis van intentie. Welke zoekvragen vragen om uitleg? Welke zoekvragen vergelijken oplossingen? Welke zoekvragen laten zien dat iemand een product, dienst of tool zoekt? Op die manier verandert keyword research van een lijst met termen in een contentstrategie. Verandert AI de manier waarop je zoekwoorden onderzoekt? Ja. Traditioneel SEO-onderzoek draaide sterk om individuele zoekwoorden. Voor AI-zoekmachines en generatieve zoekervaringen wordt het belangrijker om complete onderwerpen en echte gebrui