DevLog 498
- Xcode 에서 Info.plist 파일이 없을 때
- Swift: iOS에서 Custom URL Scheme 등록해서 url로 앱 열기
- SwiftUI: 번역 기능 (Translation) 사용하기 (iOS 18 이상)
- Swift: Action Extension에서 extensionContext가 iOS 18에서 작동하지 않는 문제
- Swift: Action Extension으로 사진을 내 앱으로 전송하기
- Swift: @dynamicMemberLookup 사용법 및 @Published 와 결합 가능 여부
- SwiftUI: 목록 행(row) 및 헤더(header) 높이 변경
- Swift: @retroactive 란?
- [펌/번역] Apple의 Liquid Glass 디자인 베타에 대한 피드백
- Swift: some, any 키워드
- SwiftUI: 뷰 작성 Convention #1
- macOS 개발: 내 앱으로 파일 열기 시도 시 실행 불가 문제("확인되지 않은 개발자가 배포함") 해결 과정
- SwiftUI: @Binding을 지원하지 않는 뷰의 강제 리프레시
- Swift UIKit: 테이블 뷰에서 UITextView의 컨텐츠에 따라 높이 자동조정
- Swift UIKit: .translatesAutoresizingMaskIntoConstraints 란 무엇인가?
- Xcode에서 Navigator & Inspector를 숨기거나 보이게 하는 방법, 동시에 토글하는 방법
- SwiftUI: @Observable 동작원리
- Git/GitHub: .gitignore 적용 안될때 / 어멘드(amend)하는 방법 / 오픈소스 라이브러리에 PR(풀 리퀘스트)하는 방법
- Xcode: CocoaPods 프로젝트에서 Build Phase의 Run Script를 이용해 패치 넘버 증가
- macOS 앱 포트폴리오: 플레인 텍스트를 작성/관리할 수 있는 포스트잇 앱 (애플 앱스토어 출시 💻)
- Swift UIKit: 최상위 Top View Controller (현재 화면의 VC) 찾기 / 예제: SwiftUI에서 빠른 Alert 띄우기
- SwiftUI: WKWebView의 UIRepresentableView에서 웹 페이지의 Alert, Confirm, Prompt 표시
- Swift iOS 앱 프로젝트: 버튼을 누르면 iOS에 내장된 사전(dictionary) 열기
- 새로운 음악 학습 앱 출시: Music Interval Quiz Master로 골치아픈 음정 정복!
- SwiftUI: iOS 프로젝트의 Stepper가 My Mac(Designed for iPhone)에서 실행할 때 크래시 발생하는 문제 해결 과정
- Swift 예제: 복잡한 로컬 알림(Local Notification) 구현 (1) - 어학 앱 열기 알림
- Swift UIKit: UIKit을 사용하여 UIMenu에 구분선(divider, separator) 추가하기
- Swift: [ChatGPT가 말하는] 로컬 알림(로컬 노티피케이션) 기능의 한계점과 극복 방안
- [잡담] 이제 개발자에게 있어 구글의 시대는 저물고 ChatGPT의 시대가 도래했음을 느낌
- SwiftUI: 게임 센터(Game Center) 연동
- [자막 번역] WWDC24: Embedded Swift로 경량화하기
- [임베디드] ESP32-C6 맥북 등 macOS에서 빌드 및 동작 테스트 하기
- Swift: Combine 기본 기능 81가지 한 번에 요약 정리
- 코딩테스트: 쿼드트리 (백준 1992) + 쿼드트리로 압축 및 해제하는 과정
- Swift 문법: switch문의 고급 사용법 / if case let 및 for case let
- 애플 디벨로퍼 아카데미 과정에서 했으면 좋았을 것들
- 개발자 과제 테스트 다섯 번 떨어지고 느낀 점
- Swift 예제: iOS 앱에 위젯 추가 및 연동
- Swift UIKit, SwiftUI: AVPlayerViewController에서 재생중인 비디오의 강제 풀스크린 전환 및 반복 재생
- Swift에서 애플 앱 프로그래밍 말고 할 수 있는 것들: 서버, 임베디드, 모바일 크로스플랫폼, 게임 엔진 등
- SwiftUI: Xcode 15 버전 이상에서 iOS 하위 버전 (15.0 이상) 호환되는 위젯 생성
- Xcode iOS 프로젝트: PrivacyInfo.xcprivacy 작성 방법 + API 목록 및 허용된 사유 번역
- Swift: 튜플 (Tuple), 튜플 패턴 분해, 버전 6에서의 변경사항
- SwiftUI: 방사형(원형) 레이아웃 (Radial Layout) 만들기
- 자바스크립트: 오디오 음원의 음정(음높이, 피치) 조절하기 (외부 라이브러리 없이 AudioContext와 Buffer를 이용)
- SwiftUI 예제: 드래그로 버튼 선택하기
- Fastlane 기초: 설치, iOS 프로젝트에서 초기화, 인증, ipa 생성, 테스트플라이트 업로드
- Xcode: 코드 에디터에서 사용할 코드 스니펫(Code Snippet) 추가 및 플레이스홀더 만들기
- 코딩테스트: 쉬운 계단수 (백준 10844)
- SwiftUI 예제: 알파벳 내비게이터(Alphabet Navigator) 만들기
- Swift: PDFView에서 터치한 곳의 문서상 좌표 알아내기
- Swift: iOS 프로젝트의 인앱 결제(In App Purchase; IAP) 기초 예제
- Swift UIKit 예제: 로딩 인디케이터 화면
- Swift: Xcode iOS 프로젝트에서 프레임워크(Framework)로 모듈 분리해서 사용하는 방법
- Swift: UIKIt에서 뷰의 Frame과 Bounds의 차이
- SwiftUI: CoreData와 CloudKit을 이용해 iCloud로 기기간 데이터 동기화 기초
- SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 上
- [코딩테스트 문제] 열려 있는 보관함은 몇 개일까? (백준 13909: 창문 닫기)
- Swift: 약수(divisor) 구하기
- SwiftUI: Combine을 이용해 Debounce, Throttle 구현하기
- SwiftUI: 화살표 모양 그리기 (Shape, Path 사용)
- Swift UIKit: PDFKit에서 PDF 파일의 Annotation 지우개 구현
- SwiftUI: SwiftUI의 View에서 UIRepresentableView(ViewController)에 접근하여 명령을 실행하는 방법
- Swift: 우선 순위 큐 Priority Queue (설명 + 구현)
- Swift: 큐(queue) 구현하기
- SwiftUI: 문서 폴더(Document Directory) 내부의 전체 폴더 구조(tree) 표시 (재귀 사용)
- CSS: 글자를 형광펜으로 칠한 듯한 효과 주기
- Swift 예제: AVFAudio와 사운드폰트 파일을 이용해 미디(MIDI) 파일 재생
- Xcode를 이용해 백준 문제를 Swift 언어로 풀기 및 문제 목록 관리 + 값 입력 받는 방법
- [프로그래머스/레벨1] 최소직사각형 (Swift)
- Swift+AudioKit: SF2 형식의 사운드폰트 추가
- Swift: Combine 개요
- SwiftUI 예제: 아이폰 손전등(Flashlight) 만들기 (카메라 플래시 + 화면 밝기 강제 조정 및 복구)
- SwitfUI: LazyVGrid의 GridItem...flexible()을 사용할 때 각 셀 간의 여백을 일정하게 지정하는 방법
- Swift: iOS에서 커스텀 카메라 만들기 (2) – AVCapturePhotoOutput으로 고화질 사진 찍기
- Swift: async/await 키워드를 이용한 동기적 실행 보장 함수 작성
- Swift: iOS에서 커스텀 카메라 만들기 (1) - 비디오 캡처 방식 활용
- Swift: RealityKit 프로젝트에 .rcproject(Reality Composer 프로젝트 파일) 추가하고 앱에 통합하기
- Swift: UIKit 프로젝트 안에 SwiftUI 뷰 삽입하기 (UIHostingController 이용)
- 맥(macOS) 파인더에서 해당 경로로 터미널 바로 열기 - OpenInTerminal-Lite
- SwiftUI: Tab View (탭 뷰) 사용하기 기초 (탭 바 형태, 페이지뷰 형태)
- SwiftUI: Long Press 처리 (일반적인 경우와 지속적으로 눌렀을때의 경우)
- WWDC 23 Swift Student Challenge 수상하였습니다. (Award Recipient)
- SwiftUI: 웹 뷰(WKWebView) 추가하기 및 자바스크립트 실행 (Representable 사용)
- SwiftUI: 하드웨어 키보드 입력 받기 (Representable 사용)
- SwiftUI: 내비게이션 (Navigation) 및 데이터 전달 기초
- SwiftUI: Swift Playgrounds App에서 커스텀 폰트 추가 및 적용
- SwiftUI: Spacer (스페이서) - 공백 표시 뷰
- SwiftUI: @State와 @Binding의 의미 / 뷰 간의 데이터 전송 (앞→뒤, 뒤→앞)
- Swift(스위프트): 오디오 라이브러리 AudioKit 프레임워크 소개
- SwiftUI: Representable을 이용해서 UIViewController 띄우기
- Xcode Swift 개발 필수 앱: SF Symbols (iOS등의 시스템 이미지 열람, 호환성 확인)
- Swift(스위프트): 백그라운드 작업 (Background Tasks)
- Swift: 다중 옵셔널 (Nested optional; ??)의 존재 이유와 언래핑 방법
- Swift(스위프트): 비트 연산자 (Bit Operator)
- Swift(스위프트): 버튼(UIButton)에서 이미지 오른쪽으로 옮기기 / 이미지와 레이블 간 간격 띄우기 (스토리보드)
- Swift(스위프트): 달력 그리기 (2) → Interface Builder 스토리보드 GUI 방식으로 그리기
- Swift(스위프트): 달력 그리기 (1) → 달력 데이터 분석
- Apple(애플) 디벨로퍼 아카데미 @ POSTECH 2기에 최종 합격했습니다.
- Swift(스위프트): URL 주소 인코딩 (Percent Encoding)
- Swift(스위프트): 멀티피어 통신 (Multipeer Connectivity) [기초]
- Swift(스위프트): 홈 스크린에 바로가기 메뉴(Quick Actions, 퀵 액션) 만들기
- Swift(스위프트): 아이폰 진동(Vibration, Haptic) 구현하기 下 (커스터마이징)
- 자바스크립트: 두 날짜(Date) 사이의 차이(간격) 구하기
- Swift(스위프트): Debounce, Throttle 로 함수 실행 횟수 제한 (DispatchWorkItem 이용, 외부 라이브러리 없이)
- Transporter 앱을 사용하여 App Store Connect 바이너리 파일 업로드
- Swift(스위프트): 공유 메뉴 (UIActivityViewController) 띄우기
- Swift(스위프트): 아이폰 진동(Vibration, Haptic) 구현하기 上 (기초)
- Swift(스위프트): 로컬 알림(Local Notification)을 스케줄에 맞춰 반복 발신하기 (및 한계점)
- Swift(스위프트): 텍스트 뷰에서 선택 부분(text selection)에 사용자 정의 메뉴 추가 (스토리보드)
- Swift(스위프트): 스테퍼(UIStepper)의 값을 레이블(UILabel)에 표시하기 (일반 방법 및 RxSwift 사용 방법)
- Swift Package Manager(SPM)와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1)
- 자바스크립트: 패스워드 안전도(강도; Strength) 표시하기
- Swift + FirebaseUI: (3) FirebaseUI를 이용해 Apple(애플) 소셜 로그인 화면 구현
- Swift + FirebaseUI: (2) FirebaseUI를 이용해 Google(구글) 소셜 로그인 화면 구현
- Swift + FirebaseUI: (1) FirebaseUI를 이용해 이메일 로그인 화면 구현
- Swift(스위프트) 라이브러리 ENSwiftSideMenu 사용법 (뷰 컨트롤러에 사이드 메뉴 추가)
- HTTP 상태 코드에서 404 Error(Not Found)란?
- Swift(스위프트): Core ML + Create ML 기초 요약 下 (이미지 분류 앱 만들기)
- Swift(스위프트): Core ML + Create ML 기초 요약 上 (기계학습 모델 만들기)
- PHP: CORS 에러를 회피하기 위한 API의 프록시(중계) 페이지 만들기 (cURL 이용)
- Swift 예제: iOS + WatchOS 연동 앱 LinkedCounter (주요 개발 과정 요약)
- 일본 배우 '아베 히로시'의 홈페이지 (일본 위키피디아 번역)
- Swift + Firebase: 익명 계정을 영구 계정으로 전환 (이메일로 회원가입)
- PHP: 브라우저 사용(선호) 언어 구하기
- Swift(스위프트): 뷰 컨트롤러와 내부의 컨테이너 뷰(Container View)간의 데이터 교환
- Swift(스위프트): 개발 언어(Development Language)를 영어에서 한국어로 변경
- Swift(스위프트): 원격 푸시 알림(Push Notification)에서 파이어베이스 메시징(Firebase Messaging)으로 실제 앱에 메시지 보내기 (스토리보드)
- Swift(스위프트): mp3, wav 등 소리 파일 재생하기 (스토리보드)
- Swift(스위프트): 원격 푸시 알림(Push Notification) 기초 및 푸시 알림의 모의 테스트 방법 下편 (스토리보드)
- Swift(스위프트): 원격 푸시 알림(Push Notification) 기초 및 푸시 알림의 모의 테스트 방법 上편 (스토리보드)
- Swift(스위프트): Vapor를 사용하여 iOS에서 웹 서버 실행 (스토리보드)
- SwiftUI: ObservableObject 프로토콜과 @Published, @ObsevedObejct, @StateObject 프로퍼티 래퍼
- Swift(스위프트): 버튼에서 메뉴 표시 기초 (UIButton 또는 UIBarButtonItem에서 UIMenu를 표시하는 방법) - 스토리보드
- 자바스크립트(JavaScript): 비트 연산자 (Bit Operator)
- Swift(스위프트): Local Notification (로컬 푸시 메시지, 오프라인 푸시 메시지)
- Swift(스위프트): 인터넷 접속 여부 판별하기 (WiFi & 셀룰러 LTE, 5G 등)
- Xcode: cmd + / 단축키를 눌렀을 때 코멘트(주석) 위치를 현재 들여쓰기에 맞추기 (CommentHere)
- Swift: AVAudioSession.interruptionNotification 처리 (사운드 재생 중 전화벨, 알람 등이 울렸을 때 처리)
- iOS 앱 포트폴리오: 음악 스케일(음계) 학습 도우미 앱 UltimateScale 애플 앱스토어 출시 📱
- Swift(스위프트): 앱 내부에서 팝업으로 앱 스토어 앱 정보 띄우기
- Swift(스위프트): DateFormatter로 시간대 약어(Timezone abbreviation) 표시
- Swift(스위프트) + Firebase: 사용자 정의 struct(구조체)를 사용한 Firestore CRUD 기초
- Swift(스위프트): Static cell 모드인 테이블 뷰(UITableView)에서 특정 섹션 감추기 + 특정 행의 크기만 조절
- Swift(스위프트): 테이블 뷰(UITableView)에서 setEditing이 true일때만 삭제 등 작업 가능하게 하기
- Swift(스위프트): 제네릭(Generics) - 제네릭 타입, 제네릭 함수, 연관 타입(Associated Type), where 조건절
- 자바스크립트 + abcjs: 노트 프로그래밍 방식으로 하이라이트, 노트 선택(클릭) 방지하기
- Swift(스위프트): 앱 최초 설치 후 한 번만 실행하는 작업, 버전 업데이트시에만 실행하는 작업 만들기
- RxSwift(ReactiveX + Swift): 기본 개념 및 스토리보드 예제 (요약)
- Xcode 프로젝트에 코코아팟(CocoaPods) 설치 및 디펜던시 추가 방법
- Xcode 프로젝트에 이미지 자르기(crop) 기능 추가: iOS Swift 라이브러리 Mantis 사용 (스토리보드)
- 리액트 + 타입스크립트 (React + TypeScript): HTML 요소, 폼의 이벤트 처리
- Swift(스위프트): 카메라 및 사진 라이브러리 권한 물어보기 + UIImagePickerController를 이용한 사진 추가 (스토리보드)
- Swift(스위프트): Codable을 사용하여 사용자 정의 오브젝트를 UserDefaults에 저장 (프로토콜 지향 접근 방식)
- Swift(스위프트): 컬렉션 뷰의 셀을 길게 누르면(long press touch) 애니메이션 나타나도록 하기
- CSS + 자바스크립트 예제: 스켈레톤 로딩(Skeleton Loading)
- JSX 등의 소스 코드를 디자인 및 문법 하이라이팅 처리된 이미지로 저장 (carbon.now.sh)
- Swift(스위프트): 배열의 reduce
- Swift(스위프트): 이미지를 그레이스케일로 변환
- 타입스크립트(TypeScript): HTML 요소에 이벤트 추가
- MD(마크다운 Markdown) 이미지 넣기
- AWS(아마존 웹 서비스) 프리티어 기간동안 운영했던 서비스(게시판, 미디 플레이어, 게임 정보 사이트) 영상 기록
- Swift(스위프트): 앱 아이콘 변경 기능 만들기
- CSS 이미지에 마스킹 하기 (mask image) + 앱스토어 아이콘처럼 보이게 곡률 조정 (코너 깎기)
- 격투 게임이 지연 기반 넷코드 및 롤백 넷코드를 사용하는 방법에 대한 설명 4 (完) - 개발자 및 유저 인터뷰
- 격투 게임이 지연 기반 넷코드 및 롤백 넷코드를 사용하는 방법에 대한 설명 3 - 롤백 넷코드의 기술적 측면과 구현 난점
- 격투 게임이 지연 기반 넷코드 및 롤백 넷코드를 사용하는 방법에 대한 설명 2 - 롤백(Rollback) 넷코드
- 격투 게임이 지연 기반 넷코드 및 롤백 넷코드를 사용하는 방법에 대한 설명 1 - 기본 이론, 지연 기반(delay-based) 넷코드
- Swift(스위프트): 튜토리얼을 통한 디자인 패턴: MVVM (Model-View-ViewModel) 2
- Swift(스위프트): 튜토리얼을 통한 디자인 패턴: MVVM (Model-View-ViewModel) 1
- iOS 앱 포트폴리오: 나만의 오르골 만들기 (Make My MusicBox) 애플 앱스토어 출시 📱
- Swift(스위프트): 언어 현지화(로컬라이제이션 Localization) - 다국어 지원 앱 만들기
- Swift(스위프트): 원형 버튼 만들기 (스토리보드)
- Swift(스위프트): NSCoding(NSSecureCoding)을 이용한 클래스 객체 직렬화(바이너리 인코딩)
- Swift(스위프트): Firebase(파이어베이스) 인증 기능을 이용한 회원 가입 기능 구현 2 - 프로필 사진 올리기 (스토리보드)
- Swift(스위프트): Firebase(파이어베이스) 인증 기능을 이용한 회원 가입 기능 구현 1 (스토리보드)
- Swift(스위프트): Firebase(파이어베이스) 인증 기능을 이용한 기초 로그인 로그아웃 구현 (스토리보드)
- 바이트 레벨에서 분석한 표준 미디(Standard MIDI) 사양 및 구조
- Xcode: UIView 결과물 미리보기 (빌드 및 @IBDesignable을 사용하지 않고 SwiftUI의 프리뷰 기능을 이용)
- Swift(스위프트): iOS 단위 테스트(Unit test) 및 UI 테스트 튜토리얼
- Swift(스위프트): 애플 펜슬 튜토리얼 – 下 (스토리보드)
- Swift(스위프트): 애플 펜슬 튜토리얼 - 上 (스토리보드)
- 아마존 웹 서비스(AWS) 프리티어 기간이 끝나면 한달 요금으로 얼마가 부과될까?
- Swift(스위프트): CGContext에서 GState의 의미, saveGState & restoreGState 사용법 (스토리보드, Core Graphics)
- 자바스크립트: 콘솔 로그(console.log)의 내용을 브라우저 HTML 내에 표시하기
- Swift(스위프트): WKWebView에서 Swift 네이티브 앱과 웹 페이지의 자바스크립트간 통신 (스토리보드) + console.log 표시
- Swift(스위프트): 오프라인 웹 페이지에서 자바스크립트 실행 및 alert, confirm, prompt 띄우기 (스토리보드)
- Swift(스위프트): Page Controller View (페이지 넘기기) 기초 (스토리보드)
- Swift(스위프트): 오프라인 웹 페이지 표시하기 (스토리보드)
- iOS 앱 포트폴리오: Tuner XR 애플 앱스토어 출시 📱- 음악가들을 위한 튜너 앱
- 스위프트 (Swift): 메일 보내기 기능 (스토리보드)
- Swift(스위프트) 기초: struct (구조체; structures)
- Swift(스위프트): 텍스트 필드(UITextField)에 숫자만 입력되게 하기, 자리수 제한하기 (스토리보드)
- Swift(스위프트): UITextField의 숫자 패드(Number Pad)에 완료 버튼 달기 (스토리보드)
- Swift(스위프트): 코어 데이터(Core Data) CRUD 기초 (UIKit에서)
- iOS 프로그래밍: 스크롤 뷰(Scroll View) 사용방법 (스토리보드)
- iOS 앱 포트폴리오: 디퓨저 스틱 (Diffuser Stick) 애플 앱스토어 출시 📱- 디퓨저 스틱 교체주기 관리 앱
- Swift (스위프트): 사진 라이브러리, 카메라 사용 (스토리보드)
- Swift(스위프트): 피커뷰(Picker View)를 이용해 폰트(글꼴) 리스트 불러오기 (iOS, 스토리보드)
- Swift(스위프트): 프로퍼티 리스트(property list; plist) 읽어오기
- iOS 앱을 위한 다양한 오프라인 옵션
- 자바스크립트 예제: 텍스트에서 유튜브(YouTube) URL을 감지하고 해당 URL을 자동으로 플레이어로 전환
- 리액트(React): 모달 팝업시 뒷배경(오버레이) 스크롤 되지 않게 하기
- 리액트(React): Redux-saga 기초 사용법 요약 (상태 관리시 부수효과 관리하는 미들웨어)
- iOS 프로그래밍 예제(Swift): 마이크를 통한 소음 데시벨 감지 (마이크 권한 설정, 녹음 진행)
- 자바스크립트 예제: 스크롤 이벤트를 사용한 이미지 지연 로딩(lazy loading) 라이브러리 없이
- ResReq.api 사이트로 빠르고 편리하게 Restful API 테스트하기
- 구글 스프레드시트에서 GOOGLETRANSLATE 함수를 사용하여 문장/단어 자동 번역
- HTML: 파비콘(favicon), 바로가기 아이콘 (iOS, 안드로이드) 설정
- HTML5: input 태그의 radio 타입 (태그, JQuery, 자바스크립트)
- React: 리액트 공식 자습서 (틱택토 게임)의 '개선 사항' 구현해보기
- 자바스크립트 예제: 한글 단어에서 을/를, 이/가, 은/는 구분하기 (받침 여부를 확인해 조사 대입)
- [프로그래머스/레벨2] 프린터 (자바스크립트)
- 자바스크립트 예제: URL 라우팅 기능 (window.history.pushState, window.location.pathname 이용)
- [프로그래머스/레벨2] 기능개발 (자바스크립트, Swift)
- 자바스크립트 ES6+: Fetch에서 요청을 취소하는 방법
- [프로그래머스/레벨2] 주식가격 (자바스크립트)
- 자바스크립트: 검색어 캐시 (객체에 저장, 브라우저 세션에 저장)
- [프로그래머스/레벨2] 다리를 지나는 트럭 (자바스크립트)
- 자바스크립트: 모달(modal window) 만들기
- [프로그래머스/레벨3] 베스트앨범 (자바스크립트)
- 자바스크립트: 스크롤 상태 표시기 (스크롤 인디케이터, 라이브러리 없이 구현)
- [프로그래머스/레벨2] 위장 (자바스크립트)
- 자바스크립트: 무한 스크롤 (스크롤 이벤트 이용, 라이브러리 없이)
- [프로그래머스/레벨2] 전화번호 목록 (자바스크립트)
- 자바스크립트 예제: 추천 검색어 표시 (사용성 개선을 위한 이벤트 처리)
- [프로그래머스/레벨1] 완주하지 못한 선수 (자바스크립트)
- 자바스크립트: Debounce, Throttle 순수 자바스크립트 (Vanilla JS)로 구현
- Amazon Web Service(AWS) S3 서비스를 이용해 웹 호스팅 하기 (정적 웹 페이지 업로드)
- React + Redux-saga + Typescript로 만든 이미지 판매 사이트 (ImageShop)
- 타입스크립트 + typesafe-actions: createReducer 사용 예제 (redux-actions의 handleActions 대체)
- phpmyadmin: 사용자(user) 계정 생성
- JWT(JSON Web Token) 란?
- TypeScript(JavaScript ES6+) + Webpack 으로 만든 리듬게임 (Clapping Music) - 제작중
- Netlify를 이용해 정적 웹사이트를 편리하게 배포하기
- 타입스크립트 + 웹팩 환경에서 mp3 파일 임포트(import) 하는 방법
- Swift(스위프트): URL 관련 기능 요약 (URL, URLComponents, URLSession)
- 웹팩(Webpack)으로 타입스크립트 & HTML Loader 환경 설정
- macOS(맥 OS) 에서 remote: Invalid username or password. fatal: Authentication failed for 문제 발생시 해결 방법
- 자바스크립트: 클립보드에 복사하기 기능 만들기
- Glassmorphism CSS Generator로 글래스모피즘 스타일의 CSS 만들기
- Swift(스위프트): 타이머(Timer) 만들기
- React + Redux-Saga 로 만든 이미지 상품 게시판
- iOS 프로그래밍: 컬렉션 뷰 (Swift, 스토리보드) – 컬렉션 뷰 추가, 커스텀 셀 작성
- CSS: submit 버튼(button)처럼 보이도록 앵커 태그(a) 스타일 지정 - button 태그와 a 태그 스타일 통일
- Swift(스위프트): 숫자를 세자리수씩 끊고 콤마(,) 넣기
- iOS 프로그래밍: 테이블 뷰 (Swift, 스토리보드) 2 - 커스텀 셀(custom cell) 추가
- iOS 프로그래밍: 테이블 뷰 (Swift, 스토리보드) 1 - 테이블 뷰 추가
- 자바스크립트 ES6+: 제너레이터 함수 (generator function)
- Swift(스위프트): 클로저 (Closure) - 정의 및 문법
- jQuery: 제이쿼리 이미지 지연 로딩(lazy loading) 플러그인 (jQuery Lazy)
- Xcode: 아이콘 이미지를 Xcode 애플리케이션(앱) 아이콘으로 변환 (appicon.co 이용)
- PHP: 이미지 섬네일(Thumbnail) 만들기 (Imagick 이용)
- CSS로 말풍선 툴팁 만들기 (cssarrowplease.com 이용)
- 자바스크립트(JavaScript)에서 쿼리 파라미터(query parameter) 값을 알아내는 방법
- PHP: 날짜 시간 관련 함수(date, time, strtotime, mktime)
- 자바스크립트: input file에서 이미지 미리보기 기능 만들기 (한 개, 여러 개)
- PHP, Mysql: 좋아요 기능 만들기
- PHP, Mysql: SELECT JOIN 문 실행시 중복된 이름의 열(컬럼) 결과를 가져오는 방법
- PHP: mysql_fetch_array() 에서 while() 대신에 foreach()를 사용하는 방법
- macOS: 아마존 EC2에서 내 PC로 다운로드 (scp 이용)
- 리액트(React): React Redux 요약 정리
- 자바스크립트 예제: 2차원 정방형 배열(square array) 여러 번 회전
- 자바스크립트 ES6+: 모듈(module) 기능을 이용하여 리액트의 hook 흉내내기 (reactify)
- 자바스크립트 ES6+: 동적으로 모듈 임포트(import) 하기
- 리액트(React): useState (함수형 컴포넌트에서 변수 관리)
- 자바스크립트: 파일을 특정 영역으로 드래그 앤 드롭하기 (라이브러리 없이)
- 자바스크립트: Snake 게임 만들기 3 - 뱀 몸체 만들기, 마무리 (完)
- 자바스크립트: Snake 게임 만들기 2 – 블럭이 스스로 움직이도록 만들기 & 사과(먹이) 만들기
- 자바스크립트: Snake 게임 만들기 1 - 블럭 움직이기
- 자바(Java) Swing UI + 네트워크 소켓으로 만든 학식(학생식당) KIOSK (유사 프로그램)
- Vue.js, Vue-router: URL의 쿼리 파라미터 알아내기, 한 개의 템플릿에 여러 주소 부여, 브라우저 창 강제로 주소 바꾸기
- VSCode에서 현재 날짜 입력하기 (vscode-insertdatestring 플러그인 사용)
- 인텔리제이 아이디어 (IntelliJ IDEA) 접힌 패키지 분리해서 표시하는 방법
- 자바스크립트 코딩테스트 예제: 유지비 청구 날짜 구하기
- 리액트(React): react-router-dom을 이용한 라우팅 기능 사용하기 기초
- 자바스크립트, HTML: 이벤트 버블링, 캡처링, 위임(delegation) - 동적 요소에 이벤트 할당
- 자바스크립트 npm: package.json의 정보 가져와 웹 페이지에 보여주기
- Vue.js: this.$emit으로 하위 컴포넌트에서 상위 컴포넌트로 정보 전달
- 리액트(React): npm(npx)에서 새로운 앱 생성, 컴포넌트 파일 생성
- PHP: JSON 스트링을 객체 또는 배열로 변환, explode, str_replace, 대소문자 변경방법
- 스프링 부트(Spring Boot): SPA에서 사용할 수 있는 OAuth2 소셜 로그인 (구글, 페이스북, 깃허브)
- 스프링 부트 + Vue.js 예제: 게임 정보 제공 사이트 (스타라이트 스테이지)
- 자바스크립트: 배경색에 '어두움 정도' 따라 텍스트의 색상 결정하기
- 스프링 부트(Spring Boot): JPA 엔티티에 자동으로 생성 날짜, 변경 날짜 추가하기
- 자바(Java) 예제: 페이지네이션(Pagination, 페이징, 페이지 내비게이션) 도와주는 프로그램
- 스프링 부트(Spring Boot): JPA + Thymeleaf로 페이지네이션(페이징, 페이지 내비게이션) 구현
- 자바스크립트 + 스프링 부트(Spring Boot): BASE64로 JSON을 통해 파일 업로드하기
- 스프링 부트(Spring Boot): SPA 라우트(route)를 위한 URL 컨트롤러
- Vue.js: 라우터(Vue Router) 기초
- 스프링 부트(Spring Boot) 예제: 미디 플레이어
- 스프링 부트(Spring Boot) 미디 플레이어 만들기 (3): 다음 곡 연속 재생 기능 & 미디 정보 업데이트 및 삭제
- 자바스크립트: 테이블의 tbody 내용 뒤집기(reverse)
- 스프링 부트(Spring Boot) 미디 플레이어 만들기 (2): 업로드 페이지, 임시 재생 플레이어 만들기
- 스프링 부트 (Spring Boot): mp3을 전송하는 컨트롤러 - 크롬 및 사파리(Safari) 브라우저에서 구간 탐색이 안되는 문제 해결 방법
- Spring Boot Security OAuth2: 커스텀 로그인 페이지 구현
- Spring JPA: 테이블(엔티티) 검색 기능 만들기 + 단위 테스트
- 자바스크립트: IntersectionObserver (1) 이미지 lazy-loading 구현
- 자바스크립트: IntersectionObserver (2) 무한 스크롤(Infinite Scroll) 구현 (라이브러리 없이)
- 스프링(Spring): JdbcTemplate에서 LIKE 키워드 사용 시 SQL Injection 방지 코드 작성하는 방법 (Mysql, Mariadb)
- 자바(Java): 파일의 해시값(MD5) 가져오기
- 스프링 부트(Spring Boot): 파일 업로드 처리하기 (한 개, 여러 개)
- 스프링 부트(Spring Boot) 미디 플레이어 만들기 (1): Timidity++, LAME을 이용해 미디(midi) 파일을 mp3로 변환하는 메소드 만들기
- 자바스크립트 ES6+: fetch를 사용해 blob 데이터 받아오기 (AJAX)
- Vue.js: v-on:click을 사용해 해당 요소(element)의 DOM 가져오기
- macOS: 내 컴퓨터에서 아마존 EC2로 파일 업로드 (scp 사용)
- macOS: 터미널에서 말하기 명령 사용 (say)
- 자바(Java) 8: 자바스크립트 람다 예제로 알아보는 Stream 사용법
- 자바(Java) 8: 람다식에서 콜론 두개 (:: - 이중 콜론 연산자, 메소드 참조 표현식)의 용도와 사용법
- Travis CI (Continuous Integration) + AWS Code Deploy로 깃허브(GitHub)에 올리면 자동 배포되게 하기
- 스프링 부트 웹 사이트 예제: 아마존 웹 서비스 게시판 (Spring Boot + JPA + AWS + Travis CI)
- 아마존 웹 서비스 카카오체크카드로 프리 티어 가입 + EC2 서비스 생성
- 스프링 부트(Spring Boot): 구글 로그인 연동 (스프링 부트 스타터의 oauth2-client) 이용 + 네이버 아이디로 로그인
- 구글 OAuth2 연동용 클라이언트 아이디 및 비밀번호 발급받는 방법
- 스프링 부트(Spring Boot): 웹 페이지를 정상적으로 렌더링하는지 단위 테스트
- 스프링 부트 Thymeleaf: fragment로 웹 페이지에 header, footer 등 조각 삽입
- 자바(Java): 빌더 패턴(Builder Pattern) 일반 + 롬복(Lombok) + 단위 테스트
- 스프링 부트에서 H2를 테스트하려고 하는데 Database not found, either pre-create it ... 에러가 발생할 때
- 스프링 부트 버전 2.3.1 에서 H2 SQL 문법을 MySQL 문법으로 변경한 후 H2 콘솔 사용하는 방법
- macOS 홈브루(brew)에서 Updating Homebrew... 멈춤현상 해결방법 및 권한 설정 방법
- Spring Boot: Spring JPA + H2 데이터베이스 기초 + 단위 테스트
- Spring Boot: JUnit 단위 테스트 기초 (GetMapping 테스트, 인텔리제이 기준)
- Spring Boot: Gradle 버전 5 이상에서 롬복 설치 + 단위 테스트
- macOS 인텔리제이(IntelliJ) 커뮤니티 버전 설치 + 스프링 부트 프로젝트 생성
- 자바스크립트: TTS(Text-to-Speech) 라이브러리 없이
- 자바스크립트 예제: 마이크 테스트
- 자바스크립트: 배열 Array.reduce
- 자바스크립트: 다국어 지원 (국제화 Internationalization) 1
- 자바스크립트: JSONP (JSON Padding) 사용법
- 자바스크립트: 운영체제의 다크 모드 정보 가져오기
- 자바스크립트 예제: 압축 (카카오 2018 코딩테스트 기출)
- 자바스크립트 예제: 순열 및 중복순열 (어떠한 문자를 조합해서 나올 수 있는 가능한 모든 경우 나열하기)
- 자바(Java) 예제: 인접한 사방향(상하좌우, 동서남북) 탐색 (방향 벡터 1)
- 프로그래밍 이름 궁합 찾기 알고리즘
- 자바스크립트: Fetch (외부 라이브러리 없이 AJAX 사용)
- 트리 순회: 전위, 중위, 후위 (preorder, inorder, postorder)
- Git(깃): 이미 존재하는 폴더를 온라인 프로젝트(GitHub)에 추가하기
- 자바스크립트: 배열 자르기 및 합치기 (예제: 퀵 정렬, 병합 정렬)
- 자바(Java) 예제: 재귀 호출(Recursive Call, 재귀 함수, 재귀 알고리즘)
- 자바(Java) 예제: 최대 힙 (Max Heap)
- 자바(Java): 양쪽 연결 리스트(Doubly Linked List; 더블 링크드 리스트) [자바 공식 제공 & 알고리즘 학습용 예제]
- 스위프트(Swift)로 만든 iOS용 스탑워치(StopWatch) 앱 예제
- iOS 프로그래밍: 색상 선택기(Color Picker; 컬러 피커)를 앱에 추가하기
- 스위프트(Swift)로 만든 iOS용 Todo 앱 예제
- Spring Boot 예제: 데이터베이스 입출력(CRUD)이 가능한 RestController 제작
- Swift: JSON 스트링을 Swift 배열로 변환 (객체로 이루어진 배열의 JSON)
- Swift: GET, POST 로 HTTP 네트워크 정보 주고받기
- 소규모의 웹 유틸리티 또는 예제 목록
- iOS 프로그래밍: Navigation에서 전후간 정보교환 방법
- iOS 프로그래밍: 간단한 웹뷰 앱 만들기
- iOS 프로그래밍: PickerView 위임(delegate) 및 데이터소스(DataSource)
- PHP: BCrypt 해싱값과 평문 비교
- Swift: DateFormatter 날짜 한글로 표기
- iOS 프로그래밍: 스토리보드에서 요소를 추가한 뒤 아웃렛 변수와 액션 함수로 연결하기
- Vue.js: data 코드의 축약형과 원래 형태 / 배열 특정 원소 대체하기
- Swift UI: iOS 앱 프로젝트 Swift UI로 시작하기 (Xcode)
- Swift 기초 (8): 제네릭 타입 (Generic Type)
- Swift 기초 (7): 에러 처리 (Error Handling)
- Swift 기초 (6): 프로토콜 (Protocol)
- Swift 기초 (5): Enum (열거형; Enumeration)
- Swift 기초 (4): 클래스, 옵셔널과 nil
- Swift 기초 (3): 함수 (function)
- Swift 기초 (1): 상수, 변수, 배열, 사전
- Swift 기초 (2): if 문, for ~ in 문, while 문, switch 문
- 자바스크립트 lodash: debounce와 throttle을 이용하여 함수의 실행 횟수 제한
- 자바 예제: 한글 검색 SQL 만들기 (자음 초성 검색 포함)
- 자바스크립트 예제: 루비 문자 변환기
- 자바스크립트: 캔버스로 원 그리기 + 원을 n등분하기
- 자바스크립트: 오디오(Audio) 요소 구간반복하기
- Spring Boot: “네이버 아이디로 로그인하기” 연동 – 스프링 시큐리티와 연결 (3)
- Spring Boot: “네이버 아이디로 로그인하기” 연동 – 스프링 시큐리티와 연결 (2)
- Spring Boot: “네이버 아이디로 로그인하기” 연동 - 스프링 시큐리티와 연결 (1)
- phpMyAdmin: 테이블에 외래키 설정하기
- Spring Boot 예제: 회원가입 폼 만들기
- Spring Boot: Webjars (Bootstrap, JQuery 등의 프론트엔드 라이브러리를 메이븐을 통해 관리)
- Spring Boot: 시큐리티(Security) – 5 – 권한별 접근 가능한 페이지를 데이터베이스에 설정하기 (동적 설정)
- 자바스크립트: 정규표현식 (Regular Expression; 정규식) 정리
- Thymeleaf: 요소 반복하기 (th:each)
- Spring Boot 예제: 초간단 게시판
- Spring Boot: 시큐리티(Security) – 4 – 로그인 폼을 거치지 않고 컨트롤러에서 로그인
- Spring Boot: "네이버 아이디로 로그인하기" 연동하기 (1)
- 자바스크립트 + abcjs: 악보 출력, Synth 플레이어 삽입
- 자바: 텍스트 파일 입출력 (예제 - 간단한 로그 기록)
- QBasic: 배열(Arrays), 함수(SUB, FUNCTION), 종합예제 (完)
- QBasic: 반복문 (WHILE, DO ... WHILE, FOR LOOP)
- QBasic: 조건문(IF문, SELECT CASE문)
- QBasic: 기초 구문, 연산자, GOTO, 수학 함수
- QBasic: INPUT(프롬프트로 키보드 입력 받기)
- QBasic: 개요(설치 방법, 데이터 타입, 변수 선언)
- 자바스크립트 예제: 특정 주파수의 소리 재생 + 음악 평균율 주파수 테이블
- 자바 예제: 특정 주파수의 소리 재생
- PHP: FTP 내의 디렉토리 및 파일 탐색하기(재귀호출)
- JQuery: 선택자 최적화 (Optimize Selectors)
- 자바스크립트: 객체지향 3 - class (ES6 이상)
- 자바스크립트: 객체지향 2 – 상속 구현 (ES5 이하)
- 자바스크립트: 객체지향 1 - new 키워드를 이용해 객체 생성 (ES5 이하)
- 자바스크립트: 배열 map, filter, apply + 예제: ABC(알파벳) 내비게이터
- PHP: 특정 문자를 기준으로 배열로 나누기 (explode, preg_split)
- PHP: 일반 배열 순회하기, 복수의 배열 동시에 순회하기
- 자바스크립트: 배열 내 객체들의 정보를 이용해 배열을 정렬 (sort() 기능)
- Spring, JSTL: div 태그로 이루어진 이중 반복문 사용하기 (특정 개수별 구분)
- JSP, Spring: 웹소켓(Web Socket) 2 + 예제: 긴급상황 경보 표시가 나오는 지도
- Spring Boot: 시큐리티(Security) - 3 - 로그인 및 권한 정보를 DB에서 가져오기
- Spring Boot: 시큐리티(Security) – 2 – 커스텀 로그인 페이지 만들기
- 자바스크립트: AJAX로 blob 타입의 리스폰스 가져오기(파일 다운로드)
- 자바스크립트: setInterval(반복 함수) 정지하는 방법 (clearInterval 사용)
- axios: AJAX 데이터 받기 (Promise 기반) + 예제 (JSON 가져오기)
- 자바스크립트: 캔버스를 이미지 파일로 다운로드
- Spring: AJAX로 백엔드 컨트롤러에 이미지 전송
- Node.js: Webpack + Babel과 Babel/polyfill을 이용하여 ES6으로 작성된 코드를 ES5 이하에서도 호환되게 하기
- JQuery: $.parseXML 과 IE의 WrongDocumentError 에러
- Log4j: RegexFilter로 특정 문구가 들어간 로그 안나오게 하기
- JQuery: 제이쿼리 사용법 이것저것 (select opiton, 체크박스, DOM, 위아래이동, 이벤트 부여, 배열 순회, 자식-부모 요소, AJAX, XML 파싱, 이벤트 한번만 실행 one)
- Vue.js: 컴포넌트 선언
- 자바스크립트 예제: 일본어 가사를 Quizlet으로 공부하자!
- 자바: 직렬화 (Serialization) + 예제 - 게시판 비슷한 것
- Java, Spring: 예제 - JspMvcHelper (Reflection을 사용해 ModelAndView 내의 객체들의 정보를 표시해 주는 프로그램)
- JSP, Spring: EL(Expression Language), JSTL(Java Standard Tag Library) 기초 사용법
- 자바스크립트: 콜백, Promise, async - await 기초
- JSP, Spring: 웹소켓(Web Socket) 1
- 자바스크립트: 길찾기 1 (라이브러리 이용 - EasyStar.js)
- 자바스크립트: 인터넷에서 미디(MIDI) 파일을 바로 재생하는 라이브러리(http://www.midijs.net/) + 예제: 미디 플레이어
- Three.js: 장면(scene) 추가
- Spring Boot: 프로젝트를 jar 파일로 배포하기
- Spring Boot: 설치 및 기본 설정 (macOS 및 Eclipse 기준)
- Spring Boot: 데이터베이스 연결하기 (Jdbc, MySQL 기준)
- Node.js Webpack: 한 번에 세팅 완료하기 (개인용)
- MusicXML: 기초 악보 만들기
- OpenGL 기초 8: 텍스처(비트맵, 픽셀맵), 폴리곤 스티플, 텍스처 매핑, 축소된 서브셋(ES)
- HTML5: Select ~ Option (태그, JQuery, 자바스크립트)
- OpenGL 기초 7: 조명, 재질, 법선
- OpenGL 기초 6: 행렬, 출력 영역의 제한
- OpenGL 기초 5: 변환(관측, 모델링), 투영(직교, 원근), 뷰포트
- dat.GUI: 세련된 디자인의 GUI 폼(Form)을 사용할 수 있는 자바스크립트 라이브러리
- OpenGL 기초 요약 1: 기본 타입, 색상 변경, 점, 선, 사각형, 다각형
- OpenGL 기초 4: 버텍스 배열, 인덱스, 색상 배열, 인터리브 배열, 출력 목록
- OpenGL 기초 3: 3차원 좌표, 와인딩 & 컬링, 폴리곤 모드, 예제(주전자, 도넛 등) 호출
- OpenGL 기초 요약 2: 블렌딩, 앤티앨리어싱, GLUT
- Java Swing: 키보드로 아이콘 이동하기
- 자바스크립트: 캔버스(Canvas) 에서 픽셀 단위로 다루기
- 자바스크립트: 색상 이름을 rgb 코드로 바꾸기.
- 자바스크립트, JQuery(제이쿼리): 테이블의 행, 열 번호 표시 & 행, 열번호로 테이블 td 접근하기 (예제: 직선 거리 측정)
- 자바(Java)에 프로세싱(Processing) 라이브러리 Minim을 설치하는 방법 + 예제: 주파수 그래프가 있는 오디오 플레이어
- 유닉스/리눅스 기초 명령어 (dir, cd, pwd, tar, sh, mv, ps)
- JMeter: 서버 부하 테스트 프로그램 (기초 사용법)
- Node.js: Ace (Syntax Highlighter) 설치하기 (Webpack 4 기준)
- Java: 네트워크 1 (클라이언트-서버 1 : 1) + 예제: 간단 1:1 채팅
- Java, Spring Boot 예제: 이미지를 클라이언트로부터 받아 파워포인트로 만들기
- Node.js: Webpack 4 추가 설정 (CSS, HTML, dev-server) 빌드 및 배포
- Node.js: 설치, 코드 실행 (Windows, macOS 기준)
- Node.js: Webpack 설치하기 (Webpack 4 버전 기준)
- Spring Boot: 시큐리티(Security) - 1
- Spring Boot: 국제화(Internationalization)
- Java: 2차원 배열
- Java 예제: 한글 초성 중성 종성 분리 (자모분리)
- Spring: 팩토리 패턴/ applicationContext.xml / DL(Dependencies Lookup) / DI(Dependencies Injection)
- Spring: 스프링의 어노테이션(Annotations) 사용법
- Spring: 데이터베이스 연동(Oracle-JDBC 기준), Spring JDBC
- 자바 Swing: for문으로 만든 컴포넌트에 접근 + 예제: 틱택토(Tic Tac Toe)
- 넥사크로(Nexacro): 데이터베이스에 읽고 쓰기 및 기타
- 자바스크립트: 날짜 관련 함수 + 예제(바이오리듬)
- Java: 추상 클래스, 다형성, 인터페이스
- Java: 재귀 함수, 재귀 호출 (recursive call) + 예제(팩토리얼, 유클리드 호제법, 파일 폴더 탐색)
- Java 예제: 배열 회전
- Java 예제: 369 시뮬레이션
- JSP, Spring: URL을 입력하면 파일이 바로 다운로드되게 하기
- Java: 주소에 의한 참조(Call-by-reference)
- Java 예제: URL로부터 파일 다운로드(ReadableByteChannel 이용)
- JSP: 페이지 포함 방법 중 include 액션 태그와 디렉티브의 차이점
- Java: LocalDate, LocalTime, ChronoUnit을 이용해 시간 나타내고 구하기 (Java 8) + 예제(바이오리듬)
- Spring Boot: mariadb 연결하기 (JDBC-Maven 기준)
- Java 예제: 마방진(Magic Square)
- 자바스크립트: for문 안에 setTimeout 함수 사용하는 방법 (IIFE, 재귀함수)
- PHP: 배열 생성 / 배열을 JSON으로 만들기
- PHP: cURL 기초 (정적 웹 페이지에서 정보 가져오기)
- Java 예제: 로또 (중복없이 배열에서 값 추출, 배열 원소 스왑) + HashSet 이용
- PHP: 데이터베이스 접근 기초(SELECT, INSERT, UPDATE, DELETE)
- macOS에서 mariadb 설치하기
- Java 예제: ATM
- 자바스크립트: 콘솔 로그(console.log) 사용법, 로그에 CSS 적용, 로그 그룹화 하기
- Java 예제: 모래시계 모양 배열 만들기
- Java 예제: 1 또는 2의 보수 구하기
- Java Swing 예제: 다차원 배열 표시하기 (기초 설정 방법, for문으로 swing 요소 반복 등)
- Java 예제: 업앤다운(Up and Down)
- Java 예제: 가장 큰 소수 찾기
- Java 예제: 4자리 특정 암호 찾기
- JQuery: 단위 변환 (pixel - mm - inch)
- Java 예제: 배스킨라빈스 31 (먼저 31을 외치면 지는 게임)
- Java 예제: 가위바위보 (공식 이용법 추가)
- Vue.js: 기초 사용 방법 + 예제: 이름으로 보는 운세
- Thymeleaf: 소개, 기본 세팅, 텍스트 표시
- 자바(Java): 람다식 (Lambda Expression) 기초 (Java 8 이상)
- Processing: 미디어아트 프로그래밍 언어 기초
- [정보처리기사] 실기 데이터베이스 암기사항
- 자바 웹개발 기술면접 기출/예상문제 및 답안
- Java 예제: 계산기 1
- 카르노 맵 간략화
- IT 개발 관련 서브페이지, 블로그 등 링크