Visual Studio Code 명령 팔레트 종종 파일을 실행하거나 만들때 에디터를 사용하고 싶을때가 있습니다. 특히나 가벼운 툴로 열고 싶을 때가 많습니다. 엉뚱한 프로그램으로 파일이 열릴 때도 있고 또는 터미널에서 실행할 때는 Vim 과 같은 프로그램을 쓰지만 이 또한 불편할 때가 있습니다. 그래서 오늘은 터미널에서 쉽게 가벼운 에디터로 텍스트 파일이나 수정 파일을 열 수 있는 방법을 소개 해드리겠습니다. ▼ 1. 처음 Visual Studio Code를 실행시키면 다음과 같은 화면을 볼 수 있습니다. ▼ 2. Command + P 버튼을 눌러서 명령 팔레트를 실행시킵니다. 그리고 shell 이라고 입력한뒤 엔터를 눌러줍니다. ▼ 3. 이제 Code에서 스크립트를 사용할 수 있는 권한을 묻게 됩니..
리눅스 표준 스트림 유닉스 및 유닉스 계열 운영 체제에서 프로그램(프로세스)과 환경(주변기기) 사이에 미리 연결된 입출력 통로 파일 디스크립터 유닉스에서는 모든 개체를 파일로 관리하며, 프로그램(프로세스)가 파일에 접근하기 위해서 특정 파일의 디스크립터를 이용해 파일에 접근합니다. 셀은 입력과 출력을 위한 세 가지 기본 파일 디스크립터 (File Descriptor - 이하 FD)를 모든 프로세스에 제공합니다. 입력(스트림), 출력(스트림) 줄여서 I/O라고 칭합니다. stdin (FD 0) - 키보드 입력 stdout (FD 1) - 화면 stderr (FD 2) - 오류 실제 /dev 디렉토리를 확인하면 다음과 같이 파일 디스크립터를 파일 형태로 가지고 있는 것을 볼 수 있습니다. 유닉스(Unix)는..
1. 특정 파일을 무시 # DB 접속 파일을 제외 mysql.php 2. 모든 세팅 파일을 무시 # 애스터리스크 (*) 기호를 사용하여 패턴을 정의할 수 있다. # 이런 문자를 셸 글로빙(globbing)이라고 합니다. *.ini 3. 제외하면 안되는 파일 설정 # 설정 파일은 제외하면 안 됨 !mysql.conf 4. .gitginore와 동일한 위치의 파일에 대한 설정 # 현재 디렉터리 안에 있는 파일 무시 /my.txt 5. /my/ 디렉터리 안의 모든 것을 무시 # /my/ 디렉터리 안의 모든 것을 무시 /my/ 6. 하위 디렉터리 패턴 파일 무시 # doc 디렉터리 아래의 모든 .txt 파일 무시 doc/**/*.txt
eventChangedNotification 최근에 스위프트 UI 프로젝트를 진행하고 있습니다. 또한 새롭게 나온 SwiftData 를 적용하면서 여러가지 문제를 해결해 가고 있던 중 CloudKit 동기화까지 진행하게 되었습니다. SwiftData 가 효율적이고 좋은 것은 맞는 것 같지만 너무 자료가 없고 사용자체가 너무 추상화 되어 있기 때문에 세세한 컨트롤이 좀 어렵다고 생각합니다. 물론 제가 그걸 몰라서 그렇긴 하겠지만요. 첫 번째 난관이 Cloud 킷의 로드 완료 이벤트를 알고 싶었는데 해결이 되서 블로그에 남깁니다. ▼ 우선 이벤트 수신을 위해서 @State 로 다음 변수를 선언합니다. eventChangedNotification 는 이벤트가 변경될 때 마다 수신하게 됩니다. @State pr..
~ tilde * asterisk, star ' apostrophe, qutation mark, quote ` backtick, grave accent - hyphen, dash " double qutation mark, double quoutes ! exclamation _ underscore , comma @ at + plus sign . dot # number sign, hash, sharp = equals sign / slash $ Dollar sign | vertical bar, pipe () round bracket, parentheses % percent \ backslash {} culry braket, brace ^ caret ; semicolon [] square bracket & am..
처음 스위프트 UI를 사용하면 죄다 Struct로 구성되는 것을 보고 조금 익숙하지 않을 수 있습니다. 그러나 계속 공부를 하다 보면 왜 그런지 알게 되는데 그 이유를 5가지로 정리해 보겠습니다. struct ContentView: View { @State private var count = 0 var body: some View { VStack { Text("Hello") } } } 1. Struct는 단순합니다. 일단 스트럭트는 클래스에 비해 가볍습니다. 그리고 구조자체가 단순합니다. 이는 값타입이기 때문에 복사도 쉽고 참조타입인 클래스보다 메모리에도 사용에도 유리합니다. 이는 성능에 영향을 주고 아무래도 스토리보드나 xib로 만들어진 커다란 객체 덩어리 보다 훨씬 가볍고 구조적으로 UI를 만들 수 ..
스위프트 UI를 하면서 느끼는 장단점이 많이 있지만 최대의 장점을 꼽으라면 아마도 프리뷰로 개발 화면을 실시간으로 확인할 수 있다는 점일 것 같습니다. 프로젝트가 점점 커질 수록 빌드해서 확인하는 시간이 늘어나기 마련인데 스위프트 UI로 아직까지 커다란 프로젝트를 진행해본적이 없어서 모르겠으나 화면 개발에 있어서 Preview는 정말 유용한 것은 사실입니다. 그런데 다른 컴퓨터 환경에서 코드를 받아 진행하려고 하면 프리뷰 크래시가 많이 일어나는 것을 확인할 수 있습니다. 코드에 문제로 크래쉬가 일어날 수도 있지만 때로는 원인을 알 수 없이 문제가 생기는 경우도 있습니다. 보통 뷰 모델을 사용해서 작업하면서 데이터를 프리뷰에 제대로 전달하지 않아서 발생하는 문제는 작업자의 문제이니 그 밖에 해결 방법을 알..
스위프트 UI 버튼 비 활성화 스위프트 UI 에서 버튼을 비 활성화는 disabled(_:) modifier를 사용해 변경할 수 있습니다. boolean 값을 가지며 true 일 경우 disabled 상태가 되며 반대인 false 일 때는 enabled 상태가 됩니다. (false 값이 기본값) 비 활성일 경우 버튼의 색상이 Gray 색으로 변경됩니다. var body: some View { VStack { Button("비 활성 버튼") { } .disabled(true) Button("활성 버튼") { } .disabled(false) } .font(.title) } 활용 예제 다음 예제에서는 두 개의 컨트롤이 있습니다. TextField 에 값이 비어 있다면 그 값을 참조하는 name을 바인딩 한 ..
배열에 배열을 추가하는 방법은 총 3가지가 있으며 선호하는 방식으로 사용할 수 있습니다. 우선 테스트를 위한 배열 2개를 만들어보겠습니다. 주의 하실 것은 첫번째 배열의 경우 mutable로 선언했다는 것입니다. 그래서 두번째 배열을 병합할 수 있습니다. var first = ["서울", "부산"] let second = ["경기", "대전"] 1. 첫번째로 append(contentsOf:) 메서드를 이용해서 이 둘을 병합할 수 있습니다. first.append(constentsOf: second) 2. 두번째로 += 연산자로 두 배열을 병합할 수 있습니다. first += second 3. 마지막으로 이 두 배열을 + 연산자로 더해서 다른 변수에 할당할 수 있습니다. let third = first ..
코틀린을 스프링 부트 프로젝트를 사용할 때 QueryDSL을 사용할 떄 2.x 와 조금 다른 부분이 있어 정리합니다. ▼ QueryDSL 플러그인 설정을 해줍니다. plugins { id("org.springframework.boot") version "3.0.6" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version "1.7.22" kotlin("plugin.spring") version "1.7.22" // querydsl kotlin("plugin.jpa") version "1.8.21" kotlin("plugin.allopen") version "1.8.21" kotlin("kapt") version "1.8.21"..
SELECT 문 SELECT 문은 데이터베이스에서 데이터를 검색할 때 사용하는 SQL의 가장 기본적인 쿼리입니다. 조회를 위한 명령어의 구조는 다음과 같습니다, --모든 열을 포함한 조회 SELECT * FROM 테이블명; --조회할 열이름을 나열 SELECT 열1, 열2 FROM 테이블이름; 기본적인 SELECT 문 가장 기본적인 형태의 SELECT 문은 * 를 이용해 모든 열(컬럼)을 선택하는 방법입니다. SELECT * FROM students; 특정 열(컬럼)을 선택하는 SELECT 문 특정 열을 선택해서 모든 열이 노출되지 않고 필요한 열만 검색할 때 사용합니다. 보통 SELECT 문을 만들 때는 모든 열이 필요하지 않으므로 특정 열만 선택해서 검색하는 것이 일반적입니다. SELECT stude..
INSERT 문 MySQL에서 INSERT 문은 Database에 새로운 행(레코드)를 추가하는 구문입니다. 데이터베이스에 값을 입력하는 기능을 하는 문장 정도로 생각하시면 됩니다. INSERT 구문의 기본적인 형태는 다음과 같습니다. 테이블명에 데이터를 삽입하기 위한 테이블을 기입하고 각 컬럽과 이에 대응하는 값을 VALUES 에 나열하면 됩니다. INSERT INTO 테이블명 (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); INSERT 문 예제 학생이라는 테이블이 있고 학생의 이름, 나이, 이메일을 삽입하는 예제를 만들어보겠습니다. INSERT INTO students (name, email, age) VALUES ('장발..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.