숫자 저장하기 위한 변수 선언

var myNumber = 10 // lowerCamelCase, UpperCamelCase

*lowerCamelCase: 소문자로 시작해, 단어가 바뀔때 대문자로 , 변수명

*UpperCamelCase: 첫단어가 대문자, 클래스 이름

 

 

var x = 10 // 정수형 변수 x를 10으로 초기화
print(type(of: x)) // x의 타입을 출력 (결과: Int)

let s = MemoryLayout.size(ofValue: x) // x의 메모리 크기를 바이트 단위로 가져옴
let t = MemoryLayout<Int>.size // Int 타입의 메모리 크기를 바이트 단위로 가져옴

print(s, t) // x의 메모리 크기와 Int 타입의 메모리 크기를 출력

int형

// 정수형 변수 x를 10으로 초기화
var x = 10

// x의 타입 출력
print(type(of: x)) // Int

// x의 값 출력
print(x) // 10

// 변수 이름 x를 문자열로 출력
print("x") // x

// x의 값을 문자열 보간법으로 출력
print("\(x)") // 10

// x의 값을 포함한 문장 출력
print("값은 \(x)입니다.") // 값은 10입니다.

// Int형의 최소값과 최대값 출력
print("Int Min = \(Int.min) Int Max = \(Int.max)")
// Int Min = -9223372036854775808 Int Max = 9223372036854775807

 

 

부동 소수점 데이터 타입: Double vs Float

*double형이 기본

// 실수형 변수 myWeight를 58.5로 초기화
var myWeight = 58.5 

// myWeight의 타입 출력
print(type(of: myWeight)) // Double

 

 

부울 데이터 타입 : Bool

* 참 또는 거짓(1 또는 0) 조건을 처리

 

 

문자 데이터 타입 : Character

 

문자열 데이터 타입 : String

 

 

상수선언: let

 let maximumNumber = 10

변수 선언 var

var myVariable = 10 // :Int

 

튜플(Tuple)

:여러 값을 하나의 개체에 일시적으로 묶는 방법

 

// 이름이 없는 튜플
let myTuple1 = (10, 12.1, "Hi")
// 인덱스를 사용하여 접근
var myString = myTuple1.2 // myString에 "Hi" 저장
print(myString) // 출력: Hi
print(type(of:myTuple))//(Int,Double,String)


// 이름이 있는 튜플
let myTuple2 = (count: 10, length: 12.1, message: "Hi")
// 이름을 사용하여 접근
print(myTuple.message, myTuple.2)//에러 발생
print(myTuple2.message, myTuple2.count) // 출력: Hi 10

 

func logMessage(_ s: String) { // {앞에 ->Void나 ->() 생략
print("Message: \(s)")
}
let logger: (String)->Void = logMessage //여기서는 함수 자료형이라 ->Void 생략 불가
logger("Hello")

 

 

typealias Void = ()

// 문자열을 받아서 반환값이 없는 함수 logMessage 선언
func logMessage(_ s: String) {
    print("Message: \(s)") // 전달받은 문자열을 출력
}

// logMessage 함수를 호출하는 클로저를 logger라는 상수로 선언
let logger: (String) -> Void = logMessage // 함수 자료형이므로 ->Void 생략 불가

// logger 클로저를 사용하여 "Hello" 메시지 출력
logger("Hello") // Message: Hello

 

 

 

옵셔널(optional)

 Int("100") // 100이 아닌 Optional(100)을 리턴함,print(Int("100")), Int형 initializer
 Int("Hi") // 정수 값을 반환할 수 없음, 아무런 값도 반환할 수 없다는 의미로 nil을 반환
var x : Int? //옵셔널 정수형 변수 x 선언
var y : Int = 0
x = 10 // 주석처리하면?
print(x) // Optional(10)
print(x!) // forced unwrapping해서 10이 나옴
print(y)//0
x = x!+2 //!필요
print(x)//12
y = x! //!필요
print(y)//12

 

 

forced unwrapping

var x : Int?//=nil
//x = 10
//print(x!)

if x != nil {
print(x!)
}
else {
print("nil")
}

주의 : if x!=nil 이라고 쓰면 안됨

 

 

optional binding

var x : Int?
x = 10
//print(x)//x=10을 주석처리할 경우 nil출력
if let x{ //옵셔널 변수 x가 값(10)이 있으므로 언래핑해서 일반 상수 xx에 대입하고 if문 실행
print(x)
}
else {
print("nil")
}

 

 

여러 옵셔널을 언래핑

var pet1: String?
var pet2: String?
pet1 = "cat"
pet2 = "dog"
if let firstPet = pet1, let secondPet = pet2 {
print(firstPet, secondPet)
} else {
print("nil")
}


// 위 소스를 short form of if-let to the Optional Binding으로 변경
var pet1: String?
var pet2: String?
pet1 = "cat"
pet2 = "dog"

// Optional Binding의 short form 사용
if let firstPet = pet1, secondPet = pet2 { // pet2의 let 생략 가능
    print(firstPet, secondPet) // cat dog
} else {
    print("nil")
}

 

 

여러 옵셔널 값 동시에 언래핑

var x: Int?
var y: Int?
x = 10
y = 20

if let xx = x {
    print(xx) // 10
} else {
    print("nil")
}

if let yy = y {
    print(yy) // 20
} else {
    print("nil")
}

 

Nil-Coalescing Operator(Nil합병연산자) ??

var age: Int?
age = 20
print(age) // Optional(20) - age가 옵셔널이므로 값이 Optional로 감싸져 출력됨

var myAge = age ?? 1
print(myAge) // 20 - age가 nil이 아닐 경우 그 값을 사용하고, nil일 경우 1을 사용

 

 

옵셔널을 언래핑하는 여러가지 방법

var x: String? = "Hi" // x는 옵셔널 문자열로 "Hi"로 초기화됨
// = "Hi" 지우고도 실습: x는 nil이 될 수 있음

print(x, x!) // Optional("Hi") "Hi" (x가 nil이 아닐 경우)
if let a = x {
    print(a) // "Hi" (옵셔널 바인딩을 통해 a에 "Hi"가 할당됨)
}

let c = x ?? "" // x가 nil일 경우 빈 문자열("")을 할당
print(c) // "Hi" (x가 nil이 아니므로 "Hi"가 출력됨)

 

 

암묵적인 언래핑(implicitly unwrapped)

 var x : Int? //옵셔널 변수 선언방법 1
 var y : Int! //옵셔널 변수 선언방법 2, 암묵적인 언래핑(implicitly unwrapped) 옵셔널, 자동으로 풀리기도 함
let x: Int? = 1 // x는 옵셔널 정수형으로 1로 초기화됨
let y: Int = x! // 강제 언래핑하여 y에 1을 할당
let z = x // z는 옵셔널 정수형 (Optional<Int>)으로 x를 그대로 할당
print(x, y, z) // 출력: Optional(1) 1 Optional(1)
print(type(of: x), type(of: y), type(of: z)) 
// 출력: Optional<Int> Int Optional<Int>

let a: Int! = 1 // a는 암시적 언래핑 옵셔널로 1로 초기화됨
let b: Int = a // a가 자동으로 언래핑되어 b에 1을 할당
let c: Int = a! // 강제 언래핑하여 c에 1을 할당
let d = a // d는 암시적 언래핑 옵셔널 (Optional<Int>)로 a를 그대로 할당
let e = a + 1 // a가 자동으로 언래핑되어 1 + 1 = 2가 됨
print(a, b, c, d, e) // 출력: Optional(1) 1 1 Optional(1) 2
print(type(of: a), type(of: b), type(of: c), type(of: d), type(of: e)) 
// 출력: Optional<Int> Int Int Optional<Int> Int

 

 

 

nil-Coalescing Operator (nil합병연산자)

let defaultAge = 1 // 기본값으로 사용할 정수형 변수
var age: Int? // 옵셔널 정수형 변수 선언
age = 20 // age에 20 할당
print(age) // Optional(20) - age가 옵셔널이므로 값이 Optional로 출력됨

var myAge = age ?? defaultAge // age가 nil이 아니므로 20이 myAge에 할당됨
print(myAge) // 20 - age가 nil이 아니므로 언래핑된 값인 20이 출력됨

var x: Int? = 1 // 옵셔널 정수형 변수 x 선언 및 초기화
var y = x ?? 0 // x가 nil이 아니므로 1이 y에 할당됨
print(y) // 1 - x가 nil이 아니므로 언래핑된 값인 1이 출력됨

 

 

Int!형을 property로 갖는 클래스

// MyAge 클래스를 정의
class MyAge {
    // Int형의 강제 언래핑된 Optional 변수 age 선언
    var age: Int!
    
    // 초기화 메서드, age를 매개변수로 받음
    init(age: Int) {
        self.age = age // 초기화된 age 값을 설정
    }
    
    // 나이를 출력하는 메서드
    func printAge() {
        print(age) // age의 값을 출력 (optional(1) 형태로 출력)
        
        // age에 1을 더하여 출력 (강제 언래핑 없이 사용 가능)
        print(age + 1) // 2 (age가 nil이 아님을 보장)
        
        // age를 Int형으로 바인딩
        let age1: Int = age
        print(age1) // 1 (age의 값을 출력)
        
        // age에 2를 더한 값을 age2에 저장하고 출력
        let age2 = age + 2
        print(age2) // 3
    }
}

// MyAge 클래스의 인스턴스를 생성하고 나이를 1로 설정
var han = MyAge(age: 1)

// printAge 메서드를 호출하여 나이를 출력
han.printAge()

 

for-in문

*for 문 다음의 실행코드가 한 줄이라도 괄호({})를 필수적으로 사용

for i in 1...5 {
print("\(i) 안녕")
}
for _ in 1...5 {
print("안녕")
}

 

while 반복문

// 변수 myCount를 0으로 초기화
var myCount = 0

// myCount가 1000보다 작은 동안 반복
while myCount < 1000 {
    myCount += 1 // myCount의 값을 1씩 증가
}

// myCount의 최종 값을 출력
print(myCount) // 결과는 1000

 

repeat~while 반복문

// 변수 i를 10으로 초기화
var i = 10

// repeat-while 루프 시작
repeat {
    i = i - 1 // i를 1 감소시킴
    print(i) // 현재 i의 값을 출력
} while (i > 0) // i가 0보다 큰 동안 반복

// 출력 결과:
// 9
// 8
// 7
// 6
// 5
// 4
// 3
// 2
// 1
// 0

반복문에서 빠져나오기 (break)

for i in 1..<10 { // 1부터 9까지 반복
    if i > 5 { // i가 5보다 큰 경우
        break // 반복문을 종료
    }
    print(i) // i가 5 이하일 때만 출력
}

 

 

옵셔널은 연관 값(associated value)을 갖는 enum

// Optional 열거형 정의
public enum Optional<Wrapped> {
    case none          // 값이 없음을 나타내는 경우
    case some(Wrapped) // 값이 있는 경우 (Wrapped 타입의 값을 포함)
}

// Optional 타입의 변수 선언 및 초기화
var x: Int? = 20 // .some(20)으로 초기화됨
var y: Int? = Optional.some(10) // Optional.some을 사용하여 10으로 초기화
var z: Int? = Optional.none // 값이 없는 경우로 초기화

// Optional<Int> 타입의 변수 x1을 직접 초기화 
var x1: Optional<Int> = Optional.some(30) // .some(30)으로 초기화

// 변수 x, y, z, x1의 값을 출력
print(x, y, z, x1) // 출력: Optional(20) Optional(10) Optional.none Optional(Optional(30))

if 문 조건에서 콤마: 조건나열(condition-list)

var x = 1
var y = 2

// 첫 번째 if 문: x가 1이고 y가 2일 때
if x == 1 && y == 2 { // 논리식이 둘 다 참일 때
    print(x, y) // 출력: 1 2
}

// 두 번째 if 문: x가 1이고 y가 2일 때
if x == 1, y == 2 { // 조건이 둘 다 참일 때, 두 조건을 콤마로 연결한 condition-list
    print(x, y) // 출력: 1 2
}

var a: Int? = 1 // 옵셔널 정수형 변수 a 선언 및 초기화
var b: Int? = 2 // 옵셔널 정수형 변수 b 선언 및 초기화
print(a, b) // 출력: Optional(1) Optional(2)
// 강제 언래핑을 통해 값을 출력
print(a!, b!) // 출력: 1 2


if let a1 = a, let b1 = b { // a와 b가 nil이 아니면, 언래핑하여 a1과 b1에 대입
    print(a1, b1) // 출력: 1 2
}

// 오류 발생 코드 (주석 처리된 부분)
// if let a1 = a && let b1 = b { // error: expected ',' joining parts of a multi-clause condition
//     print(a1, b1)
// }

 

범위 연산자( One-Sided Ranges)

// 문자열 배열 names를 정의
let names = ["A", "B", "C", "D"]

// 배열의 인덱스 2부터 끝까지 반복
for name in names[2...] { // 2번째 인덱스부터 끝까지의 요소를 가져옴
    print(name) // 각 이름을 출력
} 
// 실행 결과:
// C
// D

 

switch-case문 

let anotherCharacter: Character = "a" // anotherCharacter를 "a"로 초기화

switch anotherCharacter {
case "a": // "a"인 경우
    print("a글자") // 실행문 추가: "a"일 때 출력
case "A": // "A"인 경우
    print("A글자") // 출력: "A글자"
default: // 위의 경우가 아닌 경우
    print("A글자 아님") // 출력: "A글자 아님"
}
//bmi if문 switch-case문으로 변경
//if 문 

let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")


//switch-case문
let weight = 60.0
let height = 170.0
let bmi = weight / (height * height * 0.0001) // kg/m*m
var body = ""

switch bmi {
case _ where bmi >= 40:
    body = "3단계 비만"
case _ where bmi >= 30:
    body = "2단계 비만"
case _ where bmi >= 25:
    body = "1단계 비만"
case _ where bmi >= 18.5:
    body = "정상"
default:
    body = "저체중"
}

print("BMI:\(bmi), 판정:\(body)")

 

where: 조건을 추가

var numbers: [Int] = [1, 2, 3, 4, 5] // 정수 배열 numbers 선언 및 초기화

// numbers 배열의 각 요소에 대해 반복
for num in numbers where num > 3 { // num이 3보다 큰 경우에만 실행
    print(num) // 조건을 만족하는 num을 출력
}

switch-case에서 where절 사용하기

var temperature = 60
switch (temperature)
{
case 0...49 where temperature % 2 == 0:
print("Cold and even")
case 50...79 where temperature % 2 == 0:
print("Warm and even")
case 80...110 where temperature % 2 == 0:
print("Hot and even")
default:
print("Temperature out of range or odd")
}
//과제 : where절 예제 하나 만들기



// 숫자 변수를 정의
var number = 15

// switch 문을 사용하여 number의 값을 평가
switch number {
case 1...10 where number % 2 == 0:
    print("Number is between 1 and 10 and is even.")
case 1...10 where number % 2 != 0:
    print("Number is between 1 and 10 and is odd.")
case 11...20 where number % 2 == 0:
    print("Number is between 11 and 20 and is even.")
case 11...20 where number % 2 != 0:
    print("Number is between 11 and 20 and is odd.")
default:
    print("Number is out of range.")
}

// 출력 결과:
// Number is between 11 and 20 and is odd.

fallthrough

var value = 4
switch (value)
{
case 4:
print("4")
fallthrough
case 3:
print("3")
fallthrough
case 2:
print("2")
fallthrough
default:
print("1")
}

함수

// 함수 정의부의 값을 매개변수, 호출시의 값은 아규먼트라고 부름
#include <stdio.h>
void Fun( int param ) // parameter(매개변수, 인자), 형식 매개변수(formal parameter)
{
printf("%d",param);
}
int main()
{
Fun( 10 ); // 10은 argument(전달인자), 실 매개변수(actual parameter)
return 0;
}

 

 

함수 선언 방법

//매개변수를 받지 않으며 결과를 반환하지도 않고 오직 메시지만 출력
func sayHello() { //리턴값 없으면( -> Void ) 지정하지 않아도 됨
print("Hello")
}
void sayHello() { //C, C++
printf("Hello");
}
//하나의 문자열과 하나의 정수를 매개변수로 받아서 문자열을 반환
func message(name: String, age: Int) -> String {
return("\(name) \(age)")
}

 

 

c->swift

//c
int add(int x, int y) { //C, C++
return(x+y);
}
add(10,20);

//swift
func add(x: Int, y: Int) -> Int {
return(x+y)
}
print(add(x:10, y:20))//30
print(type(of:add))//(Int,Int)->Int

 

'Swift' 카테고리의 다른 글

iOS실무 프로그래밍 4주차  (0) 2025.03.26
iOS프로그래밍 실무 3주차  (0) 2025.03.19
iOS 프로그래밍 실무 1주차  (0) 2025.03.05
iOS 기초 프로그래밍15주차  (0) 2024.12.11
iOS 기초 프로그래밍 14주차  (0) 2024.12.04

-기본연산

연산자 의미
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
%% 나눗셈 나머지
^ 제곱

 

 

-산술연산 함수

 

 

함수 의미
log() 로그함수
sqrt() 제곱근
max() 가장 큰 값
min() 가장 작은 값
abs() 절댓값
factorial() 팩토리얼
sin(), cos(), tan() 삼각함수

 

 

 

1. 변수명 지정방법

- 첫글자는 영문자 또는 마침표로 시작(일반적으로 영문자)

- 두번째 글자부터는 영문자, 숫자 , 마침표, 밑줄 사용가능(특수문자 사용불가)

- 대문자, 소문자 구분

- 변수명 중간에 변수명 사용 불가

 

+)변수명 저장할때 alt+-누르면 <-가 입력됨

 

2.변수의 자료형

 

-특수값

  • NULL/
  • NA(결측값)
  • NAN(수학적으로 정의 불가능한 값) ex) sqrt(-3)
  • Inf,-Inf (양의 무한대(Inf)/ 음의 무한대(-Inf))

 

3. 변수값은 변경 가능

 

 


1. 벡터의 개념

 

 

1차원 배열: 벡터(vector)로 표현

ex) 1학년의 영어 성적 자료

 

2차원 배열: 매트릭스(martix) 또는 데이터 프레임(data frame)으로 표현

 

 

2. 벡터 만들기

 

-c는 "combine"의 약자, 여러 값을 하나의 벡터로 결합하는 데 사용

w <-c(1,2,3,"a","b","c") 
w #[1]"1""2""3""a""b"c"

*출력 결과 앞에 [1]은  [1]은 "1"이 벡터의 첫 번째 요소를 뜻함(인덱스)

+) R은 인덱스가 1부터 시작함

 

 

-연속적인 숫자로 이루어진 벡터 생성

v1 <- c(1,2,3,50:60)
v1 #[1]  1  2  3 50 51 52 53 54 55 56 57 58 59 60

 

 

- seq() 함수

일정한 간격의 숫자로 이루어진 벡터 생성 

v3 <- seq(1, 10, 3) 
v3 # [1] 1 3 6 9

 

 

-rep() 함수

반복된 숫자로 이루어진 벡터 생성

v5 <- rep(1, times = 5)  # 1을 5번 반복
v5 # 출력 결과: [1] 1 1 1 1 1

v6 <- rep(1:5, times = 3)  # 1에서 5까지 3번 반복
v6 # 출력 결과: [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

v7 <- rep(c(1, 2, 3), times = 3)  #1, 2, 3을 하나의 벡터로 묶고/ 1, 2, 3을 3번 반복
v7 # 출력 결과: [1] 1 2 3 1 2 3 1 2 3

 

 

-names()

벡터에 저장된 값에 이름을 부여할 경우

score <- c(90, 85, 70)  # 점수 벡터 생성
score# 출력 결과: [1] 90 85 70

names(score)  # 현재 이름 확인
# 출력 결과: NULL (아직 이름이 지정되지 않음)

names(score) <- c("John", "Tom", "Jane")  # 점수에 이름 지정
names(score)  # 이름 확인
# 출력 결과: [1] "John" "Tom"  "Jane"

score  # 최종 점수 벡터 출력
# 출력 결과: 
# John Tom Jane 
#  90  85  70

 

 

-벡터에서 원소 값 추출방법

d <-c(1,4,5,7)
d[1] #d의 첫번째 값 출력
#출력결과: [1] 1

d[2] #d의 두번째 값 출력
#출력결과: [1] 4

*벡터에서 []는 요소를 선택하거나 추출

 

 

-여러 값 한번에 추출

d <- c(1, 4, 5, 7, 8)  # 벡터 d 생성

d[c(1, 3, 5)]  # 1번째, 3번째, 5번째 요소 선택
# 출력 결과: [1] 1 5 8

d[1:3]  # 1번째부터 3번째 요소 선택
# 출력 결과: [1] 1 4 5

d[seq(1, 5, 2)]  # 1부터 5까지 2씩 증가하는 인덱스 선택
# 출력 결과: [1] 1 5 8

d[-2]  # 2번째 요소를 제외한 나머지 요소 선택
# 출력 결과: [1] 1 5 7 8

d[-c(3:5)]  # 3번째부터 5번째 요소를 제외한 나머지 요소 선택
# 출력 결과: [1] 1 4

 

 

 

-벡터에서 이름으로 값 추출

GNP <- c(2090, 2450, 960)  # GNP 벡터 생성
GNP
# 출력 결과: [1] 2090 2450  960

names(GNP) <- c("Korea", "Japan", "Nepal")  # GNP에 이름 지정
GNP
# 출력 결과: 
# Korea  Japan  Nepal 
# 2090  2450   960 

GNP[1]  # 1번째 요소 선택
# 출력 결과: [1] 2090

GNP["Korea"]  # "Korea"에 해당하는 요소 선택
# 출력 결과: Korea 
# 2090 

GNP[c("Korea", "Nepal")]  # "Korea"와 "Nepal"에 해당하는 요소 선택
# 출력 결과: 
# Korea  Nepal 
# 2090   960

 

 

 

-벡터의 저장된 원소 값 변경

v1 <- c(1, 5, 7, 8, 9)  # v1 벡터 생성
v1
# 출력 결과: [1] 1 5 7 8 9

v1[2] <- 3  # 2번째 요소를 3으로 변경
v1
# 출력 결과: [1] 1 3 7 8 9

v1[c(1, 5)] <- c(10, 20)  # 1번째 요소를 10으로, 5번째 요소를 20으로 변경
v1
# 출력 결과: [1] 10  3  7  8 20

'R' 카테고리의 다른 글

조건문, 반복문, 함수  (0) 2025.04.05
벡터&매트리스&데이터프레임  (0) 2025.03.27

-프론트엔드 신입개발자 질문&답변

 

뤼튼

 

HTML이란 무엇인가요?

HTML은 웹 페이지의 구조를 정의하는 마크업 언어입니다.
CSS의 역할은 무엇인가요?

CSS는 웹 페이지의 스타일을 지정하는 데 사용됩니다.
JavaScript란 무엇인가요?

JavaScript는 웹 페이지에 동적인 기능을 추가하는 프로그래밍 언어입니다.
반응형 웹 디자인이란 무엇인가요?

다양한 기기에서 웹 페이지가 잘 보이도록 설계하는 방법입니다.
DOM이란 무엇인가요?

DOM은 문서 객체 모델로, 웹 페이지의 구조를 나타내는 객체입니다.
AJAX란 무엇인가요?

비동기적으로 웹 페이지를 업데이트할 수 있게 해주는 기술입니다.
RESTful API란 무엇인가요?

REST 원칙에 따라 설계된 웹 서비스 API입니다.
프레임워크와 라이브러리의 차이점은 무엇인가요?

프레임워크는 전체 구조를 제공하고, 라이브러리는 특정 기능을 제공합니다.
CSS Flexbox란 무엇인가요?

요소들을 효율적으로 배치할 수 있는 CSS 레이아웃 모듈입니다.
CSS Grid란 무엇인가요?

2차원 레이아웃을 구성할 수 있는 CSS 모듈입니다.
브라우저 호환성이란 무엇인가요?

다양한 브라우저에서 웹 페이지가 동일하게 작동하는 것을 의미합니다.
SEO란 무엇인가요?

검색 엔진 최적화를 통해 웹 사이트의 가시성을 높이는 과정입니다.
버전 관리 시스템이란 무엇인가요?

코드 변경 사항을 추적하고 관리하는 시스템입니다. (예: Git)
모듈화란 무엇인가요?

코드를 독립적인 모듈로 나누어 관리하는 방법입니다.
CORS란 무엇인가요?

Cross-Origin Resource Sharing의 약자로, 다른 출처의 리소스에 접근할 수 있게 해주는 메커니즘입니다.
Webpack이란 무엇인가요?

JavaScript 애플리케이션의 모듈 번들러입니다.
프론트엔드 성능 최적화 방법은 무엇인가요?

이미지 최적화, 코드 분할, 캐싱 등을 사용할 수 있습니다.
프로미스란 무엇인가요?

비동기 작업의 완료 또는 실패를 나타내는 객체입니다.
ES6의 주요 특징은 무엇인가요?

화살표 함수, 클래스, 템플릿 리터럴, 모듈 등이 포함됩니다.
웹 접근성이란 무엇인가요?

장애인 포함 모든 사용자가 웹을 이용할 수 있도록 하는 설계 원칙입니다.

 

 


perplexity

 

HTML/CSS 관련 질문

  1. Q: HTML5의 새로운 기능은 무엇인가요?
    A: 시맨틱 태그, 멀티미디어 지원, 캔버스, 로컬 스토리지 등
  2. Q: 시맨틱 태그의 장점은?
    A: 검색엔진 최적화, 코드 가독성 향상, 접근성 개선
  3. Q: CSS Box Model이란?
    A: 콘텐츠, 패딩, 보더, 마진으로 구성된 요소의 레이아웃 모델
  4. Q: Flexbox와 Grid의 차이점은?
    A: Flexbox는 1차원, Grid는 2차원 레이아웃 시스템
  5. Q: CSS 선택자 우선순위는?
    A: !important > 인라인 스타일 > ID > 클래스 > 태그

JavaScript 관련 질문

  1. Q: var, let, const의 차이점은?
    A: 스코프와 재선언/재할당 가능 여부의 차이
  2. Q: 호이스팅이란?
    A: 변수와 함수 선언이 스코프 최상단으로 끌어올려지는 현상
  3. Q: 클로저란?
    A: 외부 함수의 변수에 접근할 수 있는 내부 함수
  4. Q: 이벤트 버블링과 캡처링의 차이는?
    A: 이벤트 전파 방향의 차이 (상향 vs 하향)
  5. Q: Promise란?
    A: 비동기 작업의 최종 완료 또는 실패를 나타내는 객체

프레임워크/라이브러리 관련 질문

  1. Q: React의 특징은?
    A: 가상 DOM, 컴포넌트 기반 구조, 단방향 데이터 흐름
  2. Q: Vue.js의 장점은?
    A: 학습 곡선이 낮고, 가볍고 유연함
  3. Q: Angular의 특징은?
    A: TypeScript 사용, 양방향 데이터 바인딩, 의존성 주입
  4. Q: Redux의 핵심 개념은?
    A: 단일 스토어, 액션, 리듀서, 불변성
  5. Q: jQuery와 모던 JavaScript의 차이점은?
    A: DOM 조작 방식, 브라우저 호환성, 성능 등의 차이

성능 최적화 관련 질문

  1. Q: 웹 성능 최적화 방법은?
    A: 이미지 최적화, 코드 분할, 캐싱, CDN 사용 등
  2. Q: 브라우저 렌더링 과정은?
    A: DOM 생성 > CSSOM 생성 > 렌더 트리 구축 > 레이아웃 > 페인트
  3. Q: 크리티컬 렌더링 패스란?
    A: 브라우저가 HTML을 화면에 렌더링하는 데 필요한 단계들
  4. Q: 레이지 로딩이란?
    A: 필요한 시점에 리소스를 로드하는 기술
  5. Q: 디바운싱과 쓰로틀링의 차이는?
    A: 이벤트 호출 제어 방식의 차이 (마지막 호출 vs 일정 간격)

GROK

HTML/CSS 관련 질문 (20개)

  1. HTML5의 새로운 기능은 무엇인가요?
    • 시맨틱 태그(<header>, <footer> 등), <canvas>, <video>, 로컬 스토리지 등입니다.
  2. 시맨틱 HTML이 왜 중요한가요?
    • SEO와 접근성을 개선하고, 코드 가독성을 높여줍니다.
  3. CSS에서 box-sizing 속성은 무엇인가요?
    • 요소의 크기 계산 방식을 정의하며, border-box는 패딩과 테두리를 포함합니다.
  4. Flexbox와 Grid의 차이점은 무엇인가요?
    • Flexbox는 1차원 레이아웃(행 또는 열), Grid는 2차원 레이아웃(행과 열)을 다룹니다.
  5. 반응형 디자인을 어떻게 구현하나요?
    • 미디어 쿼리, 상대 단위(%, vw, rem), 유연한 레이아웃을 사용합니다.
  6. CSS에서 position: absoluterelative의 차이는?
    • relative는 원래 위치 기준, absolute는 부모 요소 기준으로 배치됩니다.
  7. CSS 선택자의 우선순위는 어떻게 결정되나요?
    • Specificity(특이도)와 순서에 따라 결정되며, !important가 가장 높습니다.
  8. BEM 방법론에 대해 설명해주세요.
    • Block, Element, Modifier로 클래스를 구조화해 가독성과 유지보수를 개선합니다.
  9. CSS에서 z-index는 무엇인가요?
    • 요소의 쌓임 순서를 정의하며, 값이 클수록 위에 표시됩니다.
  10. 브라우저 호환성을 어떻게 해결하나요?
    • Vendor 접두사(-webkit-, -moz-)와 폴리필을 사용합니다.
  11. CSS 전처리기(Preprocessor)란 무엇인가요?
    • Sass, Less처럼 변수와 믹스인을 사용해 CSS를 효율적으로 작성하게 해줍니다.
  12. CSS에서 float의 역할은?
    • 요소를 좌우로 띄워 텍스트가 주위를 감싸게 합니다.
  13. clearfix란 무엇인가요?
    • float로 발생한 부모 요소 붕괴를 해결하기 위한 기법입니다.
  14. CSS에서 display: nonevisibility: hidden의 차이는?
    • display: none은 공간까지 제거, visibility: hidden은 공간은 남깁니다.
  15. HTML에서 alt 속성은 왜 중요한가요?
    • 이미지 로드 실패 시 대체 텍스트를 제공하고, 접근성을 높입니다.
  16. CSS에서 remem 단위의 차이는?
    • rem은 루트 폰트 크기 기준, em은 부모 요소 폰트 크기 기준입니다.
  17. CSS 애니메이션은 어떻게 만드나요?
    • @keyframesanimation 속성을 사용합니다.
  18. 미디어 쿼리란 무엇인가요?
    • 화면 크기나 디바이스 조건에 따라 스타일을 적용하는 방법입니다.
  19. CSS에서 overflow 속성은 무엇인가요?
    • 콘텐츠가 요소를 넘칠 때 처리 방법을 정의합니다(예: scroll, hidden).
  20. HTML에서 DOCTYPE의 역할은?
    • 브라우저에 문서 유형을 알려 렌더링 모드를 설정합니다.

JavaScript 관련 질문 (30개)

  1. var, let, const의 차이점은 무엇인가요?
    • var는 함수 스코프, letconst는 블록 스코프이며, const는 재할당 불가입니다.
  2. 클로저(Closure)란 무엇인가요?
    • 함수가 외부 스코프 변수에 접근할 수 있는 현상입니다.
  3. 이벤트 버블링과 캡처링의 차이는?
    • 버블링은 자식에서 부모로, 캡처링은 부모에서 자식으로 이벤트가 전파됩니다.
  4. 호이스팅(Hoisting)이란 무엇인가요?
    • 선언이 스코프 최상단으로 끌어올려지는 JavaScript 동작입니다.
  5. 프로미스(Promise)란 무엇인가요?
    • 비동기 작업의 성공/실패를 처리하는 객체입니다.
  6. async/await의 역할은?
    • 프로미스를 더 간결하게 작성할 수 있게 해줍니다.
  7. this 키워드는 어떻게 동작하나요?
    • 호출 방식에 따라 참조 대상이 달라집니다(예: 객체 메서드면 해당 객체).
  8. 이벤트 루프(Event Loop)란 무엇인가요?
    • 비동기 작업을 관리하며 콜 스택과 큐를 조율합니다.
  9. 화살표 함수와 일반 함수의 차이는?
    • 화살표 함수는 this를 바인딩하지 않습니다.
  10. Array.map과 Array.forEach의 차이는?
    • map은 새 배열을 반환하고, forEach는 반환값이 없습니다.

ios 개발 스택 중요도 순서>

 

Swift - 30%

iOS 앱 개발의 주요 프로그래밍 언어입니다.
Xcode - 20%

iOS 앱 개발을 위한 통합 개발 환경(IDE)입니다.
UIKit - 15%

iOS의 기본 사용자 인터페이스 프레임워크입니다.
SwiftUI - 10%

최신 UI 프레임워크로, 선언적 방식으로 UI를 구축할 수 있습니다.
CocoaPods / Swift Package Manager - 5%

외부 라이브러리 관리 도구입니다.
RESTful API - 5%

서버와 통신하기 위한 API 이해가 필요합니다.
Core Data - 5%

데이터 관리를 위한 프레임워크입니다.
Git - 5%

버전 관리 시스템으로 팀 협업에 필수적입니다.
Testing (XCTest) - 3%

애플리케이션의 품질 보장을 위한 테스트 프레임워크입니다.
App Store 배포 - 2%

 


hello, world 앱을 만드는 간단한 ios 예제>

 

<스토리보드 사용하기>

 

  1. 프로젝트 생성:

    Xcode를 열고 "Create a new Xcode project"를 선택합니다.
    "App"을 선택하고 "Storyboard"를 선택합니다.
  2. UI 구성:

    Main.storyboard 파일을 열고, View Controller를 선택합니다.
    왼쪽 패널에서 "Label"을 드래그하여 View Controller에 추가합니다.
    Label의 텍스트를 "Hello, World!"로 변경합니다.
  3. 앱 실행:

    Command + R을 눌러 앱을 실행합니다.

 

 코드로 만들기

 

  1. 프로젝트 생성:

    Xcode를 열고 "Create a new Xcode project"를 선택합니다.
    "App"을 선택하고 "Swift"와 "UIKit"을 선택합니다.
  2. 코드 작성:

    ViewController.swift 파일을 열고, viewDidLoad 메서드에 아래 코드를 추가합니다.
    swift


import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let label = UILabel()
        label.text = "Hello, World!"
        label.textAlignment = .center
        label.frame = CGRect(x: 0, y: 0, width: 300, height: 50)
        label.center = view.center
        view.addSubview(label)
    }
}

3.앱 실행:

Command + R을 눌러 앱을 실행합니다.

 

<SwiftUI 사용하기>

 

  1. 프로젝트 생성:

    Xcode를 열고 "Create a new Xcode project"를 선택합니다.
    "App"을 선택하고 "SwiftUI"를 선택합니다.
  2. 코드 작성:

    ContentView.swift 파일을 열고 아래 코드를 작성합니다.
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .font(.largeTitle)
            .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

3. 앱 실행:

Command + R을 눌러 앱을 실행합니다.

 


스토리보드, 코드, SwiftUI의 장단점을 비교>

 

 

 

물음표가 두개가 있는 연산자(셤)

예시)

let optionalValue: String? = nil // 옵셔널 문자열 변수, 현재 nil로 초기화
let defaultValue = "기본 값" // 기본 값 문자열 변수

// nil-coalescing 연산자 사용
let result = optionalValue ?? defaultValue // optionalValue가 nil이면 defaultValue를 사용

print(result) // 결과 출력: 기본 값

https://bbiguduk.gitbook.io/swift

 

The Swift Programming Language (한국어) | Swift

Last updated 5 months ago

bbiguduk.gitbook.io

 

이름 10번 출력

let name = "홍길동" // 출력할 이름

// 0부터 9까지 반복
for _ in 0..<10 {
    print(name) // 이름 출력
}

'Swift' 카테고리의 다른 글

iOS프로그래밍 실무 3주차  (0) 2025.03.19
iOS 프로그래밍 실무 2주차  (0) 2025.03.17
iOS 기초 프로그래밍15주차  (0) 2024.12.11
iOS 기초 프로그래밍 14주차  (0) 2024.12.04
iOS 프로그래밍 기초 13주차  (0) 2024.11.27

vscode 에서 Django설치

 

-Python과 Python Extension Pack  설치

 

-Django설치 :터미널에서

pip install django

 

- Django 프로젝트가 생성

django-admin startproject project

 

 

- Django 개발 서버가 시작

python manage.py runserver

 

-.vscode 폴더 안에 launch.json 파일을 생성 하는 법

  • ctrl+shift+d(실행 및 디버그)로 "launch.json 파일 생성" 옵션을 선택후 launch.json 생성

 

*패키지: 프로젝트에서 필요한 외부 도구나 라이브러리

*Node.js에서는 이 패키지를 npm이라는 도구로 설치, 관리함

 

1. Node.js 프로젝트를 초기화하고 package.json생성

npm init -y

 

*package.json 파일은 프로젝트의 설정, 의존성 및 스크립트 등을 저장하는 파일

 

2. Express설치

npm install express

 *실행하면 node_modules폴더 생성됨( express 관련 파일들이 설치됨)

 

 

3.의존성 설치

npm install

*package.json에 정의된 모든 의존성 패키지를 설치함(프로젝트에 필요한 라이브러리 자동 설치)

 

4.package.json 에 scripts 안에 

"start": "node app.js"

추가하면 터미널에서 npm start 명령어를 실행하면 app.js 파일이 실행됨(서버를 쉽게 실행 가능)

서비스 동작 원리

1. 주소 입력과 DNS 조회

브라우저에 "www.example.com"을 입력하면 DNS(도메인 이름 시스템)가 이를 해당 서버의 IP 주소로 변환

  • DNS 역할: 도메인 이름과 IP 주소를 연결하는 인터넷의 주소록.
  • 비유: 도메인 이름은 사람이 기억하기 쉬운 주소, IP 주소는 서버의 정확한 위치를 알려주는 지도 좌표.

과정 요약:

  1. 사용자가 브라우저에 주소를 입력.
  2. DNS 서버가 해당 주소의 IP 주소를 반환.
  3. 브라우저가 반환된 IP 주소를 통해 서버에 연결.

2. 서버와 데이터베이스의 역할

  • 서버(Server): 클라이언트의 요청을 처리하고, 필요한 정보를 제공
  • 데이터베이스(Database): 정보를 저장하고, 요청에 따라 데이터를 반환

서버-클라이언트 동작 예시:

  1. 사용자가 쇼핑몰에서 상품을 검색.
  2. 서버가 데이터베이스에서 해당 상품 정보를 가져와 클라이언트에 전달.
  3. 복잡한 계산이 필요한 경우(예: 할인율 계산), 서버가 연산 후 결과를 반환.

3. 구현 방법: 기본 프로그래밍 개념

  • 반복문(Loop): 특정 작업을 반복 수행.
    • 예: 음악 플레이어에서 노래를 반복 재생.
  • 조건문(Conditional): 특정 조건에 따라 서로 다른 결과 실행.
    • 예: 회원가입 시 중복된 아이디를 확인.

4. 코드 재사용과 효율적 개발

  • 라이브러리: 자주 사용하는 코드를 미리 만들어 놓은 도구 모음.
  • 프레임워크: 개발을 쉽게 하고 구조를 표준화하는 틀.
    • Node.js: 서버 개발.
    • Express: API를 쉽게 구현할 수 있는 Node.js 프레임워크.

5. 웹 개발의 핵심 기술

  • HTML: 웹 페이지의 구조를 정의.
    • 예: 이미지, 텍스트, 버튼 위치.
  • CSS: 스타일(크기, 색상, 배경 등)을 정의.
  • JavaScript: 동적인 기능과 사용자 반응을 구현.

비유:

  • HTML은 건물의 뼈대,
  • CSS는 외관,
  • JavaScript는 건물의 전기 시스템으로, 사용자의 상호작용을 처리.

6. 데이터베이스 종류와 선택

종류특징)

SQL 정해진 규칙에 따라 데이터를 저장, 안정적 MySQL, PostgreSQL
NoSQL 비정형 데이터를 저장, 유연성 높음 MongoDB, DynamoDB

7. 모바일 개발의 차이점

플랫폼언어장점)

iOS Swift 애플 제품에 최적화, 안정성 높음
Android Kotlin 오픈 소스, 다양한 기기 지원
크로스 플랫폼 Flutter 단일 코드로 iOS와 Android 개발 가능

8. 데이터 직무와 블록체인

  • 데이터 직무:
    • 데이터 엔지니어: 데이터를 효과적으로 처리하고 관리.
    • 데이터 애널리스트: 데이터를 분석해 비즈니스 전략 제안.
    • 데이터 사이언티스트: 머신러닝을 통해 데이터 기반 예측 수행.
  • 블록체인 개발:
    • Solidity 언어를 사용해 DApp(탈중앙화 애플리케이션) 개발.
    • 활용 예시: 안전한 전자 투표 시스템 구현.

9. IoT와 임베디드 시스템

  • IoT(사물 인터넷): 다양한 기기가 인터넷에 연결되어 데이터 교환.
    • 예: 스마트 냉장고가 유통기한을 알려줌.
  • 임베디드 시스템: C 언어와 Python을 사용해 가전제품 및 로봇 청소기 설계.

환경

-visual studio 터미널 사용

-linux기반 ssh원격 서버


 

  • 아래 명령어를 사용해서 어떤 파일과 디렉토리가 있는지 확인 후 압축(visual studio터미널 사용함)
ls -l
zip -r example.zip example

 


 

  • 처음에 visual studio터미널에서 아래와 같은 명령어를 사용해, 다운로드를 하려고 했는데 실패함
scp [옵션] [유저명]@[원격 서버 IP 주소]:[원격 파일 경로] [로컬 저장 경로]
scp -P 22 user@example.com:/home/user/example.zip /mnt/c/example.zip
  • 이 명령어를 실행했을때/ 오류메시지
scp: open local "/mnt/c/example.zip": No such file or directory

 

 

 

찾아보니, wsl 환경에서의 파일 경로 문제로 인해 오류가 발생한 것이라는 것을 알게됨

/mnt/c/는 WSL 에서 Windows파일시스템을 나타내는 경로인데, wsl 이 올바르지 않거나, 이 경로가 마운트 되지 않은 경우,

해당 경로에 접근 할 수 없어 오류가 발생한 것이라고 함


그리고 visual studio 터미널의 환경차이로 인해 오류가 발생할 수 있음

visual studio터미널은 powershell, cmd와 달리 기본적으로 Linux환경의 파일 경로 체계를 따르기 때문, /mnt/c/ 경로가 유효하지 않으면 파일 저장 불가

 

 

wsl 설정 확인하고 마운트 문제를 해결해, visual studio터미널에서 해결하는 방법도 있지만

powershell을 사용하는게 더 간단한 방법이라고 해서

 

PowerShell에서 다운로드 시도

scp [옵션] [유저명]@[원격 서버 IP 주소]:[원격 파일 경로] [로컬 저장 경로]
scp -P 22 user@example.com:/home/user/example.zip C:\example.zip

 

위와 같은 명령어를 사용해서 성공함


-PowerShell에서 성공한 이유를 찾아보니, wsl경로를 사용하지 않고, window의 로컬 경로를 사용 했기 때문

-PowerShell은 wsl과 분리된 windows네이티브 환경에서 동작하기 떄문( /mat/c/가 마운트되지 않아도 상관 없음)


 

 

scp명령어  간단 정리

 

  • -P [포트 번호]:
    SSH 연결에 사용할 포트를 지정, 기본값은 22번.
  • -r:
    디렉토리와 그 하위 파일을 모두 복사 (재귀적 복사)
  • -v:
    파일 전송 과정을 자세히 보여줌 (디버그 모드)
  • -C:
    파일을 압축하여 전송 속도를 빠르게 함

 

데이터 베이스(Datavase)

: 다양한 데이터 저장 및 관리 방법 제공

 

1. 데이터와 정보

  • 데이터: 문자, 숫자, 이미지, 영상 등 원시 자료
  • 정보 (information): 데이터를 가공해서 의미와 가치를 부여한 것

2. 데이터 베이스

  • 정의: 필요에 의해 데이터를 특정 공간에 지속적으로 모아놓은 것
  • DBMS(Database Management System): 데이터베이스를 관리하는 시스템, Oracle, MySQL, Microsoft SQL Server, PostgreSQL, MongoDB, Redis, IBM DB2 등이 포함됨.

(1. Oracle: 기업용 데이터 베이스, 강력한 성능과 보안 기능 제공

 2. MySQL: 오픈 관계형 데이터 베이스, 주로 웹 애플리케이션에 사용

 3.Microsoft SQL Server: 마이크로소프트에서 개발한 관계형 데이터베이스

 4. PostgreSQL: 오픈 소스 객체 관계형 데이터베이스

 5. MongoDB: 오픈 소스 NoSQL데이터베이스, 문서 지향 데이터 모델 사용

 6.Redis: 인메모리 데이터 구조 저장소, 주로 캐시나 세션 저장소로 사용

 7. IBM DB2: IBM에서 개발한 관계형 데이터베이스)

 

3. SQL(Structured Query Language)

  • 정의: 데이터베이스에서 데이터를 조작하는 데 사용하는 언어.
  • 사용예: 데이터 검색, 삽입, 업데이트 및 삭제 작업에 사용됨.

 

4. 데이터베이스 모델 유형

  • 계층형 데이터베이스: 1:N의 트리 구조로, 데이터 구조 변경에 유연함이 부족한 1970년대 시스템.
  • 네트워크형 데이터베이스: 초기 데이터베이스 모델로, 복잡한 1:N, 1:1, N:N 구조를 가짐.
  • 관계형 데이터베이스: 현재 가장 많이 사용되는 모델로, 데이터를 열과 행의 형태로 구성하며 논리적 관계를 활용. 예시로는 MySQL, PostgreSQL, Oracle 등이 있음.
  • 객체지향형 데이터베이스: 객체 단위(데이터+메소드)로 구성되며, OOP(Object-Oriented Programming, 객체 지향 프로그래밍)와 함께 발전한 모델.
  • NoSQL 데이터베이스비관계형 데이터베이스로, 구조가 정해져 있지 않아 유연성 및 확장성이 뛰어남. 온라인 게임이나 전자상거래 앱 등에 주로 사용.

5. 관계형 vs 비관계형 데이터베이스

  • 관계형 데이터베이스:
    -데이터는 행과 열로 구성된 테이블에 저장됨.
    -규칙에 따라 데이터를 입력하고 SQL을 통해 조작.
    -트랜잭션 관리를 위해 ACID(원자성, 일관성, 격리성, 내구성) 속성을 따름.
  • 비관계형 데이터베이스 (NoSQL):
    -데이터는 컬렉션 또는 문서의 형식으로 저장됨.
    -정해진 형식이 없고 유연성을 제공, JOIN 및 복잡한 쿼리 지원 불가.
    -대량 데이터 처리에 수평적 확장 가능.

 

6. SQL과 NoSQL의 비교

 

 

 

7. 정형, 비정형, 반정형 데이터

  • 정형 데이터: 미리 정해진 형식과 구조를 가진 데이터 (ex: RDBMS)
  • 비정형 데이터: 구조 없이 저장된 동영상, 이미지 등 (ex: NoSQL)
  • 반정형 데이터: 데이터 구조 정보가 데이터와 함께 제공되는 형태 (ex: XML, JSON)

NoSQL 데이터베이스 유형

1. Key-Value 데이터베이스

  • 특징:
    간단한 구조로, 데이터는 키와 값 쌍으로 저장됨
    높은 확장성과 성능을 제공
    대량의 데이터와 높은 트래픽을 처리하는 데 적합
  • 예시 서비스:
    -AWS DynamoDB: 완전 관리형 Key-Value 데이터베이스 서비스로, 자동으로 데이터의 분산과 복제를 관리
    -Redis: 인메모리 데이터 구조 저장소로, 키-값 쌍을 빠르게 저장하고 검색할 수 있음


2. Graph 데이터베이스

 

  • 특징:
    데이터 간의 복잡한 관계를 관리하기 위해 설계됨
    노드와 엣지의 형태로 데이터가 저장되어 개체 간의 관계를 표현
    소셜 네트워크 및 추천 시스템과 같은 복잡한 데이터 관계 분석에 유용
  • 예시 서비스:
    Amazon Neptune: 관계형 데이터를 그래프로 저장하여 빠른 쿼리 성능을 제공


3. Document 데이터베이스

  • 특징:
    JSON과 유사한 형식으로 비정형 또는 반정형 데이터를 저장
    사전 정의된 스키마가 없어 유연하게 데이터 모델링 가능
  • 예시 서비스:
    MongoDB: 데이터가 JSON과 유사한 문서 형태로 저장되어 유연한 데이터 구조 제공
    Amazon DocumentDB: MongoDB와 호환되는 완전 관리형 문서 데이터베이스


4. Column 데이터베이스

  • 특징:
    고정된 스키마가 없는 컬럼 중심의 데이터 저장 방식
    대량의 데이터를 효과적으로 관리
  • 예시 서비스:
    Apache Cassandra: 고성능 및 확장성을 제공하는 분산형 Column 스토리지 시스템

  • 관계형 데이터베이스: Amazon RDS, Amazon Aurora
  • 비관계형 데이터베이스: Amazon DynamoDB
  • 인메모리 데이터베이스: Amazon ElastiCache
  • 데이터 웨어하우스: Amazon Redshift

 

Amazon RDS (Relational Database Service)

  • 개요:  AWS에서 관계형 데이터베이스를 쉽게 설정하고 운영할 수 있는 서비스, 다양한 데이터베이스 엔진을 지원하며, 필요한 리소스에 따라 확장이 가능
  • 특징
    -선택 가능한 데이터베이스 엔진: Aurora, PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, Oracle, IBM Db2
    -자동화된 백업 및 소프트웨어 관리
    -장애 감지 및 복구 기능 제공
    -사용자가 직접 데이터베이스를 제어할 수는 없지만, 백업 스냅샷 생성 및 복원 가능
    -읽기 전용 복제본(Read Replica) 기능으로 읽기 확장 가능
    -AWS IAM을 통한 접근 제어
    -가상 사설 클라우드(VPC)에서 데이터베이스 배치 가능

Amazon RDS 관련관리모델

  • 온프레미스배포

           •사용자가직접관리

           •장비운영, OS 설치및운영, 데이터베이스솔루션설치및운영까지모두담당

 

  • AmazonEC2배포

            • AWS EC2 서버에 데이터베이스 솔루션을 설치하고 운영

            •장비운영, OS 설치및운영은AWS가담당하고, 데이터베이스솔루션의설치및운영은사용자담당

 

 

 


인스턴스 클래스

  1. 인스턴스 유형:

    -EC2와 유사하게 다양한 크기 제공: micro, small, medium, large, xlarge, 2xlarge, 4xlarge, 8xlarge, 16xlarge.
  2. 범용(General Purpose) 인스턴스:

    -시리즈: db.t4g, db.t3, db.m6g, db.m5.
    -균형 잡힌 컴퓨팅, 메모리, 네트워크 리소스 제공.
    -일반적인 데이터베이스 워크로드에 적합.
  3. 메모리 최적화(Memory Optimized) 인스턴스:

    -시리즈: db.r6g, db.r5.
    -메모리 집약적 워크로드에 고성능 제공.
    -대규모 인메모리 처리 애플리케이션에 적합.
  4. 성능 최적화(Performance Optimized) 인스턴스:

    -시리즈: db.x2g, db.z1d.
    -고성능 데이터베이스 워크로드에 최적화.
    -높은 처리량이 요구되는 엔터프라이즈 애플리케이션에 적합.

RDS 배포

  1.  Read Replica (읽기 전용 복제본)
    -목적: 읽기 작업을 더 많이 처리하기 위해 사용.
    -특징:
        -최대 5개의 Read Replica 생성 가능. 
        -쓰기는 메인 데이터베이스에서만 가능.
        -비동기 복제로 인해 정합성 문제 발생 가능.
        -부하 분산 및 데이터 백업 기능 제공.
  2.  Multi-AZ (다중 가용 영역)
    -목적: 고가용성을 위한 장애 복구.
    -특징:
        -여러 가용 영역에 복제본을 구성하여 동기식 복제를 수행.
        -메인 데이터베이스에 장애가 발생하면 복제본 데이터베이스로 자동 복구 (Failover).
        -복제본 데이터베이스는 장애 발생 전까지는 액세스할 수 없음.
  3.  Multi-Region (다중 지역)
    -목적: 전 세계 여러 지역에 DB 인스턴스를 생성하여 지연 시간 축소 및 재해 복구(DR) 지원.
    -특징: 각 리전에 배포된 데이터베이스를 활용하여 애플리케이션 성능 향상.

 

 

Amazon Aurora

  • AWS 관계형 데이터베이스: AWS에 최적화된 관계형 데이터베이스.
  • 엔진 선택: MySQL 또는 PostgreSQL 중 선택 가능.
  • 자동 용량 확장: 스토리지가 10GB 단위로 자동 확장되며, 최대 128TB까지 지원.
  • 읽기 전용 복제본: 최대 15개의 읽기 전용 복제본 제공 (RDS는 최대 5개).
  • 성능:
    RDS MySQL에 비해 최대 5배 성능 향상.
    RDS PostgreSQL에 비해 최대 3배 성능 향상.
  • 비용: RDS보다 약 20% 비쌈 (프리티어 없음).
  • 효율성: 성능과 효율성 측면에서 RDS보다 Aurora 선택 가능.
  • 호환성: MySQL 및 PostgreSQL로 쉽게 이전 가능하며, 기존 SQL 문 사용 가능.

DynamoDB

  • 비관계형 데이터베이스: 키-값 데이터베이스 (NoSQL).
  • 데이터 저장 방식: 서로 연결되지 않는 개별 형태로 저장, 복잡하고 비구조화된 데이터에 적합.
  • 고가용성: 완전 관리형 데이터베이스로, 3개의 가용 영역(AZ)에 복제본 운영.
  • 빠른 처리 성능: 구조가 단순하여 대규모 환경에서도 일관되게 10ms 미만의 낮은 지연 시간(low latency) 제공.
  • 서버리스: 별도의 서버 구축이 필요 없으며, 서버 프로비저닝, 패치, 소프트웨어 설치 불필요.
  • 자동 용량 조정: 테이블이 자동으로 확장 및 축소됨.
  • 테이블 클래스 선택: 워크로드 및 접속 빈도에 따라 Standard 및 Standard-IA 테이블 클래스 선택 가능.

Amazon ElastiCache

  • 인메모리 데이터베이스: 데이터를 메모리에 저장하여 빠르게 처리.
  • 용도: 주로 실시간 애플리케이션의 데이터베이스 처리 지원.
  • 두 가지 버전:
    -ElastiCache for Memcached: 자주 접근하는 데이터를 메모리에 저장하고 빠르게 처리하는 캐싱 시스템.
    -ElastiCache for Redis: 데이터베이스, 캐시, 메시지 브로커 및 대기열 용도로 사용되는 인메모리 데이터베이스로, 1ms 미만의 지연으로 빠른 데이터 처리 가능.


Amazon Redshift

  • 데이터 웨어하우스 서비스: PostgreSQL 기반의 관리형 데이터 웨어하우스.
  • 특화: OLAP(Online Analytical Processing)에 적합하며, 분석 쿼리에 최적화된 열 기반 스토리지 사용.
  • 대량 병렬 처리(MPP): 빠르고 비용 효율적인 비즈니스 의사결정 지원.
  • 통합: 다른 AWS 서비스와 쉽게 통합 가능.


Amazon Athena

  • 서버리스 쿼리 서비스: Amazon S3에 저장된 데이터를 SQL 쿼리로 분석.
  • 지원하는 데이터 형식: CSV, JSON, ORC, Avro, Parquet.
  • 요금: 스캔한 데이터 TB당 5달러.
  • 제약사항: 동시 실행 쿼리 수 최대 5개, S3 버킷 생성 최대 100개, 데이터베이스 생성 최대 10,000개.


DMS (Database Migration Service)

  • 데이터베이스 마이그레이션 서비스: 데이터베이스 간의 쉽고 빠른 마이그레이션 지원.
  • 마이그레이션 유형:
    -Homogeneous migration: 같은 데이터베이스로 마이그레이션.
    -Heterogeneous migration: 다른 데이터베이스로 마이그레이션 (자동 변환 수행).
  • 다운타임 최소화: 마이그레이션 중에도 원본 데이터베이스 사용 가능.

 

 

 

 

 

 

출처: 공준익 교수님 수업자료 

'네트워크 보안' 카테고리의 다른 글

클라우드 기타 용어 간단 정리  (0) 2024.11.25
클라우드를 실현하는 기술  (0) 2024.11.25
클라우드 서비스  (0) 2024.11.25
클라우드 기초  (0) 2024.09.10

add1의 자료형
extraneous필요x

후행 클로저는 뒤쪽에 중괄호 열고 닫기

후행클로저 까지 시험

func add(x:Int, y:Int)->Int{
    return x+y
}
print(add(x: 3, y: 5))
print(type(of: add))
let add1 = { (x:Int, y:Int)->Int in
    return x+y
}
print(add1(2,3))
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)//add1(1,2)
}
print(math(x:1,y:2,cal:add1))
var a = math(x: 10, y: 20, cal: { (x:Int, y:Int)->Int in
    return x+y
})//a라는 상수에 넣음/let은 처음 값을 아래서 못 바꿈 그래서 var
print(a)
a = math(x: 100, y: 200) {(x:Int, y:Int)->Int in
return x+y
}//후행클로저
print(a)
math(x: 10, y: 20, cal: { (x:Int, y:Int)->Int in
    return x+y
})//후행클로저 전
math(x: 10, y: 20) { (x:Int, y:Int)->Int in
    return x+y
}//후행클로저 후/ 중괄호 열고 닫기를 뒤쪽에 쓸 수 있음

 

 

 

 

 

 

 

출처: 한성현교수님 수업자료

'Swift' 카테고리의 다른 글

iOS 프로그래밍 실무 2주차  (0) 2025.03.17
iOS 프로그래밍 실무 1주차  (0) 2025.03.05
iOS 기초 프로그래밍 14주차  (0) 2024.12.04
iOS 프로그래밍 기초 13주차  (0) 2024.11.27
iOS 기초 프로그래밍 12주차  (0) 2024.11.20

+ Recent posts