json 이용을 위해 pom.xml에 의존성 주입하면 나타나는 에러

NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException

 

해결
1
2
3
4
5
6
7
8
9
10
    <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
cs

버전 2.9.6 -> 2.9.9 로 변경

consolas 탈출!👯‍♀️

아래 폰트들은 모두 무료 이용 가능하다.

▼다운로드 링크

Jetbrain mono : https://github.com/JetBrains/JetBrainsMono

monaco : https://www.cufonfonts.com/font/monaco

d2coding : https://github.com/naver/d2codingfont

※ 개발연습생의 설정 방법이므로, 내용이 정확하지 않거나 자세하지 않을 수 있습니다! (또륵)

 

 

 

MySQL에 담겨있는 나의 DB들을 다른 PC나 장소에서도 똑같이 동기화 하고 공유할 수 있으면 정말 좋겠지만...

간단한 연결이나 동기화는 아마도 보안적인 부분에서 이슈가 생기기 쉬울테니까? 이렇게 하는 거겠지? 하는 연습생의 스치는 생각은 버려두고....,

아무튼 노트북과 데스크탑을 옮겨다니며 연습생활을 하고 있는데, 각 기기에 DB동기화가 안되니까 export-import를 통해 직접 파일을 넘겨주며 연결해줘야하는게 너무너무너무너무너무 불편했다. 

 

그래서 다른 PC에서도 실시간(?)으로 DB를 사용하고 작업할 수 있는 방법에 대해 구글링을 하다보니 원격접속이라는게 있었다! 몇가지 블로그들을 찾아보니 커맨드창에서 직접 쿼리문을 이용하여 원격접속 설정을 하는 것이 정석인 것 같다.

 

그런데 나는 커맨드창을 좋아하지 않는다. (아니, 커맨드창이 날 좋아하지 않는다.)

그래서 보기 좋고 설정하기 편한 MySQL 워크벤치를 이용해서 원격 접속을 설정하였다!

 

 

준비물
서버PC (DB를 공유해줄 PC)
      |
접속PC (DB를 공유받을 PC)
  • 서버PC의 IP주소만 제대로 알고 있으면, 인터넷 환경이 같지 않아도 된다.
    (나 같은 경우 서버PC는 유선 환경ㅡ즉 본체에 랜선 장착 중, 그리고 접속PC는 무선 환경ㅡ즉 Wifi로 연결중이었다!)
  • 각 PC마다 워크벤치가 설치되어 있어야한다.
  • 서버PC가 전원이 켜져있어야지만 접속PC로 DB를 다룰 수 있다.

 


1. 서버PC의 Workbench에서 root계정으로 접속 한 뒤, 새로운 계정을 생성한다.

  • 워크벤치 좌측의 Users and Privileges - Add Account 클릭
  • Login Name : 새로운 계정명. 아무거나 자유롭게
  • Limit to Hosts Matching : 접근 가능한 IP를 제한해주는 부분.
    - % : 모~~든 IP에서 접근 가능하다.
    - 특정 IP주소 : 기입한 IP주소로만 접근이 가능하다.
      (예를들어 내 DB에 접근 할 수 있는건 내 노트북 뿐이다 -> 내 노트북의 IP주소를 기입)
  • 비밀번호를 자유롭게 입력하고 우측 하단의 Apply 클릭하여 계정 생성을 완료한다.

2. 접근허용할 스키마를 선택한 후, 스키마에 대한 새계정의 권한을 설정한다.

  • 좌측에 생성된 계정을 클릭하고, 우측에서 Schema Privileges 탭을 선택 - Add Entry 클릭
  • 접근허용할 스키마(테이블)를 설정할 수 있다.

  • All Schema : 현재 root 계정에 있는 모든 DB에 접근할 수 있게 한다.
    - 지금 설정은 모두 프로그래밍 연습을 위한 접속이므로 일단 어느 컴에서나 모든 DB를 다 관리할 수 있게 All Schema를 선택했다. 특정 스키마만 필요한 부분이라면 Selected schema 에서 선택할 수 있다.


  • 추가된 스키마 목록을 클릭하고 , 하단에서 새로운 계정에서 사용가능한 DDL, DML 권한을 설정한다. 
    - 이 부분 또한 연습을 위한 목적이므로 모든 권한을 부여하도록 Select "ALL"을 클릭하여 적용해주었다.

3. 접속할 PC에서 워크벤치를 켜고, 새로운 연결을 등록해준다.

  • 워크벤치의 메인화면에서 캡쳐에 표시된 +를 누르고 Setup New Connection창을 열어준다.
    - Connection Name : 연결명. 아무거나 알아보기 쉽게 입력해준다.
    - Hostname : 서버 PC의 IP주소를 적어준다.

커맨드에서 ipconfig 를 입력면 나오는 정보 중, IPv4 주소에 적힌 192.xxx.xxx.xxx 형식의 IP주소를 적어주면 된다. 

  • Username : 아까 서버PC에서 만들어둔 새로운 계정이름을 입력한다. 
  • Store in Vault ... 를 클릭하고 새로운 계정의 비밀번호를 입력하고 OK - OK !
  • 여기서 연결이 성공했다면, 만들어둔 Connection으로 접속하면 서버PC에서 설정한대로 스키마들이 들어와있고, 관리할 수 있다. 

연결에 성공한 접속 PC에서 DB를 만지면, 만진 내용이 바로 서버PC에서도 동기화 되어 있는 것을 알 수 있다!

 

 

 

 

 

에러 내용
MyBatisSystemException Could not set parameters for mapping: ParameterMapping{property='gender', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #4 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #4 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3).

Mapper 코드에 공백이 있어서 발생한 에러. 공백 제거해주자 정상작동 함!

gmail 서버를 이용해 아이디/비밀번호 찾기 기능 구현 중, 

 

Could not convert socket to TLS 에러 발생.

 

root-context.xml에 아래 코드 추가해주면 해결 완료!

1
2
<prop key="mail.smtp.ssl.trust">smtp.gmail.com</prop>
<prop key="mail.smtp.ssl.protocols">TLSv1.2</prop>
cs

 

 

jsp 에서 구현한 화면 중 form안에 있는 정보들을 서버로 보내보자!!!!

 

form 안에 있는 각요소의 name = 전송될 파라미터

 

action

  • 전송버튼을 누르면 주소창 뒷부분이 action에 있는 경로로 바뀌고, 해당 경로로 지정되어 있는 서블릿(컨트롤러)가 요청되어 실행 됨. 
  • 이때 넘어가는 name 에 들어 있는 정보들을 "요청정보" 라고한다.

 

 

 

form의 전송방법 method

  • 전송방법이 GET일 때 URL을 통해 요청정보를 서버로 보낸다.
    - 보안에 취약 (전송되는 내용이 주소창을 통해 보인다.)
    - 데이터의 한계 (URL을 이용해 보내기때문에 많은 양의 데이터를 보낼 수 없음)
  • 전송방법이 POST일 때 요청정보는 패킷(packet)에 감싸진 상태로 전송 된다.
    - 데이터에 한계가 없음

 

form을 통해 정보를 넘길 때는 method = POST를 주로 사용한다.

method 정보가 없을 땐 GET이 기본값임.

 

패킷은 header - body 로 이루어져 있음. 

header body
client의 정보가 들어감
(ip, port 등..)
요청정보(파라미터)의 내용
(su1=1, su2=100)

 * port : 클라이언트와 서버 사이에 데이터를 주고 받을 수 있는 도로와 같은 것!

 

 

클라이언트가 보내온 정보를 식별 및 저장하기 위해 WAS(서버)는 두개의 객체를 만든다.

  • 요청 객체 : HttpServletRequest request : 패킷 모든 내용(header+body)을 담아둔다. 
  • 응답 객체 : HttpServletResponse response : 패킷중 header의 내용을 담아둔다.

 

클라이언트에서 넘어온 form parameter 받기. 

request.getParameter("su1"); 

-- request 객체의 파라미터 su1의 값을 얻는다.

별의 별 시도를 다 해보고, 버전도 낮춰보고, 다시 설치해보고

오만가지 방법으로 namespace를 만들어보려고 했지만 모두 실패했다.

 

결국 직접 코드를 붙여 넣는 것으로 해결했다..

원시적이군..

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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url"
                  value="jdbc:mysql://localhost:3306/테이블명?useSSL=false&amp;serverTimezone=Asia/Seoul">
        </property>
        <property name="username" value="DB계정명"></property>
        <property name="password" value="암호"></property>
    </bean>  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
    </bean>
    <mybatis-spring:scan base-package="dao패키지명"/>
</beans>
cs

'SPRING > 나의 고통(Error)' 카테고리의 다른 글

Could not set parameters for mapping  (0) 2021.07.28
Could not convert socket to TLS  (0) 2021.07.26
@GetMapping import 불가  (0) 2021.07.22
Build path entry is missing:  (0) 2021.07.21
Could not get JDBC Connection;  (0) 2021.07.11

Controller에서 @GetMapping 어노테이션이 import되지 않을 때,

pom.xml 에서 아래와 같이 프레임워크 버전을 바꿔준다. 

스프링 4.3 버전부터 사용 가능해진 어노테이션이라는데, 꼭 5.0.7이 아니라 그 상위 버전이어도 상관없을 듯 싶다.

 

1
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
cs

 

Open projects from file System 으로 프로젝트를 가져오면, Build Path Problems라고 해서 다닷다닷 에러가 발생하게 된다.

문제가 발생하는 프로젝트에서 우클릭 - Build Path - Configure Build path... 를 해보면 해당 프로젝트에 빨간불이 들어와 있는 걸 볼 수 있다.

해당 프로젝트 로컬 폴더로 가서 src - test 폴더에 아마 resources 정도만 있을텐데,

새 폴더로 java를 하나 만들어주고 이클립스에서 해당 프로젝트를 Refresh해주면 에러가 사라진다...

'SPRING > 나의 고통(Error)' 카테고리의 다른 글

Could not convert socket to TLS  (0) 2021.07.26
servlet.xml에 namespace탭이 안보일 때  (0) 2021.07.22
@GetMapping import 불가  (0) 2021.07.22
Could not get JDBC Connection;  (0) 2021.07.11
Spring - db 등록시 한글 깨짐  (0) 2021.07.11

에러메세지

Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection;

위와 같은 에러가 났다.

 

분명히 저녁먹기 전에는 잘 됐는데, 밥먹고 재실행을 하니 안되는 어이없는 상황 ㅠㅠ

뭐지.. 왜 잘되다가 안되는거지? ㅠㅠㅠ

한시간 가량 구글링을 거쳐

xml 파일들에 오타 난 것 있는지, mysql설정을 내가 뭘 잘못한건지 웬만한 시도를 다 해보다가 

 

 

 

MyBatis error: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.Type - Programmer Sought

 

MyBatis error: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.Type - Programmer Sought

Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1). This is a magical bug. When my MyBatis statement: select u.roleId, r.roleName from role r, user u where u.roleId = r.roleId and u.userAccount = The following

www.programmersought.com

위 사이트를 접하게 됐는데,  슥 보고 엥?? 설마 이것때문에? 싶어서 나도 적용해보았는데

너무너무너무너무너무  간단한 방법으로 해결이 되었다.

 

그 간단한 방법...

root-context.xml 상단에 주석이 하나 달려 있었는데, 이걸 지우니까 실행이 된다. 하...

 

한시간동안의 스트레스에서 탈출하게 해줬으니

이 블로거한테 좋아요라도 눌러주고 싶었는데,

외국 블로그는 좋아요 시스템이 없는건지 막아놓은건지 나의 감사함을 표할 길이 없다 ㅠㅠ

 

 

주석이 문제였다면 아깐 왜 잘 됐는지,

왜 주석이 실행에 영향을 미치는건지 아직 내 배움의 수준에서는 알 길이 없지만...

 

그냥 너무 어이없었던 에러 해결 순간이었따...

'SPRING > 나의 고통(Error)' 카테고리의 다른 글

Could not convert socket to TLS  (0) 2021.07.26
servlet.xml에 namespace탭이 안보일 때  (0) 2021.07.22
@GetMapping import 불가  (0) 2021.07.22
Build path entry is missing:  (0) 2021.07.21
Spring - db 등록시 한글 깨짐  (0) 2021.07.11