postMan으로 테스트를 하는 과정에서 오류가 발생했다.

사유는 400번 에러, 요청에서의 오류였다.

 

로그를 살펴보면 logIn의 자료형을 바꿀 수 없다는 설명이 나온다. logIn은 uri인데 이상하게 변수로 인식을 하고 있다.

그 이유는 바로 나의 요청이 POST 방식임에도 불구하고 GET 방식으로 받아들여 uri를 path variable로 인식하고 있는 것이다.

나의 코드에서 결괏값은 int이다. 따라서 string 값인 logIn에 int인 결괏값을 넣을 수 없다고 말하고 있는 것이다.

 

MDN 문서를 살펴보면 http redirection에서 301포트는 메소드가 GET으로 변경될 가능성이 있으며, 308은 메소드와 바디가 변화하지 않는다 고 한다.

 

즉, 우리는 이 문제를 해결하기 위해 301 포트를 308로 변경해주면 된다.

cd /etc/nginx/sites-available
sudo vim {nginx 설정 파일명}

 

위와 같이 301 포트를 308로 변경해준 뒤, nginx를 재가동하고 코드를 다시 실행하면 에러가 해결된다.

반응형

'Server' 카테고리의 다른 글

[Spring Boot] gradle build :compilejava에서 멈추는 현상  (0) 2022.09.01
[Nginx] proxy pass 설정  (0) 2022.09.01

spring boot를 설치하고 ./gradlew clean build 코드로 빌드가 되지 않았다. compilejava에서 멈추는 현상이 발생했다.

나는 ec2를 사용해 서버를 구축했기 때문에 우선 ec2 인스턴스 중지 후 다시 가동시켜주었다. 이후 여러 방법을 시도해 보았고 해결이 됐던 방법을 아래에 적는다.

 

해결책은 바로 스왑이다. swap이란 메모리 즉, RAM이 부족할 때, 남는 HDD를 RAM으로 사용하는 것이다.ec2 프리티어의 경우 주어진 메모리의 양이 적어 빌드시나 다른 작업을 할 때 자주 에러가 난다. 이때마다 ec2를 재가동 시켜주어야 하고 작업 수행도 되지 않으니 스왑을 해주어야한다.스왑하는 방법은 공식 사이트에도 잘 나와있다.https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/

 

스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당

1.    dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성합니다. 명령에서 bs는 블록 크기이고 count는 블록 수입니다. 스왑 파일의 크기는 dd 명령의 블록 크기 옵션에 블록 수 옵션을 곱

aws.amazon.com

주의 사항은 스왑 공간은 절대로 32MB 미만이 되지 않아야 한다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
 위와 같이 설정할 경우 스왑 공간은 128MB x 16 = 2GB가 된다.

sudo chmod 600 /swapfile
 스왑 파일의 읽기 및 쓰기 권한 업데이트

sudo mkswap /swapfile
 Linux 스왑 영역 설정

sudo swapon /swapfile
 스왑 공간에 스왑 파일을 추가하여 스왑 파일 즉시 사용 가능
 
sudo swapon -s
 프로시저가 성공적인지 확인
 
sudo vi /etc/fstab
 /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작하도록 한다.

 

스왑 파일은 아래와 같이 마지막에 /swapfile swap swap defaults 0 0 코드를 추가해준다.

 

이로써 스왑 설정이 마무리됐다.

 

sudo ./gradlew clean build 를 실행해 빌드를 시도해보면 잘되는 것을 확인할 수 있다.

 

반응형

'Server' 카테고리의 다른 글

[POSTMAN] - POST 요청 시 GET 방식으로 인식 오류  (0) 2022.09.02
[Nginx] proxy pass 설정  (0) 2022.09.01

spring boot를 ec2에 올린 뒤 postman에서 테스트해보았으나, 잘되지 않았다.

우선 postman에서 도메인으로 접속할 때는 포트번호를 붙이지 않는다. 따라서 nginx 기본 설정 포트로 들어가게 된다.

 

이를 수정해주어야 한다.

cd /etc/nginx/sites-available
sudo vim [설정 파일 이름]

 

위와 같이 location 블록 안에 $uri/ =404; 코드를 주석 처리해주고

밑에 proxy_pass http://localhost:[원하는 포트 번호]; 코드를 추가해준다.

 

이렇게 하면 postman에서도 잘 작동되는 것을 알 수 있다.

 

proxy pass를 하지 않아도 웹 브라우저에서 실행 시 포트번호를 붙이면 잘 동작한다. 하지만 이

를 통해 포트번호를 일일이 써야하는 불편함을 해소할 수 있다.

반응형

스토리보드

 

  • 콘텐츠 화면을 보여주고 화면 간의 연결을 나타내주는 도구(shift + command + l)

스토리보드 컴포넌트

 

label - 여러 라인을 표시할 수 있다. 설정한 사각형의 크기와 속성에 따라 텍스트를 축소, 줄 바꿈 또는 자를 수 있다. 텍스트 글꼴, 색상, 정렬 등 설정이 가능하다.

button - 버튼 기능. 버튼 제목, 이미지 및 기타 속성 설정이 가능하다.

segmented Control - 여러 분할로 구성되어 있는 가로형 제어기, 각각 분리된 버튼으로 구성되어 있다. 페이지 전환할 때 자주 사용한다.

pull down button - 버튼의 동작과 관련이 있는 옵션들을 띄워준다.(메시지 편집 - 삭제, 선택, 수정)

pop up button - 상호 배타적인 옵션들을 팝업 형식으로 띄워준다.(최신 정렬, 인기 정렬, 이름순 정렬)

Text field - 입력 가능한 텍스트 오브젝트. 탭하면 입력이 가능하다.

 

나머지 요소들은 추가 예정


Auto Layout

 

  • 제약조건에 따라 뷰의 크기와 위치를 동적으로 배치해준다. pin으로 설정하거나, ctrl을 누르고 끌어다가 설정할 수 있다.
  • 뷰의 X 위치, 뷰의 Y 위치, 뷰의 너비, 뷰의 높이를 상대적으로 나타내준다.

우측 아래 세번째 버튼을 눌러 pin을 사용할 수 있다.

설정된 값을 계산하여 크기에 맞게 유지해준다.

 

Safe Area

 

Safe Area - 앱이 상태바, 네비게이션바, 툴바, 탭바를 가리는 것을 방지하는 영역이다.

 

Constraint

Constraint - Auto Layout의 제약조건이다. 방정식으로 나타낸다.

사진 좌측에서 알수 있듯이 First Item.Attribute = Multiplier * Second Item.Attribute + Constant

우측 Utility area에서 6번째 버튼인 Show Size inspector에서 직접 제약조건을 추가 및 수정할 수 있다.

 

[출처]

https://wogus3602.tistory.com/16

https://ksk9820.tistory.com/49

https://sujinnaljin.medium.com/ios-pull-down-button-과-pop-up-button-f0f85d650b51

https://jinshine.github.io/2018/06/07/iOS/오토레이아웃(AutoLayout)과%20Layout%20개념/ 

https://velog.io/@eddy_song/ios-auto-layout-1

https://leeari95.tistory.com/45

https://chobikim.tistory.com/23?category=1030063 

 

반응형

'ios' 카테고리의 다른 글

info.plist와 AppProject에 대해 알아보자  (0) 2022.07.31

Xcode 구성

Navigator area - 프로젝트의 다양한 부분에 빠르게 액세스 가능하다.

Editor area - 소스 코드, 사용자 인터페이스 및 기타 리소스를 편집할 수 있다.

Utility area - 선택한 품목에 대한 정보와 기성품 자원에 대한 액세스를 제공한다. 두 부분으로 되어 있다.

  • 관리자 창 : 네비게이터 또는 편집 영역에서 선택한 항목에 대한 정보를 보고 편집한다.
  • 라이브러리 창 : 사용자 인터페이스 요소, 코드 스니펫 및 기타 리소스에 액세스 할 수 있다.

Toolbar - 앱 빌드, 실행, 진행 상황 살피기, 작업 환경 구성이 가능하다.


프로젝트 구성 파일

AppDelegate - 앱의 실행 주기를 관리하는 파일, 앱을 실행하거나 종료 또는   백그라운드를 실행할 때 하는 일 관리

SceneDelegate - 아이패드에서 생긴 멀티 윈도우와 관련하여 생성되는 파일

ViewController - 뷰에서 처리하는 내용을 담은 파일, 뷰 하나당 파일 하나씩 매칭

Main.storyboard - 앱의 내용을 시각적으로 화면 구성을 통해 보여주는 파일

Assets.xcassets - 앱의 아이콘을 보관하는 장소, 이미지를 넣어주면 이미지 앱아이콘 생성

LaunchScreen.storyboard - 앱이 실행될 때, 잠시 나타나는 스플래시 화면을 만드는  스토리보드

info.plist - 앱이 실행되는데 필요한 정보를 저장하는 파일


 

Info.plist
Project TARGET 항목 중 Info. 이곳에서 더 많은 Info.plist 내용을 확인하고 수정가능하다. 밑에서 살펴볼 예정이다.

Info.plist 구성

Bundle

  • 실행 가능한 코드와 코드가 사용하는 자원을 포함하고 있는 디렉토리
  • info.plist, assets, string 파일 등 소유
  • framework bundle은 dynamic library에서 사용하는 코드와 자원을 포함

Bundle name - 번들 이름

Bundle identifier - 번들의 고유 식별자

InfoDictionary version - Info.plist 버전

Main storyboard file base name - 스토리보드 리소스 파일 이름

Bundle version - 번들 버전

Launch screen interface file base name - 런치 스크린(시작 화면) 파일 이름

Executable file - 번들의 실행 파일 이름

Application requires iPhone environment - 앱이 ios에서 실행되어야 하는지 여부를 나타내는 Bool 값(기본적으로 YES 값)

Supported interface orientations (iPhone) - iPhone 앱에서 지원하는 인터페이스 방향

Application supports indirect input events - 앱이 일반적으로 간접 입력 메커니즘을 지원하는가를 나타내는 Bool 값

Application Scene Manifest - Scene 생명주기 관련 정보 설정

  • Enable Multiple Windows: 여러 Scene을 설정할 수 있는지 체크하는 속성
  • Scene Configuration: 새 Scene을 만들 때, UIKIT의 기본 설정값을 설정
    • Application Session role : 역할(Application / External Display)
      • Configuration Name: 설정 이름
      • Delegate Class Name: 코드 실행할 클래스 이름
      • Storyboard Name: 스토리보드 이름

Bundle OS Type code - 번들 타입(앱: APPL, 프레임워크: FMWK, 번들: BNDL)

Localization native development region - 언어 ID로 번들의 디폴트 언어 및 지역

Supported interface orientations (iPad) - 아이패드 앱에서 지원하는 인터페이스 방향

Bundle version string (short) - 번들의 배포 및 버전 번호


PROJECT 중 Info. 좌측 Navigation area에서 프로젝트를 선택해 확인할 수 있다.

PROJECT

하나 이상의 소프트웨어를 만드는 데 필요한 모든 파일, 리소스, 정보를 위한 저장소. 프로젝트는 모든 타겟에 대한 기본 빌드 설정을 정의

 

Info

Deployment Target: ios 점유율을 참고하여 ios 타겟을 설정한다.

Configuration: Debug, Release 지원. 테스트에 사용

Localization: 로컬라이징 하고 싶은 언어를 설정할 수 있다.

 

PROJECT 중 Build Setting

 

Build Settings - project.pbxproj 파일에 들어있다.

Basic/Customized/All - 기본 설정, 커스토마이징한 설정, 전체 설정을 볼 수 있다.

전체 통일성을 위해 Target Build Setting보다 Project Build Setting을 이용하는 것이 좋다.

 

PROJECT 중 Package Dependencies

Packages Dependencies - Swift package를 추가할 수 있다.


TARGET

TARGET

Build를 실행해 생성되는 최종 제품

 

General - 일반 설정. 기본적인 설정(버전, 타겟 디바이스, 인터페이스 방향 등)이 가능하다.

Signing & Capabilities - Apple 기술(iCloud, Maps 등)을 앱에 추가할 수 있다.

Resource Tags - 주문형 리소스를 사용해 필요할 때만 다운로드가 가능하게 할 수 있다. 이를 통해 더 작고 더 빠르고 더 풍부한 앱을 만들 수 있다.

Info - 앱과 관련된 속성, 앱이 만들거나 열수있는 파일 유형 표시

 

[출처]

https://roniruny.tistory.com/122

https://zeddios.tistory.com/706

https://aimreach.tistory.com/45

https://chobikim.tistory.com/22?category=1030063

https://xcodebuildsettings.com

https://developer.apple.com/documentation/xcode#//apple_ref/doc/uid/TP40010215-CH32-SW1

https://developer.apple.com/library/archive/featuredarticles/XcodeConcepts/Concept-Targets.html

반응형

'ios' 카테고리의 다른 글

스토리보드엔 무엇이 있을까? + Auto Layout  (0) 2022.08.01

문제:

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

 

입력:

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

 

출력:

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.


풀이:

소인수분해 문제를 해결하기 위해서는 우선 소수를 판정하는 방법에 대해 알아야한다.

어떤 수 $x$가 소수일 조건은 약수로 1과 자기 자신만을 가져야 한다. 따라서 $x$를 $[2, x - 1]$ 범위 내의 수로 나누었을때, 나누어 떨어지는 수가 없으면 그 수는 소수이다. 이를 코드로 표현하면 다음과 같다.

bool IsPrime(int x) {
    for (int i = 2; i < x; ++i) {
        if (x % i == 0)
            return false;
    }
    return true;
}

 

위 알고리즘의 시간복잡도는 $O(x)$이다. 이 시간복잡도를 줄일 수가 있는데 이론은 다음과 같다.

 


$\sqrt{x}$ 보다 큰 수 $d$가 $x$의 약수라고 하자. ($\sqrt{x} < d$)
그럼, $x = d * m$이 성립하는 $m$이 존재한다. $d$와 $m$의 곱은 $x$보다 작아야 하므로 ($m < \sqrt{x} < d$)라는 부등식을 세울 수 있다.
즉, $\sqrt{x}$보다 작은 수 $y$가 $x$의 약수이면 $y$와 곱했을때, $x$가 나오는 수가 반드시 존재하는 것이다.
따라서, 우리는 다음과 같이 소수 판정의 범위를 줄일 수가 있다.

 

bool IsPrime(int x) {
    for (int i = 2; i*i <= x; ++i) {
        if (x % i == 0)
            return false;
    }
    return true;
}

이를 통해 우린 시간복잡도를 $O(\sqrt{x})$로 줄일 수 있다.

 

소수를 판정하는 대표적인 방법으로는 에라토스테네스의 체가 있다. 에라토스테네스의 체는 1과 자기자신 사이에 약수의 배수를 모두 지우면 남는 수가 약수라는 이론이다.

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서

ko.wikipedia.org

 

이제 이를 활용해 문제를 풀어보도록 하자.

예를 들어, $72$가 있으면 $2*2*2*3*3$으로 표현된다. 이를 살펴보면 2로 가능한 나누어 표현하고 그 다음으로 3으로 가능한 나누어 표현하였다.

따라서 우리는 어떤 수 $x$에 대해 작은 수부터 가능할 때까지 나누어주며 그 수를 출력해주면 된다. 범위는 앞선 알고리즘에서 살펴본 바로 $[2, \sqrt{x} - 1]$ 까지로 하면 된다. 결과적으로 2의 배수, 3의 배수, 5의 배수...가 차례대로 지워지면서 소인수들이 갯수만큼 출력이 된다.

 

#include <iostream>
using namespace std;

void __init() {
  cin.tie(0);
  ios::sync_with_stdio(0);
}

void Factorization(int num) {
  for(int i = 2; i*i <= num; i++) {
    while(num % i == 0) {
      cout << i << "\n";
      num /= i;
    }
  }
  if(num != 1) cout << num;
}

int main() {
  int num;

  __init();

  cin >> num;
  Factorization(num);
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[Baekjoon] 백준 11048: 이동  (0) 2021.05.19

문제:

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다.

준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마다 방에 놓여져있는 사탕을 모두 가져갈 수 있다. 또, 미로 밖으로 나갈 수는 없다.

준규가 (N, M)으로 이동할 때, 가져올 수 있는 사탕 개수의 최댓값을 구하시오.

 

입력:

첫째 줄에 미로의 크기 N, M이 주어진다. (1 ≤ N, M ≤ 1,000)

둘째 줄부터 N개 줄에는 총 M개의 숫자가 주어지며, r번째 줄의 c번째 수는 (r, c)에 놓여져 있는 사탕의 개수이다. 사탕의 개수는 0보다 크거나 같고, 100보다 작거나 같다.

 

출력:

첫째 줄에 준규가 (N, M)으로 이동할 때, 가져올 수 있는 사탕 개수를 출력한다.


풀이:

오른쪽, 아래, 대각선으로 이동가능하지만 대각선은 배제하고 생각해도 된다. 그 이유는 우선, 대각선으로 이동하기 위해서는 대각선 or 아래 -> 오른쪽 or 오른쪽 -> 아래 세 가지 길이 있다. 최대한 많은 사탕을 먹어야 하므로 지름길인 대각선 방향은 배제한다.

y와 x의 범위 체크를 위해 isValidCoord 함수를 사용했고, 아래, 오른쪽으로 이동을 표현하기 위해 구조체 dir을 만들었다.

 

문제를 처음 보고 나는 DFS를 떠올렸다. 그래서 DFS로 짜기 시작했는데 코드를 진행하다 보니 사탕의 양을 저장해 줄 DP가 필요하다는 것을 깨달았다. DFS와 DP를 이용해서 풀어야지 마음 먹고 다시 짜 내려갔는데 이 문제는 DFS를 쓰면 오히려 더욱 복잡해지는 문제라는 것을 알았다. 단순 완전탐색으로 DP를 활용해 진행하면 된다.

 

코드:

#include <iostream>
#include <algorithm>
#define DIR 2
using namespace std;

int N, M;
int Maze[1001][1001];
int DP[1001][1001];

typedef struct {
    int y, x;
} Dir;

Dir dir[DIR] = {{0,1},{1,0}};

bool isValidCoord(int y, int x) {
    return 0 <= y && y < N && 0 <= x && x < M;
}

int main() {
    cin >> N >> M;
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < M; ++j)
            cin >> Maze[i][j];

    DP[0][0] = Maze[0][0];

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            for (int k = 0; k < DIR; ++k) {
                int dy = i + dir[k].y;
                int dx = j + dir[k].x;

                if(isValidCoord(dy, dx))
                    DP[dy][dx] = max(DP[dy][dx], DP[i][j] + Maze[dy][dx]);
            }
        }
    }

    cout << DP[N-1][M-1];
}

 

GIT:

https://github.com/tmsksfh2012/Algorithm/blob/main/%EB%B0%B1%EC%A4%80%2011048/main.cpp

 

tmsksfh2012/Algorithm

백준 알고리즘 공부. Contribute to tmsksfh2012/Algorithm development by creating an account on GitHub.

github.com

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BaekJoon] 백준 11653: 소인수분해  (0) 2021.11.07

wooder2050.medium.com/%EB%8F%99%EC%A0%81%EA%B3%84%ED%9A%8D%EB%B2%95-dynamic-programming-%EC%A0%95%EB%A6%AC-58e1dbcb80a0

 

동적계획법(Dynamic Programming) 정리

동적계획법은 문제의 최적해를 구하거나 답의 개수를 세는 과정에 사용할 수 있는 알고리즘 설계 기법입니다. 동적계획법을 사용하면 불필요한 계산을 줄이고, 효율적으로 최적해를 찾을 수 있

wooder2050.medium.com

 

반응형

murra.tistory.com/157

 

[프로그래머스 SQL] DATETIME에서 DATE로 형 변환 MySQL

DATE_FORMAT(DATE, 형식) 을 통해 DATE의 형식을 바꿀 수 있습니다. 형식에는 %Y (4자리 연도), %y (2자리 연도), %m (월), %d (일), %H (24시간), %h (12시간), %i , %s 가 있습니다. SELECT ANIMAL_ID, NAME, DA..

murra.tistory.com

 

반응형

'SQL' 카테고리의 다른 글

[SQL] LEFT JOIN(INNER/OUTER) 정리  (0) 2021.02.26
[SQL] ORDER BY DECS / ASC 여러 개 중첩 사용  (0) 2021.02.25
SQL 기초  (0) 2021.02.25

lcs1245.tistory.com/15

 

SQL JOIN - INNER JOIN / OUTER JOIN / LEFT JOIN / RIGHT JOIN / SELF JOIN

JOIN에 관해 포스팅하려 합니다 개인적으로는 조금 어려웠습니다.. 아래의 그림이 잘 정리가 되어있는데 한번 설명해보겠습니다 ***** LEFT / RIGHT JOIN LEFT JOIN 기준으로 설명하겠다 RIGHT JOIN은 기준

lcs1245.tistory.com

 

반응형

'SQL' 카테고리의 다른 글

[SQL] DATE 타입 정리  (0) 2021.02.26
[SQL] ORDER BY DECS / ASC 여러 개 중첩 사용  (0) 2021.02.25
SQL 기초  (0) 2021.02.25

+ Recent posts