본문 바로가기

분류 전체보기57

객체 지향 설계 원칙 (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.
Dockerfile에 환경변수를 추가해보자. 📌 지난 글 1. Dockerfile을 이용해 Docker image 생성해보자. 지난 글에서는 임의의 애플리케이션을 Dockerfile을 통해 Docker Image를 생성하는 것을 알아봤습니다. 하지만 운영할 땐 단순히 Application을 띄우는 것이 아니라 여러 가지 환경변수 등을 주입해줘야 합니다. 예를 들어, 개발환경이냐 운영환경이냐에 대한 spring profiles가 그 대표적인 예일 것입니다. 이에, 우리는 이번 게시글을 통해 Dockerfile에 환경 변수를 주입하는 법을 확인하고자 합니다. 1. 지난 글에서 생성한 Dockerfile 아래의 Dockerfile은 1. Amazon Corretto JDK 17을 가지고 있는 경량화 리눅스(Alpine)에 2. 빌드된 spring boo.. 2023. 12. 17.
플러터에서 CocoaPods 라이브러리 최신화하기 플러터로 개발을 하다보면 firebase와 같은 패키지가 업데이트가 자주 됩니다. 이럴 땐 CocoaPods 라이브러리를 최신화해줘야합니다. 1. CocoaPods 삭제하기 # ios 디렉토리로 이동 후 Podfile.lock 삭제 cd {projectRootDir}/ios rm -f Podfile.lock # CocoaPods 의존성 삭제하기 pod deintegrate # CocoaPods 캐시 삭제하기 pod cache clean --all 2. CocoaPods 설치하기 pod install 명령어를 입력하면, 아래와 같이 라이브러리가 다시 설치되는 것을 볼 수 있습니다. # CocoaPods 라이브러리 설치 # --repo-update 옵션은 pod install 전에 pod repo updat.. 2023. 12. 13.