![전체 글](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
전체 글
![Java java.io 기반 입출력: 입출력 스트림, 콘솔 입출력, 파일 입출력, 보조 스트림](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl0lPH%2FbtsltjETXXf%2FqpYyUQKssfwO69PJnmfOa1%2Fimg.png)
Java java.io 기반 입출력: 입출력 스트림, 콘솔 입출력, 파일 입출력, 보조 스트림
IO 패키지 IO 패키지는 입출력 작업을 수행하기 위한 클래스와 인터페이스를 제공하는 패키지입니다. 사용자가 키보드로 데이터를 `입력`할 수도 있고, 파일 또는 네트워크로부터 데이터가 입력될 수 있습니다. `출력`도 마찬가지입니다. IO 패키지를 활용하여 데이터를 시스템 콘솔, 파일, 네트워크 등 다양한 소스와 대상으로 전달하고 처리할 수 있습니다. Java에서 데이터는 `Stream`을 통해 입/출력이 되기 때문에 스트림 특징을 이해해야 합니다. 스트림은 데이터를 읽거나 쓰는 작업을 수행합니다. 이때 데이터 교환을 위해서는 입력 스트림과 출력 스트림이 각각 필요한데, 그 이유는스트림은 단방향이기 때문에 하나의 스트림으로 입/출력을 동시에 할 수 없기 때문입니다. 스트림은 `바이트 기반 스트림`과 `문자..
![Java 소켓을 사용하여 단체 채팅방 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtDmbA%2FbtsluhGAoE0%2FaSRTPY0HdeTJVPeDmtQYT1%2Fimg.png)
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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlpQGG%2FbtslufCPTeP%2FkTDmjjfjmOhTwNIen7hQAK%2Fimg.png)
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 키 값 반환하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVTrwz%2FbtsvHdvjeQ0%2FD9NHNDtKjQQ5zKQTSlf6p1%2Fimg.png)
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를 이해해보자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ44IQ%2FbtskBCGkLdS%2FvKC3aSmKItYC7BAeBAkjF1%2Fimg.png)
Spring Security OAuth 2.0를 이해해보자
OAuth란? 게임이나 쇼핑몰 같은 웹사이트를 이용하다보면 [Google로 간편 로그인], [NAVER로 간편 로그인] 등과 같이 타 서비스의 계정으로 로그인할 수 있도록 구현된 것을 확인할 수 있습니다. 타 서비스의 계정을 통해 로그인하는 기능을 구현하는 가장 쉬운 방법은 구현하고자 하는 웹 사이트에서 Google이나, NAVER의 아이디나 비밀번호를 요청하여 제공받고, 이를 저장하여 사용하는 방법일 것입니다. 하지만 이런 방법은 보안상으로 좋지 않은 방법입니다. 사용자들은 가입하고자 하는 웹 사이트에 자신의 Google이나 NAVER 계정 정보를 줘야하고, Google이나 NAVER 입장에서도 자신이 갖고 있는 사용자의 정보를 다른 웹 사이트에 공유한다는 것이 부담스럽기 때문입니다. 이를 해결하고자 ..
![MySQL 데이터베이스(DB)에 배열 넣기 (feat. JSON)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHWKb%2FbtsjInB8GKY%2F5VKeW2taxpwlB1AX4gtJRk%2Fimg.png)
MySQL 데이터베이스(DB)에 배열 넣기 (feat. JSON)
일반적으로 배열의 값을 데이터베이스(DB)에 넣기 보다는, 별도의 테이블에 저장하고, 해당 테이블과 원래 테이블 간의 관계를 생성합니다. 즉 정규화를 하는 것인데 이를 통해 배열 요소의 개별 검색, 수정, 추가가 용이해지는 장점이 있지만, 배열의 크기가 크거나 굳이 정규화를 하지 않아도 될 경우에도 정규화를 하게 되면 성능 문제가 발생할 수 있습니다. 때문에 배열 그대로 테이블에 집어넣는 방법에 대해서 알아보도록 하겠습니다. 문자열로 저장하는 방법 `배열 자료형`을 `문자열`로 변환하고, 그대로 테이블에 문자열 컬럼으로 저장해버리는 방법입니다. 배열을 넣을 때는 문자열로 변환하여 저장하고, 가져올 때는 문자열을 불러와 파싱하여 배열 자료형으로 만들어 사용하면 됩니다. 1) org.json 라이브러리 의존..
![Java 동기화와 비동기 처리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3dth%2FbtsiOIUF3FV%2FxBqqKH7XlKo7PuBibjkSo0%2Fimg.png)
Java 동기화와 비동기 처리
데이터 동기화와 비동기 처리는 멀티 스레드 환경에 대해서 공부하다보면 많이 접할 수 있는 용어입니다. 이 용어들에 대한 개념들을 명확하기 위해 포스팅을 해보려 합니다. 동기화 동기화는 여러 스레드가 공유하는 데이터에 대한 접근을 조절하여 데이터의 일관성과 안정성을 보장하는 것을 의미합니다. 동기화를 사용하면 한 스레드가 공유 자원을 사용할 때 다른 스레드가 동일한 공유 자원에 접근할 수 없도록 통제하는 것을 말합니다. 동기화는 `상호 배제`를 통해 데이터 경쟁 상태를 방지합니다. 상호 배제 방법으로 뮤텍스, 세마포어 방식이 사용됩니다. 경쟁 상태: 멀티스레드 환경에서 두 개 이상의 스레드가 공유 자원에 접근하여 동시에 변경하려고 할 때 발생하는 문제, 데이터 일관성과 안정성이 보장되지 않습니다. 임계 영..
![JS 스와이프 동작 구현을 위한 Swiper API](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAg72g%2FbtsiM9kMMqy%2F8BhFJPbEpHacul14OkGPC1%2Fimg.png)
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)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTyWP8%2FbtsiNvnTFaS%2FAPrxHHfoofeL8SQDKBDMlk%2Fimg.png)
JAVA ThreadPoolExecutor을 이용한 스레드 풀(Thread Pool)
스레드 풀 스레드 풀(Thread Pool)은 스레드를 미리 생성하고 관리하는 기법입니다. 병렬 작업 처리가 많아지면 스레드의 개수가 증가하게 되고 그에 따른 스레드 생성과 스케줄링으로 인해 어플리케이션 성능이 저하가 됩니다. 스레드 풀을 사용하면 스레드 생성 및 제거에 따른 오버헤드를 줄이고, 스레드의 재사용성을 높여 성능을 향상시킬 수 있습니다. 일반적으로 스레드 풀은 고정된 크기의 스레드 집합을 가지며, 작업을 수행하기 위해 해당 스레드를 사용합니다. 스레드 풀을 생성하고 관리하며 스레드를 처리하기 위해 Java에서는 `Executor` 인터페이스를 제공해줍니다. 개발자는 Runnable을 이용하여 작성만 해주면 스레드를 생성해서 작업을 처리하고, 처리가 완료되면 스레드를 제거하고 종료하는 작업을 ..
![Spring @RequestParam/@PathVariable/@RequestBody/@RequestHeader/@CookieValue](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbovd0V%2FbtsiQjz0ptk%2F53601PuTkyrcx74U7goC1K%2Fimg.png)
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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbyBTq%2FbtsivPBlSov%2FPE2UF13ijfyq7p0NlZPBT1%2Fimg.png)
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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFke23%2FbtsiBNDajBf%2Fj3ppAZAkk2dR2KNtc2tV30%2Fimg.png)
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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6zfF7%2FbtsgYixNYEb%2FCMx00y85eU7xxuKvEzpw7K%2Fimg.png)
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)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDKGTD%2FbtsiyWtwXI5%2FjDZ8FmkksiN0wn3ql75EYk%2Fimg.png)
Vue.js 컴포넌트 간의 컨텐츠를 전달하는 <slot> 태그 ( + Named Slot)
Slot 태그는 컴포넌트 간의 컨텐츠 전달을 위해 사용되는 방식 중 하나입니다. 태그를 이용하면 부모 컴포넌트에서 자식 컴포넌트로 컨텐츠를 삽입하여 동적으로 컴포넌트를 구성할 수 있습니다. 태그를 사용하여 컨텐츠 뿐만 아니라 컴포넌트를 넘길 수도 있습니다. 자세한 설명을 하기보다는 일단 아래 예제로 설명하도록 하겠습니다. 컨텐츠 전달 Parent Component Parent Component 자식 컴포넌트로 전달할 컨텐츠 Child Component Child Component 컴포넌트가 렌더링될 때 부모 컴포넌트의 안에 있는 컨텐츠들이 태그 위치에 렌더링 됩니다. 이런 식으로 태그를 사용하면 부모 컴포넌트에서 자식 컴포넌트로 컨텐츠를 전달하여 컴포넌트의 일부를 동적으로 변환할 수 있습니다. 컴포넌트 ..
![Vue.js MVVM과 반응형 시스템](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDLGCh%2FbtsiFO2GMaf%2FraqxdSSxxkByHGc9yi2Wq0%2Fimg.png)
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) 이용하여 날짜 형식 변환하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOwNmD%2Fbtsf2XmJrSW%2FCeiq6ZaZOrhetsS7u1DNHk%2Fimg.png)
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(가져오기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMwnxj%2FbtsnhSMyY2N%2FXBNYlXePPTsYb6oi3I2ys1%2Fimg.png)
JS 모듈: export(내보내기)와 import(가져오기)
ES6에서 JavaScript에서는 모듈을 지원합니다. 모듈 구성하고 이용하면 파일 간의 코드를 쉽게 공유할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다. 모듈 시스템에서는 import와 export 키워드를 사용하여 모듈을 로드하고 내보낼 수 있습니다. import와 export는 컴파일 시점에서 결정되며, import 선언과 export선언은 호이스팅되어 최상위에 위치됩니다. export: 내보내기 모듈에서 외부로 내보내기 위한 키워드입니다. 이를 이용하여 아래와 같이 변수, 함수, 클래스, 객체 등을 내보낼 수 있습니다. // 변수 내보내기 export const value = 25; // 여러 값 내보내기 const z = 'first'; const y = 'second'; expo..
![JS 프로토타입: 자바스크립트의 상속](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9Pa6%2FbtsizdB8m6i%2FFT7qwz9H54mXV50XMhVlMk%2Fimg.png)
JS 프로토타입: 자바스크립트의 상속
자바스크립트에서 프로토타입(prototype)은 자바스크립트에서 상속을 구현하기 위한 방식으로, 다른 객체에 공유 프로퍼티를 제공하는 객체입니다. 자바스크립트에서 모든 객체는 자신의 부모 역할을 하는 프로토타입 객체(prototype object)를 가지고 있습니다. 이 프로토타입 객체는 다른 객체로부터 상속된 속성과 메서드를 가지고 있습니다. 프로토타입 체인(prototype chain)은 자바스크립트에서 객체가 특정 속성에 접근할 때, 해당 객체 자체에 해당 속성이 없다면, 자신의 프로토타입에서 해당 속성을 찾고, 이를 계속해서 상위 타입 객체의 프로토타입에서 찾는 과정을 반복하다가 최종적으로 Object.prototype에서 해당 속성을 찾지 못하면 undefined를 반환하는 것을 말합니다. 정리..
![Vue.js 배열 추가, 삭제, 정렬 (push, splice, sort)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feqsh7X%2FbtsfaLHsxjn%2FE8FA3kisQIWATsY0kwAsdk%2Fimg.png)
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); });
![Vue.js 디렉티브(v-접두사)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRMeL1%2FbtseHl4brRR%2FmqvkTOkr1DM7FiYt6YSPV1%2Fimg.png)
Vue.js 디렉티브(v-접두사)
디렉티브 HTML 요소에 동작과 기능을 부여를 더 쉽게 할 수 있습니다. HTML 태그 안에 v-접두사 형식으로 표시되며, Vue.js가 HTML을 해석하고 동적으로 조작할 수 있도록 돕습니다. 첫 번재 문장 {{ system }} 두 번째 문장 세 번째 문장 네 번째 문장(경고 창) new Vue({ el: '#app', data: { flag1: false, flag2: true, systems: ['android', 'ios', 'window'], uid: 10 }, methods: { popupAlert: function () { return alert('경고 창 표시'); } } }); {{ }} (v-text): 데이터 바인딩 HTML 화면 요소에 뷰 인스턴스 데이터를 연결하고 표시합니다. v..
![Vue.js axios를 이용한 HTTP 통신](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPoXG4%2FbtseG5tIsBW%2FdSrHXHMmeTqnz1WFEyyHJ1%2Fimg.png)
Vue.js axios를 이용한 HTTP 통신
axios HTTP 통신을 하는 방법들이 있지만 그 중 Vue.js에서 권고하는 방식은 axios 입니다. axios는 Promise 기반의 API 형식이고 다른 방법들에 비해 문서화도 잘되어 있고 많이 사용됩니다. axios 설치 NPM을 사용하여 설치하는 방법 (링크) CDN을 이용하여 설치하는 방법 axios 사용법 해당 URL 값 가져오기 new Vue({ el: '#app', methods: { getData: function () { axios.get(`URL`) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); } } }); axios HTTP 요청 메서드 ..
![Vue.js Router로 싱글 페이지 어플리케이션(SPA) 페이지 라우팅 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXz4mI%2FbtseKdqeBES%2FWlkll0f05E95DzbxyYf580%2Fimg.png)
Vue.js Router로 싱글 페이지 어플리케이션(SPA) 페이지 라우팅 구현
Vue.js Router Vue.js Router는 Vue.js 프레임워크에서 사용되는공식 라우터 라이브러리로, SPA에서 페이지 라우팅을 구현하는데 사용됩니다. Vue.js Router는 Vue 어플리케이션에서 다양한 View와 URL 간의 매핑을 정의하고, 사용자가 브라우저의 주소 표시줄을 통해 URL을 변경하거나 링크를 클릭할 때마다 적절한 뷰를 렌더링합니다. 각 라우트에 대해 컴포넌트를 매핑하고, 중첩된 라우트와 동적 라우팅을 설정하여 사용할 수 있습니다. 또한 뒤로/앞으로 버튼을 클릭할 때마다 적절한 컴포넌트를 자동으로 로드하여, SPA에서 페이지 전환을 간편하게 관리할 수 있습니다. 💁♂️싱글 페이지 어플리케이션(SPA)이란? 싱글 페이지 어플리케이션이란 우리가 기본적으로 알고있는 어플리케이..
![Vue.js 컴포넌트: Props, Emit, Event Bus를 활용한 통신 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRhMbc%2FbtseGCYVQD6%2F4oQieNk3ww3Is0SePVebTK%2Fimg.png)
Vue.js 컴포넌트: Props, Emit, Event Bus를 활용한 통신 방법
Vue 컴포넌트 컴포넌트 Vue 어플리케이션에서 코드를 재사용할 수 있는 기본 단위입니다. 각각의 컴포넌트는 특정한기능과 템플릿을 갖고, 데이터와 메서드를 정의하여 독립적으로 동작할 수 있습니다. 컴포넌트를 이용하면 HTML 요소들을 확장하고 화면을 구조화함으로 코드를 캡슐화하여 재사용 및 유지보수를 용이하게 해줍니다. Vue 컴포넌트 작성 {{ title }} {{ count }} Count 증가 Vue 컴포넌트 등록 전역 등록 main.js: import Vue from 'vue'; import GlobalComponent from './components/GlobalComponent.vue'; Vue.component('global-component', GlobalComponent); new Vue..
![Vue.js 뷰 인스턴스와 인스턴스 라이프 사이클](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx0uhZ%2FbtseG4UP6lW%2FwlBnvygpL9smnoRzi0pQIk%2Fimg.png)
Vue.js 뷰 인스턴스와 인스턴스 라이프 사이클
Vue 인스턴스 Vue 어플리케이션을 개발하기 위해 Vue 인스턴스를 생성하여 적용합니다. {{ message }} Vue.js에서 인스턴스를 생성할 때, data 옵션을 사용하여 데이터를 정의할 수 있습니다. 이때, data 옵션을 정의하는 방식은 두 가지가 있습니다. data: {} 위 예제처럼 객체 리터럴을 사용하여 data 객체를 정의하는 방식입니다. 이 방식은 객체 안에 정의된 프로퍼티가 Vue.js의 반응성 시스템에 등록되어, 해당 프로퍼티가 변경될 때마다 화면이 자동으로 업데이트 됩니다. data() { return {} } data 옵션을 함수 형태로 정의하는 방식입니다. 이때 함수는 객체를 반환해야 하고, 이 객체 안에 정의된 프로퍼티 역시 Vue.js의 반응성 시스템에 등록됩니다. 차이..
![JS Fetch API를 이용한 Ajax 통신](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDZn7n%2FbtsiBNwl6gB%2F13cInZI5wXkVZjMwizWcK1%2Fimg.png)
JS Fetch API를 이용한 Ajax 통신
Fetch API 방식 이용한 Ajax Ajax는 정통적으로 XMLHttpRequest() 객체를 사용하여 서버와 데이터를 교환합니다. 하지만 이 방식은 코드가 복잡하고 가독성이 좋지 않아 최신 기술인 fetch() 메서드를 통해 Ajax 통신하는 법에 대해 포스팅하겠습니다. Fetch API 사용 장점 Fetch API는 Promise 기반으로 구성되어 있어 비동기 처리 방식에 적합한 형태입니다. 체이닝 방식으로 작성 가능하기 때문에 가독성이 좋습니다. Fetch API는 JavaScript 기본 기능이기 때문에 JQuery 같은 라이브러리를 가져다 쓰지 않기 때문에 가볍습니다. Fetch 문법 사용법 fetch("URL", option) .then((response) => response.text()..
![JS AJAX ( Asynchronous JavaScript And XML )](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtHDVl%2FbtsiOjtYFhm%2FneWKVpWiXjilrj33W42aCK%2Fimg.png)
JS AJAX ( Asynchronous JavaScript And XML )
AJAX: Asynchronous JavaScript And XML AJAX는 Javascript와 XML을 이용한 비동기적 정보 교환 기법입니다. AJAX를 이용함으로 사용자가 서버에 자료를 요청할 때 화면 전환 없이 요청한 자료를 받을 수 있습니다. 또한 사용자가 기다릴 필요 없이 다른 작업을 바로 수행할 수 있습니다. Ajax 기초 메서드 종류 설명 load() (데이터를 전송하여) 외부 콘텐츠를 가져올 때 사용 $.ajax() 데이터를 서버에 HTTP POST, GET방식으로 전송할 수 있음. HTML, XML, JSON, 텍스트 유형에 데이터를 요청할 수 있음. $.post(), $.get(), $.getJSON() 메소드의 기능을 하나로 합쳐 놓은 통합적인 메서드. $.post() 데이터를 서..
![JS JSON: JavaScript Object Notion](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWj7ob%2FbtsiFP8n4n9%2Fzm1hg69l0k5QDHZOYBuYgk%2Fimg.png)
JS JSON: JavaScript Object Notion
JSON: JavaScript Object Notion JavaScript 객체 표기법으로 작성된 텍스트 기반의 방식입니다. JSON은 쉽게 읽고 작성할 수 있고, 소프트웨어에서 파싱 및 생성하기도 쉽습니다. 때문에 주로 컴퓨터간 데이터 교환 형식으로 쓰입니다. JSON 표기법 {}로 데이터를 묶고 key: value로 구성 데이터는 ,로 구분합니다. {중괄호}는 객체를 구성 [대괄호]는 배열을 구성 // 예제 1 '{"name":"kim", "age":25, "address":null}' // 예제 2 { "students":[ {"name":"kim", "age":25}, {"name":"lee", "age":30}, {"name":"choo", "age":18} ] } JSON ↔ JS 객체 파싱 ..
![JS JQuery ( + JQuery 사용 방법 )](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq0q9T%2FbtsiNwAn8KZ%2FhgXgunfMA3Wt8eYMusSwzk%2Fimg.png)
JS JQuery ( + JQuery 사용 방법 )
사실 JQuery가 무거워서 일를 사용하기 보다는 기존 JS를 이용하여 개발을 하는 것이 더욱 좋은 퍼포먼스를 낼 수 있다는 말도 있습니다. 실제로 프로트엔트 커리큘럼 한 자료에서는 JQuery가 빠졌을 정도로 대체가 가능하지만 그래도 아직은 사용하는 곳이 많은거 같기 때문에 간단하게라도 봐보도록 하겠습니다. JQuery JQuery란 화면의 동적 기능을 JS(자바스크립트)보다 쉽게 개발할 수 있게 해주는 JS 기반 라이브러리입니다. DOM과 이벤트 객체는 브라우저 종류가 다를 경우 다른 결과 값을 나타낼 수 있다는 단점이 있습니다. 이런 호환성 문제는 JQuery를 이용함으로 해결되었습니다. 호환성 문제만이 아니라 JQuery는 다양한 애니메이션과 효과를 지원하는 메서드를 지원하기 때문에 개발 시간을 ..
![JS Web API ( storage, fetch, geolocation )](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwk8LO%2FbtsiFDtpuqy%2Fp4caWqiCFWtY1CIsQYjF5k%2Fimg.png)
JS Web API ( storage, fetch, geolocation )
Storage API Web Storage API는 브라우저에서 Key-Value 구조 데이터로 저장하고 검색하기 위한 방법을 제공합니다. window.localStorage 특정 웹사이트의 로컬 저장소에 대한 접근을 제공 해당 도메인에 대한 데이터를 저장, 읽기, 수정, 삭제 할 수 있습니다. 데이터는 만료일이 없이 저장되어 브라우저를 닫아도 삭제되지 않습니다. localStorage.setItem("name", "Kim"); // 저장소에 데이터 저장 localStorage.getItem("name"); // 저장소에서 데이터 항목 검색 window.sessionStorage localStorage 객체와 세션에 저장한다는 차이점만 빼면 똑같습니다. 세션에 저장하기 때문에 브라우저를 닫으면 데이터가 ..