최근 작성한 글
thumbnail
아키텍처

[아키텍처] 아키텍처 간단 소개

아키텍처 소프트웨어에는 MVC, MVP, MVVM 등 정말 다양한 아키텍처가 생겼어요. 왜 이렇게 많은 아키텍처가 계속 생길까요? 코드의 복잡도가 커질수록 역할을 나누고, 유지보수성과 확장성, 테스트 용이성을 확보하기 위한 방법이 필요했기 때문이에요. 여러분들이 많이 들었을 MVC 패턴도 초기 GUI 소프트웨어를 만들때 뷰로직, 비즈니스 로직 등 많은 로직이 뒤섞였기 때문에 분리하기 위해서 만들어진 패턴이에요. MVC 아키텍처 MVC 아키텍처는 약 36년 전에 만들어진 아키텍처로 Model Model : 데이터와 비즈니스 로직을 관리하는 부분이에요. View : UI를 통해 데이터를 화면으로 보여주는 부분이에요. UI 로직도 함께 포함되요. Controller : Model과 View 사이의 다리 역할을 해요. user input을 처리하고, model을 업데이트하고 그 결과를 view에게 전달해요. 전통적 MVC 유저가 버튼 같은 것을 클릭하면 Event가 전달되고, Controller는 이에 따라 Model 업데이트를 요청할 수도 있고 View 업데이트를 요청할 수도 있어요. 그리고 Model은 업데이트 되면 View에게 최신 Model을 반영한 View를 UI로 제공하도록 만들 수 있어요. 이 때 Model의 변경으로 통한 View 업데이트는 크게 2가지 방법을 사용해요. Observer 패턴을 이용하여 자동 반영되게 만들거나, 단순히 View를 업데이트하는 코드를 넘겨줘 Flow를 통해 View 업데이트를 유발할 수 있어요. Web MVC (feat. SPA) MVC모델을 Web에 적용했을 때 모습이...
2025-10-21
0
1
11
thumbnail
프록시 패턴

[디자인 패턴] 프록시 패턴

프록시 패턴(Proxy Pattern) 프록시 패턴은 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 행동 패턴이에요. 원격, 가상, 보호, 캐싱, 로깅 프록시와 같이 다양한 종류가 있어요. 이런 프록시들의 목적을 하나로 요약하면 자원 접근 제한 및 통제에요. 대표적인 예로 자바나 자바스크립트의 Class로 만든 Instance의 자원 접근을 Proxy를 통해서 부가 적인 기능을 수행할 수 있게 만드는 것이에요. 프록시 패턴 구조 프록시는 특정 객체에 대한 접근 제어를 하기 위해 사용되고 특정 객체는 Subject라고 해요. 프록시(Proxy)는 Subject 인터페이스를 따라 구현하여 실제 RealSubject와 완전히 호환되도록 바꿀수 있어요. 이렇게 구현하면 Client가 사용할 때 기존의 Subject 인터페이스를 그대로 사용하며 Proxy가 어떻게 생겼는지 몰라도 사용할 수 있어요. Subject : RealSubject가 구현하는 인터페이스에요. 아마 프록시를 추가한다는 것은 이미 Subject가 있을 확률이 높을 거라 생각해요. RealSubject : 접근 제어할 원본 객체이며, 실제 핵심 작업을 수행하는 객체에요. Proxy : RealSubject에 대한 접근을 제어할 중개자(대리인) 프록시 패턴 시퀀스 다이어그램 위 그림은 실제 Client가 Proxy 패턴으로 코드를 사용하면 어떤 순서로 코드가 실행될 지 보여줘요. Proxy의 request() 메서드를 사용하면, RealSubject의 알고리즘을 대신 위임하여 사용하고 그 값을 리턴해주거나 자...
2025-10-19
0
1
11
thumbnail
스위치OSI

[Network] OSI 7계층과 예시

왜 OSI 7계층을 알아야 하는가 OSI(Open Systems Interconnection) 7계층 모델은 네트워크 통신을 이해하는 가장 기본적인 프레임워크입니다. 단순히 이론에 그치지 않고, 우리가 매일 사용하는 라우터, 스위치, 서버, 그리고 AWS, GCP 같은 클라우드 서비스가 모두 이 모델 위에서 동작합니다. OSI 모델을 이해하면 네트워크 장애가 발생했을 때 어느 계층의 문제인지 파악할 수 있습니다 클라우드 아키텍처를 설계할 때 각 구성 요소의 역할을 명확히 이해할 수 있습니다 보안 정책을 수립할 때 어느 계층에서 방어해야 하는지 알 수 있습니다 이번 글에서는 OSI 7계층을 단계별로 살펴보고, 각 계층에 어떤 처리 기기나 클라우드가 사용되는 지 예시까지 알아보겠습니다. OSI 7계층 개요 OSI 모델은 네트워크 통신 과정을 7개의 논리적 계층으로 나눈 표준 모델입니다. 각 계층은 특정한 역할을 담당하며, 상위 계층은 하위 계층의 서비스를 이용합니다. 물론 최근에는 TCP/IP 5계층 혹은 4계층을 더 적합한 모델로 보고있습니다. 계층 이름 주요 역할 관련 키워드 7 Application (응용 계층) 사용자와 직접 상호작용 HTTP, FTP, DNS 6 Presentation (표현 계층) 데이터 형식 변환 및 암호화 SSL/TLS, JPEG, 인코딩 5 Session (세션 계층) 연결 세션 관리 세션 유지, 동기화 4 Transport (전송 계층) 전송 제어, 신뢰성 보장 TCP, UDP, 포트 3 Network (네트워크 계층) 경로 선택, 주소 지정 IP, 라우팅 2 Data Link ...
2025-10-14
0
0
6
사이트 이용 통계
차트 로딩 중...
사이트 아키텍처
banner
banner
많이 본 글
thumbnail
ProseMirrorNextJsShiki

[블로그 소개] 프론트엔드 - 에디터

블로그 소개 – 에디터 안녕하세요. 첫 번째 블로그 글입니다. 저는 프로그래밍하면서 고민하고 해결한 과정을 기록하고 공유하기 위해 블로그를 만들었습니다. 글을 잘 쓰는 편은 아니지만, 수정·보완하면서 효율적으로 지식을 나눌 수 있도록 하겠습니다. 이번 글에서는 제가 직접 만든 블로그 에디터를 소개하려 합니다. 1달 가까이 다양한 에디터를 테스트했고, 결국 ProseMirror 기반 Tiptap을 선택했습니다. 팁탭은 확장성이 뛰어나고 Viewer를 JSON/Text 형식 모두 SSR 가능 Next.js & 백엔드와 궁합이 좋음 에디터 SSR 확장성 엔진 WYSIWYG Markdown RIch Text 기타 editor.js 🟡 ↗️ 자체 ✅ 🟡 ✅ 문서 좋음. Json 구조. react-md-editor ❌ ➡️ 자체 ❌ ✅ ❌ 이지윅 사용성 안좋음. toast UI ❌ ⬇️ ProseMirror ✅ ✅ ✅ 문서화 나쁨. 플러그인 적음. quill 🟡 ↗️ Delta ✅ 🟡 ✅ 문서 좋음. JSON 구조. TipTap ✅ ↗️ ProseMirror ✅ 🟡 ✅ 문서 보통. 기능 잘 나뉨. ProseMirror ✅ ⬆️ 자체 ✅ ❌ 🟡 문서 최고. 높은 러닝 커브. 👉 결론: 간단 기능 위주라면 Quill/Editor.js 추천. 하지만 커스텀 기능 많이 필요하다면 Tiptap/ProseMirror가 최적일 것입니다. 저의 에디터에 필요한 기능들의 기능들을 정리해 봤습니다. 기본 텍스트 편집 기능 글씨체 변경 (굵게, 밑줄, 기울임, 색깔, 배경색) 글머리 기호, 번호 기호, 체크 리스트 문단 좌, ...
2025-03-16
0
2
276
thumbnail
Critical CSSSentryNextJs

[블로그 소개] 프론트 엔드 - 성능 최적화

[블로그 소개] 프론트엔드 방문해주셔서 감사합니다. 1번째 글 이후 블로그의 마음에 안드는 부분 수정을 하느라 2번째 글 쓰기까지 많은 시간이 걸린 것 같습니다. 이번 글에서는 저가 어떤 방식들로 블로그를 최적화를 했는지 소개하려고 합니다. 우선 글을 읽기 앞서 함께(?) 축하할 일은 최적화 결과 Lighthouse 4가지 카테고리에서 모두 100점을 달성했다는 것입니다. 하하 이번 글에서 소개할 것은 성능에 영향을 끼치는 원인을 어떻게 찾았는지, 그리고 어떻게 최적화 했는지 소개드릴려고 합니다. 여기에 더해 Lighthouse로 점수로 측정되지는 않지만, [네트워크가 오류날 정도로 느린 상황]이나 [새로고침 상황에서 하얀색 깜박임으로 인한 불편한 상황]을 개선한 과정도 소개드리겠습니다. 우선 아래 사진은 최적화를 완전히 마치고 홈화면을 Lighthouse로 성능, 접근성, 권장사항, 검색엔진 4가지 카테고리의 점수를 측정한 결과들입니다. Lighthouse는 크롬 개발자도구의 Lighthouse탭에서 누구나 성능측정을 쉽게 할 수 있도록 만든 툴입니다. Lighthouse 점수 측정시 주의할 점은 사용자 네트워크, 컴퓨터, 브라우저 환경에 따라 다른 결과를 보여줄 수 있다는 점입니다. 대표적인 예로 ThirdParty Cookie를 브라우저에서 차단하지 않았거나, 네트워크가 느리면 성능 측정 결과가 달라집니다. 성능 측정할 때 뿐만 아니라 평소에도 브라우저 설정으로 써드파티 Cookie는 차단하시길 추천드립니다. Home 화면(어드민 로그인) Home 화면(일반유저 로그인) Home 화면(비 로그인) 어드...
2025-03-27
1
2
106
thumbnail
monorepotsconfigturborepo

[블로그 소개] 프론트엔드 - 구조 및 설정

[블로그 소개] 프론트엔드 블로그를 만들기 위해 여러 번 세팅을 시도했고, 그 과정에서 포기도 여러 번 했습니다. 다양한 시도 끝에 monorepo 구조로 구성하는 방식이 가장 깔끔하게 프로젝트를 나누고 사용하기에도 편하다는 결론에 도달했습니다. 단순히 폴더 구조만으로 기능을 구분하려 했을 때는 폴더가 지나치게 세분화되었고, 그렇다고 패키지들을 repo를 나누려 하면 관리하고 다른 앱에 적용하기 짜증납니다. 특히 에디터 기능을 포함하려다 보니 코드 양이 많아지면서 도메인과 코드가 섞이기 쉬웠습니다. 반면, 하나의 레포에서 모듈별로 분리하는 방식은 자연스럽게 도메인과 코드가 분리되며, 재사용성 및 사용성(개발자 경험)까지 확보할 수 있다는 점에서 확실히 장점이 있다고 느꼈습니다. 아래는 블로그 만들 때 사용한 Monorepo 구조입니다. 과거 폴더 구조 (tsconfig Reference 기능 사용) 현재 폴더 구조 (Just in Time packages 적용) 1.1 App과 Package 블로그 프로젝트에서 App은 스토리북, React Web, React Native 3개 입니다. 그리고 패키지는 Design System, Editor, Domain, Utils 4개와 ts와 esLint 설정을 위한 tsConfig, eslintConfig 2개로 구성했습니다. App React Web React Native Storybook Package DesignSystem Editor Domain Utils tsConfig esLintConfig 여기서 Domain을 별도로 분리한 목적은 좀더 API를 체계적으...
2025-04-13
0
0
63
좋아요 많은 글
thumbnail
Command Pattern

[디자인 패턴] 커맨드 패턴

[디자인 패턴] 커맨드 패턴 이번 글에서는 커맨드 패턴에 대해 설명하겠습니다. 커맨드 패턴은 요청(행위, 행동)을 객체로 캡슐화해서 요청을 매개변수화하는 패턴이다. (행동 패턴) 주로 요청을 보낸 객체와 요청을 수행하는 객체를 분리하고 싶을 때 사용한다. 에디터의 실행 기록을 저장하며 [redo/undo]를 구현하거나, 작업 큐를 구현하는데 많이 사용된다. 커맨드 패턴은 다음과 같은 요소들로 이루어져 있다고 보면 된다. 커맨드 객체 : 실제 실행될 동작을 구현한 클래스로 "리시버"의 메서드를 실행하는 객체이다. 리시버 객체 : 실제로 작업을 수행하는 객체이다. 인보커 객체 : 커맨드를 실행하는 주체이다. 클라이언트 : 커맨드 객체를 생성하여 인보커에 할당한다. 그리고 그 상관관계를 그림으로 나타내 아래와 같다. 커맨드 패턴을 설명만 들어서는 감이 안올 것 같다. 그래서 아래 간단한 요구사항을 커맨드 패턴으로 구현해보자. 요구사항 스위치 전원을 on/off하여 전등을 끄고 킬 수 있다. // Receiver: 실제 동작을 수행하는 객체 class Light { on() { console.log("💡 불이 켜졌습니다."); } off() { console.log(" 불이 꺼졌습니다."); } } // Command 인터페이스 (Invoker는 인터페이스에 의존하여 Command 객체 구현은 모름) interface Command { execute(): void; } // Concrete Command: 불 켜기 class LightOnCommand implements Comm...
2025-08-29
0
3
22
thumbnail
kernelOS

[운영체제] 운영체제와 커널

운영체제와 커널 컴퓨터의 응용 프로그램은 하드웨어에 접근할 수 있어야 한다. 그래야 하드디스크에 데이터를 저장하고 메모리에 프로세스를 올리고, CPU에서 그 메모리 정보를 가지고 데이터를 처리할 수 있다. 그리고 사용자는 GUI를 통해서 응용 프로그램을 실행할 수 있어야 한다. 그래야만 사용자와의 상호작용을 통해서 원하는 프로세스를 메모리에 올릴 수 있기 때문이다. 이러한 역할을 하는 것이 운영체제(OS)이다. 사용자 자원과 실행 단계를 계층적으로 커널 공간, 사용자 공간, 시스템 콜, 하드웨어로 나눌 수 있다. 사용자 공간은 시스템 콜 인터페이스를 통해 커널 영역에 접근할 수 있고, 커널 영역은 사용자 공간에서 사용한 시스템 콜 API에 따라 하드웨어를 조작하게 된다. 그런데 사용자 공간과 커널 공간이 나뉘어 있듯이, CPU도 사용자 모드와 커널 모드 2가지의 모드가 존재한다. 왜냐하면 사용자 모드에서 통제없이 하드웨어에 접근할 수 있으면 보안과 안정성에 문제가 생기며, 동일 자원에 여러 CPU가 접근할 때도 문제가 생길 수 있기 때문에 이를 특별히 관리할 필요가 있기 때문이다.아래 그림은 CPU가 이중 모드로 모드를 구분하여 명령어를 실행하는 그림이다. 응용 프로그램이 프리턴기를 쓰거나, 하드디스크에 입력하는 등의 커널 영역이 필요한 명령어를 사용하기 위해서 커널 모드에 진입하고, 다시 사용자 모드로 돌아온다. 1.1 운영체제 운영 체제는 컴퓨터 하드웨어와 응용 프로그램 사이에서 상호작용을 지원하고 관리하는 시스템 소프트웨어다. 운영체제는 하드웨어 자원(CPU, 메모리, 저장 장치 등)을 효율적으로 관리하...
2025-06-27
1
3
48
thumbnail
Critical CSSSentryNextJs

[블로그 소개] 프론트 엔드 - 성능 최적화

[블로그 소개] 프론트엔드 방문해주셔서 감사합니다. 1번째 글 이후 블로그의 마음에 안드는 부분 수정을 하느라 2번째 글 쓰기까지 많은 시간이 걸린 것 같습니다. 이번 글에서는 저가 어떤 방식들로 블로그를 최적화를 했는지 소개하려고 합니다. 우선 글을 읽기 앞서 함께(?) 축하할 일은 최적화 결과 Lighthouse 4가지 카테고리에서 모두 100점을 달성했다는 것입니다. 하하 이번 글에서 소개할 것은 성능에 영향을 끼치는 원인을 어떻게 찾았는지, 그리고 어떻게 최적화 했는지 소개드릴려고 합니다. 여기에 더해 Lighthouse로 점수로 측정되지는 않지만, [네트워크가 오류날 정도로 느린 상황]이나 [새로고침 상황에서 하얀색 깜박임으로 인한 불편한 상황]을 개선한 과정도 소개드리겠습니다. 우선 아래 사진은 최적화를 완전히 마치고 홈화면을 Lighthouse로 성능, 접근성, 권장사항, 검색엔진 4가지 카테고리의 점수를 측정한 결과들입니다. Lighthouse는 크롬 개발자도구의 Lighthouse탭에서 누구나 성능측정을 쉽게 할 수 있도록 만든 툴입니다. Lighthouse 점수 측정시 주의할 점은 사용자 네트워크, 컴퓨터, 브라우저 환경에 따라 다른 결과를 보여줄 수 있다는 점입니다. 대표적인 예로 ThirdParty Cookie를 브라우저에서 차단하지 않았거나, 네트워크가 느리면 성능 측정 결과가 달라집니다. 성능 측정할 때 뿐만 아니라 평소에도 브라우저 설정으로 써드파티 Cookie는 차단하시길 추천드립니다. Home 화면(어드민 로그인) Home 화면(일반유저 로그인) Home 화면(비 로그인) 어드...
2025-03-27
1
2
106