JacksonJang's Blog

「 배움의 끝은 없다 」

[Spring Boot] 스프링부트 2.x 이제 퇴물이다!

"Spring Boot doesn't support 2.x"

스프링부트 2.x 이제 퇴물이다! 요약 다음과 같은 스펙을 사용하자 JDK 17 이상 Tomcat 10.x 이상 Gradle 7.5 이상 시작 안녕하세요. 다소 제목이 자극적이게 느껴질 수도 있겠지만, 시대가 빠르게 변화하면서 스프링부트도 빠르게 변화하고 있습니다. 보통 일반적인 경우로 스프링부트 2.7 버전을 많이 사용...

[CS] MVC vs MVVM 패턴

"What difference between MVC and MVVM"

iOS 기준으로 Swift 언어를 사용해서 간단히 설명하겠습니다. 개요 제가 개발을 시작했었을 때, 처음 배웠던 아키텍처 패턴으로 MVC를 배웠었습니다. 아키텍처 패턴 중에서 제일 유명한 패턴으로 소프트웨어 개발에서 사용되고 있습니다. 하지만, 모바일 OS에서는 MVC를 대신해서 MVVM이 대중적으로 자리를 잡았습니다. 그렇지만 우리가 ...

[Linux] sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set 에러 해결법

"How to solve sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set?"

Ubuntu 20 버전을 사용하고 있습니다. 난 오늘 실수로 sudo chmod 777 /usr/bin/ 을 통해 sudo 권한을 강제로 바꿔버려서 제목과 같은 에러를 겪어 버렸습니다.. 매우매우 치명적인 실수라 처음부터 다시 설치할까 싶었지만, 이 에러를 해결할 수 있을까 라는 생각이 들어서 직접 해결해 보기로 했습니다. 방법을 찾아보니 ...

[Linux] openssh-server 란?

"What's the openssh-server?'"

Ubuntu 20 버전 기준으로 작성되었습니다. 요즘 회사 홈페이지 제작을 하면서 서버 세팅이 필요한 일이 생겼다. 그래서 오늘 회사에서 데스크톱을 이용해서 공용으로 사용할 서버 컴퓨터를 사용하기 위해 서버 구축을 진행하게 되었다. AWS나 NHN Cloud를 사용해도 되었지만, 내부 개발 사이트용으로만 사용할 것이라 이런 방식으로 진행했습...

[SQL] 프로시저 란?

"What's the procedure?"

MySQL 8 버전 기준으로 작성되었습니다. Procedure 란? 어떤 업무를 수행하기 위한 절차를 의미한다. 위에처럼 요약할 수 있지만 설명이 부진하다고 생각해서 추가적으로 설명하겠습니다. 데이터베이스에서 실행할 수 있는 하나 이상의 SQL 문을 모아 놓은 것이며, 복잡한 작업을 하나의 블록으로 캡슐화한 것을 의미합니다. 즉...

[iOS] ITMS-91053: Missing api 해결법 (2024년 5월 1일부터 시행)

"Describing use of required reason API"

매우 귀찮은 작업임이 분명하다 앱을 심사 받으려고 하니까, ITMS-91053: Missing api declaration의 장문 메일이 왔었습니다. 애플의 문서 내용 중 일부 1 If you upload an app to App Store Connect that uses required reason API without describi...

[iOS] Localization 사용해서 글로벌 앱 만들기

"Using Localization to make a global app"

Xcode 15 이상에서는 문자열 카탈로그가 문자열을 현지화하는 데 권장되는 방법입니다. (애플 문서 내용 중 일부) Localization 기능은 글로벌 앱을 만들기 위해서 필수적으로 존재해야 하는 중요한 기능입니다. 오늘은 Xcode 15 이상에서 사용할 수 있는 stringsdict 와 이전부터 전통적으로 사용해왔던 strings의 사...

[iOS] SceneDelegate 란?

"What's the SceneDelegate?"

iOS 12에서의 AppDelegate 기존 iOS 12에서는 아래와 같이 AppDelegate에서 Process Lifecycle과 UI Lifecycle을 모두 담당 했습니다. 즉, 앱의 시작부터 종료까지 모든 생명주기를 담당 했는데… iOS 13에서는 AppDelegate도 분업이라는 것을 하기 시작합니다. AppDelegate에 대한 설명...

[Vue.js] Vue.js 기초(4) - watch, nextTick

"Vue.js watch, nextTick"

watch 데이터의 변화를 감지하고, 그에 반응하여 특정 로직을 실행할 때 사용됩니다. newValue는 변경되는 값, oldValue는 변경전 값이 호출됩니다. $nextTick $nextTick은 데이터 변경에 따른 DOM의 업데이트가 완료된 바로 그 시점에 원하는 코드를 안전하게 실행할 수 있습니다. 예시 코드 1 2 3 4 5 6 ...

[iOS] layoutIfNeeded() 알아보기

"Learn about layoutIfNeeded()"

layoutIfNeeded() Lays out the subviews immediately, if layout updates are pending. 해석하자면, 레이아웃 업데이트가 대기중이라면, 서브뷰를 즉시 배치합니다. layoutIfNeeded()는 시스템이 자동으로 레이아웃을 업데이트하는 다음 주기를 기다리지 않고, 호출된 시점에 레이아웃을 ...