본문 바로가기

전체 글59

Spring AI 시작하기 최근(이라기엔 이미 늦었지만) 웬만한 제품에는 AI 라는 키워드가 빠지질 않습니다.사실 개인적으로는 AI를 접목시킨 제품에 그렇게 메리트를 느끼지 않았습니다.제가 혁신적이라고 느꼈던 것들은 [ChatGPT, Cursor]같은 AI 플랫폼에 있지 일반적인 웹 서비스에 추가되는 AI 기능이 편리하다고 느낀 적이 없었기 때문입니다. 있다고 해봐야 번역 기능 정도?하지만 여러 컨퍼런스와 문서, 시장과 제품을 보면 매일매일이 혁신인 것 같습니다.당장 1, 2년 전만해도 컨퍼런스를 보면 AI라는 키워드는 보통 하드웨어 기반의 제품이 출품되었는데, 이번 코엑스에서 열린 AI Festa에서는 대부분이 서비스 기반의 제품이었습니다. 앞으로 얼마나 더 빠르게 발전해서 내 생활에 근접할까? 걱정도 되기 시작했습니다.이제 점.. 2025. 10. 10.
Flutter iOS 파일 다운로드 문제 여태까지 문제가 없다가 갑자기 왜? iOS 애플리케이션에서 파일 다운로드 후 해당 파일이 3rd-party app으로 공유되지 않는 이슈가 리포트됐습니다.이를 수정하기 위해 처음 리포트됐을 때는 확인하다가 큰 문제가 아니라고 생각하고 할일에만 넣어두고 보지 않았죠.그러다 점점 문의가 쌓이고, 도저히 가만 놔둘 수 없겠다. 하는 생각이 들어 수정을 결심했습니다.하지만 아무리 AI에게 물어봐도 해결되지 않고, 구글링을 해도 동일한 케이스의 문서가 없어서 골머리를 앓았습니다.문제점파일 다운로드를 할 때, 추가적인 패키지를 쓰고싶지 않아 dio 패키지의 download 메서드를 사용하여 파일을 직접 Write 했습니다.제 생각에는 이 동작이, 시스템에서 수행하는 다운로드가 아닌 앱에서 자체 write를 하여 i.. 2025. 7. 30.
객체 지향 설계 원칙 (SOLID) - SRP / OCP 단일 책임 원칙 (SRP / Single Responsibility Principle)하나의 클래스는 하나의 책임만 가져야 합니다. 즉, 하나의 클래스는 하나의 기능에 집중해야한다는 것입니다.그 예로, 맥가이버 칼을 들 수 있습니다.이 칼은 실생활에서는 휴대성과 활용성이 뛰어납니다.하지만, 소프트웨어 관점에서는 하나의 객체가 많은 기능을 담당합니다.  (칼, 맥주/와인 오프너 ...)여러 기능을 책임지고 있기 때문에 기능을 수정하면 같은 객체 내의 다른 기능에게 이슈가 전파될 가능성이 있습니다.즉, SRP는 이 기능의 변경이 이루어질 때 연쇄(파급) 효과가 적어야 합니다. 개방-폐쇄 원칙 (OCP / Open-Closed Principle)기존의 코드를 수정하지 않고 기능을 추가할 수 있도록 설계해야 합.. 2024. 5. 30.
영속성 컨텍스트 (Persistence Context) 0. 영속성 컨텍스트란? Entity를 영구히 저장하는 환경이라고 해석해 볼 수 있습니다. Entity Manager를 이용해 저장하거나 조회하면 Entity Manager는 영속성 컨텍스트에 해당 Entity를 보관 및 관리합니다. 1. 특징 1-1. 영속성 컨텍스트가 관리하는 Entity는 반드시 식별자가 존재해야 한다. 영속성 컨텍스트는 Entity를 식별자 값(@id로 테이블의 기본키와 맵핑한 값)으로 구분하기 때문에 반드시 존재해야 합니다. 만약 객체에 식별자가 없을 경우 Exception이 발생합니다. 1-2. 1차 캐시 영속성 컨텍스트 내부에는 캐시가 존재합니다. 이를 1차 캐시라고 부르며, 영속 상태의 Entity를 이곳에 저장합니다. 이 1차 캐시는 Key-Value 형태로 저장되며 Ke.. 2024. 2. 10.
Entity의 생명주기 (Entity LifeCycle) JPA에서 Entity는 4가지의 생명주기를 가집니다. 비영속 (New / Transient) Entity를 생성하고 아직 저장하지 않은 상태입니다. 따라서, 영속성 컨텍스트 혹은 데이터베이스와는 전혀 연관이 없는 상태입니다. Member member1 = new Member(); member1.setId(1); member1.setUserName("회원1"); 영속 (Managed) Entity Manager를 통해 Entity를 영속성 컨텍스트에 저장한 상태 혹은 저장된 Entity를 조회한 상태입니다. 영속성 컨텍스트가 관리하는 Entity를 이 영속 상태라고 합니다. Member member2 = new Member(); member2.setId(2); member2.setUserName("회원2.. 2024. 2. 9.
플러터 웹뷰에서 물리 키보드 방향키가 동작하지 않는다. 메인 컴포넌트가 웹뷰로 구성된 페이지에서 물리 키보드의 방향키가 동작하지 않는다는 문의를 받았습니다. 재현해보니 정말 동작하질 않았습니다. 아이패드같은 태블릿으로 앱을 사용할 때 키보드를 쓰는 사용자는 충분히 불편하겠다 싶어 분석결과, 아래와 같이 조치했습니다. 물론 플러터 엔진의 문제로 보여 임시 조치이며, webview_flutter와 flutter_inappwebview 공통적으로 발생하는 문제입니다. 문제가 발생하는 코드 당연히 일반적인 구현입니다. @override Widget build(BuildContext context) { return Scaffold( child: SafeArea( child: InAppWebView( ... .. . ), ), ); } 조치한 코드 WebView 위젯(.. 2024. 2. 6.