개발자가 AI를 고르는 기준, ChatGPT vs 퍼플렉시티 vs 제미나이 vs 그록

 요즘 개발자에게 AI는 필수 도구가 됐다. 대표적으로 많이 사용하는 AI는 ChatGPT, 퍼플렉시티, 제미나이, 그리고 그록이다. 각각 성격이 조금씩 다르다. 퍼플렉시티는 검색형 AI에 가깝다. 질문을 하면 핵심 정보를 빠르게 정리해 준다. 최신 문서나 정책 확인할 때 유용하다. 다만 코드 수정처럼 구체적인 작업에서는 설명이 짧게 끝나는 경우가 있어 추가 테스트가 필요할 때도 있다. 제미나이는 비교적 신중한 스타일이다. 정확성을 중요하게 보는 답변이 많다. 개념 설명이나 방향 정리에 도움이 된다. 하지만 코드 디버깅에서는 다소 보수적으로 느껴질 수 있다. ChatGPT는 대화형 AI에 가깝다. 코드 흐름을 같이 분석하고 문제 원인을 설명하고 바로 수정 가능한 방향까지 제시하는 방식이다. 그래서 기존 프로젝트 수정이나 디버깅 작업에서 활용도가 높다. 그록은 실험적인 기능이 빠르게 추가되는 편이다. 특히 이미지나 동영상 생성 기능이 주목을 받았다. 다만 일부 기능은 유료화되면서 접근 방식이 바뀌고 있다. 그래서 간단한 테스트 용도로는 괜찮지만 지속적으로 사용하려면 비용을 고려해야 한다. 결국 어떤 AI가 더 좋다고 말하기는 어렵다. 최신 정보 검색 → 퍼플렉시티 개념 설명 → 제미나이 코드 수정 / 디버깅 → ChatGPT 이미지 / 동영상 생성 → 그록 AI는 하나만 쓰기보다 상황에 맞게 선택하는 것이 가장 효율적이다. 개발자가 AI를 사용하는 이유는 단순하다. 삽질을 줄이기 위해서다. 어떤 AI를 쓰든 내 작업 스타일에 맞는 도구를 고르는 것이 가장 중요하다.

하이브리드 앱을 웹이랑 똑같이 견적 내면 안 되는 이유

 하이브리드 앱은 처음 보면 그냥 웹이랑 똑같아 보인다. URL 하나 올리면 끝나는 구조니까 쉽다고 생각하기도 한다. 나도 처음에는 그렇게 생각했다. “웹 만들었으니까 앱은 금방 나오겠지.” 이게 가장 큰 착각이었다. 실제로 개발을 시작해보면 완전히 다른 문제가 계속 나온다. 웹에서는 정상인데 앱(WebView)에서는 레이아웃이 깨진다. SafeArea 처리도 따로 해야 하고 스크롤 이벤트도 브라우저랑 다르게 동작한다. 하단 고정 버튼 하나 만드는 것도 웹에서는 간단하지만 하이브리드 앱에서는 기기별로 다 테스트해야 한다. 특히 로그인이나 결제 같은 외부 페이지를 거치면 화면이 풀스크린으로 깨지는 문제도 발생한다. 브라우저에서는 절대 안 나오던 버그가 앱에서만 나온다. 또 하나 큰 차이는 테스트다. 웹은 브라우저 하나에서 확인하면 되지만 하이브리드 앱은 안드로이드 iOS WebView 버전 기기 해상도 이걸 다 확인해야 한다. 결국 작업 시간은 웹보다 훨씬 오래 걸린다. 그런데 겉보기에는 웹이랑 비슷해 보여서 견적을 웹 기준으로 잡아버리면 개발자는 무조건 힘들어진다. 하이브리드 앱은 "웹 + 앱 대응 작업"이 추가된 구조다. 그래서 웹이랑 동일한 견적으로 보면 안 된다. 직접 개발해 보니까 느낀 건 하나다. 하이브리드 앱은 생각보다 훨씬 어렵다. 하지만 제대로 만들면 네이티브에 가까운 결과를 얻을 수 있다. 그래서 더 신중하게 견적을 잡아야 한다.

하이브리드 앱 개발하면서 느낀 것 – 웹이랑 같을 거라고 생각하면 큰 착각이다

 하이브리드 앱을 처음 만들 때 나는 단순하게 생각했다. 웹사이트 잘 만들어 놨으니까 WebView에 URL만 올리면 끝이라고. 하지만 실제로 개발을 시작해 보니 웹 브라우저와 WebView는 완전히 다른 환경이었다. 겉으로는 똑같이 보이는데, 동작 방식이 미묘하게 다르다. 이 미묘한 차이 때문에 예상 못한 문제들이 계속 발생한다. 1. fixed가 WebView에서 다르게 동작하는 문제 웹에서는 하단 고정 버튼을 만들 때 position: fixed를 사용하면 끝이다. 하지만 WebView에서는 부모 요소의 구조에 따라 fixed가 깨지는 경우가 많다. 특히 상위 요소에 transform이 들어가면 fixed가 화면 기준이 아니라 부모 기준으로 움직이기도 한다. 이걸 모르고 애니메이션 효과를 넣었다가 하단 고정 버튼이 같이 스크롤 되는 문제를 겪었다. 웹에서는 정상인데 앱에서만 깨지는 대표적인 사례다. 2. SafeArea 문제는 웹에서 테스트하면 절대 모른다 iOS에서 WebView를 사용할 때는 SafeArea를 항상 신경 써야 한다. 웹에서는 정상인데 앱에서는 상단 상태바를 덮어버리는 문제가 생긴다. 특히 로그인 화면을 거쳤다가 돌아오면 레이아웃이 깨지는 경우도 있다. 이건 CSS 문제가 아니라 iOS WebView 렌더링 문제라서 웹에서 아무리 수정해도 해결되지 않는다. 3. 스크롤 주체가 다르면 UI가 깨진다 웹에서는 body 스크롤이 기본이지만 하이브리드 앱에서는 특정 컨테이너가 스크롤을 담당하는 경우가 많다. 이때 하단 고정 버튼, floating 버튼, sticky 요소들이 예상과 다르게 동작한다. 그래서 하이브리드 앱에서는 “누가 스크롤을 담당하는지”를 먼저 정해야 한다. 4. 애니메이션도 함부로 넣으면 안 된다 웹에서 자연스럽게 보이던 페이지 슬라이드 효과가 앱에서는 fixed 요소를 깨뜨리기도 한다. 특히 transform을 사용하는 애니메이션은 하단 고정 UI에 영향을 줄 수 있다. 하이브리드 앱에서는 단순한 opacity나 ma...

iOS WebView 네이버 로그인 후 화면 깨짐 해결 (SafeArea 무시 / 상태바 사라짐)

iOS WebView 기반으로 앱을 만들면서 네이버 로그인을 붙였는데, 이상한 버그를 하나 만났다. 로그인까지는 문제없이 잘 된다. 그런데 로그인 이후부터 앱 화면이 전부 이상하게 깨지기 시작한다. 상단 상태바가 사라지고, SafeArea가 완전히 무시되면서 모든 화면이 풀스크린처럼 표시된다. 기존에는 정상적으로 보이던 페이지들도 전부 영향을 받는다. 처음에는 웹 쪽 문제라고 생각했다. CSS나 viewport 설정이 잘못된 줄 알고 이것저것 수정해봤는데 전혀 해결되지 않았다. 이상하게도 이 문제는 항상 발생하는 게 아니라 네이버 로그인 화면을 한 번 거쳤다가 돌아온 이후부터 발생했다. 이 시점에서 웹 문제가 아니라 iOS 쪽 문제일 가능성이 높다고 판단했다. 결론적으로 원인은 WebView의 SafeArea 처리와 네이버 로그인 과정에서의 화면 전환이 충돌하면서 발생한 문제였다. 네이버 로그인은 내부적으로 SafariViewController나 외부 웹뷰 형태로 화면이 전환되는데, 이 과정에서 iOS가 SafeArea를 다시 계산하지 않거나 WebView가 풀스크린 상태로 고정되는 경우가 있다. 특히 SwiftUI에서 아래와 같은 설정이 들어가 있으면 문제가 더 확실하게 나타난다. .ignoresSafeArea() 이 설정이 있는 상태에서 로그인 화면을 거치고 돌아오면 WebView가 계속 전체 화면을 덮어버리는 상태가 된다. 해결 방법은 생각보다 단순했다. 우선 .ignoresSafeArea() 설정을 제거하거나 꼭 필요한 영역에서만 제한적으로 사용하도록 수정했다. 이것만으로도 대부분의 경우 문제가 해결된다. 그리고 WebView를 감싸는 구조도 한 번 점검해봤다. 불필요하게 전체 화면을 덮는 구조 대신, SafeArea 기준으로 자연스럽게 렌더링되도록 단순하게 구성했다. 예를 들어 이런 식으로 정리했다. VStack {     WebView(urlString: "https://example.com") } 그래도 로그인 이후 화면이 깨지는...

증산동에 이런 카페가? 디저트 카페 펀스터

이미지
 벚꽃이 피던 금요일 오전 친구들과 증산동 빵 맛집으로 브런치하러~~ ===== 오시는 길 ===== 버스 ---> 증산 초등학교 하차 후 뒷골목 지하철로 오시는 길 ---> 1. 증산역 3번 출구300m 직진 후 증산도서관 등지고 수색방향으로 200m 오른쪽에 빨간색 건물입니다. 2. 디지털 미디어 시티역 5번 출구로 나오셔서 자이아파트 쪽으로 300m 가량 직진 증산골프장 옆 빨간색 건물입니다. 들어오기 전에 외부 테이블도 있답니다. 안으로 들어오는 햇살이 너무 눈부셔 사진이 뿌옇게 나오네요 ㅎㅎ 크로와상에 앙버터를 ㅎㅎ 맛있어 보여 사진만 찍음 소시지 페스츄리~~ 우리 아들 좋아하는건데.. 그 옆에는 남편이 좋아하는 애플파이 요 파이도 맛있다고 하네 집에 와 생각해보니 엄청 컷던 걸로 기억 담엔 사와야지 ㅋ 매콤한 명란 바게트에 감태를 올려 너무 파릇하죠? 매콤한 맛을 감태가 잘~~ 감아줄 듯 하네요. 깜빠뉴가 좀 작긴 한데 실해 보임 많이들 사가는 걸 보고 먹어볼 껄 후회 막심. 토마토 치아버터 vs 크리스피 치아버터 뭐가 맛있을까요?  글쎄요.. 둘 다 맛있겠죠. 2층올 올라가는 계단 옆이 화장실입니다. 근데 화장실 옆에서 빵이 나와요 ㅎㅎ 화장실 끼고 계단으로 올라가면 2층올 올라가면 로스팅 룸이 보이네요 커피가 맛난 이유가 여기 있었군요. 2층이 꽤 넓고 밝습니다. 햇살이 눈부시게 들어와서 창을 등지고  큰 원형 테이블에 자리 잡았습니다 벌집라떼 & 펀스터크림 & 아메리카노 단호박 깜빠뉴 & 잠봉 뵈르 & 쪽파크림치즈 베이첼(베이글+프레첼) 부드러운 크림과 찐한 커피가 잘 어울리는 펀스터 크림, 풍미가 좋아요 잠봉뵈르 바게크가 좀 딱딱하니 힘 주고 깨물어 주세요! 잠봉 듬뿍, 버터는 고소하니 담백함에 홀딱 캬~ 쪽파가 쫑쫑쫑, 크림치즈도 듬뿍이네요 베이글모양의 프레첼입니다. 크림치즈의 느끼할 수 도 있는 맛을 쪽파가 향긋하게 잡아줘요 주차는 카페앞 3대까지 가능하다고 하니 참고하세요....

응암시장 브런치 맛집 "사생활 파스타&브런치"

이미지
지인과 함께 응암동 파스타집으로 점심먹으러 GoGo! 입구를 들어서는 순간 술집인가? 했네 ㅎㅎ 위치는 응암시장에서  백련자이아파트로 올라가는 왼쪽 길에 있네요. 좀 더 쉽게는 은평시립병원으로 올라가요... 응암새싹어린이공원 가기 전에 왼쪽 살짝 골목처럼 들어가는 위치에 있어서 찾기가 좀... 이런곳에 이런 분위기의 브런치가 있을까 싶었네요 들어가는 위치는 좀 그렇지만 올라가면 나름 분위기 있고 꽤 넓습니다. 들어오면 아기 의자가 있네요 테이블이 붙어 있지 않아서 옆 사람 이야기 잘 안들려서 사생활인가?  했네요. ㅋㅋ 들어와서 직진하면 키오스크 보입니다. 여기서 주문하고 물은 셀프에요. 주문하고 물이 없어서 한참을 두리번거렸네요. 주문하는 곳이랑 주방이 보입니다. 테이블이 넓직하죠? 테이블 사이 공간도 여유롭고 깔끔합니다. 주문하고 맛 보느라 먼저 먹었네요. 잘 안보이죠? ㅎㅎㅎ 헉! 먹은게 보이네요.. 더 예쁘게 나왔는데... 암튼 이건 살짝 매워요 근데 맵질인 저에게 살짝 매울 뿐 마라탕 1.5 단계도 안됩니다. 수비드 등심 토마토 보리 리조또 앗! 이것도 자세히 보심 안돼요. 이거 엄청 제 입맛이더라구요. 살짝 매운 맛이 있는데 시골 오일 파스타보다 안 매워요. 고기랑 먹는 리조또 또 먹고 싶네요...ㅎㅎ 제가 앉아있는 테이블이 넵킨 있는 곳... 바로 앞에 보이는 곳이 단체홀 같습니다. 낮이라 오픈을 하지 않았지만 궁금했습니다. 주문기다리가 심심해서 위를 보니 ㅎㅎ 아래서 찍은 사진입니다. 좀 이상하죠? 잘 보셔야 할 듯요 ㅎ 사생활 파스타&브런치 바로가기 브레이크 타임 확인하세요 앗! 중요한 걸 잊을 뻔했네요. 네이버 영수증 후기 쓰시면 샐러드 등심까스 안심까스 브라우니 택1해서 먹을 수 있어요. 저는 그냥 포장해서 집에서 편안히 커피랑 먹었네요 생각보다 브라우니 맛나고 큼직해요 ㅎㅎㅎㅎ 브라우니 사진을 못 찍었습니다. 가로 10cm 세로 5cm 정도니 큰거죠? ㅋ 담엔 피자 먹으러...

Swiper-slider로 반응형 작업할 때 이미지 사이즈에 따라서 높이 지정하기

 Swiper 슬라이더를 사용하면 웹페이지에 쉽게 슬라이드 기능을 삽입할 수 있습니다. 심지어는 반응 형 웹을 개발할 때도 옵션 만으로 쉽게 반응 형 기능을 구현할 수 있습니다. autoHeight : true; 위와 같이 옵션을 주면 이미지의 넓이에 맞춰서 이미지의 높이가 자동 조절됩니다.  하지만 이미지의 크기가 그리 크지 않을 때에는 화면을 줄임에 따라 이미지의 높이가 자동  조절 되면서 이미지가 너무 작아져 버리는 문제가 생깁니다.  그래서 이미지가 줄어들 때 이미지의 넓이에 맞춰서 높이를 강제 지정해 주어야 하는 것이 필요할 때도 생깁니다.    <body> <section class="main swiper mySwiper"> <div class="wrapper swiper-wrapper"> <div class="slide swiper-slide"> <img src="images/img01.jpg" alt="" class="image" /> </div> <div class="slide swiper-slide"> <img src="images/img02.jpg" alt="" class="image" /> </div> <div class="slide swiper-slide"> <img src="images/img03.jpg" alt="" class="image" /> </div> </div> ...

홍대 가성비 맛집 카츠미 본점

이미지
원래는 후라토 상수점에서 규카츠 먹으려고 했는데 15:00부터 브레이트 타임 ㅠ 14:30분에 갔는데 런치 마감이라고 에잇 이런!! 딸램 추천으로 가성비 맛집 카츠미 찾아갔습니다. 상수에서 걸어가다 보니 조금 시간은 걸렸지만 브레이크 타임이 없어진 카츠미에서 규카츠 바로 먹을 수 있었습니다. 돈까스 덮밥도 함께 먹으려 했으나 재료 소진으로 규카츠만.. 되는 일이 없네요. 그래도 맛있기를 바라며... ㅎㅎ 규카츠 기본 사이즈입니다. 공기밥은 더블 같네요 ㅋ 규카츠 점보 사이즈입니다. 고기가 접시 길이만큼이죠? ㅎ 규카츠 더블 사이즈입니다. 실제로 두 배는 안 되는 듯 해요. 가격이 두 배가 안 되니 그렇겠죠? ^^ 그래도 양은 넉넉하답니다. 가격을 착한데 밑 반찬이 생각보다 별로네요. 그리고 구울 때 연기가 너무 많이 납니다. 테이블 마다 연기가 꽉 차니 좀 불편했습니다. 빨리 나가고 싶다 였죠 ㅎㅎㅎ 후라토는 연기가 많이 나지 않았던 걸로 기억이 납니다만... 가격은 기본사이즈 기준  천 원짜리 한 장 차이인데 말이죠... 후라토가 천 원 비쌉니다.  지금 점심시간이라 이거 생각이 나네요. 돈까스 덮밥 메뉴가 없어서... 점보사이즈는 접시에 한 아름이네요 카츠미 가시는 길 재료소진 전화 확인 후 가세요~ 후라토 식당에서 오므라이스 주문해서 집으로 Go! 담엔 후라토 식당에서 만나요!