반응형

스프링

yml 한글 주석 에러

okky.kr/article/670229

 

OKKY | [intellij] SpringBoot application.yml 한글 주석 에러

안녕하세요! 현재 SpringBoot Project를 인수인계 받아서 보는 중인데.. 문제가 application.yml에 한글 주석이 있으면 Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 이

okky.kr

 

안드로이드

카카오맵 api 테스트 (2021.04.04)

나는 안드로이드가 처음이라서 그런가 카카오 가이드만 보고 하기에는 설명이 좀 부족했다

추가해야 할 코드들을 알려주긴 했지만, 어디에 코드를 넣어야 할 지 몰랐다.

apis.map.kakao.com/android/guide/

이 블로그 설명이 훨씬 친절했다

lakue.tistory.com/62

 

[Android/안드로이드] Kakao 지도 API 연동/카카오 지도 API연동

카카오 지도 API를 연동하기 위해서 SDK를 다운로드 받고, 앱 키를 발급받아야합니다. APP KEY 발급 developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카

lakue.tistory.com

키 해시 잘못된 값 사용해서 개고생했다....

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.kakapmaptest;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.ViewGroup;
 
import net.daum.mf.map.api.MapView;
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getHashKey();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
//        MapView mapView = new MapView(this);
//        ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
//        mapViewContainer.addView(mapView);
    }
    private void getHashKey(){
        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (packageInfo == null)
            Log.e("KeyHash""KeyHash:null");
 
        for (Signature signature : packageInfo.signatures) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            } catch (NoSuchAlgorithmException e) {
                Log.e("KeyHash""Unable to get MessageDigest. signature=" + signature, e);
            }
        }
    }
}
 
cs

위 코드를 실행시키면 아래 사진과 같이 Logcat에서 올바른 KeyHash 값을 받을 수 있다. 꼭 이걸로 사용하도록...

참고 lakue.tistory.com/11

 

[Android/안드로이드] 해시키(Hash key) 가져오는 방법

해시키는 앱마다 가지고 있는 고유키입니다. 페이스북 SDK, 카카오톡 SDK 등과 연동하기 위해서는 해시키(Hash key)를 가지고 각각의 앱을 구분하여 설정된 기능을 제공하기 때문에 반드시 해시키(Ha

lakue.tistory.com

build.grade의 dependencies에 implementation files('libs/libDaumMapAndroid.jar') 추가하기

[File] - [Project Structure] - [Dependencies] - [+] - [2 Jar Dependency]에서 "libs\libsDaumMapAndroid.jar" 추가

AndroidManifest.xml에 android:usesCleartextTraffic="true" 추가

devtalk.kakao.com/t/api/103413

 

Kakao DevTalk_

카카오 데브톡. 카카오 플랫폼 서비스 관련 질문 및 답변을 올리는 개발자 커뮤니티 사이트입니다.

devtalk.kakao.com

--------------------------------------------------------------------------------------------------------------------------------

첫 설정만 어려웠고, 다른 기능 추가하는건 딱히 안어려운거 같다

카카오 가이드만 보고도 충분히 할 수 있었다

 

마커 추가

마커 추가는 그냥 코드 복붙만 해서는 안되고, MARKER_POINT 객체를 따로 생성해줘야 한다

MARKER_POINT는 중심점 설정할 때 사용했던 형식과 같다.

MARKER_POINT를 따로 생성해놓고 중심점 설정, 마커 추가 할 때 MARKER_POINT를 전달했다.

(뿌듯)

집 가고싶다...

 

 

 

스프링부트와 AWS RDS 연동 (2021.04.06)

저번주 금요일부터 시도했는데 보기만 해도 역겨운 에러가 계속 발생했다.

1
java.lang.RuntimeException: Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl
cs
build.gradle의 dependencies에 분명히 jdbc 설정 코드 들어가 있었고

application.yml에도 db 설정 정보를 넣었는데, 구글링 계속 해도 원인을 못 찾았다.

결국, 예전에 참고했던 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 책을 도서관에서 빌려와서 관련된 챕터를 다시 읽어봤다.

 

application.yml 파일에서 2가지 문제점이 있었다.

1. db의 url 형식 잘못됨

  url: jdbc:mariadb://(rds 엔드포인트):3306/(db이름) 이렇게 해야하는데

  url: (rds 엔드포인트) 만 적었다... 멍청한 실수였다

 

2. hibernate dialect 설정 안함

 

반응형

'개발' 카테고리의 다른 글

[연습] travis-ci  (0) 2021.04.27
[연습] springboot, rest api 서버, 카카오 소셜로그인, jwt  (0) 2021.04.26
Travis CI와 AWS S3 연동  (0) 2021.03.08
ec2 서버에 프로젝트 배포  (0) 2021.03.08
rds 생성  (0) 2021.03.08
반응형

www.acmicpc.net/problem/12946

 

12946번: 육각 보드

크기가 N × N인 육각 보드가 주어진다. 아래 그림은 N = 1, 2, 3, 4인 경우의 그림이다. 육각 보드의 일부 칸을 색칠하려고 한다. 두 칸이 변을 공유하는 경우에는 같은 색으로 칠할 수 없다. 어떤 칸

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (direction != -1) {                     // dfs 첫 실행 시, 이동한 방향 없으므로 -1로 설정. 
    // 인접한 두 칸만 확인                 // -1이 아니면 이전 칸에서 현재 칸으로 이동했음을 의미
    int chk1 = (direction + 2) % 6;
    int chk2 = (direction + 4) % 6;
        
    // 첫 번째 칸 확인
    int nx1 = x + dx[chk1];
    int ny1 = y + dy[chk1];
    if (nx1 > 0 && nx1 <= n && ny1 > 0 && ny1 <= n && arr[nx1][ny1] == 'X') {
        cout << 3;
        exit(0);
    }
 
    // 두 번째 칸 확인
    int nx2 = x + dx[chk2];
    int ny2 = y + dy[chk2];
    if (nx2 > 0 && nx2 <= n && ny2 > 0 && ny2 <= n && arr[nx2][ny2] == 'X') {
        cout << 3;
        exit(0);
    }
}
cs
1
2
3
4
5
6
7
8
9
10
11
if (visited[nx][ny]) {                         // 다음 칸 이미 방문 했으면 (고리 형성 됐으면)
    if (visited[x][y] == visited[nx][ny]) {    // 현재 칸과 다음 칸 색깔이 같으면
        cout << 3;                             // 색깔 하나 더 사용해야 함 (3개)
        exit(0);
    }
}
else {                                        // 다음 칸 방문 안했으면
    ans = 2;                                 // 색깔 2개만 있으면 됨
    int next_val = (val == 1) ? 2 : 1;        // 현재 색과 다른 색으로 변경
   dfs(nx, ny, i, next_val);                // 다음 탐색
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <algorithm>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int n, ans;
int dx[] = {-1-10110 };
int dy[] = {0110-1-1 };
char arr[51][51];
int visited[51][51];                                // 0: 방문 안함, 1: 첫 번째 색깔, 2: 두 번째 색깔
 
void dfs(int x, int y, int direction, int val) {    // direction: 이전 칸 -> 현재 칸 어떤 방향으로 이동했는가?
    visited[x][y] = val;                            // visited[][]에 현재 색깔 칠하기
    if (direction != -1) {                            // dfs 첫 실행 시, 이동한 방향 없으므로 -1로 설정. 
        // 인접한 두 칸만 확인                        // -1이 아니면 이전 칸에서 현재 칸으로 이동했음을 의미
        int chk1 = (direction + 2) % 6;
        int chk2 = (direction + 4) % 6;
        
        // 첫 번째 칸 확인
        int nx1 = x + dx[chk1];
        int ny1 = y + dy[chk1];
        if (nx1 > 0 && nx1 <= n && ny1 > 0 && ny1 <= n && arr[nx1][ny1] == 'X') {
            cout << 3;
            exit(0);
        }
 
        // 두 번째 칸 확인
        int nx2 = x + dx[chk2];
        int ny2 = y + dy[chk2];
        if (nx2 > 0 && nx2 <= n && ny2 > 0 && ny2 <= n && arr[nx2][ny2] == 'X') {
            cout << 3;
            exit(0);
        }
    }
 
    // 인접한 6방향 탐색
    rep(i,6) {
        if ((i+3)%6 == direction) continue;                // 바로 이전 방향으로 되돌아가지 않도록
        int nx = x + dx[i];
        int ny = y + dy[i];
        
        // 연결된 칸 있으면
        if (nx > 0 && nx <= n && ny > 0 && ny <= n && arr[nx][ny] == 'X') {
            if (visited[nx][ny]) {                        // 다음 칸 이미 방문 했으면 (고리 형성 됐으면)
                if (visited[x][y] == visited[nx][ny]) {    // 현재 칸과 다음 칸 색깔이 같으면
                    cout << 3;                            // 색깔 하나 더 사용해야 함 (3개)
                    exit(0);
                }
            }
            else {                                        // 다음 칸 방문 안했으면
                ans = 2;                                // 색깔 2개만 있으면 됨
                int next_val = (val == 1) ? 2 : 1;        // 현재 색과 다른 색으로 변경
                dfs(nx, ny, i, next_val);                // 다음 탐색
            }
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    rep(i, n) {
        rep(j, n)
            cin >> arr[i][j];
    }
 
    rep(i, n) {
        rep(j, n) {
            if (arr[i][j] == 'X' && !visited[i][j]) {
                ans = max(ans, 1);        // 첫 번째 dfs 호출 시 ans = 2로 바꿨는데
                dfs(i, j, -11);        // 두 번째 dfs 호출 시 ans = 1일 경우 덮어쓰지 않기 위해서 ans = max(ans, 1) 
            }
        }
    }
    cout << ans;
}
cs
반응형

'백준 > DFS, BFS' 카테고리의 다른 글

백준 16940 [복습 필수]  (0) 2021.03.10
백준 16929  (0) 2021.03.06
백준 16947 [복습 필수]  (0) 2021.03.06
백준 16197  (0) 2021.02.23
백준 13549  (0) 2021.02.19
반응형

www.acmicpc.net/problem/16940

 

16940번: BFS 스페셜 저지

올바른 순서는 1, 2, 3, 4와  1, 3, 2, 4가 있다.

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
while (!q.empty()) {
        int now = q.front();
        q.pop();
 
        cnt = 0;
        for (int next : v[now]) {
            if (!visited[next]) {
                visited[next] = 1;        // 방문 처리
                q.push(next);            // 일단 넣기
                cnt++;
            }
        }
 
        for (int i = idx; i < idx + cnt; i++) {
            if (!visited[arr[i]]) {        // 순서대로 방문하지 않았으면
                cout << 0;
                exit(0);
            }
        }
 
        idx += cnt;
    }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (!q.empty()) {
        int now = q.front();
        q.pop();
 
        cnt = 0;    
        for (int next : v[now]) {
            if (!visited[next]) {
                visited[next] = 1;        // 방문 처리
                cnt++;
            }
        }
 
        for (int i = idx; i < idx + cnt; i++) {
            if (!visited[arr[i]]) {        // 순서대로 방문하지 않았으면
                cout << 0;
                return 0;
            }
            q.push(arr[i]);                // 순서대로 큐에 
        }
        idx += cnt;
    }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <queue>
#include <vector>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
queue<int> q;
vector<vector<int> > v;
bool visited[100001];
int n, a, b, arr[100001];
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    v.resize(n + 1);
    rep(i, n - 1) {
        cin >> a >> b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    rep(i, n)
        cin >> arr[i];
 
    if (arr[0!= 1) {
        cout << 0;
        exit(0);
    }
    int idx = 1;
    visited[1= 1;
    q.push(1);
    int cnt = 0;
    while (!q.empty()) {
        int now = q.front();
        q.pop();
 
        cnt = 0;                    // 연결된 자식 노드 수
        for (int next : v[now]) {
            if (!visited[next]) {
                visited[next] = 1;    // 방문 처리
                cnt++;
            }
        }
        for (int i = idx; i < idx + cnt; i++) {
            if (!visited[arr[i]]) {    // 순서대로 방문하지 않았으면
                cout << 0;
                exit(0);
            }
            q.push(arr[i]);            // 순서대로 큐에 삽입
        }
        idx += cnt;
    }
    cout << 1;
}
 
cs
반응형

'백준 > DFS, BFS' 카테고리의 다른 글

백준 12946 [복습 필수]  (0) 2021.03.11
백준 16929  (0) 2021.03.06
백준 16947 [복습 필수]  (0) 2021.03.06
백준 16197  (0) 2021.02.23
백준 13549  (0) 2021.02.19
반응형

스프링부트
- 대규모 트래픽 처리
- 각종 설정 간편화 (스프링 부트 스타터, XML 설정 필요 없음)
- 내장 톰캣

- JAR을 사용하여 자바 옵션만으로도 배포 가능

- 의존성 버전 알아서 맞춰줌

 

1. 세션 레디스 (Session Redis), H2 (또는 MySQL): 세션을 관리하는 NoSQL (레디스)과 기본 데이터 저장을 위한 RDB

2. 스프링 부트 웹 MVC (Spring Boot Web MVC): 기본적인 커뮤니티 페이지

3. 스프링 부트 세션 레디스 (Spring Boot Session Redis): 레디스를 사용한 세션 관리

4. 스프링 부트 시큐리티 (Spring Boot Security), 스프링 부트 OAuth2 (Spring Boot OAuth2): 커뮤니티의 회원 인증 및 권한 처리

5. 스프링 부트 데이터 레스트 (Spring Boot Date REST): REST API 만들기

6. 스프링 부트 배치 (Spring Boot Batch): 주기적으로 백엔드 작업 처리. 예를 들어 페이스북 API를 사용하여 게시판의 공유 개수를 DB에 저장

 

그레이들 멀티 프로젝트: 여러 프로젝트를 하나의 프로젝트처럼 사용할 수 있음. 공통 코드를 하나의 프로젝트로 분리하고 이를 재사용

반응형

'기타' 카테고리의 다른 글

자소서 입사 후 포부  (0) 2021.08.30
자소서 지원동기 작성법  (0) 2021.08.27
공부  (0) 2021.03.09
반응형

jojoldu.tistory.com/463

 

[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 출간 후기

(출판사: 프리렉, 쪽수: 416, 정가: 22,000원) 서적 링크 오프라인 서점에는 2019.12.04 (수) 부터 올라갈 예정입니다. 강남 교보문고나 광화문 교보문고는 주말에도 올라올 순 있겠지만, 혹시 모르니

jojoldu.tistory.com

 

강의

www.inflearn.com/roadmaps/373

 

[초급~중급] 우아한형제들 개발팀장 김영한의 스프링 완전 정복 - 인프런 | 로드맵

대세를 따르세요! 자바 스프링 베스트셀러 우형 개발팀장에게 배우는 스프링 완전 정복 🚩 [사진] 오픈 3개월 만에 수강생 7000+명의 극찬 릴레이 ✨원리와 실무를 한방에, 김영한의 스프링 학습

www.inflearn.com

www.inflearn.com/roadmaps/149

 

[초급~활용] 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵 - 인프런 | 로드맵

[사진][사진] 현역 개발 팀장이 전해주는진짜 실무 노하우. 실무에서 스프링 부트와 JPA를 재대로 알고 사용하는 것은 매우 중요합니다. 조 단위의 거래 금액을 처리하는 주문, 결제, 정산 같은 핵

www.inflearn.com

 

이수

apply.softsquared.com/class.html (서버 512세션)

 

소프트스퀘어드 - 외주연계 프로그래밍 교육과정

각 Session별 커리큘럼 각 기수 세션별 수업 분위기에 따라 위에 설명된 큰 틀 안에서 세부 커리큘럼은 변경 될 수 있습니다. Basic Session 프로그래밍이 뭔지 전혀 몰라요. 정말 처음 접해보는 거에

apply.softsquared.com

백준

 

반응형

'기타' 카테고리의 다른 글

자소서 입사 후 포부  (0) 2021.08.30
자소서 지원동기 작성법  (0) 2021.08.27
메모  (0) 2021.03.09

+ Recent posts