2020년 8월 18일 화요일

제주도에서 같이 일해 보지 않을 래?

 예전에 같이 일했던 형이 오랜만에 연락이 왔다. 현재 구직 중이라고 하니 자기가 다니는 회사에서 같이 일하자고 제안을 줬다. 그런데 지역이 제주도다. 제주도... 제주도에서 일하는 건 생각도 안 해 봐서 이틀만 생각할 시간을 달라고 했다. 제주도에서 일하는 상황에 대해 검색을 해 봤다. 나름대로 장단점이 있었다. 장점이라면 역시 제주도의 자연 친화적인 환경이었다. 누구나 한 번쯤은 꿈꿔봤을 것이다. 출근길 혹은 퇴근길 푸른 바다와 상쾌한 공기를 마시며 주말에는 집 앞에 나가는 것만으로도 휴가를 온 것 같은 상상 말이다. 또 하나의 장점으로는 기본적으로 일과 삶의 균형이 잘 지켜진다고 한다. 그러나 직종 특성상 그러한 것은 별 믿을 게 못 된다고 생각했다. 단점은 평균적으로 낮은 임금이다. 이것은 미리 알려줬다. 희망 연봉만큼은 못 챙겨주겠지만 그만큼 힘들지 않다고 했다. 힘들지 않다는 건 일 해봐야 아는 것이지만 연봉은 고정된다. 연봉이 높지 않다는 건 지방으로 가는 특성상 어쩔 수 없이 감당해야 하는 것 같다. 다른 하나는 꽤 높은 물가이다. 섬 지역이다 보니 육지에서의 배송비가 꽤 많이 든다. 그렇다 보니 일반적인 생필품은 모르겠지만 온라인 쇼핑으로 주문은 배송비가 비싸다고 한다. 배송비가 비싸면 어쩌면 온라인 쇼핑을 잘 안 할지도 모르겠다. 비싼 배송비를 생각하며 한 번 더 생각하지 않을까. 집을 구하는 문제도 있지만 이건 기숙사를 제공한다고 했으니 상관이 없었다.

결론적으로는 제주도로 가는 것은 무리인 것 같다고 알렸다. 한 번쯤 제주도에서 일하는 것도 나쁘지는 않은 것 같다. 그런데 그런 로망은 나에게 아직 큰 의미가 없다고 생각됐다. 또 하나는 지금 가지고 있는 짐의 처분 문제가 걸렸다. 제주도로 이사하기는 어려워서 대부분 처분하고 거의 몸만 가는 형태가 돼야 하는 데, 이게 힘든 일이 될 것으로 생각됐다.

결국에는 거절했지만, 제안해 줘서 고마웠다. 같이 일해보자는 제안만으로도 힘이 되었다. 최근 이력서를 조금씩 내기 시작하면서 약간 조바심이 났던 것 같다. 그러나 아직은 나를 알아주는 사람이 있다는 사실 하나만으로도 힘이 났다.

직장에서의 관계는 비즈니스 그 이상도 이하도 아니라는 글을 어디서 읽은 적이 있다. 나는 그렇게 생각하지 않는다. 매우 힘든 업무를 할 때도 같이 일하는 사람이 누군가에 따라서 업무가 재미 있어진다. 야근하더라도 힘들지 않다. 반면에 아주 간단한 일도 합이 잘 맞지 않는 사람과는 아주 괴롭고 힘든 일이 된다. 직장 관계를 단지 비즈니스로 본다면 사회생활은 매우 삭막할 것 같다.

2020년 8월 16일 일요일

퇴사 10개월...

회사를 퇴직한 지도 벌써 10개월 가까이 지났다. 방송통신대 졸업을 남겨 두고 있는 상태에서 마지막 학기만큼은 제대로 공부해 보자는 마음으로 지내다 보니, 이리 오래 쉴 줄은 몰랐다. 지나고 나니 이제야 체감이 된다.

방송대 시험이 코로나 여파로 인해 시험장에 가서 치르지 않고, 과제물 온라인 제출로 바뀌었다. 시험공부도 어렵지만, 과제물을 작성한다는 건 시험공부와는 다른 어려움이 있다. 과제를 쓰기 위해서는 아는 것이 전무하면 첫 단어 자체를 떼지 못한다. 어디서부터 시작해야 하는지 조차 모르기 때문이다. 또 어설프게 아는 건 반드시 다시 한번 찾아봐야 한다. 그렇기에 과제를 완성하는 건 그것 나름의 어려움이 있다. 시험공부가 암기력 위주의 공부라면, 과제물은 깊은 이해와 새로운 사고방식, 큰 틀에서 바라볼 수 있는 시선이 필요하다.

방송대 다니면서 A를 받아 본 적이 거의 없다. 이번 학기는 처음으로 ALL A를 받았다. 자랑이지만 좀 열심히 했다. 그러나 시험으로 채점을 했다면 어려웠을 것이다. 과제 채점 방식이라 가능했던 것 같다. 사실 그동안 매우 불성실한 학교생활이었다. 나에게 필요한 건 단지 4년제라는 타이틀이었다. 누구도 알아주지 않지만, 이력서 제한의 문턱인 4년제를 넘기 위해서였다. 그렇기에 F만 아니면 된다는 마음가짐이 있었다. 그렇지만 이번에 제대로 공부하면서 공부가 재미있다고 느꼈다. 공부는 때가 있다는 말이 실감하기도 했다. 지금의 마음을 학창 시절 가졌으면 좋았겠다는 생각도 들었다. 학창 시절이 공부만 하면 되는, 공부하기에 매우 좋은 시기이지만, 역설적이게도 공부하기 가장 싫은 시절이다. 아이러니하다. 10개월의 공부 시간은 마치고 이제 돌아가야 한다. 험난한 취업전선으로...


문제는 10개월 가까이 있는 공백이다. 나름 공부했다는 핑곗거리가 있긴 하다. 당연하지만 공부만 한 건 아니다. 놀았다. 매우 잘 놀았다. 논다는 것의 정의는 사람마다 각자 다르겠지만 내 나름대로 잘 놀았다. 그것으로 인해 발생하는 커리어의 단절은 감당해야 한다. 사실 지금껏 인식하고 있었지만, 애써 무시한 지도 모른다. 통장 잔고가 바닥을 보이는 현시점에 무시의 한계에 도달했다. 취업의 목표는 통장잔고와 반비례하여 증가하고 있다.

사실 그동안 돈 버는 것에 관해 많은 관심을 쏟았다. 주식을 공부하고 시작했으며, 부동산에 관심을 두게 되었다. 개발로 돈 버는 법을 찾아보았다. 지나고 생각해 보니 약간 장밋빛 미래를 상상했던 것 같다. 일하지 않는 삶은 누구라도 꿈꾸는 삶이 아니겠는가. 그러나 주식은 이런 나의 망상을 철저히 부셔 버렸다. 코로나 여파로 인해 투자 했던 주식이 반토막 나고 나서야 정신을 차렸다. 

주식을 하면서 느낀 건 목돈의 부재였다. 주식으로 돈을 조금 벌긴 했지만, 그리 큰돈은 되지 못했다. 1000만 원의 5%라고 해봐야 50만 원이다. 5%의 이익을 내는 게 그리 쉬운 일도 아니다. 부동산 역시 그렇다. 부동산에 투자하기 위해서는 목돈이 필요한 것이다. 알고 있었지만, 다시 한번 깨달은 것은 돈이 많아야 돈도 잘 벌 수 있다는 사실이었다. 

돌고 돌아 결국 내 목적지는 취업전선으로 결정 되었다.

첫 번째 직장 이후 처음으로 길게 가진 쉼이었다. 이전에는 일한다는 것에 큰 거부감이 없었다. 그러나 일하지 않는 즐거움을 알고 나서 다시 취업한다는 것은 다른 의미로 다가온다. 일과 삶의 균형의 중요성을 조금은 느끼게 된 것 같다.

1억이 매우 우습게 느껴지는 시대이다. 그러나 내게는 여전히 머나먼 나라의 이야기이다. 돈이 넘쳐나는 시대에 사는 데, 정장 내 돈은 하나도 없다니, 매우 슬프다.

2020년 4월 11일 토요일

표식, 나를 이 세상에 묶어주는 것.

 예전에 봤던 애니 중에 '혈계전선' 이라는 애니가 있다. 이 애니는 초능력을 가지고 있는 많은 인물이 나오는데,
그중에 자신의 흔적을 없애서 누구에게도 들키지 않고 적진에 침투하는 케릭터가 있다. 삼엄한 적진에 침투하기 위해
점점 흔적을 지우다 보면 결국 자기 자신이 사라지고 만다는 설정이다. 자신이 사라지기 전에 자신을 이 세상에 붙들어 주는 것들을 정하고 표식으로 삼는다.
어떤 이는 자신의 아이를 표식으로 삼았으며, 어떤 이는 술을 너무 좋아해서 술을 표식으로 삼은 사람도 있다. 점점 사라지는 나를 붙들어 줄 만큼 소중하고 사랑하는 것들이다.

내게 그런 능력이 있고 이 세상에서 사라지지 않기 위해 하나의 표식으로 삼아 한다면 나는 무엇을 표식으로 삼을 수 있을지 생각해 봤다. ... 나는 이 세상 사람이 아니므니다...
표식으로 삼을 만하게 무척 좋아하고 소중해서 내가 이 세상에 남아 있게 하는 무언가가 나는 없다...
물론 부모님도 생각해 봤고, 형제, 가족, 친구 모두 생각해 봤다. 그렇지만 아주 강력하게 나를 잡지는 못하는 것 같다.

내게도 나를 잡아 줄 표식이 생겼으면 좋겠다.

2020년 4월 10일 금요일

나에 대해 알아 가는 것.

 어렸을 때는 좋아하는 것과 싫어하는 것이 명확하지 않았다.

그래서 '아무거나'라는 말을 자주 썼다.


커가면서 조금씩 좋아하는 것과 싫어하는 것이 생겼다.

나이를 먹는다는 건 경험이 쌓이면서 좋고 싫음이 생기는 것 같다.


아이유의 노래 중 팔레트에는 아이유 자신이 좋아하는 것들을 가사에 적었다.

내가 아이유를 좋아하는 이유는 많지만 큰 부분을 차지하는 것은 성숙한 생각이다. 

많은 부분을 배우게 된다.


나는 내가 좋아하는 것조차 명확히 알고 있지 못했다. 뭐를 좋아하냐고 물으면 마냥 대답할 수가 없다.

내가 좋아하는 것과 싫어하는 것, 잘하는 것과 못하는 것을 알고 싶어 졌다.


그리고 계속해서 찾아나가고 싶다.

2020년 1월 10일 금요일

산다는 건 뭘까...

 초등학교 6학년 때가 아마도 내 사춘기 시절이었던 것 같다.

내성적인 성격이라 크게 튄 건 아니지만 기억나는 장면이 있다.

당시 담임 선생님이 내가 벽에 쓴 낙서를 지우라고 했다.

낙서는 "나는 커서 뭐가 될까?"였다. 그때 당시에는 몰랐지만 중학교에서 사춘기에 대해 배우며 내가 썼던 낙서가 사춘기에 발생하는 일들 이란 걸 알았다.


 현재의 내가 만들어 진건 어찌 보면 아주 단순하다. 해커 영화를 보았고 해커가 멋있어 보였으며 해커를 양성한다는 학교를 갔다.

결과적으로 해커는 되지 못했지만 그 언저리쯤에는 있는 것 같다.

어떻게 보면 인생이란 이렇게 단순한 게 아닌 가 싶다. 그냥 막연하게 해커가 되고 싶었던 나는 프로그래머가 되었다.


그때는 막연하게나마 목표가 있었던 것 같다.

그런데 지금은 그런 목표조차도 없다. 꿈이 뭐냐는 질문이 가끔 들어오면 '평생 놀고먹는 것'이라고 대답하곤 했다. 이게 꿈이 될 수 있는지는 둘째 치고 목표가 흐리멍덩하다.

약간 풀어 본다면 평생 놀고먹으려면 경제적 자유로움이 당연히 있어야겠지. 그럼 역시 돈을 벌어야 하는 게 목표가 될 거다.

그래 내 목표는 돈을 버는 거다. 아주 많이. 놀고먹고살 수 있을 정도로.


...


정말 그걸로 될까... 음... 아마 될 것 같다. 그럼 어느 정도의 돈이 필요할 까. 정확히 계산해 보진 않았지만 검색해 본 결과로는 30억 정도 있으면 될 것 같다.


좀 더 풀어 보자. 왜 놀고먹고 싶은 가. 그것에 대한 답은 모든 사람들이 바라는 것. 행복해 지기 위해서다.

행복이란 이런 사전적 의미가 있다.


  생활에서 충분한 만족과 기쁨을 느끼어 흐뭇함또는 그러한 상태


많은 사람들의 목표 이기 때문에 역시 많은 연구들이 있다.

최근 본 유튜브에서는 행복해 지기 위한 방법들을 알려줬다. 생각나는 대로 적어보면 이렇다.


행복한 사람과 가까이 하라.

친구 나 가족과 시간을 가져라.

3개를 맞추고 싶은 데  2개밖에 기억이 안 난다.


돈과 사람. 어떻게 보면 뫼비우스의 띠.

돈을 벌려면 사람들과의  시간을 갖기 어렵고, 시간을 가지면 돈을 벌기 어렵다.


적당히 벌고 사람과의 시간을 많이 가지는 것도 나쁘지 않다.

하지만 그러면 노후가 걱정된다.


음... 길어진다...


마무리하자면

돈을 많이 벌기 위해 노력.

사람과의 관계를 위해 노력.

하자.

2019년 7월 10일 수요일

grep 사용 예제.

로그 데이터에서 필요한 부분만 추출하려고 하였다.
필요한 부분은 [f1]이라는 부분의 바로위 라인 이다.
처음에는 노트패드++에서 모든 파일을 열고 하나씩 복사 하려고 했는데, 데이터가 어마어마하게 많아서
grep 으로 처리 했다.
윈도우10에서 명령어 창을 열고 bash 라고 커맨드를 입력하면 linux 커맨드를 사용할 수가 있게 된다.


실제 데이터 샘플
...
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] [211.252.80.44:5614] Receive Reqeust ==================================================
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] [211.252.80.44:5614] [02 20 19 06 25 13 14 51 0A 84 02 33 31 30 31 36 36 32 32 30 31 66 31 00 B7 00 05 00 00 00 FF FF FF FF FE 00 00 28 DC 31 30 31 30 30 31 30 31 30 37 33 38 37 30 35 32 00 00 02 A2 01 16 27 00 00 00 00 00 02 20 19 06 25 11 57 53 13 23 45 00 00 07 04 BF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE 7A 03 ]
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] Thread reqINS [f1]
...


조건
1. [f1]를 찾아서 한줄 위에 있는 부분을 가져온다.
2. 그 중 Send가 들어간 부분을 제외한다.
3. 시간 순서대로 sorting 해야 한다.



최종 명령어
grep -h -r -B1 '\[f1\]' ./  | grep -vE '\[f1\]'  | grep -v '\-\-' | grep -v 'Send' | sed 's/\ \([0-9]\)\:/\ 0\1\:/g' | sort  -k2 -k3.1,3.2 -k3.4,3.5 -k3.7,3.8  > sort_match.txt


--------설명--------
:: << 구분

-h :: 파일이름 없이 출력
-r :: 하위 디렉토리
-B1 :: 검색된 위치 바로 위
'\[f1\]' :: 실제 검색 할 키워드, original keyword : [f1]
./ :: 검색 위치
grep -vE '\[f1\]' :: 바로 위 라인만 필요하고 실제 검색 된 위치는 필요없으므로 제외 시킴
grep -v  :: '\-\-' 검색 라인마다 추가되는 데, 옵션이 따로 있을 것 같지만 급해서 제외 시킴
grep -v 'Send' :: Send 는 제외
sed 's/\ \([0-9]\)\:/\ 0\1\:/g' :: sort 를 해야 하는 데, 데이터의 시간 일자가 '2019-06-25 오후 2:58:06' 이런식으로 시간이 02가 아닌 2이라서 sort가 안됨. 그래서 ' 2:'를 ' 02:'로 변경시킴
sort  -k2 -k3.1,3.2 -k3.4,3.5 -k3.7,3.8 :: '2019-06-25 오후 2:58:06' 의 형태를 sort 시킨다. 일자는 모두 같은 날이여서 포함 시키지 않았다.
k2 는 오전, 오후를 부분,
k3.1,k3.2 는 시(02),
k3.4,3.5는 분(58),
k3.7,3.8는 초(06)를 기준으로 sort 한다.

2019년 6월 20일 목요일

spring boot mybatis 에서 rollback 이 안되는 문제, 해결 한 결과


기본 base가 되는 table이 있고, 그 테이블에 대한 이력을 저장하는 history테이블이 있을 경우, base가 insert가 성공하고, history에서 에러가 발생할 경우 rollback이 되지 않는 문제가 있어서 여러가지 테스트를 해 본 결과이다.


1. 컨트롤러에서 base와 history 두개의 service를 가져와서 처리하는 경우 rollback이 되지 않는다.
서비스단에서 @Transactional 를 주고 처리를 해야 rollback이 된다.

2.Transactional 어노테이션은 클래스에 줘도 적용된다.


3. 이 부분 때문에 고생했다.
아래와 같이 강제로 익셉션을 발생시키면서 try catch로 잡으면 rollback이 안된다.
아래와 같이 메소드에서 throws Exception을 해 줘야 한다.
이 때 강제로 발생시키는 익셉션은 (rollbackFor = Exception.class) 옵션을 줘야 rollback이 된다.

@Transactional(rollbackFor = Exception.class)
public class CompanyRoleService extends GenericService<CompanyRole, CompanyRoleRequest> {

...
    public int saveWithHistory(CompanyRole object) throws Exception {
        AddBaseEntity.addCreatedBy(object);
        object.setUseYn("Y");
        object.setDeleteYn("N");
        int baseSuccessCount = baseMapper.insert(object);
        if(baseSuccessCount>0){
            throw new Exception("test");
        }
...


2019.07.26 추가.
4. try catch로 롤백 하는 방법
https://stackoverflow.com/questions/25738883/spring-transactional-annotation-when-using-try-catch-block


메소드에 선언.
@Transactional(rollbackFor={MyException1.class, MyException2.class, ....})
public Result doStuff(){
   ...
}

or

프로그램 방식으로 rollback
public Result doStuff(){
  try {
    // business logic...
  } catch (Exception ex) {
    // trigger rollback programmatically
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  }
}