오류 메세지 

Incorrect credentials. Request response: 401 Unauthorized

다른 컴퓨터에서 프로젝트를 불러올 일이 있어서 새로 Android Studio를 설치하고, Github 계정과 연동을 하려고 하니...

 

응?

 

검색을 해보니....

토큰으로 해봐라, git을 깔아라 등등...

 

하나씩 해보자.

 

참고로 Android Studio 버전은 4.1.1이다.

 

1. 토큰으로 하기

[Settings] -> [Developer Settings] -> [Personal Access Token]

에서

repo, gist, workflow를 체크하고 토큰을 만든 다음 로그인을 해봐도... 동일한 에러가 발생한다.

 

2. git 깔아보기

안된다 ㅋㅋㅋ

 

3. Stack Overflow 만만세

참고 : stackoverflow.com/questions/64964585/android-studio-github-login-incorrect-credentials-request-response-401-unauth

 

Android Studio GitHub Login "Incorrect credentials. Request response. 401 Unauthorized

I am having trouble logging in to my GitHub Account through Android Studio. I don't know why I am getting this error and there doesn't seem to be much about it out there. I made sure to have Git

stackoverflow.com

1번에서 git 토큰 설정할 때 아래와 같이 설정해주니 잘 된다.

참고 : goddaehee.tistory.com/205?category=367461

 

[스프링부트 (4)] Spring Boot DataBase 연동하기 (MariaDB, MyBatis, HikariCP)

[스프링부트 (4)] 스프링부트 DB 연동 (MariaDB, MyBatis, HikariCP) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ SpringBoot DB 연동] 입니다. : ) 0. 들어가기 앞서 Spring Boot를 사용하면서 DB를연결하기..

goddaehee.tistory.com

github 링크 : github.com/Mistive/SpringBoot/commit/83f1586ce41d1d7c928d6d08bee1d09a111fc52c#diff-18ce661d1fc3d790f60910ad9c3c5192

 

MariaDB 적용하기 · Mistive/SpringBoot@83f1586

* MariaDB에 데이터 추가해서 출력해보기

github.com

▶커넥션풀(Connection Pool)이란?

- 풀(Pool) 속에 데이터베이스와의 연결(커넥션)을 미리 만들어두고, 데이터베이스에 접근 시 풀에 남아있는 커넥션 중 하나를 받아와 사용한 뒤 반환하는 기법이다.

- DBCP(=DataBasce Connection Pool)이라고도 한다.

JDBC(=Java Data Base Connection) 예제 코드

Connection conn = null;
PreparedStatement  pstmt = null;
ResultSet rs = null;

try {
    sql = "SELECT * FROM T_BOARD"

    // 1. 드라이버 연결 DB 커넥션 객체를 얻음
    connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);

    // 2. 쿼리 수행을 위한 PreparedStatement 객체 생성
    pstmt = conn.createStatement();

    // 3. executeQuery: 쿼리 실행 후
    // ResultSet: DB 레코드 ResultSet에 객체에 담김
    rs = pstmt.executeQuery(sql);
    } catch (Exception e) {
    } finally {
        conn.close();
        pstmt.close();
        rs.close();
    }
}

- 커넥션풀을 이용하여 미리 연결을 만들어놓기 때문에 효과적으로 DB 연결 및 자원 사용이 가능하다.


MariaDB & MyBatis Dependency 추가

pom.xml

        <!-- MariaDB -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

▶Driver 및 연결 정보 설정 추가

application.properties

spring.datasource.driverClassName= org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=스키마계정
spring.datasource.password=비밀번호

▶testMapper.xml 생성 및 Dependency 추가

testMapper.xml

- 생성 경로 : resources/mybatis/test/testMapper.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo2.test.mapper.TestMapper">
    <select id="selectTest" resultType="com.example.demo2.test.vo.TestVo"> SELECT 'MISTIVE' AS NAME </select>
</mapper>

application.properties

spring.datasource.driverClassName= org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1234

# testMapper.xml 위치 지정
# **은 하위 폴더 레벨에 상관없이 모든 경로를 뜻하며, *는 아무 이름이나 와도 된다는것을 뜻합니다.
mybatis.mapper-locations: mybatis/**/*.xml
더보기

추가 사항

application.properties

# mybatis 매핑 type을 짧게 쓰기 위한 설정
# mapper.xml에서 resultType을 지정할 때 com.god.bo.test.vo.TestVo 대신 TestVo로 간략히 할 수 있다.
mybatis.type-aliases-package:com.example.demo2.test.vo

을 추가할 경우

 

testMapper.xml에서 resultType을 "TestVo"만 써도 된다.

▶TestVo.java 파일 생성하기

- 생성 경로 : com.example.demo2.test.vo.TestVo

- Vo는 MVC에서 M, Model을 의미한다. DTO, VO라고도 표현한다.

package com.example.demo2.test.vo;

public class TestVo {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

▶TestMapper.java 생성

- 생성 경로 : com.example.demo2.test.mapper.TestMapper

- Mapper 인터페이스를 생성한다.

package com.example.demo2.test.mapper;

import java.util.List;

import com.example.demo2.test.vo.TestVo;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;


@Repository
@Mapper
public interface TestMapper {
    List<TestVo> selectTest();
}

▶TestService.java 생성

- 생성 경로 : com.example.demo2.test.service.TestService

package com.example.demo2.test.service;

import com.example.demo2.test.mapper.TestMapper;
import com.example.demo2.test.vo.TestVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TestService {
    @Autowired
    public TestMapper mapper;

    public List<TestVo> selectTest() {
        return mapper.selectTest();
    }
}

▶TestController.java 생성 및 Service 호출

- 생성 경로 : com.example.demo2.test.controller.TestController

package com.example.demo2.test.controller;

import com.example.demo2.test.service.TestService;
import com.example.demo2.test.vo.TestVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@RestController
public class TestController {

    @Autowired
    TestService testService;

    @RequestMapping(value = "/")
    public String home() throws Exception{
        return "Hello World";
    }

    @RequestMapping(value = "/test")
    public ModelAndView test() throws Exception {

        List<TestVo> testList = testService.selectTest();

        ModelAndView mav = new ModelAndView();
        mav.addObject("list", testList);
        return mav;
    }


}

▶test.jsp 생성

- 생성 경로 : resources/webapp/WEB-INF/views/test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>View Test Page</title></head>
<body><h2>Hello! ${name}</h2>
<div>JSP List Test</div>
<c:forEach var="item" items="${list}" varStatus="idx"> ${idx.index}, ${item.name} <br/> </c:forEach></body>
</html>
더보기

▶jsp 적용 방법

application.properties

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
devtools.livereload.enabled=true

pom.xml

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  </dependency>
  <dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <scope>provided</scope>
</dependency>

▶구조

빨간 네모는 수정한 부분

 

▶결과

 


▶ 주의 사항

명심 또 명심


▶ 추가 테스트

- test DB에 데이터를 추가하고 출력해보기

 

▶ DB에 데이터 추가

▶ testMapper.xml 수정

▶ 결과


 

참고 : goddaehee.tistory.com/204?category=367461

 

[스프링부트 (3)] SpringMVC(2) Spring Boot View 설정 및 JSP 연동하기(Thymeleaf 추가)

[스프링부트 (3)] SpringMVC(2) Spring Boot View 설정 및 JSP 연동하기(Thymeleaf 추가) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 View 설정방법 ] 입니다. : ) 이번 포스팅에선 MVC 패턴중..

goddaehee.tistory.com

ModelAndView는 서블릿에서 제공하는 객체이다. viewName을 jsp 파일명으로 설정하면 자연스레 mapping이 이루어진다. Wowowowowow

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

taglib: 태그라이브러리!

우리가 java에서 사용하는 일종의 import와 유사한 기능이랄까..

prefix="c"는 python에서 보면 as와 같은 역할이랄까.

저거 외에도 jsp에서 사용할 수 있는 다양한 라이브러리가 존재한다.

 

천천히 사용해보면서 익숙해지면 될 듯 하다.

 

+ Recent posts