떨어진 곳은 안가서 다행인거고
붙은곳은 갔어도 구릴 확률이 높고.
온갖 회사 자랑으로 구인한다고 해놔도,
그 사람들이 구릴수도 있는거고,
정작 입사해도 나랑 안맞는 문화가 있을 수 있고,
떨어지고 봐도 나는 적응 못할것 같은 문화일 수 있고...
지원했던 회사 합격한 사람들이랑 떨어진 나랑 크게 차이날 것들도 없을거고,
그냥 운임. x같은 운.
2017년 7월 22일 토요일
20170723 면접? 다 그냥 운임.
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2017년 7월 6일 목요일
20170706 React.js 리스트에 key를 넣어주는 이유
뜻하지 않게 서버 개발자(로 일해본 기간도 매우 짧지만..ㅠㅠ)의 커리어는 접혔고,
프론트 엔드 개발을 시작하게 되었습니다.
React.js를 사용하게 되었습니다.
젤 처음 의문을 가졌던 key라는 녀석에 대해서 썰을 풀어봅니다.
리엑트는 리스트(순회 구조 아이템들)를 그릴때 key를 넣지 않으면 콘솔에서 막 경고를 막막 줍니다.
그래서 이것저것 넣었는데 특별한 이유가 있었습니다.
1. 리엑트가 그림을 그리는데 중복을 체크합니다.
2. 마지막에 추가하는 것이 아니라 처음 혹은 중간에 추가할 경우 변경된 노드부터 모두 다시 그리게 됩니다.
3. 성능에 영향을 줍니다.
예를 들어,
<div>
<li>1</li>
<li>2</li>
</div>
를
<div>
<li>1</li>
<li>2</li>
<li>100</li>
</div>
으로 바꾼다고 할 때,
리엑트 친구는 위에서부터
<li>1</li> 비교
<li>2</li> 비교
엇?! 100이 없네? 그려!
의 방식으로 작동하게 됩니다.
만약 100이 처음에 있다면. 리엑트 틴구는 빙구처럼 처음부터 그리게 되겠지요.
근데 여기에 key값을 줘봅니다.
<li key="some.id"> 정도로요.
그럼 리엑트 틴구는 신나서 키만 비교하고 빠진것만 그려넣게 됩니다.
성능상의 이점도 잡을 수 있죠.
그래서 키는 보통 사용자(혹은 리엑트)가 식별할 수 있는 정보를 주게 되어있습니다.
1. 유일할 것
2. 예측 가능할 것
3. 안정적일 것
키가 가져야 할 마음가짐 입니다.
그럼 이제 일하러.
프론트 엔드 개발을 시작하게 되었습니다.
React.js를 사용하게 되었습니다.
젤 처음 의문을 가졌던 key라는 녀석에 대해서 썰을 풀어봅니다.
리엑트는 리스트(순회 구조 아이템들)를 그릴때 key를 넣지 않으면 콘솔에서 막 경고를 막막 줍니다.
그래서 이것저것 넣었는데 특별한 이유가 있었습니다.
1. 리엑트가 그림을 그리는데 중복을 체크합니다.
2. 마지막에 추가하는 것이 아니라 처음 혹은 중간에 추가할 경우 변경된 노드부터 모두 다시 그리게 됩니다.
3. 성능에 영향을 줍니다.
예를 들어,
<div>
<li>1</li>
<li>2</li>
</div>
를
<div>
<li>1</li>
<li>2</li>
<li>100</li>
</div>
으로 바꾼다고 할 때,
리엑트 친구는 위에서부터
<li>1</li> 비교
<li>2</li> 비교
엇?! 100이 없네? 그려!
의 방식으로 작동하게 됩니다.
만약 100이 처음에 있다면. 리엑트 틴구는 빙구처럼 처음부터 그리게 되겠지요.
근데 여기에 key값을 줘봅니다.
<li key="some.id"> 정도로요.
그럼 리엑트 틴구는 신나서 키만 비교하고 빠진것만 그려넣게 됩니다.
성능상의 이점도 잡을 수 있죠.
그래서 키는 보통 사용자(혹은 리엑트)가 식별할 수 있는 정보를 주게 되어있습니다.
1. 유일할 것
2. 예측 가능할 것
3. 안정적일 것
키가 가져야 할 마음가짐 입니다.
그럼 이제 일하러.
2017년 6월 24일 토요일
MSA가 뭐죠?
오랜만에 글을 남깁니닷.
일단 최근에 MSA로 구축할 프로젝트가 생겨서 MSA에 대해서 조금 알아보게 되었습니다.
기초나 기본을 튼튼히 하지 않고
이미 튼튼하신 분들이 공부하고 해야할 일을 대충 처리하는건 아닐까 하는 막연한 두려움과 불안감에 휩쌓여 있기도 합니다.
그래도 얻게된 것
1. 어렴풋이 SOA와 MSA의 차이를 알게 되었다.
2. yml 파일을 좀 더 잘 쓸수 있게 되었다.
3. MSA 구성 품들을 알게 되었다.
4. 도커가 뭔지 찌끄려봤다.
5. 실제 API 게이트웨이를 생성해보고 있다(물론 있어야 하는지 없어야 하는지 의견은 많이 나뉨).
6. 클라우드 환경 위에서 구축하는 MSA(이론) / 물리 서버(+ 1대의 디비)에 구축하는 실전형 MSA(라고 쓰고 아직 이론 공부만 하는중 이라 읽음)
2번의 경우 메이븐에서 설정하던 관성이 있어
폴더별 프로파일 구분하던가 application-profile.yml 하던것을
application.yml에 통합한다거나 spring:profiles: 로 처리한다거나 다양한 방법을 접해보게 되었습니다.
3번은 6번에서도 마찬가진데 MSA는 서비스를 쪼개는 것이다. 그리고 이를 합쳐서 서비스 한다.
누구나 할 수 있는 말이고 말만으로는 너무나 쉽습니다. 실제로 구현하는건 다른 이야기 같습니다.
화두가 되는 API 게이트웨이와 트랜젝션 처리인데요.
API 게이트웨이는 큰 서비스 아니면 잘 안둔다. 그냥 있으면 편하다. 관리하기 힘들다. 등등등...
트랜젝션은 글로벌/로컬 트랜젝션을 관리한다. 보상 트랜젝션으로 퉁친다? 이벤트(메시지) 핸들링 한다?(사실 잘 몰라요 ㅠㅠ) 등 방법이 알려져 있습니다.
물론 저도 말은 할 수 있는 정도는 되었는데, 구현하라고 하면 당연히 손빨고 있어야 합니다.
그래서 지금 손빨고 있습니다... ㅠㅠ 사수가 필요합니다.......
4번은 도커를 사용하거나 도커간의 통신 도커 내의 작업 이미지 생성등 어떤 것들이 있는지 알아가고 있는 중입니다. 의외로 도커 부분은 잘 풀렸으면 하는 부분이기도 합니다.
5번은 이제 여기저기 많은 예제를 실행해보고 있는데(난 왜 안되냐...)
많은 선택지 중 넷플릭스(만 믿고 간다!)의 Zuul을 사용하기로 마음(저 혼자)먹었습니다.
그래서 예제를 작성(따라서 코딩)하고 있고 너무나 쉬운 라우팅에 멘붕이 터진 후에 라우팅 리소스를 Spring Cloud Config Server/Client로 처리하는 것을 방금 마친것 같습니다... 마친걸꺼에요... 될껄요?
이제 남은건 Zuul 필터 다루기와 LB 기능들 그리고 그 왜에 우리 프로젝트가 원하는 것들을 구성해 나가야겠지요.
6번은 저도 잘 모르니 이견이 많습니다. MSA를 설명하는 대부분은 서비스가 분리되어 독립된 DB를 갖는다고 하는데(각각은 아니더라도) 저희는 제약이 서버 1대로 퉁친다입니다.
아키텍트라는게 귀에걸면 귀걸이인가? 싶기도 하고... 사수가 필요합니다...
서버는 몇대가 되어야 하는지 나눠야 하는 서비스는 몇갠지 등등 아무런 정보가 읎습니다. 읎어....ㅠㅠ
함께 일하시는 분들이 관성이 괭장히 굉장하셔서 저같이 옛날 방법이나 기술을 모르는 사람은 어리둥절하게 만들어 주시는데 사실 그분들의 그 방법보다 제가 아는 방법(은 없지만)으로 똑같이 해낼 자신도 없습니다... 그래서 역시나 사수가 필요합니다....
그나저나 MSA인데 한 프로젝트 안에 서브모듈로 서비스를 나눠도 되는건지 이게 MSA인건지 뭐 아리까리한게 너무나 많습니다.
어휴 조만간 풀 예제를 장착해서 돌아도로록 하겠습니다.
MSA(트랜젝션 및 구성) + 도커 + CI/CD
아... 어렵다....
사수가 필요합니다.
일단 최근에 MSA로 구축할 프로젝트가 생겨서 MSA에 대해서 조금 알아보게 되었습니다.
기초나 기본을 튼튼히 하지 않고
이미 튼튼하신 분들이 공부하고 해야할 일을 대충 처리하는건 아닐까 하는 막연한 두려움과 불안감에 휩쌓여 있기도 합니다.
그래도 얻게된 것
1. 어렴풋이 SOA와 MSA의 차이를 알게 되었다.
2. yml 파일을 좀 더 잘 쓸수 있게 되었다.
3. MSA 구성 품들을 알게 되었다.
4. 도커가 뭔지 찌끄려봤다.
5. 실제 API 게이트웨이를 생성해보고 있다(물론 있어야 하는지 없어야 하는지 의견은 많이 나뉨).
6. 클라우드 환경 위에서 구축하는 MSA(이론) / 물리 서버(+ 1대의 디비)에 구축하는 실전형 MSA(라고 쓰고 아직 이론 공부만 하는중 이라 읽음)
2번의 경우 메이븐에서 설정하던 관성이 있어
폴더별 프로파일 구분하던가 application-profile.yml 하던것을
application.yml에 통합한다거나 spring:profiles: 로 처리한다거나 다양한 방법을 접해보게 되었습니다.
3번은 6번에서도 마찬가진데 MSA는 서비스를 쪼개는 것이다. 그리고 이를 합쳐서 서비스 한다.
누구나 할 수 있는 말이고 말만으로는 너무나 쉽습니다. 실제로 구현하는건 다른 이야기 같습니다.
화두가 되는 API 게이트웨이와 트랜젝션 처리인데요.
API 게이트웨이는 큰 서비스 아니면 잘 안둔다. 그냥 있으면 편하다. 관리하기 힘들다. 등등등...
트랜젝션은 글로벌/로컬 트랜젝션을 관리한다. 보상 트랜젝션으로 퉁친다? 이벤트(메시지) 핸들링 한다?(사실 잘 몰라요 ㅠㅠ) 등 방법이 알려져 있습니다.
물론 저도 말은 할 수 있는 정도는 되었는데, 구현하라고 하면 당연히 손빨고 있어야 합니다.
그래서 지금 손빨고 있습니다... ㅠㅠ 사수가 필요합니다.......
4번은 도커를 사용하거나 도커간의 통신 도커 내의 작업 이미지 생성등 어떤 것들이 있는지 알아가고 있는 중입니다. 의외로 도커 부분은 잘 풀렸으면 하는 부분이기도 합니다.
5번은 이제 여기저기 많은 예제를 실행해보고 있는데(난 왜 안되냐...)
많은 선택지 중 넷플릭스(만 믿고 간다!)의 Zuul을 사용하기로 마음(저 혼자)먹었습니다.
그래서 예제를 작성(따라서 코딩)하고 있고 너무나 쉬운 라우팅에 멘붕이 터진 후에 라우팅 리소스를 Spring Cloud Config Server/Client로 처리하는 것을 방금 마친것 같습니다... 마친걸꺼에요... 될껄요?
이제 남은건 Zuul 필터 다루기와 LB 기능들 그리고 그 왜에 우리 프로젝트가 원하는 것들을 구성해 나가야겠지요.
6번은 저도 잘 모르니 이견이 많습니다. MSA를 설명하는 대부분은 서비스가 분리되어 독립된 DB를 갖는다고 하는데(각각은 아니더라도) 저희는 제약이 서버 1대로 퉁친다입니다.
아키텍트라는게 귀에걸면 귀걸이인가? 싶기도 하고... 사수가 필요합니다...
서버는 몇대가 되어야 하는지 나눠야 하는 서비스는 몇갠지 등등 아무런 정보가 읎습니다. 읎어....ㅠㅠ
함께 일하시는 분들이 관성이 괭장히 굉장하셔서 저같이 옛날 방법이나 기술을 모르는 사람은 어리둥절하게 만들어 주시는데 사실 그분들의 그 방법보다 제가 아는 방법(
그나저나 MSA인데 한 프로젝트 안에 서브모듈로 서비스를 나눠도 되는건지 이게 MSA인건지 뭐 아리까리한게 너무나 많습니다.
어휴 조만간 풀 예제를 장착해서 돌아도로록 하겠습니다.
MSA(트랜젝션 및 구성) + 도커 + CI/CD
아... 어렵다....
사수가 필요합니다.
2017년 3월 17일 금요일
20170318
거의 매주 밤 새벽 늦게 부부싸움하는 부부가 있다.
참으로도 과격하게 싸운다.
악을 지르는건 기본에
물건을 때려 부수고,
그나마 손지검은 안하는것 같다.
오늘은 더 크게 더 심하게 싸우는데 알고보니 같은 층이었다.
여자분의 울부짖는 소리와 남자분의 그만두자는 소리. . .
이시간에 나는 왠일로 깨어있다가 저런 소리를 듣게된건지.
만성이되어 그만 무뎌져 원만하게 해결 됐으면 좋겠다.
그래서 마느님께 더욱 감사하다.
염화미소를 알려준 그리고 보여준 부처들에게도 감사한 하루다.
힘들지만 힘내자. 힘드니까 힘내고 힘들꺼니께 힘내기!
회사와 관련해서는
친구는 역시 친구인게 .니새끼도 문제가 많다고 따끔하게 일침을 가해줬다.
이러니 내 친구지 고맙다 생퀴야
참으로도 과격하게 싸운다.
악을 지르는건 기본에
물건을 때려 부수고,
그나마 손지검은 안하는것 같다.
오늘은 더 크게 더 심하게 싸우는데 알고보니 같은 층이었다.
여자분의 울부짖는 소리와 남자분의 그만두자는 소리. . .
이시간에 나는 왠일로 깨어있다가 저런 소리를 듣게된건지.
만성이되어 그만 무뎌져 원만하게 해결 됐으면 좋겠다.
그래서 마느님께 더욱 감사하다.
염화미소를 알려준 그리고 보여준 부처들에게도 감사한 하루다.
힘들지만 힘내자. 힘드니까 힘내고 힘들꺼니께 힘내기!
회사와 관련해서는
친구는 역시 친구인게 .니새끼도 문제가 많다고 따끔하게 일침을 가해줬다.
이러니 내 친구지 고맙다 생퀴야
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2017년 1월 19일 목요일
20170120 5년차 개발자와의 대화
누군가가 해 놓은 개인 프로젝트를 인수인계 받아 버그를 수정하는 상황
- 디비에 필드 하나 추가해서 스트링으로 값 넣고 빼고 하는거 쉽잖아요. 금방 되죠?
= 디비 필드 하나 추가할 때 사이드 이펙트 같은게 있는데 그런거 고려해야 할것 같아요.
쉬운지 안쉬운지는 모르겠어요.
- 아니 그냥 바챠(varchar) 255 주고 필드하나 수정하는데 뭘...
A: 테스트 서버 세팅하는데 얼마나 걸리나?
- 아 그거 아까도 말씀드렸지만 오후 4시면 된다니까요.
당연히 야근하고 다음날 완성됨.
= 10년차인데도 if id == 1 이런식으로 7개의 푸터를 생성해놨네요... 이런건 고쳐야 하지 않을까요?
- 아니 그게 시간이 있어야 고치죠 할것도 많은데
= 저게 계속 늘어날껀데 매번 그냥 추가하실 건가요?
- 그럼 어떻게 해요. 원래 일이란게 그래요. 하나 고치고 하나 고치고 그런식으로 돌아가는 거에요.
.......
나중에 글쓴이 생각이 바뀔 수 있을거에요.
이 회사랑 안맞는거 같은데 빨리 다른데 알아보시고 나가시는게 좋을것 같아요.
......
더 많은 일화가 있지만...
정말 나도 나중에 하루 하나씩 버그나 처리하면서 살게 될까?....
- 디비에 필드 하나 추가해서 스트링으로 값 넣고 빼고 하는거 쉽잖아요. 금방 되죠?
= 디비 필드 하나 추가할 때 사이드 이펙트 같은게 있는데 그런거 고려해야 할것 같아요.
쉬운지 안쉬운지는 모르겠어요.
- 아니 그냥 바챠(varchar) 255 주고 필드하나 수정하는데 뭘...
A: 테스트 서버 세팅하는데 얼마나 걸리나?
- 아 그거 아까도 말씀드렸지만 오후 4시면 된다니까요.
당연히 야근하고 다음날 완성됨.
= 10년차인데도 if id == 1 이런식으로 7개의 푸터를 생성해놨네요... 이런건 고쳐야 하지 않을까요?
- 아니 그게 시간이 있어야 고치죠 할것도 많은데
= 저게 계속 늘어날껀데 매번 그냥 추가하실 건가요?
- 그럼 어떻게 해요. 원래 일이란게 그래요. 하나 고치고 하나 고치고 그런식으로 돌아가는 거에요.
.......
나중에 글쓴이 생각이 바뀔 수 있을거에요.
이 회사랑 안맞는거 같은데 빨리 다른데 알아보시고 나가시는게 좋을것 같아요.
......
더 많은 일화가 있지만...
정말 나도 나중에 하루 하나씩 버그나 처리하면서 살게 될까?....
라벨:
5년차 개발자와 쫄병 이야기
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
20170129 정말 힘들다고 생각할 때
이직에 성공한지 반년.
다시 이직을 준비하고 있습니다.
면접을 이리저리 다니고 있는데 너무나 듣기 힘든 질문들이 있습니다.
일부로 적지않은 개인 정보를 묻는다던가...
사진이 없으니 여자인줄 알았다는 이야기 등등... ^^;;
음.. 일단 생각나는 것들은...
- 왜 콤퓨타 시작했어용? 전직(?) 했어요?
- xx과 나왔으니까 xx 잘하겠네요?
- 우리 회사 제품 써봤어요?
- 우리 회사에 대해서 조사 하셨나요? 같은 질문들이나...
지인이 면접관인 경우. 내 상황을 알면서도
- 너무 지쳐 보이시네요. 입사하려는 의지가 보이지 않습니다.
- 열정이 부족해 보입니다.
라는 말들을 들었습니다.
머 아무래도 좋습니다.
지난 백수 3개월 기간동안 진짜 힘들어 숨질것 같을 때 열매가 생겼다는 운명론적인 생각으로 버티고 있습니다(이것은 마치 잘 먹었습니다.가 아니라 먹었습니다~! 의 느낌).
암튼 각설하고,
백수일 때도 매우 힘들었고, 일하면서 이직하는 것도 매우 힘들다는걸 느끼고 있습니다.
이직을 꾸준히 시도한게 아니고 회사의 사정상 이직을 준비하기 시작하면서 받은 스트레스도 있고, 길어지는 구직 기간이 더욱 지치게 만들고 있습니다.
어디선가 듣게 된 탈락에 관한 이야기.
탈락하면 내가 부족한게 아니고 회사와 인연이 닿지 않은것이다. 라고 생각하면 됩니다! 라는 이야기.
어디선가 듣게 된 자존감을 살려주는 이야기.
참새가 나뭇가지에 앉을 때에는 나뭇가지가 부러질까 두려워 하지 않는다. 라는 이야기!
최근에 느낀점은
역시 사람을 너무 믿어서 상처를 받는구나...
이젠 그만 믿어야겠다.
인맥없이는 살아가기 힘들구나... 힘들게 살아야지.
그래도 결론은 내 실력이 부족하다는 사실.
덧. 면접볼 때 입사하려는 의지는 어떻게 보여주는 건가 궁금하네요. 그것도 본인이 소개해 주고는.....
노예가 노예를 뽑는것 같은 느낌을 지울수가 없네요. 정말 실망했습니다. 되 묻고 싶네요... 본인들은 정말 간절히 원해서 들어간건지... 에휴 이런글 쓰는게 넘 찌질하네 ㅠㅠ
한국 회사들은 구직자에 대한 폭력이 너무 심해요. 물론 돌맹이 던진 사람은 장난이라고 생각하겠시바.
덧2. 왜 이렇게 자기 회사의 제품 등 뭔가를 써보길 원하는지 모르겠습니다. 저는 그 회사가 뭘 하는지 내일 당장 망하는지 상관 없습니다. 문제를 해결하는 능력이나 방법은 변하지 않고 해당 제품의 문제나 개선을 위한 몸부림은 입사 후 해도 충분하다고 생각하니까요(이래서 다 떨어지는듯 ㅋㅋㅋ).
덧3. 자리에 앉아 있어야 열심히 일하는 거다! 6시에 퇴근하기 눈치보여요 등.... 멀었다는 느낌이 많이 듭니다....
다시 이직을 준비하고 있습니다.
면접을 이리저리 다니고 있는데 너무나 듣기 힘든 질문들이 있습니다.
일부로 적지않은 개인 정보를 묻는다던가...
사진이 없으니 여자인줄 알았다는 이야기 등등... ^^;;
음.. 일단 생각나는 것들은...
- 왜 콤퓨타 시작했어용? 전직(?) 했어요?
- xx과 나왔으니까 xx 잘하겠네요?
- 우리 회사 제품 써봤어요?
- 우리 회사에 대해서 조사 하셨나요? 같은 질문들이나...
지인이 면접관인 경우. 내 상황을 알면서도
- 너무 지쳐 보이시네요. 입사하려는 의지가 보이지 않습니다.
- 열정이 부족해 보입니다.
라는 말들을 들었습니다.
머 아무래도 좋습니다.
지난 백수 3개월 기간동안 진짜 힘들어 숨질것 같을 때 열매가 생겼다는 운명론적인 생각으로 버티고 있습니다(이것은 마치 잘 먹었습니다.가 아니라 먹었습니다~! 의 느낌).
암튼 각설하고,
백수일 때도 매우 힘들었고, 일하면서 이직하는 것도 매우 힘들다는걸 느끼고 있습니다.
이직을 꾸준히 시도한게 아니고 회사의 사정상 이직을 준비하기 시작하면서 받은 스트레스도 있고, 길어지는 구직 기간이 더욱 지치게 만들고 있습니다.
어디선가 듣게 된 탈락에 관한 이야기.
탈락하면 내가 부족한게 아니고 회사와 인연이 닿지 않은것이다. 라고 생각하면 됩니다! 라는 이야기.
어디선가 듣게 된 자존감을 살려주는 이야기.
참새가 나뭇가지에 앉을 때에는 나뭇가지가 부러질까 두려워 하지 않는다. 라는 이야기!
최근에 느낀점은
역시 사람을 너무 믿어서 상처를 받는구나...
이젠 그만 믿어야겠다.
인맥없이는 살아가기 힘들구나... 힘들게 살아야지.
그래도 결론은 내 실력이 부족하다는 사실.
덧. 면접볼 때 입사하려는 의지는 어떻게 보여주는 건가 궁금하네요. 그것도 본인이 소개해 주고는.....
노예가 노예를 뽑는것 같은 느낌을 지울수가 없네요. 정말 실망했습니다. 되 묻고 싶네요... 본인들은 정말 간절히 원해서 들어간건지... 에휴 이런글 쓰는게 넘 찌질하네 ㅠㅠ
한국 회사들은 구직자에 대한 폭력이 너무 심해요. 물론 돌맹이 던진 사람은 장난이라고 생각하겠시바.
덧2. 왜 이렇게 자기 회사의 제품 등 뭔가를 써보길 원하는지 모르겠습니다. 저는 그 회사가 뭘 하는지 내일 당장 망하는지 상관 없습니다. 문제를 해결하는 능력이나 방법은 변하지 않고 해당 제품의 문제나 개선을 위한 몸부림은 입사 후 해도 충분하다고 생각하니까요(이래서 다 떨어지는듯 ㅋㅋㅋ).
덧3. 자리에 앉아 있어야 열심히 일하는 거다! 6시에 퇴근하기 눈치보여요 등.... 멀었다는 느낌이 많이 듭니다....
2016년 11월 27일 일요일
20161127 최근 주변의 구직 성향
최근 페북을 통해 구인/구직하는 현황을 살펴보면 인맥위주인것 같습니다.
인맥도 실력도 없는 저같은 쫄병은 그저 한켠에서 반성하며 울 수 밖에 없는것 같습니다.
그들과 친해지지 못한 잘못, 실력이 없는 잘못 모두 자신을 반성하게 됩니다.
누구는 인간관계의 최소 친절을 이야기하며 과잉 친절이 싫다 이야기합니다.
누구는 제가 경력이 짧은데 이력서를 내도 되냐고 하면 이력서를 달라고 합니다. 물론 답변은 '우리는 경력자를 원한다.'입니다.
흔히 말하는 SKY, KAIST등 잘나가는 대학을 나오신 분들은 그들끼리의 업체를 운영하며 우린 차별 없어요를 외치지만 결국 회사 소개에 가보면 그들만의 리그라 낄틈은 없는것 처럼 느껴집니다.
위 경우를 중복해서 많이도 겪었고, 다 떨어졌기 때문에, 피해 의식이 있기 때문에 밤잠을 설칩니다.
벌써 오전 1시 48분인데...ㅡ.ㅜ
다 제 잘못인 것입니다. 공부 못한 죄, 지잡대 나온 죄, 어울리지 못한 죄, 머리 나쁜 죄.
어디서부터 잘못된건지 잘 알고있습니다. 첫 단추가 잘못 끼워졌습니다.
그래도 살아야 하고 나아가야 합니다. 굶어죽기 싫고, 우울하게 있기 싫기 때문입니다.
저같은 쩌리같은 사람들도 부디 잘사는 날이 왔으면 좋겠습니다.
에휴 이 피해의식.
인맥도 실력도 없는 저같은 쫄병은 그저 한켠에서 반성하며 울 수 밖에 없는것 같습니다.
그들과 친해지지 못한 잘못, 실력이 없는 잘못 모두 자신을 반성하게 됩니다.
누구는 인간관계의 최소 친절을 이야기하며 과잉 친절이 싫다 이야기합니다.
누구는 제가 경력이 짧은데 이력서를 내도 되냐고 하면 이력서를 달라고 합니다. 물론 답변은 '우리는 경력자를 원한다.'입니다.
흔히 말하는 SKY, KAIST등 잘나가는 대학을 나오신 분들은 그들끼리의 업체를 운영하며 우린 차별 없어요를 외치지만 결국 회사 소개에 가보면 그들만의 리그라 낄틈은 없는것 처럼 느껴집니다.
위 경우를 중복해서 많이도 겪었고, 다 떨어졌기 때문에, 피해 의식이 있기 때문에 밤잠을 설칩니다.
벌써 오전 1시 48분인데...ㅡ.ㅜ
다 제 잘못인 것입니다. 공부 못한 죄, 지잡대 나온 죄, 어울리지 못한 죄, 머리 나쁜 죄.
어디서부터 잘못된건지 잘 알고있습니다. 첫 단추가 잘못 끼워졌습니다.
그래도 살아야 하고 나아가야 합니다. 굶어죽기 싫고, 우울하게 있기 싫기 때문입니다.
저같은 쩌리같은 사람들도 부디 잘사는 날이 왔으면 좋겠습니다.
에휴 이 피해의식.
2016년 8월 21일 일요일
20160821 Spring boot + thymeleaf Image 파일 어디있는거냐!
타임리프: 스프링 부트가 밀어준다. Html 기반이다. 그래서 좋아합니다.
근데 또 프로젝트 설정을 한 후 이미지 파일 하나를 보이도록 하고싶은데.
도대체 경로를 찾을 수 없었습니다.... ㅠㅠ 아... 입개발자.
-- 아래는 @EnableWebMVC를 설정하지 않았을 경우입니다.
그래서 경로와 한참을 씨름한 후 알게된 사실을 포스팅합니다.
일단 기본적으로 예전에는
webapps/WEB-INF/
를 루트로 사용했었는데, 스프링 부트의 타임리프 스타터를 사용한 후에는
근데 또 프로젝트 설정을 한 후 이미지 파일 하나를 보이도록 하고싶은데.
도대체 경로를 찾을 수 없었습니다.... ㅠㅠ 아... 입개발자.
-- 아래는 @EnableWebMVC를 설정하지 않았을 경우입니다.
그래서 경로와 한참을 씨름한 후 알게된 사실을 포스팅합니다.
일단 기본적으로 예전에는
webapps/WEB-INF/
를 루트로 사용했었는데, 스프링 부트의 타임리프 스타터를 사용한 후에는
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
src/main/resources 를 루트로
뷰 파일(.html 등)은 templates 안에
이미지, css, js 파일들은 static 안에 모아두면 절대경로처럼 사용할 수 있던것을 알게 되었습니다.
뷰 파일: src/main/resources/templates
static 파일: src/main/resources/static
그럼 이제
html에서 저 파일을 어떻게 불러오는가.
static/images/a.png 파일을 사용하려고 한다면
<img src="images/a.png"/>
<img src="/images/a.png"/>
<img th:src="@{images/a.png}"/>
<img th:src="@{/images/a.png}"/>
등 위 방법 모두 가능합니다.
아마도. ^^;
라벨:
Spring boot,
Thymeleaf
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 8월 4일 목요일
20160805 JPA 사용시 주의점!
오늘 겪은 황당스러운 에러...
잘 알아보고 사용해야 하는데 대충 사용해서 이런 사단이 났습니다.
사용 디비는 H2.
Hibernate: create table 테이블 (아이디 bigint generated by default as identity, order integer, 필드 varchar(255), primary key (필드))
ERROR o.h.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table 테이블 (아이디 bigint generated by default as identity, order integer, 필드 varchar(255), primary key (필드))
==여기==
ERROR o.h.tool.hbm2ddl.SchemaExport - Syntax error in SQL statement "CREATE TABLE 테이블 (아이디 BIGINT GENERATED BY DEFAULT AS IDENTITY, ORDER[*] INTEGER, 필드 VARCHAR(255), PRIMARY KEY (필드)) ";
expected "identifier";
또 다른 에러 내용
o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 42102, SQLState: 42S02
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Table "테이블" not found;
정확한 원인을 모른체 계속 땅을 파던중...
진짜 마지막이다 하고 차근차근 소스 파일의 1줄부터 쭈우우욱 변경하면서 원인을 분석했습니다.
원인은
private int order;
였습니다.
저는 순서를 넣고 싶었고 order 필드를 작성했습니다.
하지만, JPA 예약어였던 것입니다(아마도...).
order라는 필드는 사용하면 안됩니다! ㅠㅠ
잘 알아보고 사용해야 하는데 대충 사용해서 이런 사단이 났습니다.
사용 디비는 H2.
Hibernate: create table 테이블 (아이디 bigint generated by default as identity, order integer, 필드 varchar(255), primary key (필드))
ERROR o.h.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table 테이블 (아이디 bigint generated by default as identity, order integer, 필드 varchar(255), primary key (필드))
==여기==
ERROR o.h.tool.hbm2ddl.SchemaExport - Syntax error in SQL statement "CREATE TABLE 테이블 (아이디 BIGINT GENERATED BY DEFAULT AS IDENTITY, ORDER[*] INTEGER, 필드 VARCHAR(255), PRIMARY KEY (필드)) ";
expected "identifier";
==여기==
==여기== 부터 ==여기== 까지 의미를 알았더라면...ㅠㅠ
또 다른 에러 내용
o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 42102, SQLState: 42S02
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Table "테이블" not found;
정확한 원인을 모른체 계속 땅을 파던중...
진짜 마지막이다 하고 차근차근 소스 파일의 1줄부터 쭈우우욱 변경하면서 원인을 분석했습니다.
원인은
private int order;
였습니다.
저는 순서를 넣고 싶었고 order 필드를 작성했습니다.
하지만, JPA 예약어였던 것입니다(아마도...).
order라는 필드는 사용하면 안됩니다! ㅠㅠ
라벨:
JPA,
Spring boot
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 7월 15일 금요일
20160716 Spring Boot, JPA, Spring Security custom (0)
작년에 써둔 글을 조금씩 수정해서 올려볼 생각입니다.
천천히...!
개발자 화이팅!
라벨:
JPA,
Spring boot,
Spring Security
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
20160716 제대로 된 팀을 만나긴 정말 힘들다.
이전 회사의 팀이 와해되고,
각자의 길을 떠났습니다.
이전 회사 사람들간(팀 내)의 의사소통이 얼마나 자유롭고 즐거웠는지 지금 환경에서 새삼 느끼게 되었습니다.
지금은 한 명이 회사 분위기를 다 망쳐놓고, 사원들 입에서는 xx님이 너무 무섭다 는 말이 나오고 있는 상황.
저는 왜 그 한 사람의 기분에 따라 분위기가 좌우 되어야 하는지, 아무도 뭐라고 하지 않는지가 너무 궁금했습니다.
그래서 이전 회사의 팀장님께 조언을 구했는데 결국 듣게된 조언은 한약같은 조언이었습니다.
= 나서지 마세요. 그러다 너님만 이상한 사람 됩니다.
ㅎㅎㅎ
이전 팀장님 역시 회사 대표에게 아무 소리 안하고 묵묵히 팀을 위해 참았던걸 봤고,
그렇게 책임을 가진 사람을 또 만나기 힘들다는 생각을 했습니다.
어쨋든... 이전 팀이 너무나 그립네요.
각자의 길을 떠났습니다.
이전 회사 사람들간(팀 내)의 의사소통이 얼마나 자유롭고 즐거웠는지 지금 환경에서 새삼 느끼게 되었습니다.
지금은 한 명이 회사 분위기를 다 망쳐놓고, 사원들 입에서는 xx님이 너무 무섭다 는 말이 나오고 있는 상황.
저는 왜 그 한 사람의 기분에 따라 분위기가 좌우 되어야 하는지, 아무도 뭐라고 하지 않는지가 너무 궁금했습니다.
그래서 이전 회사의 팀장님께 조언을 구했는데 결국 듣게된 조언은 한약같은 조언이었습니다.
= 나서지 마세요. 그러다 너님만 이상한 사람 됩니다.
ㅎㅎㅎ
이전 팀장님 역시 회사 대표에게 아무 소리 안하고 묵묵히 팀을 위해 참았던걸 봤고,
그렇게 책임을 가진 사람을 또 만나기 힘들다는 생각을 했습니다.
어쨋든... 이전 팀이 너무나 그립네요.
2016년 6월 14일 화요일
20160614 오늘이 가장 힘들었다...
오늘이 2달 백수 생활 중 가장 힘든 날이었습니다.
그래서 오전에 엄청 어두운 이야기들을 주저리 주저리 쓰고싶은 충동에 몇 번이나 휩싸이고,
각종 시간 낭비 서비스에도 글을 좀 쓰고 접고 하는 등 아주 어두웠었죠.
그런데 항상 이런 시련 후에는 좋은 결과가(일단은) 따라오는 것 같습니다.
이번 기회에 정말 미안하고도 고마운 소상횽과 fb님께 정말 최소한 음료라도 대접해야 할 것 같습니다.
앞으로는 기술적인 블로그를 주로 할 생각입니다.
이제 더 이상 Naver.
잡담은 많이 했으니까요.
그래서 오전에 엄청 어두운 이야기들을 주저리 주저리 쓰고싶은 충동에 몇 번이나 휩싸이고,
각종 시간 낭비 서비스에도 글을 좀 쓰고 접고 하는 등 아주 어두웠었죠.
그런데 항상 이런 시련 후에는 좋은 결과가(일단은) 따라오는 것 같습니다.
이번 기회에 정말 미안하고도 고마운 소상횽과 fb님께 정말 최소한 음료라도 대접해야 할 것 같습니다.
앞으로는 기술적인 블로그를 주로 할 생각입니다.
이제 더 이상 Naver.
잡담은 많이 했으니까요.
2016년 5월 22일 일요일
20160523 나 VS 다
저는 항상 소수입니다.
혈연, 지연, 학연도 없고 그냥 맨땅에 시작했기 때문입니다.
최근 한 업체(본인이 근무하는 회사를 구멍가게로 표방)의 구인글을 보고 메일을 보냈었습니다.
그리곤 물론 떨어졌죠... ^^;
그 회사의 대표?님은 글을 기깔나게 잘 쓰시는 분 같았습니다.
이런 저런 이유로 사람 구하기도 힘들었고 뽑는데도 힘들었다.
회사에선 사람들을 잘 부려먹기 위해(나쁜 뜻 아님!) 이런 저런 방법들을 시도했고 이런 결론에 다달았다 등...
개인적으로 지원해서 떨어졌기때문에 앙탈을 좀 부리자면,
제가 받은 지원 메일의 답 메일은 달랑 한 줄이었습니다.
학력을 알려달라는... ㅡ,.ㅡ;;;
답장을 보낼까 말까 한참을 고민하다가 보냈고 떨어졌죠. ㅎㅎ
뭐 이런 저런 이유로 못 가길 참 다행이라고 생각하지만,
좀 더 인간적인 면모가 보였다면 아주 번창하길 바랬을런지도 모르겠습니다.
이놈의 소심병은 어딜 안가나봅니다.
혈연, 지연, 학연도 없고 그냥 맨땅에 시작했기 때문입니다.
최근 한 업체(본인이 근무하는 회사를 구멍가게로 표방)의 구인글을 보고 메일을 보냈었습니다.
그리곤 물론 떨어졌죠... ^^;
그 회사의 대표?님은 글을 기깔나게 잘 쓰시는 분 같았습니다.
이런 저런 이유로 사람 구하기도 힘들었고 뽑는데도 힘들었다.
회사에선 사람들을 잘 부려먹기 위해(나쁜 뜻 아님!) 이런 저런 방법들을 시도했고 이런 결론에 다달았다 등...
개인적으로 지원해서 떨어졌기때문에 앙탈을 좀 부리자면,
제가 받은 지원 메일의 답 메일은 달랑 한 줄이었습니다.
학력을 알려달라는... ㅡ,.ㅡ;;;
답장을 보낼까 말까 한참을 고민하다가 보냈고 떨어졌죠. ㅎㅎ
뭐 이런 저런 이유로 못 가길 참 다행이라고 생각하지만,
좀 더 인간적인 면모가 보였다면 아주 번창하길 바랬을런지도 모르겠습니다.
이놈의 소심병은 어딜 안가나봅니다.
라벨:
나도 회사하나 차리고싶다.,
서론과 잡담사이
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 5월 11일 수요일
20160512 또 한 번의 실패, 그리고 다시 로딩중...
일단 가장 선행되어야 할 것은 선택에 대한 후회가 없어야 한다는 점입니다.
이런 좋은 환경을 만들어주고, 저를 믿어준 마느님께 무한한 감사와 영광을 돌립니다.
...
사실 학동의 스타트업을 그만 둔 이유는 내 커리어의 뒷처짐도 한 몫을 했지만(php -> java, 그러나 Java기반의 새로운 버젼 출시를 목적으로 들어갔음) 제일 중요한 것은 'sosang횽과 일하는 것'이었습니다.
하지만 몇몇 이유로 실패(추전력을 얻기위한 무릎꿇기?)했고, 다시 무능력자 백수로 돌아왔습니다.
이 기간을 버틸 수 있었던 것은 '당연히 마느님'과 'sosang횽의 미래를 위한 투자' 덕분입니다.
어쨋든 이 기간을 최대한 활용해야 하는데, 개인 프로젝트로 친구의 홈페이지를 만들어주기로 했습니다.
사실 2~3달 정도 걸렸지만 실제 작업한건 얼마나 될지 모르겠습니다. 혼자 하는 작업이라 굉장히 더뎠고, 의도대로 공부도 이것저것 하려고 했던 이유였습니다.
결과적으로 친구의 홈페이지를 만들긴 했지만, 너무나 볼썽사납게, 반응형 디자인도 아닌 '그냥 홈페이지'가 나오게 되었습니다.
완벽한 결과물이 아니기 때문에, 아마도 다시 시간을 내서 좀더 멋지고 견고한 홈페이지로 변화시키지 않을까 생각합니다(니 일인데?).
사실 이 글의 목적은 이제부터입니다.
저는 시간 약속을 강박적으로 지키려고 노력합니다. 그 이유는 제가 매우 게으르기 때문이죠!
그래서 상대가 좀 늦는다 싶으면 칼같이 거절하곤 합니다(면접이든 약속이든). 그렇게 떠나보낸 면접이 하나있고, 기다리던 상대가 30분을 늦어 집에 가려는 찰라 전화가 와서 좀 더 기다렸던 기억도 있습니다.
뭐 그런 이유야 차지하고,
"나는 연락을 원합니다." 라고 상대방이 원한다면 당연히 연락을 해 주는 것이 인지상정 아닐까요?
심지어 자기들이 00시까지 연락을 주겠습니다. 하고 연락 안주는 ㅈ같은 회사들이 있어서 살짝 빡이 칩니다. 물론 연락 주겠다 말 안했으면 제가 먼저 연락을 달라고 이야기 했을겁니다.
어쨋든,
ㅌㅇㅌ이나 ㅇㄹㅅ같은 회사는 못들어가길(ㅠㅠ) 참 잘했다는 생각이 들고있습니다.
기본적으로 사람과의 신뢰를 중요하게 생각하는데,
저는 신뢰는 안지켜도 되는 알량한 지원자일뿐. 그들도 하등의 이상함을 느끼지 못하고 잘 지내고 있을꺼라 장담합니다.
오래간만에 나쁜 의도(?)로 글을 하나 싸고가네요.
역시 밥은 쌀과 조가 섞여야 제 맛입니다. 세상이 그런 이치겠지요?!
어쨋든 저와같은 비전공자의 나이가 어리지 않은 동료 선/후배 여러분.
기초를 쌓아 저들을 물리칩시다!
이런 좋은 환경을 만들어주고, 저를 믿어준 마느님께 무한한 감사와 영광을 돌립니다.
...
사실 학동의 스타트업을 그만 둔 이유는 내 커리어의 뒷처짐도 한 몫을 했지만(php -> java, 그러나 Java기반의 새로운 버젼 출시를 목적으로 들어갔음) 제일 중요한 것은 'sosang횽과 일하는 것'이었습니다.
하지만 몇몇 이유로 실패(추전력을 얻기위한 무릎꿇기?)했고, 다시 무능력자 백수로 돌아왔습니다.
이 기간을 버틸 수 있었던 것은 '당연히 마느님'과 'sosang횽의 미래를 위한 투자' 덕분입니다.
어쨋든 이 기간을 최대한 활용해야 하는데, 개인 프로젝트로 친구의 홈페이지를 만들어주기로 했습니다.
사실 2~3달 정도 걸렸지만 실제 작업한건 얼마나 될지 모르겠습니다. 혼자 하는 작업이라 굉장히 더뎠고, 의도대로 공부도 이것저것 하려고 했던 이유였습니다.
결과적으로 친구의 홈페이지를 만들긴 했지만, 너무나 볼썽사납게, 반응형 디자인도 아닌 '그냥 홈페이지'가 나오게 되었습니다.
완벽한 결과물이 아니기 때문에, 아마도 다시 시간을 내서 좀더 멋지고 견고한 홈페이지로 변화시키지 않을까 생각합니다(니 일인데?).
사실 이 글의 목적은 이제부터입니다.
저는 시간 약속을 강박적으로 지키려고 노력합니다. 그 이유는 제가 매우 게으르기 때문이죠!
그래서 상대가 좀 늦는다 싶으면 칼같이 거절하곤 합니다(면접이든 약속이든). 그렇게 떠나보낸 면접이 하나있고, 기다리던 상대가 30분을 늦어 집에 가려는 찰라 전화가 와서 좀 더 기다렸던 기억도 있습니다.
뭐 그런 이유야 차지하고,
"나는 연락을 원합니다." 라고 상대방이 원한다면 당연히 연락을 해 주는 것이 인지상정 아닐까요?
심지어 자기들이 00시까지 연락을 주겠습니다. 하고 연락 안주는 ㅈ같은 회사들이 있어서 살짝 빡이 칩니다. 물론 연락 주겠다 말 안했으면 제가 먼저 연락을 달라고 이야기 했을겁니다.
어쨋든,
ㅌㅇㅌ이나 ㅇㄹㅅ같은 회사는 못들어가길(ㅠㅠ) 참 잘했다는 생각이 들고있습니다.
기본적으로 사람과의 신뢰를 중요하게 생각하는데,
저는 신뢰는 안지켜도 되는 알량한 지원자일뿐. 그들도 하등의 이상함을 느끼지 못하고 잘 지내고 있을꺼라 장담합니다.
오래간만에 나쁜 의도(?)로 글을 하나 싸고가네요.
역시 밥은 쌀과 조가 섞여야 제 맛입니다. 세상이 그런 이치겠지요?!
어쨋든 저와같은 비전공자의 나이가 어리지 않은 동료 선/후배 여러분.
기초를 쌓아 저들을 물리칩시다!
2016년 4월 28일 목요일
20160429 스프링 부트 + 타임리프 + 스프링 시큐리티
https://github.com/thymeleaf/thymeleaf-extras-springsecurity
역시 삽질이 답인것 같습니다.
역시 삽질이 답인것 같습니다.
templateEngine.addDialect(new SpringSecurityDialect());
auth
.inMemoryAuthentication()
.withUser("1").password("1").roles("RR_ADMIN", "USER");
httpSecurity.authorizeRequests().antMatchers("/admin/**").hasAnyRole("RR_ADMIN");
기본 세팅을 마친 후
https://github.com/thymeleaf/thymeleaf-extras-springsecurity
에서처럼 타임리프 안에서 사용할 수 있습니다.
조만간 깃허브에 예제를 만들어 올려보도록 하겠습니다.!
커밍순!
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 3월 13일 일요일
20160313 인텔리제이(IDEA)로 스프링 코어 파헤치기!
일단 소스포지에서 스프링 코어 소스를 받습니다.
1.0이 제일 좋겠죠?
간단하고 초기버전이니 굉장히 뼈대만 있을것 같습니다. 라는 류의 글을 읽었던것 같습니다.
https://sourceforge.net/projects/springframework/files/springframework/1.0/
위에서 위스 디펜던시를 받습니다.
인텔리제이를 켠 후
프로젝트 푸롬 이그지스팅 소스를 클릭합니다.
Project from existing source?!
-> Create project from existing sources
이후 잘 읽으며 넥스트를 클릭하면 인텔리제이가 프로젝트로 인식을 합니다.
그 이후 소스를 따라가면서 읽기!
아... 초보라서 이렇게 시작하는것도 힘드네요... 삽질의 년속!
자 그럼 병신년도 화이팅!
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 3월 7일 월요일
20160307 MySQL에 뺴놓은 숫자 인덱스 추가하기!
지금까지 잘? 쓰던 테이블에 인덱스가 있기는 한데 모두 변경 가능한 컬럼이었습니다.
... 수정이랑 삭제 기능을 넣어야 하는데...
어?! .... ㅋㅋㅋㅋ
그래서 새로운 컬럼을 추가하고 기존에 있는 로우에는 인덱스(숫자)를 부여!
새로 추가하는 로우에는 자동으로 하나씩 추가할 수 있도록 설정을 해 봤습니다.
... 수정이랑 삭제 기능을 넣어야 하는데...
어?! .... ㅋㅋㅋㅋ
그래서 새로운 컬럼을 추가하고 기존에 있는 로우에는 인덱스(숫자)를 부여!
새로 추가하는 로우에는 자동으로 하나씩 추가할 수 있도록 설정을 해 봤습니다.
# 테이블에 인덱스로 사용할 컬럼을 추가
alter table 테이블이름 add(컬럼이름 컬럼타입(int, numeric등));
=> alter table test_table add(index int);
# 컬럼 삭제 (잘못 추가했을 경우)
alter table test_table drop index;
# 번호를 1부터 할당
set @num:=0;
update test_table set index = @num := @num+1;
여기까지는 기존의 로우에 인덱스를 부여한 상황
ALTER TABLE `test_table` MODIFY COLUMN `index` INT AUTO_INCREMENT;
이렇게 해주면 추후 생성되는 로우에도 인덱스가 자동으로 들어가게됩니다.
물론 insert할 때 index컬럼은 자동으로 추가됩니다. 강제로 지정하지 않으셔도 됩니다.
덧. 인덱스라고 하면 검색을 더욱 빠르게 해주는 인덱스를 생각하실 수 있는데, 그것은 따로 공부를...ㅎㅎ
비슷한 의미이긴 합니다만...
이런곳을 참조하시거나 검색하시길 바랍니다...^^;
20000.
라벨:
Index 컬럼 생성,
mysql
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 3월 1일 화요일
20160301 스프링 타임리프 + 로그 설정 간단하게
스프링은 일단...
pom.xml(메이븐),
src/main/resources,
config 패키지(각종 설정들),
controller 패키지 들을 중점으로 보면 뭔가 실마리가 하나씩 풀리는 것 같습니다.
일단 pom.xml
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
<!-- logger -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
resources/logback-test.xml (스프링이 읽는 순서가 있고 logback-test는 2순위입니다.)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Console -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="com.jongsam.*" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
config 패키지 ThymeleafConfig.java - 클래스 명은 상관없음
타임리프의 경우 한글 인코딩 문제나 엄격한 XHtml의 문제가 있어 조금 변경했는데
일단은 작동하는 것 같습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
import nz.net.ultraq.thymeleaf.LayoutDialect;
@Configuration
public class ThymeleafConfig {
@Bean
public TemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5"); // HTML5가 기본인데 엄격한
// HTML을 선호하는 타임리프이기
// 때문에 일단 템플릿 모드를
// LEGACYHTML5로 변경
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.addDialect(new LayoutDialect()); // setDialect를 사용하면 안됨!
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8"); // 한글관련 인코딩에서는 ViewResolver의 케릭터 셋을 추가해준다.
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
return viewResolver;
}
}
마지막으로 로그 쓰는법
자세한 것은 다른 블로그들을 참조하시면 될것 같습니다.
저는 사용법만을 기록 예정입니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
...
void test() {
logger.info("This is Logger - slf4j");
}
이렇게 몇일간의 삽질을 마무리 합니다.
이제 프론트 엔드와 싸우고 난 후 백엔드와 어드민을...ㅠㅠ
웹을 시작하는게 아니었는데...ㅠㅠ
pom.xml(메이븐),
src/main/resources,
config 패키지(각종 설정들),
controller 패키지 들을 중점으로 보면 뭔가 실마리가 하나씩 풀리는 것 같습니다.
일단 pom.xml
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
<!-- logger -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
resources/logback-test.xml (스프링이 읽는 순서가 있고 logback-test는 2순위입니다.)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Console -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="com.jongsam.*" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
config 패키지 ThymeleafConfig.java - 클래스 명은 상관없음
타임리프의 경우 한글 인코딩 문제나 엄격한 XHtml의 문제가 있어 조금 변경했는데
일단은 작동하는 것 같습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
import nz.net.ultraq.thymeleaf.LayoutDialect;
@Configuration
public class ThymeleafConfig {
@Bean
public TemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5"); // HTML5가 기본인데 엄격한
// HTML을 선호하는 타임리프이기
// 때문에 일단 템플릿 모드를
// LEGACYHTML5로 변경
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.addDialect(new LayoutDialect()); // setDialect를 사용하면 안됨!
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8"); // 한글관련 인코딩에서는 ViewResolver의 케릭터 셋을 추가해준다.
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
return viewResolver;
}
}
마지막으로 로그 쓰는법
자세한 것은 다른 블로그들을 참조하시면 될것 같습니다.
저는 사용법만을 기록 예정입니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
...
void test() {
logger.info("This is Logger - slf4j");
}
이렇게 몇일간의 삽질을 마무리 합니다.
이제 프론트 엔드와 싸우고 난 후 백엔드와 어드민을...ㅠㅠ
웹을 시작하는게 아니었는데...ㅠㅠ
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 2월 27일 토요일
20160228 격동의 2월과 스프링 부트
일단 제가 사람을 못믿어서 그런건지. 지금은 사람을 믿을 수 없는 일들이 많이 생긴것 같습니다.
기술자다 생각하고 기술만 신경쓰고 싶지만 그것도 잘 안되곡... 후ㅜ....
스프링 부트는!
아래 사이트를 참조했습니다. 주인장님 굉장히 감사드립니다.
http://www.namooz.com/category/spring-boot/
|
라벨:
초기 설정,
Spring boot
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
2016년 2월 22일 월요일
20160223 Spring boot + JSP, JSTL / @RestController와 @Controller
1. Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
에러가 나면
pom.xml에
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
추가해주면 되는것 같습니다.
2. @RestController vs @Controller
전자에는 @ResponseBody 가 포함되어 있기때문에
뷰 템플릿을 사용하려거든 @Controller를 사용해야 합니다.
@RestController를 사용하면 String을 리턴할 경우 화면에 그 String을 보여주게 됩니다.
ㅠㅠ
에러가 나면
pom.xml에
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
추가해주면 되는것 같습니다.
2. @RestController vs @Controller
전자에는 @ResponseBody 가 포함되어 있기때문에
뷰 템플릿을 사용하려거든 @Controller를 사용해야 합니다.
@RestController를 사용하면 String을 리턴할 경우 화면에 그 String을 보여주게 됩니다.
ㅠㅠ
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
피드 구독하기:
글 (Atom)