Loerm Ipsum 최근에는 다국어 서비스를 하는 앱들을 많들게 됩니다. 아무래도 국내 서비스를 하는 것 보다 다양한 국가에 서비스를 하는 것이 훨씬 효율적이기도 하기 때문이죠. 하지만 번역과 디자인에 여러가지 힘든 부분이 있는 것이 사실입니다. 다국어 앱은 앱 구조도 조금 더 복잡해지는 것이 사실입니다. 이러한 부분은 프로토타입을 잡을 때도 고려해야 하는 부분이 되어버렸습니다. 이 때 유용하게 사용할 사이트를 소개해드리겠습니다. https://www.lipsum.com/ Lorem Ipsum - All the facts - Lipsum generator What is Lorem Ipsum? Lorem Ipsum is simply dummy text of the printing and typesetti..
Lottie Animation ▼ 모바일 개발시 많이 사용되는 Lottie 애니메이션을 SwiftUI에서 구현하는 방법을 알아보겠습니다. 우선 새로운 패키지를 추가하기 위해서 로티를 사용하기 위해서 다음 주소를 복사합니다. (Swift Package를 사용하지 않고 CocoaPods을 사용해도 됩니다.) https://github.com/airbnb/lottie-ios.git ▼ Xcode의 File -> Add Packages... 메뉴를 통해 새로운 패키지를 추가합니다. ▼ 우측 상단에 검색창에 복사한 주소를 넣고 엔터를 치면 lottie-ios 패키지를 찾을 수 있습니다. 우측 하단에 Add Package 버튼을 눌러 패키지를 추가합니다. ▼ 로티 애니메이션 이미지를 다운로드 받습니다. 해당 서비스..
JPQL 특정 속성 조회 JPQL 을 사용할 때 select 절에 선택한 대상이 두 개 이상일 때 결과 타입은 Object 배열이 됩니다. select 결과가 Object 배열이므로 getResultList() 메서드가 리턴한 List에 담긴 데이터도 Object 배열입니다. JPQL 특정 객체로 속성 조회 Object 배열을 사용해서 데이터를 조회하면 형변환이 필요하며 해당 객체를 사용하기 불편해집니다. 그래서 클래스를 만들어 새로운 객체에 대입하면 조회시 해당 클래스에 맞게 객체가 생성됩니다. 우선 다음과 같이 조회될 객체에서 필요한 속성을 포함한 클래스를 선언합니다. select 구분에 새로운 객체를 할당하고 데이터를 조회합니다.
systemctl 우분투를 Docker 컨테이너로 만들어서 사용하면 몇가지 문제점이 있습니다. 그중에서도 불편한 것은 systemctl 명령이 동작하지 않는 점인데요. 매번 설치해주는 것 보다 Dockerfile을 만들고 이미지를 만들어 놓고 사용하는것이 편리합니다. ▼ Docker 파일 생성 ▼ Docker 빌드 ▼ 컨테이너를 생성하고 접속합니다.
ALTER TABLE MySQL에서 RENAME 명령은 테이블의 이름을 변경하는 명령어입니다. 다수의 테이블 명을 변경하는 것은 물론 다른 데이터베이스 스키마에 특정 테이블을 이동시킬 수도 있습니다. ALTER로 테이블을 변경하는 것과 RENAME으로 변경하는 것은 동일하지만 RENAME으로 변경할 시 여러 개의 테이블을 한 번에 변경할 수 있고 또한 다른 스키마에 테이블을 이동시킬 수도 있는 장점이 있습니다. ▼ 우선 ALTER를 이용해서 테이블 이름을 변경시켜보겠습니다. (예: shopdb 데이터베이스의 dept 테이블을 emp 테이블로 변경해보겠습니다.) ALTER는 테이블의 정의를 변경하는 명령으로 이전 글 데이터베이스 기초 - 테이블(Table) 정의에 정리되어 있습니다. https://code..
스키마 생성 ▼ 새로운 스키마(데이터베이스)를 생성합니다. 사용자 관리 ▼ 사용자를 생성하고 권한을 부여합니다. ▼ 사용자의 비밀번호를 변경합니다. ▼ 사용자를 삭제합나다. ▼ 사용자의 권한 정보를 확인합니다. 사용자 관리 실습 ▼ 마지막으로 다음 조건에서 사용자를 생성하고 권한을 부여해보겠습니다. manager 계정을 만듭니다. IP 주소 (HOST) 192.168.0.77 에서 접근합니다. mydb에 모든 데이터베이스 권한을 부여합니다. 비밀번호를 paasword12 로 지정합니다. ▼ 해당 사용자가 데이터베이스에 추가되었는지 확인합니다.
randomColor 스위프트를 이용해 아이폰 개발을 하다보면 간혹 UIColor를 랜덤으로 사용해야할 경우가 있습니다. 다음과 같은 익스텐션을 만들고 쉽게 사용이 가능합니다. 원리는 간단합니다. CGFloat의 random함수를 이용해 0부터 1 사이의 값을 새로운 UIColor 객체를 만들 때 사용합니다. 우선 새로운 UIColor 익스텐션(extension)을 만듭니다. 그리고 randomColor 라는 함수를 만듭니다. randomAlpha 라는 Boolean 값이 있는데 이는 난수를 발생시킬때 Alpha 값에 대해서도 포함 할지를 나타냅니다. 기본값은 false 입니다. 다음과 같이 사용할 수 있습니다. vc.view.backgroundColor = UIColor.randomColor() // ..
ZonedDateTime LocalDateTIme, ZonedDateTime은 java.time 패키지의 API로 자바 8 부터 추가되어 날짜 및 시간을 간단히 처리할 수 있습니다. 그중에 ZonedDateTime은 시간대를 정보를 포함하는 객체로 LocalDateTime 보다 다국어 처리에 용의합니다. ▼ 전체 ZoneId 목록을 가져옵니다. ZoneDateTime을 만들기 위해서는 ZoneId 가 필요합니다. 예를 들어 서울의 경우 Asia/Seoul 이 ZoneId가 됩니다. Asia/Aden : 2022-09-29T14:20:41.657715+03:00[Asia/Aden] America/Cuiaba : 2022-09-29T07:20:41.658806-04:00[America/Cuiaba] Etc/..
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를 볼 수 있습니다...