전체 글

전체 글

    Vue.js computed 속성에 파라미터 전달하기

    Vue.js computed 속성에 파라미터 전달하기

    Vue.js에서 `computed`속성을 사용하여 동적으로 계산된 속성을 이용 가능합니다. 이렇게 단순하고 간편하게 이용할 수 있지만 computed 속성을 파라미터를 전달받지 못하기 때문에 몇 가지 꼼수를 사용해야 합니다. 설명하기에 앞서 computed 속성에 직접적으로 파라미터를 전달하는 것이 지원되지 않는 이유 부터 간단하게 설명하겠습니다. `computed` 속성을 의존하는 데이터를 추적하여 해당 데이터가 변경될 될때 자동으로 계산이 됩니다. 이를 위해 `computed` 속성은 데이터 의존성을 명확하게 파악하여야 합니다. 하지만 파라미터를 통해 `computed` 속성에 외부 값이 전달되면 의존성 추적이 어려워 지고 값에 대한 일관성과 예측 가능성을 해칠 수 있기 때문입니다. 때문에 Vue.j..

    Java Apache POI로 엑셀(Excel) 파일 조작하기

    Java Apache POI로 엑셀(Excel) 파일 조작하기

    Apache POI Apache POI는 Microsoft Office 파일들을 읽고 쓸 수 있게 하는 라이브러리입니다. MS Word, MS PowerPoint, MS Excel를 조작할 수 있는데 이번 포스팅에서는 엑셀 파일을 Apache POI를 활용하여 자바 코드로 손쉽게 다룰 수 있는 방법을 알아보겠습니다. Apache POI 라이브러리 추가 gradle dependencies { implementation 'org.apache.poi:poi:4.1.2' implementation 'org.apache.poi:poi-ooxml:4.1.2' } maven org.apache.poi poi 4.1.2 org.apache.poi poi-ooxml 4.1.2 엑셀 파일 생성하기 빈 엑셀 파일을 생성하는..

    Java 리플렉션(Reflection API): 동적 코드 조작과 메타프로그래밍을 위한 Refelction API

    Java 리플렉션(Reflection API): 동적 코드 조작과 메타프로그래밍을 위한 Refelction API

    리플렉션(Reflection)이란? 자바 리플렉션은 프로그램 실행 중(런타임)에 클래스의 정보를 분석하고, 클래스의 필드, 메소드, 생성자 등에 접근하여 조작할 수 있는 능력을 제공합니다. 이는 컴파일 때는 알 수 없는 클래스를 동적으로 조작하고 활용할 수 있는 기능을 제공하며, 메타프로그래밍을 위한 핵심 개념입니다. 리플렉션을 활용하여 클래스의 메타데이터를 분석하고, 필드와 메서드를 동적으로 조작하거나 호출할 수 있습니다. 리플렉션 API로 클래스의 인스턴스를 생성하고, 필드 값을 읽거나 수정하고, 메서드를 호출하는 등의 작업을 수행할 수 있습니다. 이를 통해 프레임워크, 플러그인 시스템, 유연한 코드 구현 등을 가능하게 합니다. 리플렉션 API java.lang.Class: `getName()`: 클..

    Java 어노테이션(@annotation)을 활용한 커스텀 메타데이터 만들기

    Java 어노테이션(@annotation)을 활용한 커스텀 메타데이터 만들기

    Java 어노테이션이란 (@annotation) `Java 어노테이션`은 컴파일러, 런타임, 또는 다른 도구들에게 추가적인 정보를 제공하는 `메타데이터`입니다. `어노테이션`은 @ 기호를 사용하여 표시하며, 클래스, 메소드, 필드 등 다양한 요소에 적용할 수 있습니다. 실제로 Java 어노테이션은 다양한 분야에서 활용될 수 있습니다. 예를 들어, 우리가 가장 많이 접하는 @Override 어노테이션은 상위 클래스의 메소드를 재정의하고 있음을 나타내는데 사용됩니다. Spring Framework에서는 @Controller, @Service, @Autowired 등의 어노테이션을 사용하여 의존성 주입과 컴포넌트 스캔을 처리합니다. 또한 JUnit은 @Test, @Before, @After 등의 어노테이션을 ..

    Nginx: 웹 서버와 리버스 프록시의 개념과 용도, 사용법 설명

    Nginx: 웹 서버와 리버스 프록시의 개념과 용도, 사용법 설명

    Nginx 란? Nginx는 고성능 `웹 서버` 및 `리버스 프록시`입니다. Nginux는 이벤트 기반 아키텍처와 비동기 처리 모델을 기반으로 설계되었습니다. 이는 대규모 웹 어플리케이션 및 서비스를 처리하는데 유용합니다. Nginx의 주요 용도 정적 파일 서비스: Nginx는 `웹 서버`로써 정적 파일 서버로 사용될 수 있습니다. HTML, CSS, JavaScript, 이미지 파일 등 정적 콘텐츠를 효율적으로 제공하여 웹 페이지의 로딩 속도를 개선합니다. 이를 통해 웹 애플리케이션의 성능을 향상시킬 수 있습니다. 리버스 프록시 서버: Nginx는 리버스 프록시 서버로 사용되어 클라이언트와 서버 간의 트래픽을 관리하고 부하를 분산시킵니다. 여러 개의 백엔드 서버에 대한 요청을 받아 해당 서버로 전달하여..

    Java 직렬화와 역직렬화: 객체 저장과 복원을 위한 기술

    직렬화란? Java 직렬화는 객체 또는 데이터를 바이트(byte), 이진 형태로 변환하고, 이를 파일 또는 네트워크를 통해 전송하거나 저장하는 기술입니다. 역직렬화는 바이트로 변환된 데이터를 다시 객체로 변환하는 기술입니다. 이를 통해 다음과 같이 다양한 용도로 사용될수 있습니다. 객체, 데이터의 저장 및 전송: 객체를 파일 시스템에 저장하거나, 네트워크에 전송하기 위해 직렬화를 통해 객체를 바이트 스트림으로 변환하여 저장하거나 전송할 수 있습니다. 이를 통해 객체 및 데이터를 `영속화`할 수 있습니다. 캐시: 객체를 직렬화하여 메모리에 `캐싱`하고 필요할때 역직렬화하여 사용할 수 있습니다. 클러스터링 및 분산시스템: 다른 노드 간에 데이터를 공유하기 위해 직렬화를 사용할 수 있습니다. 직렬화를 통해 데..

    확장성을 위한 Tomcat 클러스터링 구성과 설정 방법

    확장성을 위한 Tomcat 클러스터링 구성과 설정 방법

    Tomcat Clustering (톰캣 클러스터링) Tomcat 클러스터링은 여러 대의 Tomcat 서버를 함께 동작시켜 고가용성과 확장성을 제공하는 기술입니다. 클러스터링을 구성하면 트래픽 분산과 장애 대응을 위해 여러 서버가 협력하여 웹 애플리케이션을 처리할 수 있습니다. `server.xml`에서 기본적인 클러스터 설정: 로드 밸런서 구성: 클러스터링을 위해 로드 밸런서를 설정합니다. 로드 밸런서는 들어오는 요청을 여러 대의 Tomcat 서버로 분산하는 역할을 수행합니다. 일반적으로 Apache HTTP Server나 Nginx와 같은 웹 서버를 로드 밸런서로 사용합니다. 세션 복제 설정과 캐시 설정은 클러스터 내의 Tomcat 서버에서도 동일하게 구성해주어야 합니다. 이 부분은 아래 세션복제 설정..

    Tomcat 성능 향상: 스레드 풀과 커넥터 설정 사용하기

    Tomcat 성능 향상: 스레드 풀과 커넥터 설정 사용하기

    Tomcat 성능 향상 방법들 Tomcat의 성능을 향상 시키기 위한 방법은 여러가지가 있습니다. 스레드 풀 구성: Tomcat은 기본적으로 스레드 풀을 사용하여 클라이언트 요청을 처리합니다. 적절한 스레드 풀 구성은 동시 요청을 처리하고 대기 시간을 최소화하여 성능을 향상시킬 수 있습니다. 커넥터 설정: Tomcat의 커넥터는 클라이언트와의 연결을 관리합니다. 커넥터의 설정을 조정하여 최적의 성능을 얻을 수 있습니다. 예를 들어, 커넥터의 최대 연결 수, 최대 스레드 수 등을 조정할 수 있습니다. 정적 리소스 처리: 정적인 컨텐츠(이미지, CSS, 자바스크립트 파일 등)는 Tomcat보다 웹 서버(apache, nginx 등)에서 처리하는 것이 효율적일 수 있습니다. 웹 서버와 Tomcat을 연동하여 ..

    Apache Tomcat 아파치 톰캣: 웹 애플리케이션 서버의 기능과 사용법 알아보자

    Apache Tomcat 아파치 톰캣: 웹 애플리케이션 서버의 기능과 사용법 알아보자

    아파치(Apache)와 톰캣(Tomcat) 아파치(Apache): 아파치 소프트웨어 재단에서 만든 오픈 소스 `웹 서버(WS)`입니다. 정적인 웹 페이지를 처리하고, 클라이언트로부터의 HTTP 요청을 받아 해당 요청에 대한 응답을 제공합니다. 톰캣(Tomcat): `아파치 톰캣(Apache Tomcat)`이라고도 불리며, 자바 `웹 애플리케이션 서버(WAS)`입니다. JSP(Java Server Pages)와 서블릿(Servlet)과 같은 자바 기술을 사용하는 동적인 웹 애플리케이션을 실행하는 데 특화되어 있습니다. 웹 애플리케이션을 서비스하기 위해 필요한 자바 `서블릿 컨테이너`를 제공하며, HTTP 요청을 처리하고, JSP와 서블릿 코드를 실행합니다. 아파치 소프트웨어 재단에서 개발하고 있으며, 아파..

    실시간 데이터 전송 방법 Server-Sent Events(SSE)와 웹소켓 차이

    실시간 데이터 전송 방법 Server-Sent Events(SSE)와 웹소켓 차이

    SSE: Server-Sent Events SSE(Server-Sent Events)는 웹 애플리케이션, `서버에서 클라이언트`로 `단방향`으로 `실시간` 이벤트를 전송하는 `웹` 기술입니다. SSE는 단방향 통신 방식으로 서버에서 클라이언트로 데이터를 전송합니다. 이를 통해 서버에서 발생하는 업데이트나 알림 등을 실시간으로 클라이언트에게 전달할 수 있습니다. SSE는 이런 특징으로 실시간 알림 ,실시간 주가 업데이트 등에 사용됩니다. SSE는 단방향 통신이기 때문에 서버에서 클라이언트로만 데이터를 전송할 수 있습니다. 클라이언트는 HTTP 프로토콜을 통해 SSE 연결을 설정하고, 서버는 HTTP 응답을 유지한 상태에서 데이터를 전송합니다. SSE는 재연결 기능을 제공하기 때문에 연결이 끊어졌을 때 자동..

    Java java.io 기반 입출력: 입출력 스트림, 콘솔 입출력, 파일 입출력, 보조 스트림

    Java java.io 기반 입출력: 입출력 스트림, 콘솔 입출력, 파일 입출력, 보조 스트림

    IO 패키지 IO 패키지는 입출력 작업을 수행하기 위한 클래스와 인터페이스를 제공하는 패키지입니다. 사용자가 키보드로 데이터를 `입력`할 수도 있고, 파일 또는 네트워크로부터 데이터가 입력될 수 있습니다. `출력`도 마찬가지입니다. IO 패키지를 활용하여 데이터를 시스템 콘솔, 파일, 네트워크 등 다양한 소스와 대상으로 전달하고 처리할 수 있습니다. Java에서 데이터는 `Stream`을 통해 입/출력이 되기 때문에 스트림 특징을 이해해야 합니다. 스트림은 데이터를 읽거나 쓰는 작업을 수행합니다. 이때 데이터 교환을 위해서는 입력 스트림과 출력 스트림이 각각 필요한데, 그 이유는스트림은 단방향이기 때문에 하나의 스트림으로 입/출력을 동시에 할 수 없기 때문입니다. 스트림은 `바이트 기반 스트림`과 `문자..

    Java 소켓을 사용하여 단체 채팅방 만들기

    Java 소켓을 사용하여 단체 채팅방 만들기

    실행 결과 ChatServer ChatClient 1 ChatClient 2 ChatServer import java.io.*; import java.net.*; import java.util.*; public class ChatServer { private static Set clients = new HashSet(); private static final int PORT = 5000; public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(PORT)) { System.out.println("SERVER START. Listening port " + PORT); while (true) { Sock..

    Java try-wtih-resources로 자원 관리하기

    입출력 스트림, DB 연결 등과 같은 자원을 사용할 때는 기존에 close() 메서드를 호출하여 자원을 해제해주었어야 합니다. 사용 전: FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); // 파일 읽기 작업 수행 } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } Java 7 부터 도입된 `try-with-resources` 문법을 사용하면 코드를 간결하고 효율적으로 작성할 수 있습니다. 기존에는 코드 안에 c..

    Java 소켓 프로그래밍: 네트워크 통신을 위한 Java Socket

    Java 소켓 프로그래밍: 네트워크 통신을 위한 Java Socket

    Java 소켓(Socket)은 네트워크 통신을 위한 API입니다. 소켓(Socket)은 TCP/IP 기반의 연결 지향형 통신을 제공하며, 소켓 프로그래밍을 통해 클라이언트와 서버 간의 데이터 통신을 구현할 수 있습니다. 소켓(Socket) 관련 용어 `클라이언트와 서버` 클라이언트는 서버에 연결을 요청하고 데이터를 보내고 받는 쪽이며, 서버는 클라이언트의 요청을 수락하고 처리하는 쪽입니다. `TCP/IP` 소켓은 TCP/IP 프로토콜을 기반으로 동작합니다. TCP는 신뢰성 있는 연결 지향형 통신을 제공합니다. IP는 데이터를 패킷으로 분할하여 전송하는 역할을 합니다. Java는 TCP 네트워킹을 위해 `java.net.Socket`과 `java.net.ServerSocket` 클래스를 제공합니다. 소켓 ..

    MyBatis INSERT 쿼리 실행 후 auto_increment 키 값 반환하기

    MyBatis INSERT 쿼리 실행 후 auto_increment 키 값 반환하기

    MyBatis 쿼리 생성 INSERT INTO TB_USER (USER_NAME, USER_AGE, USER_GENDER ,USER_YN ) VALUES (#{userName}, #{userAge}, #{userGender} ,#{userYn} ); `useGeneratedKeys` DB에서 자동으로 생성된 키를 사용할지 여부입니다. `AUTO_INCREMENT` 또는 `IDENTITY` 속성을 가진 열에 사용합니다. `keyProperty` DB에서 생성된 키를 매핑할 자바 객체의 프로퍼티를 지정합니다. 위 예시처럼 `useGeneratedKeys`와 같이 사용함으로써 자동 생성된 ID 값을 저장하기 위한 프로퍼티를 지정해주어야 합니다. 반환 값 받기 userMapper.insertUserAndGetP..

    Spring Security OAuth 2.0를 이해해보자

    Spring Security OAuth 2.0를 이해해보자

    OAuth란? 게임이나 쇼핑몰 같은 웹사이트를 이용하다보면 [Google로 간편 로그인], [NAVER로 간편 로그인] 등과 같이 타 서비스의 계정으로 로그인할 수 있도록 구현된 것을 확인할 수 있습니다. 타 서비스의 계정을 통해 로그인하는 기능을 구현하는 가장 쉬운 방법은 구현하고자 하는 웹 사이트에서 Google이나, NAVER의 아이디나 비밀번호를 요청하여 제공받고, 이를 저장하여 사용하는 방법일 것입니다. 하지만 이런 방법은 보안상으로 좋지 않은 방법입니다. 사용자들은 가입하고자 하는 웹 사이트에 자신의 Google이나 NAVER 계정 정보를 줘야하고, Google이나 NAVER 입장에서도 자신이 갖고 있는 사용자의 정보를 다른 웹 사이트에 공유한다는 것이 부담스럽기 때문입니다. 이를 해결하고자 ..

    MySQL 데이터베이스(DB)에 배열 넣기 (feat. JSON)

    MySQL 데이터베이스(DB)에 배열 넣기 (feat. JSON)

    일반적으로 배열의 값을 데이터베이스(DB)에 넣기 보다는, 별도의 테이블에 저장하고, 해당 테이블과 원래 테이블 간의 관계를 생성합니다. 즉 정규화를 하는 것인데 이를 통해 배열 요소의 개별 검색, 수정, 추가가 용이해지는 장점이 있지만, 배열의 크기가 크거나 굳이 정규화를 하지 않아도 될 경우에도 정규화를 하게 되면 성능 문제가 발생할 수 있습니다. 때문에 배열 그대로 테이블에 집어넣는 방법에 대해서 알아보도록 하겠습니다. 문자열로 저장하는 방법 `배열 자료형`을 `문자열`로 변환하고, 그대로 테이블에 문자열 컬럼으로 저장해버리는 방법입니다. 배열을 넣을 때는 문자열로 변환하여 저장하고, 가져올 때는 문자열을 불러와 파싱하여 배열 자료형으로 만들어 사용하면 됩니다. 1) org.json 라이브러리 의존..

    Java 동기화와 비동기 처리

    Java 동기화와 비동기 처리

    데이터 동기화와 비동기 처리는 멀티 스레드 환경에 대해서 공부하다보면 많이 접할 수 있는 용어입니다. 이 용어들에 대한 개념들을 명확하기 위해 포스팅을 해보려 합니다. 동기화 동기화는 여러 스레드가 공유하는 데이터에 대한 접근을 조절하여 데이터의 일관성과 안정성을 보장하는 것을 의미합니다. 동기화를 사용하면 한 스레드가 공유 자원을 사용할 때 다른 스레드가 동일한 공유 자원에 접근할 수 없도록 통제하는 것을 말합니다. 동기화는 `상호 배제`를 통해 데이터 경쟁 상태를 방지합니다. 상호 배제 방법으로 뮤텍스, 세마포어 방식이 사용됩니다. 경쟁 상태: 멀티스레드 환경에서 두 개 이상의 스레드가 공유 자원에 접근하여 동시에 변경하려고 할 때 발생하는 문제, 데이터 일관성과 안정성이 보장되지 않습니다. 임계 영..

    JS 스와이프 동작 구현을 위한 Swiper API

    JS 스와이프 동작 구현을 위한 Swiper API

    Swiper API Swiper API는 웹 및 모바일 애플리케이션에서 스와이프 동작을 구현하기 위한 JavaScript 라이브러리입니다. 이 API는 사용자의 터치 입력을 감지하고 해당 동작을 가로 스와이프 또는 세로 스와이프로 해석하여 애플리케이션에 반응합니다. Swiper API를 사용하면 다양한 스와이프 기능을 구현할 수 있습니다. 일반적으로 스와이프 기능은 이미지 슬라이더, 캐러셀, 슬라이드 메뉴, 드래그 앤 드롭 등의 인터랙티브한 기능을 구현하는 데 사용됩니다. 주요 메서드 new Swiper(container, options) Swiper 인스턴스를 생성하는 메서드입니다. container는 Swiper 컨테이너 요소의 선택자 또는 DOM 객체이고, options는 Swiper의 옵션을 설정..

    JAVA ThreadPoolExecutor을 이용한 스레드 풀(Thread Pool)

    JAVA ThreadPoolExecutor을 이용한 스레드 풀(Thread Pool)

    스레드 풀 스레드 풀(Thread Pool)은 스레드를 미리 생성하고 관리하는 기법입니다. 병렬 작업 처리가 많아지면 스레드의 개수가 증가하게 되고 그에 따른 스레드 생성과 스케줄링으로 인해 어플리케이션 성능이 저하가 됩니다. 스레드 풀을 사용하면 스레드 생성 및 제거에 따른 오버헤드를 줄이고, 스레드의 재사용성을 높여 성능을 향상시킬 수 있습니다. 일반적으로 스레드 풀은 고정된 크기의 스레드 집합을 가지며, 작업을 수행하기 위해 해당 스레드를 사용합니다. 스레드 풀을 생성하고 관리하며 스레드를 처리하기 위해 Java에서는 `Executor` 인터페이스를 제공해줍니다. 개발자는 Runnable을 이용하여 작성만 해주면 스레드를 생성해서 작업을 처리하고, 처리가 완료되면 스레드를 제거하고 종료하는 작업을 ..

    Spring @RequestParam/@PathVariable/@RequestBody/@RequestHeader/@CookieValue

    Spring @RequestParam/@PathVariable/@RequestBody/@RequestHeader/@CookieValue

    Spring Framework에서 Controller 메서드의 매개변수와 함께 사용되는 어노테이션들을 정리해보겠습니다. 이들은 클라이언트의 요청에서 데이터를 추출하거나 전달되기 위해서 주로 사용되며 각 어노테이션은 서로 다른 용도와 사용 방식을 가지고 있습니다. `@RequestParam`: 요청 매개변수 값 취득 `@PathVariable`: 경로 변수 값 취득 `@RequestBody`: 요청 본문(body)에서 데이터를 추출, JSON 또는 XML 같은 형식의 데이터를 컨트롤러 메서드의 매개변수로 변환합니다. `@RequestHeader`: 요청 헤더 값 취득 `@CookieValue`: 쿠키 값 취득 @RequestParam 요청 매개변수를 추출하는데 사용됩니다. URL 쿼리 문자열이나 POST ..

    Spring web.xml, root-context.xml, servlet-context.xml

    Spring web.xml, root-context.xml, servlet-context.xml

    web.xml은 웹 애플리케이션의 배포 설명자 파일로, 웹 어플리케이션의 구성과 설정을 정의하는 XML 파일입니다. root-context.xml과 servlet-context.xml은 web.xml에서 로드되는 Spring 구성 파일입니다. root-context.xml은 전역적인 빈을 servlet-context.xml은 웹 계층과 관련된 빈을 설정합니다. 이를 통해 Spring 웹 애플리케이션의 구성과 설정을 모듈화하고 관리할 수 있습니다. web.xml Java 웹 애플리케이션의 배포 설명자 파일(Deployment Descriptor)로, 웹 애플리케이션의 구성과 설정을 정의하는 XML 파일입니다. 즉 설정을 위한 설정 파일입니다. 처음 WAS가 구동될 때 각종 설정을 정의해줍니다. root-c..

    Vue.js 유용한 Plugin

    Vue.js 유용한 Plugin

    Prettier 코드를 자동 정렬해줍니다. Rainbow Brackets 괄호 별로 색을 구분지어 주고 매칭시켜주기 때문에 가독성을 높여줍니다. Auto Close Tag & Auto Rename Tag 자동으로 태그를 닫아주고 태그 이름을 수정 시 나머지 태그도 자동 수정해줍니다. Live Server 개발 로컬 서버에서 Live Reload 해주어 실시간 확인이 가능합니다. Vetur 뷰의 코드 하이라이팅을 지원해줍니다. 문법 강조, 코드 자동 완성, 디버깅 등 지원해줍니다. Vue 2 Snippets .vue 파일 생성시 처음 입력해야 하는 코드를 자동 완성 해주는 기능입니다. Vue 3 이용하는 사람은 `Vue 3 Snippets`를 설치해주면 됩니다.

    Eclipse 유용한 Plugin

    Eclipse 유용한 Plugin

    Darkest Dark Theme Eclipse Marketplace에서 설치가 가능합니다. 여러가지 테마로 가독성이 향상됩니다. (IntelliJ Dark Theme 가능) 설치시 테마만 바꿀거면 `DevStyle with CodeTogether Bundle` 해제해도 상관없습니다. MyBatipse 이클립스에서 MyBatis를 작성하는데 편리함을 제공합니다. [ctrl + 좌클릭]으로 mapper와 xml을 이동할 수 있고 자동완성을 제공합니다. Eclipse Marketplace에 설치가 되지 않는다면 https://github.com/mybatis/mybatipse#installation 링크에서 확인하여 다른 방법으로 설치해주면 됩니다. DBeaver DB TOOL로 저는 따로 설치하여 사용했기..

    Vue.js 컴포넌트 간의 컨텐츠를 전달하는 <slot> 태그 ( + Named Slot)

    Vue.js 컴포넌트 간의 컨텐츠를 전달하는 <slot> 태그 ( + Named Slot)

    Slot 태그는 컴포넌트 간의 컨텐츠 전달을 위해 사용되는 방식 중 하나입니다. 태그를 이용하면 부모 컴포넌트에서 자식 컴포넌트로 컨텐츠를 삽입하여 동적으로 컴포넌트를 구성할 수 있습니다. 태그를 사용하여 컨텐츠 뿐만 아니라 컴포넌트를 넘길 수도 있습니다. 자세한 설명을 하기보다는 일단 아래 예제로 설명하도록 하겠습니다. 컨텐츠 전달 Parent Component Parent Component 자식 컴포넌트로 전달할 컨텐츠 Child Component Child Component 컴포넌트가 렌더링될 때 부모 컴포넌트의 안에 있는 컨텐츠들이 태그 위치에 렌더링 됩니다. 이런 식으로 태그를 사용하면 부모 컴포넌트에서 자식 컴포넌트로 컨텐츠를 전달하여 컴포넌트의 일부를 동적으로 변환할 수 있습니다. 컴포넌트 ..

    Vue.js MVVM과 반응형 시스템

    Vue.js MVVM과 반응형 시스템

    MVVM(Modeled-View-ViewModel) Vue.js는 MVVM 패턴에 영향을 받았습니다. MVVM 패턴이란 UI와 데이터 처리를 분리하는 아키텍처 패턴입니다. UI와 데이터 간의 바인딩을 통해 개발자가 직접 UI를 업데이트할 필요 없이 데이터와 UI를 자동으로 동기화할 수 있습니다. MVVM 패턴은 데이터 모델(Model), 뷰(View) 및 뷰 모델(ViewModel)로 구성됩니다. 이때 ViewModel은 View와 Model 상시에서 데이터를 주고 받는 역할을 합니다. Vue.js에서는 Vue 인스턴스가 이런 역할을 수행합니다. Vue 인스턴스는 Model(data)와 View(template)을 연결하고, 이를 바인딩하여 데이터와 UI를 동기화합니다. View: 사용자 인터페이스(UI..

    Vue.js 필터(Filters) 이용하여 날짜 형식 변환하기

    Vue.js 필터(Filters) 이용하여 날짜 형식 변환하기

    필터 Vue.js 필터(Filter)는 텍스트 형식을 변환하는 기능입니다. 텍스트 내용을 변환하여 화면에 출력할 때 사용하며, 변환 기능을 함수로 구현합니다. 필터를 등록하는 두 가지 방법이 있습니다. 전역 필터: Vue.filter() 전체 Vue.js 어플리케이션에서 사용 가능한 필터입니다. Vue.js 인스턴스 생성 시, filter 속성에 필터 함수를 정의하면 됩니다. 지역 필터: 컴포넌트 내부에서 filters 프로퍼티 정의 Vue.js 필터는 템플릿 내부에서 적용할 필터의 이름을 파이프(|) 뒤에 추가하면 됩니다. 필터 정의 Vue.filter('dateFormat', function(value) { if (value) { return moment(String(value)).format('YY..

    JS 모듈: export(내보내기)와 import(가져오기)

    JS 모듈: export(내보내기)와 import(가져오기)

    ES6에서 JavaScript에서는 모듈을 지원합니다. 모듈 구성하고 이용하면 파일 간의 코드를 쉽게 공유할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다. 모듈 시스템에서는 import와 export 키워드를 사용하여 모듈을 로드하고 내보낼 수 있습니다. import와 export는 컴파일 시점에서 결정되며, import 선언과 export선언은 호이스팅되어 최상위에 위치됩니다. export: 내보내기 모듈에서 외부로 내보내기 위한 키워드입니다. 이를 이용하여 아래와 같이 변수, 함수, 클래스, 객체 등을 내보낼 수 있습니다. // 변수 내보내기 export const value = 25; // 여러 값 내보내기 const z = 'first'; const y = 'second'; expo..

    JS 프로토타입: 자바스크립트의 상속

    JS 프로토타입: 자바스크립트의 상속

    자바스크립트에서 프로토타입(prototype)은 자바스크립트에서 상속을 구현하기 위한 방식으로, 다른 객체에 공유 프로퍼티를 제공하는 객체입니다. 자바스크립트에서 모든 객체는 자신의 부모 역할을 하는 프로토타입 객체(prototype object)를 가지고 있습니다. 이 프로토타입 객체는 다른 객체로부터 상속된 속성과 메서드를 가지고 있습니다. 프로토타입 체인(prototype chain)은 자바스크립트에서 객체가 특정 속성에 접근할 때, 해당 객체 자체에 해당 속성이 없다면, 자신의 프로토타입에서 해당 속성을 찾고, 이를 계속해서 상위 타입 객체의 프로토타입에서 찾는 과정을 반복하다가 최종적으로 Object.prototype에서 해당 속성을 찾지 못하면 undefined를 반환하는 것을 말합니다. 정리..

    Vue.js 배열 추가, 삭제, 정렬 (push, splice, sort)

    Vue.js 배열 추가, 삭제, 정렬 (push, splice, sort)

    배열 끝에 데이터 추가: push(데이터) 배열.push(데이터); 배열 중간에 데이터 추가: splice(index, 0, 데이터) 배열.splice(index, 0, 데이터); 배열 중간 데이터 삭제: splice(index, 1) 배열.splice(index, 1); 배열 중간 데이터 변경: splice(index, 1, 데이터) 배열.splice(index, 1, 데이터); 배열 정렬: sort() // 오름차순 배열명.sort(function(a,b) { return (a b ? -1 : 1); });