Too many connections 개발을 하다 보면 여러 서버를 만들어서 데이터베이스에 접근하게 됩니다. 하지만 다음과 같은 에러를 마주하면 최대 접속 숫자를 늘려줘야 합니다. # ERROR 1040 (08004): Too many connections # Host 192.168.0.X Host is blocked because of many connection errors MySQL ▼ max_connecions 값을 확인합니다. 동시접속에 대한 값입니다. 기본값은 보통 151로 지정되어 있습니다. ▼ 다음 명령을 통해 현재 접속 중인 커넥션을 확인할 수 있습니다. ▼ 이제 max_connections 숫자를 변경해보겠습니다. 별도로 서버를 재시작하지 않더라도 잘 동작합니다만 만약 MySQL 서버를..
CustomStringConvertible Swift 언어에는 다음과 같이 CustomStringConvertible 이라는 프로토콜이 있습니다. 친절하게도 코드 안을 살펴보면 간단한 사용법을 예시로 보여줍니다. 일반 언어에서 toString 과 같은 기능을 구현할 수 있습니다. ▼ 다음은 CustomStringConvertible 프로토콜 입니다. ▼ 우선 Point 라는 struct 를 하나 정의합니다. ▼ Point의 extension을 새로 만들어서 CustomStringConvertible를 구현합니다. description을 재정의합니다. ▼ 이제 출력해보겠습니다. ▼ 결과는 다음과 같습니다. CustomStringConvertible 프로토콜을 구현하면 원하는 형태로 출력문을 재정의 할 수 ..
Homebrew M1 설치 맥을 사용해서 패키지나 프로그램을 설치하려면 가장 필수적인 프로그램으로 Homebrew를 꼽을 수 있습니다. 이전에 기타 패키지 매니저들이 있었는데 저도 지금은 Homebrew만 사용합니다. 하지만 최근 Homebrew를 설치하면서 brew를 설치하면 없는 프로그램이라고 나오더군요. 알고 보니 Homebrew가 애플 실리콘 맥 (M1)이 출시된 이후로 지원하는 버전이 달라졌습니다. 기존에는 지원을 하지 않아서 로제타 등을 사용해서 설치했었나 봅니다. 컴퓨터를 여러 대 사용하다 보니 매번 설치하는 것을 까먹게 되어서 이번에 정리해보려고 합니다. https://brew.sh/index_ko Homebrew The Missing Package Manager for macOS (or ..
VStack, HStack, ZStack UIKit을 사용해서 개발을 할 때에도 Stack은 매우 유용하게 사용됩니다. 오토레이아웃을 사용하든 SnapKit을 사용하던 반드시는 아니지만 Stack을 사용하면 편리하게 UI 레이아웃을 만들 수 있습니다. 하지만 SwiftUI 개발을 하게 되면 Stack을 빈번하게 사용합니다. 특히 직관적이고 레이아웃을 바로 변경하는 모습을 볼 수 있어서 쉽게 레이아웃 구성이 가능합니다. 레이아웃의 가장 기본적인 형태인 Stack에 대해서 알아보겠습니다. ▼ 두 개의 Rectagle을 만들고 VStack으로 감싸면 다음과 같이 정중앙에 2개의 박스를 볼 수 있습니다. ▼ 마찬가지로 VStack 대신에 HStack을 사용하면 다음과 같이 가로로 배치된 UI를 볼 수 있습니다...
MySQL 터미널 PATH 설정 ▼ macOS에서 MySQL 을 설치한 뒤에 mysql 설치 경로를 확인해보면 다음과 같습니다. 그래서 mysql 명령을 실행할 수 없습니다. 따로 PATH를 설정해줘야 합니다. 최근에는 맥북에서 zsh를 기본적으로 사용되도록 변경되었기 때문에 .zshrc 파일을 수정해서 적용해야 합니다. /usr/local/mysql/bin/mysql ▼ 시스템 환경설정으로 이동해서 MySQL 설정을 선택합니다. 만약 프로그램이 설치되어 있지 않다면 다음 글을 확인해서 설치부터 해야 합니다. https://code-algo.tistory.com/29?category=950577 [MySQL] 실리콘 M1 맥에 MySQL 커뮤니티 버전 설치 및 비밀번호 설정 MySQL 커뮤니티 버전 My..
테이블 추가 DATA DEFINITION LANGUAGE (DDL)은 데이터베이스 테이블을 정의하기 위한 언어입니다. 데이터베이스는 여러 개의 테이블로 이루어져 있는 만큼 테이블 추가와 변경 삭제는 중요합니다. DDL은 테이블 구조를 변경하거나 새로 만들고 또 삭제할 수 있는 언어를 말합니다. MySQL에서 실제 테이블을 삭제하고 수정 삭제를 해보겠습니다. ▼ 테이블 생성 (Create)을 하려면 다음과 같이 컬럼들을 나열하고 기본키 설정 및 기본값 설정을 해줘야 합니다. 다양한 데이터 타입이 있는데 다른 글에서 따로 정리해보도록 하겠습니다. 또한 NOT NULL은 컬럼에 NULL 값 즉 빈 값을 넣을 수 없다는 의미가 됩니다. ▼ 다음은 예문입니다. 새로운 employees 데이터베이스를 생성하고 프라..
스위프트 UI 토글 스위치 SwiftUI에서 많이 사용하는 스위치와 토글 버튼에 대해서 알아보겠습니다. UIKit에서도 설정과 같은 곳에서 많이 쓰이는 토글 스위치는 스위프트 UI에서 정말 간단하게 사용하고 바인딩된 값도 손쉽게 알 수 있습니다. 때문에 이전에 UIKit을 통한 아이폰 개발보다 훨씬 편리할 것 같습니다. 스위프트 UI에서는 총 3가지 토글 버튼 스타일을 구현할 수 있습니다. 버튼 체크박스 (macOS 전용) 스위치 ▼ 간단하게 토글 스위치를 추가해봤습니다. Toggle 안에 Label을 넣어서 표현할 수 있습니다. padding()을 주어서 여백을 주었습니다. ▼ 다음은 위에 코드에서 토글 스타일만 버튼(.button)으로 변경한 경우입니다. On/Off 할 수 있는 버튼을 만들 수 있습..
리눅스 Date 명령어 (출력하기) 리눅스에서 Date 명령을 잘 활용하면 다양한 아이디어를 얻을 수 있습니다. 지금 무슨 분기 인지? 몇 주째 되는지 등등 고려해서 스크립트 등을 만들 수 있습니다. 그럼 간단한 사용법을 알아보겠습니다. ▼ 기본적으로 현재 날짜를 출력하는 방법입니다. ▼ 다음은 년도만 출력합니다. ▼ 연도의 뒷자리 2글자만 표현하려면 소문자 y를 사용합니다. 명령 대부분이 대문자, 소문자에 따라 달라집니다. ▼ 시간만 나타내려면 다음과 같이 T 문자를 사용합니다. ▼ 그 밖에 다양한 옵션들입니다. ▼ 위의 명령어중 예를 들어 현재 타임존을 알고 싶다면 다음과 같이 Z를 입력합니다. 그리고 ' ' 구문 안에 여러 리터럴들을 추가할 수 있습니다. 리눅스 Date 명령어 (수정하기) ▼ 이제..
▼ 다음과 같이 Person 데이터 구조체와 staff 라는 Person 배열을 생성합니다. 그리고 view에 ForEach 구문을 통해서 리스트를 표현해줍니다. 그럼 간단한 리스트를 확인할 수 있습니다. ▼ 이제 VStack와 HStack을 이용해서 이름뿐만 아니라 전화번호 그리고 전화기 모양의 아이콘을 리스트로 표현합니다. 그밖에 옵션으로 텍스트 색상과 폰트를 설정해줍니다. ▼ 위의 코드도 잘 동작하긴 하지만 view 안쪽에 많은 코드가 들어가서 보기가 좋지 않습니다. 다음과 같이 PersonRowView 라는 해당 Row를 표현하는 새로운 뷰를 만들어줍니다. ▼ 이제 뷰를 재사용해서 좀 더 단순하게 표현할 수 있습니다. ▼ List에 그룹을 만들어보겠습니다. 우선 더 이상 staff 배열은 사용하지..
앱 시스템 설정 이동 iOS 앱을 개발하다보면 설정으로 이동할 일이 있습니다. 페이스 아이디를 켜주세요. 카메라 사진 권한을 허용해주세요. 등등 사용자가 확인하지 못한 부분을 개발자가 설정 페이지로 이동시켜서 유도하는 방법인데 prefs 값을 사용해서 이동 시킬 때 다음과 같은 애플의 리젝 메시지를 받을 수 있습니다. 이는 프라이빗 API를 사용에서 문제가 되는 겁니다. 때문에 prefs 로 열지 말고 UIApplication.openSettingsURLString 를 통해서 열어줍니다. Guideline 2.5.1 - Performance - Software Requirements Your app uses the "prefs:root=" non-public URL scheme, which is a pr..
SwiftGen 다국어 처리 저번에 스위프트에서 SwiftGen을 이용해 리소스 관리하는 방법을 알아보았습니다. 오늘은 리소스 관리뿐만 아니라 다국어 처리도 아주 간단하게 처리하는 방법에 대해서 알아보겠습니다. 기회가 되면 plist 정보도 제네레이트 시키는 방법을 알아보고 싶네요. 리소스만큼이나 다국어도 아주 깔끔하게 처리되는 것을 보고 만족하게 되었습니다. 정말 누가 만들었는지 잘 만들었네요. 만약 SwiftGen의 정의나 링크 주소를 알고 싶다면 다음 글을 참조해주세요. https://code-algo.tistory.com/49 [Swift] SwiftGen 스위프트 리소스 관리 사용 방법 SwiftGen 이란? 스위프트를 사용해서 앱을 만들다 보면 리소스 관리가 안드로이드에 비해서 훨씬 복잡하고 ..
인덱스 개념 인덱스란 SELECT 구문을 사용할 때 조회되는 속도를 높이기 위해서 특정 컬럼의 데이터를 말 그대로 인덱싱 하는 기술을 의미합니다. 책을 읽을 때 맨 뒤쪽에 색인(Index) 부분을 떠올리시면 좋을 것 같습니다. 만약 어떤 책에서 특정 단어를 포함한 내용을 눈으로만 찾으려면 정말 오래 걸릴 겁니다. 하지만 색인 부분에서 특정 페이지를 찾고 해당 부분을 찾는 다면 훨씬 빨리 찾을 수 있습니다. 물론 컴퓨터는 색인이 되어 있지 않아도 빨리 찾을 수 있지만 특정 자원을 활용하기 위해서는 반드시 인덱스를 사용하고 효율적으로 데이터를 찾아서 반환하는 게 중요합니다. 인덱스 키의 종류 프라이머리 키 : 보통 테이블 생성 시 기본 적으로 만들게 되는 기본키입니다. 키 이름이 없는 것이 특징이고 가장 빠..