Spring data jpa에서 innodb 사용하기

새롭게 개인 프로젝트를 진행하면서 spring jpa를 사용하는중, 아래와 같은 에러 메세지를 만났다.

Issue

Specified key was too long max key length is 1000 bytes

원인
unique 조건을 걸은 column에서 인덱스가 만들어지는데, 이때 생성되는 인덱스의 크기가 현재 사용하는 engine에서 설정된 limit을 초과해서 발생한 오류.

해결
생성된 테이블을 조사하니, ‘MyISAM’ engine으로 작동중.

MyISAM과 InnoDB에서 인덱스 생성 관련하여 구동방식이 다르기에 (자세한건 타 포스팅 참조), InnoDB를 사용하도록 설정해야 했다.

그래서 Spring Boot properties에 아래의 값을 설정하였다.

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect

dialect를 설정하지 않고 mysql을 사용할경우, myisam을 default로 사용한다.

Comment and share

  • install axio for networking

  • Install react-navigation for routing
    npm install –save react-navigation

  • Install realm for device local db

  • Install react-native-gifted-chat
    npm install react-native-gifted-chat –save

Comment and share

lombok + gradle 설정하기

build.gradle

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
buildscript {
ext {
springBootVersion = '2.0.3.RELEASE'
}
repositories {
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.franzbecker:gradle-lombok:1.14") //추가
}
}


...
...


apply plugin: 'io.franzbecker.gradle-lombok' //추가


...
...


dependencies {
compileOnly('org.projectlombok:lombok:1.18.0')//
}

Comment and share

mysql collate

in Tech

Character Set & Collate

문자열 Datatype에는 문자셋(Character set)과 콜레이션(Collation) 속성이 있다.

문자셋은 각 문자가 컴퓨터에 저장될 때 어떠한 ‘코드’로 저장될지에 대한 규칙의 집합
Collation은 특정 문자셋에 의해 데이터베이스에 저장된 값들을 비교 검색하거나 정렬 등의 작업을 위해 문자들을 서로 비교할 때 사용하는 규칙들의 집합을 의미한다.

  • Charset은 server, database, table, column level에서 지정이 가능하다.

Character Sets & Collations in General

(https://dev.mysql.com/doc/refman/5.7/en/charset-general.html)

Character Set이란?

  • character set은 set of symbols & encodings.
  • 예를들어, 문자열 A,B,C,D가 있다.
    이때 각 문자열에 대해서 A=0, B=1, C=2, D=3 이라고 했을때,
    0, 1, 2, 3은 encoding 에 해당된다.

따라서 Symbol ‘A,B,C,D’와 encoding ‘0,1,2,3’을 합친것을 Character Set 이라 한다.

  • Character Set 조회
    show character set;

  • 서로 다른 char set들은 같은 collation을 가질 수 없다.

  • Char set은 default collation을 가지고 있다.
  • ASCII <= UNICODE
    ( ascii로 저장되어 있는 것들은 UNICODE로 전환하여도 손실이 없다.)
  • Server’s character set & collation :: character_set_server, collation_server variables

Client가 Server에 연결후 쿼리를 요청하면, client는 해당 쿼리를 ‘character_set_client’에 설정되어 있는 character set으로 전송한다.

get mysql system variable

  • select @@{system_variable}

서버가 connection을 통해서 statement를 받으면, 아래와 같은 일이 발생한다.

  • client로부터 받은 statement를 ‘character_set_client’에서 ‘character_set_connection’으로 변환한다.
  • ‘collation_connection’은 String 비교시에 중요하게 사용된다. 하지만 column에 설정되어 있는 collation이 더 상위이므로 이때에는 ‘collation_connection’은 무시된다.

Server가 Client에게 값을 반환할 때에는 ‘character_set_results’를 사용한다.

  • SET NAMES ‘CHARSET-NAME’
    이 쿼리는 해당 connection을 통해서 보내어지고 받을 데이터들의 charaset을 정의한다.
    character_set_client, character_set_results, character_set_connection 을 한번에 ‘CHARSET-NAME’으로 설정한다.

Comment and share

hexo tranquilpeak 설정하기

최근 hexo를 사용하여 github.io page를 꾸미던 중에 제대로 된 설정 안내가 없어서 정리해봅니다.
크게 Hexo 설정과, tranquilpeak 테마 설정, disqus 설정을 정리해보겠습니다.


Hexo 설정

  • plugin 설정
  • _config.yml 작성


Plugin 설정

hexo-auto-canonical

Install

1
npm install --save hexo-auto-canonical

Setup
테마path/layout/_partial/header.ejs를 수정한다.

1
<%- autoCanonical(config, page) %>





Sitemap

Install

1
npm install hexo-generator-seo-friendly-sitemap --save

Setup
theme’s _config.yml

1
2
sitemap:
path: sitemap.xml





rss

Install

1
npm install hexo-generator-feed --save

Setup
theme’s _config.yml

1
2
3
4
feed:
type: atom
path: atom.xml
limit: 20





robots.txt

Install

1
npm install hexo-generator-robotstxt --save

Setup
hexo’s _config.yml

1
2
3
4
robotstxt:
User-agent: '*'
Allow: /
Sitemap: /sitemap.xml





nofollow

Install

1
npm install hexo-autonofollow --save

Setup
theme’s _config.yml

1
2
nofollow:
enable: true









tranquilpeak 설정









Disqus 설정

1) Disqus 가입

2) ‘I want to install Disqus on my site’ 클릭

3) Website 생성

  • Website name 기입
  • Category 설정
  • Website Name에 적은 이름에 따라 input칸 아래에 shortname이 작성된다.
  • 이 shortname을 기억해두고 나중에 theme’s _config.yml에 적어야한다.

4) Select a plan
원하는 plan으로 설정한다.

(DOING…)
5)

Comment and share

4년동안 3번의 이직을 하면서

(4년동안 4곳의 회사를 다니면서…)

올해로 일을 시작한지 4년이 되었고,
하지만 실제 업무기간은 만 2년이 되었고,
가장 오래 근무한 기간은 1년 5개월이고,
다닌 회사는 4곳째인 개발자입니다.








최근 네번째 회사로 이직을 하게되어서 이번 기회에 그동안의 경험, 고민, 느낀것들을 정리해보려고해요.

15년 7월에 대졸 신입 개발자로서 일을 시작했어요.

우선, 그동안 다녔던 회사를 적어볼게요.(직접적인 회사명보단 해당 회사의 성격을 적을게요)

  • 대기업 그룹사에서 IT 담당하는 회사 (이하 A회사)
  • 인하우스 게임 & 퍼블리싱을 하는 글로벌 서비스중인 어느정도 안정된 게임 스타트업 (이하 B회사)
  • 통신 관련 서비스를 하는 스타트업 (이하 C회사)









A회사

첫 직장이었어요. 8개월정도 다녔어요.
그룹사 신입교육기간 빼면 실무에 들어간지 4개월? 만에 나온 셈이죠. OJT 끝나갈 무렵에 나왔습니다.
맡은 업무는 SM이었어요. 사실 이때만해도 SI/SM 차이도 잘 몰랐고 어딜 가더라도 개발을 많이 할 줄 알았죠.(ㅋ…)

현업에 가서 느낀것은,

잦은 정치 싸움
잦은 장애 책임소재 따지기(인센티브를 사수해라)
잦지는 않지만 끝을 모르게 달리는 회식 등등등…

회사생활이 고단하구나 느꼈어요.

하지만 퇴사 고민을 하게 만들었던 것은

  • 너무나 제한적인 업무
  • 업무시간 중 개발시간의 비율이 너무나 적었음
    (개발시간 == 식사시간 + 커피타임) (개발시간 < 서류 + 전화응대)
  • 기술부채를 인력으로 해결하려는 모습
    (추석 연휴에 사무실 나와서 대기하기…)
  • 기술교육 신청시에 직급제한
    (Angular는 대리 이상만 들어라!)

이게 결정적이었죠.
나는 개발자인가 아니면 사무직 직원인가.. 라는 혼란이 옵니다.
개발하고싶다!!!!!!!!!!!!!!!!!! 갈증이 커져갑니다.




나쁜것만 있는것은 아니었어요.

  • 괜찮은 복지
  • 먹고살만한 연봉
  • 신입들간의 동기애
    정도의 장점은 있었어요.

생각에 생각에 빠지기 시작합니다.








이직을 해야 하는가?
이직을 고민하는 이유는 다양합니다.
회사내에서의 갈등, 업무, 개인적인 이유 등등등 다양하죠.
저만의 이직을 고민하는 기준을 만들어보기로 합니다.

우선 그전에 제가 하고 싶은것, 목표를 다시 생각해봅니다.
이를 위해 신입 구직활동 했던 때의 패기넘치던 나를 소환하여 물어보았습니다.


1
2
"실력있는 개발자가 되자"
"실력을 쌓아서 창업을 하여 초기 개발조직을 이끌어보고 싶다"

실력을 쌓기 위해서는 맡은 업무가 challenging해야 한다고 생각했어요.
비즈니스 도메인에 특성이 있거나 트래픽이 많거나 맡은 업무의 범위가 넓거나.. 등등 특성이 있어야 한다고 생각했죠.

또한, 화면 하나 특정 기능 하나를 개발하는것 보다 시스템의 구성 등 전체적인 흐름을 알고 다뤄보는 경험이 더 중요하다고 생각했어요.

A회사에서 이러한 부분을 해결할 수 없을거란 판단이 들었습니다.
그리고 가만히 주변 팀 동료분들을 지켜보시면 간접적으로 알 수 있습니다. 그분들의 지금 모습과 역할이 곧 몇개월, 몇년 후의 내 모습이니깐요…

‘나중에 계속 개발자를 하든, 관리직을 하든, 무엇을 하든 이쪽 업계에서 있으려면 개발 실력이 뒷받침 되어야한다’ 라는 믿음으로 점차 이직에 정당성을 부여하기 시작합니다.

언젠가는 저도 치킨집(..?)을 차리던가 다른 일을 해야 하는 날이 오겠지요.
그래도 그 때에 떠밀리듯 일을 내려놓고 싶지 않았어요.
내손으로 무언가를 결정하려면 그 만한 능력이 있어야 하기에, 아직까지 그때의 결정에 후회는 없어요.



그렇다면 언제 이직을 할까?
아무튼 긴 고민끝에 이직을 해야 한다고 결정 내렸습니다.
솔직히 구직활동이 몇개월에 걸쳐 진행되기에 이 과정을 불과 몇개월만에 또 반복하려니 생각하기도 싫더군요.
구직활동하는게 쉬운건 아니니 적당히 일하면서 경력을 채운 다음에 이직을 할까..라는 유혹에 시달립니다.

1
2
현재 누리고 있는 복지, 연봉 등 이러한 것들이 나의 10년후를 보장해주지 못한다. 
10년 후의 나에게 조금이라도 도움이 되는 것은 내 능력 뿐이다.

현 A회사에서의 2, 3년동안 배운 경험과 경력 vs 타 회사에서의 1년, 2년의 경험과 경력
을 비교해 보았을때, 후자가 더 경쟁력이 있다고 생각하였습니다.

지금 생각해보면 실력은 정말 쥐뿔도 없고 가진것도 없었는데 일단 실행에 옮깁니다.
주변 모두의 만류를 뿌리치고 다음 행선지를 결정하지도 않은채 무작정 퇴사를 결정합니다.
(공백기의 스트레스를 경험하고나서부터는.. 다음 직장을 결정하고서 퇴사를 하게 됩니다 ^^;)




덧.
SM에서 일하시는 분들을 비하하거나, 모든 SM의 업무가 위와 같은 것이 아닙니다.
제가 있던곳의 얘기이고, SM과 제가 가고싶은 방향이 다른것 뿐임을 알려드립니다.









A회사 ~ B회사 사이의 공백기

일을 그만둔 초기에는 참 좋았어요. 더이상 전화받으면서 “안돼요”, “못해요”, “원래 안돼요” … 등의 얘기를 하지 않아도 됐으니까요.
이것도 오래 가지 못하고, 슬슬 백수의 부담이 오더군요. 다음 회사를 결정하지 않고 괜히 무턱대고 퇴사를 했다는 생각이 들었죠..ㅎㅎ
시기도 애매하게 신입 공채가 끝난 4월이라…
신입채용을 진행하는 회사를 찾기 어려웠습니다.

‘난 이제 어디를 가야하나…’ 라는 생각이 들기 시작했습니다.
A회사에서의 경험으로 인해서인지 어지간한 회사들은 다 비슷할거 같더군요.

해외로 나가야 하나..? 라는 생각이 들기도 했지만 잠시 접어두고.

보다 나은 개발문화와 조직문화를 경험하고
개발업무의 비중을 높이고 보다 많은 역할을 하고 싶어서 스타트업으로 구직활동을 시작합니다.

공부도 하고 이력서도 다시 검토하고 성찰과 반성의 시기를 거칩니다.

그러다 운좋게 B회사의 채용 공고를 통해서 CTO님과 함께 생활하면서 인턴부터 시작할 수 있는 기회가 있었습니다.

다행히 합격을 하게되어 3개월간의 백수기간을 마치고
인턴부터 정직원까지 약 6개월간의 B회사 생활이 시작됩니다.




덧.
이직 결정과 다음 행선지 결정은 신중하면서도 신속하게…









B회사

정장이 아니라 청바지, 반바지를 입을 수 있는 B회사는 그당시 저에겐 엄청나게 신선했습니다.
A회사에서는 신입이니 한 달동안은 정장만 입어라~ 라고 하시는 팀장님 덕분에 고생을 했었으니까요.
게다가 몇백원에 음료를 뽑아먹을 수 있는 자판기, 기타 등등 새로운 조직문화에 흠뻑 취했습니다.

하지만 조직문화에 헤롱헤롱하는것도 잠시.
CTO님과 함께하는 두 달여동안의 인턴 기간을 거치면서 많은 것들을 배우고 해보게됩니다.
인턴 기간동안에는 현업을 해보진 못하고 공부와 프로젝트만 진행하였지만 최신 트렌드를 쫓는게 아니라
기본에 대해서 제대로 공부하고, 내실을 다질 수 있었습니다. (감사합니다 CTO님…)

만족스러운 회사 생활을 하던 중,
회사 상황이 안좋아지게 되어 인턴에서 정직원이 된 지 두달여만에
같이 정직원으로 전환된 친구들과 함께 하루아침에 다시 백수 신세가 되게됩니다.










생각보다 길어져서 이후의 얘기와 현업을 본격적으로 하면서 겪은 일들은 추후에 정리하도록 하겠습니다!

Comment and share

  • page 1 of 1
Author's picture

Owen Q

author.bio


author.job


Seoul